猫でも分かるソフトウェアのテスト網羅(5):C2カバレッジはエベレスト登山か?:山浦恒央の“くみこみ”な話(88)(2/3 ページ)
「制御パステスト」をテーマとする「猫でも分かるソフトウェアのテスト網羅」シリーズの第5回では「C2カバレッジ」を取り上げます。C1より網羅性が高いので、高信頼性を求めるソフトウェア開発の管理者や発注者に好まれますが、実際にテストを行うプログラマにとってエベレスト登山並みの大変さになる可能性もあるので注意が必要です。
3.C1、C2カバレッジのテスト項目数
前回も説明した通り、C1カバレッジの弱点は、各条件文の網羅や優先順位まで考慮できないことです。以下の条件文で考えてみましょう(表1)。
表1は、3つの条件を持った条件文の例です。つまり、「xが0より小さい」または「yが1、かつ、zが2より大きい」値の場合、条件文は「真」となります。この例から、C1を100%網羅するテスト項目は、「条件を満たす」、「条件を満たさない」の2件です。
C2カバレッジでは、条件の組み合わせも考慮します。そのため、表1からC2網羅100%のテスト項目を作成すると、表2の組み合わせとなります。
x<=0 | y==1 | z>2 | x<=0 || (y==1 && z > 2) | |
---|---|---|---|---|
真 | 真 | 真 | 真 | |
真 | 真 | 偽 | 真 | |
真 | 偽 | 真 | 真 | |
真 | 偽 | 偽 | 真 | |
偽 | 真 | 真 | 偽 | |
偽 | 真 | 偽 | 偽 | |
偽 | 偽 | 真 | 偽 | |
偽 | 偽 | 偽 | 偽 | |
表2 テスト項目の組み合わせ |
表2は、C2カバレッジ100%を満たすための組み合わせを表したものです。条件は、(x<=0, y==1, z>2)のように3つに分解して考えます。取りうる結果は、真と偽の2パターンで、おのおのを網羅するテスト項目数は、2の3乗=8件です。この結果から、両者のテスト項目数を比較すると表3となります。
カバレッジの種類 | テスト項目数 | 例 |
---|---|---|
C1 | 条件文の数+1個 | if文の数が3個ある場合、3+1=4個 |
if文内の条件が3個ある場合、1+1=2個 | ||
C2 | 2の条件数乗 | if文内の条件が3個ある場合、2の3乗=8個 |
表3 C1とC2のテスト項目数の比較 |
表3は、C1とC2のテスト項目数の違いを示したものです。C1では、if文内に10個の条件があってもテスト項目は2個ですが、C2の場合、2の10乗=1024個となり、非常に網羅的なテストとなります。その分、テスト項目数は爆発的に増え、C1のテスト項目数は線形で増えるのに比べ、C2は累乗で増加します。C1は、A4用紙を23枚重ねるだけなので、厚みは2mm少しですが、C2は、23回折るので、エベレスト山を越えます。
理論的に、C2を100%網羅することは可能ですが、納期や工数(コスト)の関係上、現実にはエベレストに登るくらい困難です。さらに困ったことは、テスト項目数や工数に比較して、バグがあまり検出できず、効率の悪いテストになることです。このため、筆者は、C2網羅は採用せず、ブラックボックステスト(例えば、同値分割や境界値分析を適用してテストする)を実施する方が圧倒的に効果は高いと考えています。C2網羅は、適用するにしても、「超重要モジュール」や「クリティカルな機能」に絞り、部分的に実施すべきです(*2)。C0、C1、C2は、全プログラムに適用すべきではなく、重要度の応じて、機能別、モジュール別に適用すべきだと考えています。
*2:条件文の組み合わせもある程度テストしたい方は、MCDC(Modified Condition Decision Coverage)カバレッジを適用してはいかがでしょうか? 詳細は割愛しますが、条件文の中身を考慮でき、かつテスト項目数の増加が累乗ではなく線形です。あまり文献が無く、人に伝えにくいのが欠点ですが、ミッションクリティカルな製品(航空・宇宙・車載)系で採用されるケースが増えています。ぜひ、調べてみてください。
Copyright © ITmedia, Inc. All Rights Reserved.