検索
連載

猫でも使えるソフトウェアのテスト網羅(4):C1カバレッジの弱点とエンジニアの信念山浦恒央の“くみこみ”な話(87)(4/4 ページ)

ソフトウェアにおけるホワイトボックス・テストの代表格がパス網羅です。パス網羅にもいろいろありますが、条件文の結果が「真」「偽」になる両方をテストする「C1」が広く利用されます。今回はC1パス・カバレッジの長所と短所を確認します。

Share
Tweet
LINE
Hatena
前のページへ |       

4. C1カバレッジの欠点

 以下のプログラムを例に考えましょう(表.2)。

if ( x <= 0 || (y == 1 && z > 2)) {
	//命令文?
}
表.2 例題プログラム

 表.2は論理演算子のORとANDが結合しているif文の例です。C1カバレッジ100%を満たすには、以下がポイントとなります。

真:xを0以下にする

偽:xを1以上

 条件が複数あっても、論理演算子がORなので、他がどうであれxが真と偽になればOKです。よって、これだけ網羅するとC1カバレッジ100%となりますが、以下のケースを考慮していません。

(1)各条件文の中身が取りうるパターンを考慮していない

(2)条件文の優先順位を考慮していない

  • 4.1 各条件文の中身が取りうるパターンを考慮していない

 判定だけを見ると、テスト項目は2個で済みますが、各条件のパターンを網羅していません。全パターンを作成すると、2のn乗個だけ必要です。表.2で考えると、条件は3個ありますので、2**3 = 8件となります。

 8件全ての組み合わせを網羅するには、C2カバレッジを実施する必要がありますが、時間とコストが必要となります。「完全に網羅するよりも、エンジニアリング的な観点に立って、低コストと時間短縮を選択する」か、「網羅されていない箇所を何らかの簡単な方法で補う」か、「あくまでC2カバレッジ100%網羅を実施する」かは、ソフトウェア開発者のみならず、全てのエンジニアに共通する永遠の課題です。

 処理方式の長所と短所をきちんと認識し、自分の「エンジニアとしての信念」、あるいは「エンジニアリングの宗教」にもとづいて、決断を下してください。「無知だったので手を抜いた」と「エンジニアリング的に手を抜いた」では、結果的に同じであっても、エンジニアの資質やレベルが全く異なります。キチンと工学的に正しく手を抜いてください。

  • 4.2 条件文の優先順位を考慮していない

 C1カバレッジでは、各条件文の優先順位を考慮しないため注意が必要です。この欠点は、コンパイラやプログラミング言語の処理方式と関係しており、条件文の評価の方法や演算子の優先順位は、コンパイラにより異なります。表.2の例で考えると、1つ目の条件文(x <= 0)の結果が偽の場合、2つ目の条件(y == 1, z > 2)以降を評価しないこともあるようです。更に、条件演算子(&&や||)の評価順序は、C1カバレッジ100%だけではテスト漏れとなる可能性があります。

 以上から、C1カバレッジは現実的なテスト量で実施可能ですが、「コンパイラが複数の条件文をどのように評価するか」までは考慮できないことが分かります。コンパイラの処理方式まで意識してテストするには、上記で述べたように時間とコストが必要になります(*5)。ここでも、エンジニアのセンスと信念が試されます。

*5:アメリカのソフトウェア開発プロジェクトで、「品質を上げるには、時間とお金がかかる」という話になった時、必ず出てくる言葉が「There is no free lunch」です。「タダで昼飯は食えない。品質向上も、タダではない」というニュアンスでよく出てきます。

「free breakfast」でも「free dinner」でもなく、「lunch」であるところが面白い。品質に限らず、「成果を出すにはコストと時間がかかる」という意味でこの言葉を使うと、ビックリするほど「その通りだ」と全員が賛同してくれるので、是非、使ってみてください。

4.終わりに

 今回はC1カバレッジの利点と弱点、特に弱点について紹介しました。各カバレッジのメリット・デメリットを理解し、残りのスケジュールに合わせたテストが行えると効果的なテストが期待できます。そこには、エンジニアとしての決断と信念とセンスが必要です。なお、C0とC1について消化不足の方はGcovなどを用いて手を動かしてみてください。

 次回は、みなさんが敬遠するC2カバレッジについて紹介します。

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

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


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

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


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る