ソフトウェア開発におけるソフトウェアテスト--その多面的な役割(1)

Atif Memon(メリーランド大学博士)
2017-05-09 07:30:00
  • このエントリーをはてなブックマークに追加
最新特集【一覧】

ソフトウェア開発パラダイムの進化に伴い、ソフトウェアプロセスも進化した。そして、今日のコモディティ化されたソフトウェアには、アジャイルプロセスが非常に適しているーーメリーランド大学カレッジパーク校 コンピューターサイエンスの教授を務めるAtif Memon氏はこう話す。日本では、ビッグツリーテクノロジー&コンサルティング(BTC)と共同研究しているMemon氏に、ソフトウェア開発とテストについて寄稿してもらう。今回は1回目。

 ソフトウェアは、今日、知られている形として登場してしてから半世紀近くが経過しています。ソフトウェアは、この期間、主にその基礎となるハードウェアの速度、容量、相互接続によるコンピュータ性能の改善によって、いくつの変化がありました。

 この改善により、計算能力が拡大し、優れたプログラム言語パラダイムが可能になりました。プログラムコードの抽象度が上がり、マシン固有の命令文から、より汎用的で、想像しやすく、モデル化しやすいカプセル化された構文が使えるようになりました。

 このような改善に活気づけられて、ソフトウェア開発パラダイムもまた進化し、最新動向と歩調を合わせています。近年のソフトウェア開発は、世界中の異なった時間帯で作業する複数の開発者たちにより特徴づけられています。開発者は、設計やコーディングの決定を伝える定期ミーティングを実施しないで、常時頻繁に(一日に複数回)コードを変更しています。

 ソフトウェア開発パラダイムが進化したように、ソフトウェアプロセスも進化したのです。近年のソフトウェアプロセスでは、正式なドキュメントは保守せず、厳密な開発ワークフローにも従いません。その代わり、ソフトウェア業界は、今日のコモディティ化されたソフトウェアには、アジャイルプロセスが非常に適していることに気づきました。

 アジャイルプロセスでは、コード成果物が同時に実行プログラム、仕様、設計ドキュメント、要件定義として複数の役割を果たします。開発者は、開発プロセスを一番大切なエンドユーザー、つまり顧客を中心に据えることにより、顧客視点から成功している製品を最終的に作っていると感じます。

 今日のソフトウェア消費者(顧客)は、技術に詳しく、以前の世代よりもソフトウェアについてさまざまな要求をこれまでにないほどたくさん出してきます。消費者は、特にソフトウェアの新機能についての要求をいつも出してきます。例を挙げると、モバイルアプリ市場では、顧客は機能をたくさん要求することが知られています。

 このような要求によって、多くのソフトウェア市場は「機能戦争」状態になってしまいます。開発者は、消費者の要求が満たされることがないように思える新機能要求に対応しなければならず、コードチャーン(code churn)率を増大させてしまう。

 また、顧客は、ソフトウェアにバグがなく、十分な性能があり、フリーズしたり、クラッシュしないことを求めます。実際、ある調査によれば、ソフトウェアは十分にテストを行い、一度顧客が使ったら使い続けられることが重要だということです。2つのソフトウェアがあった場合には、顧客は性能が良く安定しているソフトウェアを選択します。

 ソフトウェア開発者は、新機能の追加と品質のバランスを取り、それと同時に、バグレポートと顧客からのフィードバックには迅速に対応する必要があります。顧客は、さまざまなプラットフォーム上でソフトウェアを実行するので、開発者は、ソフトウェアが人気のあるプラットフォームの構成で動作することを確認する必要があります。

 新機能の要求、バグ修正要求への迅速な対応、莫大な数のハードウェア構成上での稼働要求といったことの掛け算によって、コードチャーン率に前例のない影響を与えます。開発者によって、毎分複数回同時にコードを変更します。

 このような場合、開発者は、ミーティング、ドキュメント、設計といった、コミュニケーションや同期を取る正式な手段を持っていないので、コードにリグレッションが簡単に入り込んでしまい、ソフトウェアの品質低下、最終的には製品の失敗にまでなってしまいます。

 コードチャーン率が増加する際に、大きな組織でソフトウェア製品に含まれるリグレッションを防ぐ方法の一つが、強靭なCI(継続的インテグレーション)とテストプロセスの使用です。CIプロセスを定期的に(例えばコードを変更する度に)実行し、ソフトウェアの最新リリースをビルドし、一般的なバグパターンがコードに入り込んでないことを確認する静的解析ツールを実行し、リグレッションテストスイートを自動的に実行するのです。

 ある意味、リグレッションテストスイートは、コードが順守しなければならない(仕様書と要件定義様書に代わる)契約として機能します。契約に違反すれば、リグレッションテストの失敗によって発見されます。

 CIとテストプロセスは、素早く完全なフィードバックを自動的に開発者に返すので、コード開発プロセスとうまく共存します。ある開発者が他の開発者のコードに誤って修正しても、ほとんどの場合はリグレッションテストで見つけることができます。

 開発者は、コードの正式なドキュメントを作成する必要はありません。テストがそのコードの意図する機能の説明になります。ソフトウェア大企業の多くでコードチャーン率が、最近高くなっているのはリグレッションテストのせいであるというのは、不合理だとは言えません。ソフトウェアの健全性を継続してモニターすれば、リグレッションを防止し、破滅的な失敗を回避するために役立ちます。

次回に続く。

Atife M. Memon
メリーランド大学カレッジパーク校 コンピューターサイエンス
ソフトウェア工学 ソフトウェアテスト、モバイルアプリのセキュリティテスト、モデル駆動型人間性能試験、遺伝子アセンブラのモデルベーステスト。ソフトウェアテスティング、ソフトウェアエンジニアリングに関する140以上の論文を執筆。 2016年にはGoogleでも客員研究員として活躍し、ソフトウェアテスティング分野における功績をたたえられ、ドイツのフンボルト財団よりフラウンホーファーベッセル賞を授与された。 2017年3月に日本で開催されたIEEEのICST(International Conference on Software Testing)のGeneral Chairmanを務めるとともに、中国科学院の客員研究員やタタ(インド)での客員調査員として活躍している。

  • 新着記事
  • 特集
  • ブログ