パス網羅によるテストは、意外に、「労多くして、実が少ない」ことがお分かりいただけたと思います(網羅率は、80%まですぐに到達しますが、そこからなかなか進みません)。しかし、パス網羅は、強力なテスト手法ですし、達成度(網羅率)は数字でキチンと表現できるところも魅力です。
「パス網羅を実施したいけれど、その時間とコストがない」とか、「効果が期待できて現実的なパス網羅を実施したい」と考えているエンジニアの方々に使えそうな方法を列記します。
パス網羅が面倒なのは、対象となる命令語やパスが細かくて非常に多いためです。モジュールのように、対象がもっと大きく簡易なものになれば、網羅は簡単になります。全てのモジュールが1回はコールされたか、コールのパスは全て通ったかをチェックするだけでも、多くのバグが見つかります。
プログラムの全ての命令語やパスを網羅しようとすると膨大な時間とコストがかかります。マキャベリズムで有名なニッコロ・マキャベリの有名な言葉、「分割して統治せよ(*6)」を応用し、重要な機能に限定してパス網羅を実施すれば、労力は一挙に減少します。あるいは、トリアージュのように、機能に「松」「竹」「梅」のように優先順位を付け、これに従って、パス網羅を実施することも考慮するといいでしょう。
上記の「重要な機能に限定する」と同じ考え方は、モジュールに応用できます。重要なモジュール、いろいろな場所から呼び出される共通ルーティンに限定して、パス網羅を実施すると、意外に短時間で大きな効果が出ます。
テストで一番面倒なのが、異常処理系の検証です。ソースコードの半分が異常系のような気がします。異常系処理の細かいところまで網羅しようとするとものすごく大変ですが、異常系の処理部分のソースコード群を1つのブラックボックスと見なすと、パス網羅を単純化できます。
マシン上だけで実行してパスを網羅するのは大変です。実行のための条件をそろえるのが面倒な異常処理やタイミングに絡む処理は、机上で実行した分もカウントすることも考慮してはどうでしょう。
全ての分野のプロは、時間当たりの生産物を最大にしたいと思っています。プログラマーは、その最たるものでしょう。パス網羅は、キチンとテストを実施でき、定量的に進捗度を把握できますが、効率はそれほどよくありません。パス網羅の長所を享受しつつ、うまく応用していただければと思います。
次回は、パス網羅では避けて通れないツールの使い方を解説します。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.