猫でも使えるソフトウェアのテスト網羅(4):C1カバレッジの弱点とエンジニアの信念:山浦恒央の“くみこみ”な話(87)(4/4 ページ)
ソフトウェアにおけるホワイトボックス・テストの代表格がパス網羅です。パス網羅にもいろいろありますが、条件文の結果が「真」「偽」になる両方をテストする「C1」が広く利用されます。今回はC1パス・カバレッジの長所と短所を確認します。
4. C1カバレッジの欠点
以下のプログラムを例に考えましょう(表.2)。
if ( x <= 0 || (y == 1 && z > 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)。ここでも、エンジニアのセンスと信念が試されます。
4.終わりに
今回はC1カバレッジの利点と弱点、特に弱点について紹介しました。各カバレッジのメリット・デメリットを理解し、残りのスケジュールに合わせたテストが行えると効果的なテストが期待できます。そこには、エンジニアとしての決断と信念とセンスが必要です。なお、C0とC1について消化不足の方はGcovなどを用いて手を動かしてみてください。
次回は、みなさんが敬遠するC2カバレッジについて紹介します。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 猫でも使えるソフトウェアのテスト網羅(3):無料ツールで単体テストを楽に実行しよう
組み込み開発の大規模化により、プログラムテストの重要性が高まっています。パス網羅をベースにする単体テストは困難な作業ではありませんが、ツールを導入することで効率化できます。今回はGcovを用いたテスト手法を紹介します。 - 猫でも使えるソフトウェアのテスト網羅(2):パス網羅の種類と内包する問題点
趣味ならとにかく、ビジネスとしてのプログラミングに「網羅的なテスト」は欠かせません。網羅的なテストの代表的な手法である「制御パス・テスト」の手法について、解説していきます。 - 猫でも使えるソフトウェアのテスト網羅(1):基本のC0パス・カバレッジ
ソフトウェアのバグが全て取れたか?は開発における最大の関心事でしょう。網羅的テストはもちろんですが、その前に単体テストが必要です。代表的な手法である「制御パス・テスト」の基礎を紹介していきます。 - 統計の食わず嫌いを直そう(その11)、5分で残存バグ数を予測する方法
「回帰分析」は統計分析の有力な手法であり、Excelさえあれば5分で統計的に根拠のある数字を出せます。今回はExcelのツールを使って簡単に残存バグ数を予測する方法を解説します。 - 統計の食わず嫌いを直そう(その10)、ワインを飲まずに品質を予測する方法
統計アレルギーの解消には、身近な分野で考えてみることも大切です。今回は「ワインを飲まずに、ワインの品質を予測する方法」を例に統計に触れてみましょう。