猫でも分かるソフトウェアのテスト網羅(5):C2カバレッジはエベレスト登山か?:山浦恒央の“くみこみ”な話(88)(3/3 ページ)
「制御パステスト」をテーマとする「猫でも分かるソフトウェアのテスト網羅」シリーズの第5回では「C2カバレッジ」を取り上げます。C1より網羅性が高いので、高信頼性を求めるソフトウェア開発の管理者や発注者に好まれますが、実際にテストを行うプログラマにとってエベレスト登山並みの大変さになる可能性もあるので注意が必要です。
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カバレッジの限界について、より深く考察します。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- 猫でも使えるソフトウェアのテスト網羅(4):C1カバレッジの弱点とエンジニアの信念
ソフトウェアにおけるホワイトボックス・テストの代表格がパス網羅です。パス網羅にもいろいろありますが、条件文の結果が「真」「偽」になる両方をテストする「C1」が広く利用されます。今回はC1パス・カバレッジの長所と短所を確認します。 - 猫でも使えるソフトウェアのテスト網羅(3):無料ツールで単体テストを楽に実行しよう
組み込み開発の大規模化により、プログラムテストの重要性が高まっています。パス網羅をベースにする単体テストは困難な作業ではありませんが、ツールを導入することで効率化できます。今回はGcovを用いたテスト手法を紹介します。 - 猫でも使えるソフトウェアのテスト網羅(2):パス網羅の種類と内包する問題点
趣味ならとにかく、ビジネスとしてのプログラミングに「網羅的なテスト」は欠かせません。網羅的なテストの代表的な手法である「制御パス・テスト」の手法について、解説していきます。 - 猫でも使えるソフトウェアのテスト網羅(1):基本のC0パス・カバレッジ
ソフトウェアのバグが全て取れたか?は開発における最大の関心事でしょう。網羅的テストはもちろんですが、その前に単体テストが必要です。代表的な手法である「制御パス・テスト」の基礎を紹介していきます。 - 統計の食わず嫌いを直そう(その11)、5分で残存バグ数を予測する方法
「回帰分析」は統計分析の有力な手法であり、Excelさえあれば5分で統計的に根拠のある数字を出せます。今回はExcelのツールを使って簡単に残存バグ数を予測する方法を解説します。