猫でも分かるソフトウェアのテスト網羅(5):C2カバレッジはエベレスト登山か?山浦恒央の“くみこみ”な話(88)(3/3 ページ)

» 2016年10月20日 15時00分 公開
前のページへ 1|2|3       

4.C2カバレッジの限界

 筆者はソフトウェア工学の授業で、学生に制御パステスト(C0、C1、C2)を教えています。講義後、一部の学生は次のような錯覚を起こします。

  • 生徒A:「C2カバレッジまでテストをすれば、完璧なソフトウェアが作れる」
  • 生徒B:「C2を100%網羅すれば、どんなバグでも検出できる」

 上記のような錯覚を覚えても無理はありません。C1と比べると、C2カバレッジは非常に網羅的で、理論上完璧だと思われます。現実には以下の大きな問題があります。

(1)テスト項目数が爆発的に増大し、テストしきれない

 C2カバレッジのテスト項目数は、A4用紙を折るように、非線形的に増加します。よって、テスト項目を自動生成できないと、実施するのは困難です。

(2)全てのコードを結合すると、C2でテストしきれない

 本コラムでは単体テストに焦点を当てているため、結合したプログラムを想定していません。プログラムを結合すると、さらに組み合わせが爆発的に増加し、C2を100%網羅することは非現実的です。

(3)手ではできない(カバレッジ・ツールが必須)

 C2を網羅する際には、プログラムの構造上、網羅できない場合が必ずでてきます。パス網羅を実施するなら(C0でも)、必ずデバッガを導入しましょう。

(4)ブラックボックステストも併用する必要がある

 筆者は、テストの優先順位は、ホワイトボックステストよりブラックボックステスト(同値分割、境界値分析)の方が圧倒的に高いと考えます。C2を100%網羅することに工数をかけるより、ブラックボックステストの方が、時間がかからず、効率よくバグを検出できます。

(5)ループを考慮していない

 制御パステストでは、通常、ループの網羅は考慮しません。1回ループすればC2を満足する場合がほとんどです。C2を満足してもループに関するバグは検出困難です。ループのテストでは、ループの回数が、「0回」「1回」「最大−1回」「最大回」「最大回+1」をテストします。「最大回+1」は、パッチを当てて無理やりループさせ、それでも異常動作をしないかを確認します。

(6)仕様のバグが検出できない

 特に、機能の抜けを摘出できないのは、パス・カバレッジに共通する致命的な問題です。

(7)デッドコードを検出できない

 プログラムを見ると、実際には使わない変数を見掛けることがあります。そんなデッドコードもC2では検出困難です。

(8)割り込みやマルチタスクのバグは検出できない

 組み込み系ソフトでは、割り込みやマルチタスクのバグが最も厄介です。そのようなバグも検出困難です。

 以上から、C2カバレッジを100%網羅することは非常に困難である上、「労多くして効少なし」となります。C2を実施するなら、重要な箇所に対し、ピンポイントで適用すべきです。

 ソフトウェア開発の現場には、「C2カバレッジ最強説」が根強くはびこっています。プロジェクトマネジャーや、発注先の顧客が、開発計画書や契約書に、「C2を100%網羅すること」と書いてあれば、全力で反対しましょう。反対する根拠として、本コラムを使ってください。

5.終わりに

 C2カバレッジを100%網羅することは、理論的には可能ですが、素人がエベレストに登る以上に大変です。万が一、達成できても、工数の割にバグは見つかりません。C2カバレッジを適用する際は重要な箇所に絞り、他の重要な機能をしっかりテストしましょう。人生はC2を100%網羅するほど長くありません。

 C2カバレッジには、いろいろな誤解があります。次回は、4.で説明したC2カバレッジの限界について、より深く考察します。

【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.