更新日:2020/12/18
丹野 治門(たんの はると)/ 切貫 弘之(きりぬき ひろゆき)/ 安達 悠(あだち ゆう)/ 生沼 守英(おいぬま もりひで)/ 村本 達也(むらもと たつや)
ソフトウェア開発は図1のように行われます。テストで摘出できなかったソフトウェアの不具合はそのままユーザの元へリリースされてしまうため、ソフトウェアの品質確保においてテストは欠くことのできない大事な工程です。しかし、これらを手動ですべて行おうとすると大きなコストがかかってしまいます。また、近年ではユーザのニーズの変化や、動作環境となるソフトウェア、ハードウェアの進化のスピードが早いため、必要に応じて素早くソフトウェアを改良し短期で繰り返してリリースすることも求められています。しかし、一定の品質を確保しながらソフトウェアのリリースを繰り返し行うためには、小規模な改良であっても、新規部分のテストに加えて、新規機能追加や新たな動作環境への対応などの影響による既存機能の劣化が引き起こされていないかを確認するためのテスト(回帰テスト)を、リリースのたびに既存機能全体に対しても行う必要があり、これにも大きなコストがかかります。NTTソフトウェアイノベーションセンタでは、ソフトウェア開発におけるQCD(Quality、 Cost、 Delivery)の要となっているテストを変革し、ソフトウェア開発の生産性を飛躍的に向上させることをめざしています。
ソフトウェアテストの目的は、ソフトウェアが正常に振る舞うことを確認したり、ソフトウェアの不具合数を減らしたりすることです。テスト工程は図2に示すように、大まかにテスト計画、テスト設計、テスト実施、テスト管理、テスト報告という5つのタスクで構成されています。テスト計画では開発全体の計画に基づき、テストを行う期間やリソース配分の策定を行います。テスト設計では、行うべきテストのバリエーションの洗い出しを行い、テストケースを網羅的に設計し、各テストケースそれぞれについて具体的にテスト実施可能な手順への詳細化や、自動実施用のスクリプト作成を行います。そしてテスト実施では、テストケースごとに、入力データを与え、ソフトウェアを動作させ、それぞれのテストケースでソフトウェアの振る舞いが期待どおりであるかを確認します。テスト管理では、テストの実施状況等の管理を随時行い、必要であれば計画の見直しなどを行います。すべてのテストの実施が完了すると、その結果をまとめ、テスト報告を行い、完了となります。この中で、「テスト設計」「テスト実施」がテスト工程における主要なタスクとなります。
1番目の課題は、従来の網羅的なテストでは設計にも実施にも大きなコストがかかるという点です。品質向上をめざして網羅性を追求すると膨大な時間がかかり、リリースまでの期間も長くなってしまいます。さらにいえば、網羅性を評価すること自体がそもそも難しく、例えば、仕様に基づいた網羅性の基準は仕様書の質に大きく依存しますし、コード網羅率でテストの内容自体を評価することはできません。そして、指標値をクリアしても品質向上の度合いはよく分からないということもあります。…