筆者はソフトウェア工学の授業で、学生に制御パステスト(C0、C1、C2)を教えています。講義後、一部の学生は次のような錯覚を起こします。
上記のような錯覚を覚えても無理はありません。C1と比べると、C2カバレッジは非常に網羅的で、理論上完璧だと思われます。現実には以下の大きな問題があります。
C2カバレッジのテスト項目数は、A4用紙を折るように、非線形的に増加します。よって、テスト項目を自動生成できないと、実施するのは困難です。
本コラムでは単体テストに焦点を当てているため、結合したプログラムを想定していません。プログラムを結合すると、さらに組み合わせが爆発的に増加し、C2を100%網羅することは非現実的です。
C2を網羅する際には、プログラムの構造上、網羅できない場合が必ずでてきます。パス網羅を実施するなら(C0でも)、必ずデバッガを導入しましょう。
筆者は、テストの優先順位は、ホワイトボックステストよりブラックボックステスト(同値分割、境界値分析)の方が圧倒的に高いと考えます。C2を100%網羅することに工数をかけるより、ブラックボックステストの方が、時間がかからず、効率よくバグを検出できます。
制御パステストでは、通常、ループの網羅は考慮しません。1回ループすればC2を満足する場合がほとんどです。C2を満足してもループに関するバグは検出困難です。ループのテストでは、ループの回数が、「0回」「1回」「最大−1回」「最大回」「最大回+1」をテストします。「最大回+1」は、パッチを当てて無理やりループさせ、それでも異常動作をしないかを確認します。
特に、機能の抜けを摘出できないのは、パス・カバレッジに共通する致命的な問題です。
プログラムを見ると、実際には使わない変数を見掛けることがあります。そんなデッドコードもC2では検出困難です。
組み込み系ソフトでは、割り込みやマルチタスクのバグが最も厄介です。そのようなバグも検出困難です。
以上から、C2カバレッジを100%網羅することは非常に困難である上、「労多くして効少なし」となります。C2を実施するなら、重要な箇所に対し、ピンポイントで適用すべきです。
ソフトウェア開発の現場には、「C2カバレッジ最強説」が根強くはびこっています。プロジェクトマネジャーや、発注先の顧客が、開発計画書や契約書に、「C2を100%網羅すること」と書いてあれば、全力で反対しましょう。反対する根拠として、本コラムを使ってください。
C2カバレッジを100%網羅することは、理論的には可能ですが、素人がエベレストに登る以上に大変です。万が一、達成できても、工数の割にバグは見つかりません。C2カバレッジを適用する際は重要な箇所に絞り、他の重要な機能をしっかりテストしましょう。人生はC2を100%網羅するほど長くありません。
C2カバレッジには、いろいろな誤解があります。次回は、4.で説明したC2カバレッジの限界について、より深く考察します。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.