連載
» 2016年10月20日 15時00分 公開

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

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

3.C1、C2カバレッジのテスト項目数

 前回も説明した通り、C1カバレッジの弱点は、各条件文の網羅や優先順位まで考慮できないことです。以下の条件文で考えてみましょう(表1)。

表1 表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.