連載
» 2016年07月01日 07時00分 公開

山浦恒央の“くみこみ”な話(85):猫でも使えるソフトウェアのテスト網羅(2):パス網羅の種類と内包する問題点 (3/4)

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

4. パス網羅の問題点

 パス・カバレッジはきちんと網羅しようとすると超級面倒で、時間とコストが必要となります。しかも、以下のような大きな問題があります。

  • (1) 膨大なテスト結果が出力されるのでデータの整理が面倒
  • (2) C2を100%網羅しても、バグゼロではない

4.1 データの整理が面倒

 最も簡単なC0網羅でも(*4)実行するパスは非常に多く、出力されるデータの整理が大変です。パス・カバレッジをする時は、必ず、ツールを使いましょう。パス網羅ツールを使わず、紙に印刷したソースコードをラインマーカーで塗るのは石器時代のテストで、C0の場合はまだしも、C1の場合、パスが全部で何本あるかを手で数えるのは非現実的です。

 携わるプロジェクトで、手作業でパス網羅を実施しているプログラマーから、「C0を100%網羅しました」と報告を受けても、うのみにしてはなりません。私なら信じません。必ず、ツールを使いましょう。

*4:パス網羅は大変な作業なので、「C0網羅は最も簡単」と書くのは、「資産100兆円のAさん、101兆円のBさん、102兆円のCさんの中で、『Aさんが最も貧乏』です」と表現するのと同じですようなものです……

4.2 「C2 100%網羅」でもバグゼロではない

 パス網羅の中で、最も面倒なC2を100%網羅しても、バグ0にはなりません。例えば、「機能漏れのバグ(*5)」は、C2網羅100%でも検出できません。

 プログラマー時代の私の大先輩の2つの口癖が、「プログラムが走らないと、プログラマーが走りまわる」「プログラムは、期待した通りではなく、作った通りに動く」でした。後者が「C2 100%網羅はバグゼロではない」理由を説明しています。

 C2が網羅するのは「作った通り」の部分で、「作った通り」を100%網羅しても、「期待した通り」のテストにはなりません。実際のテストは、「期待した通り」に動くかをチェックしなければならないのです。「機能が存在しない」ということは「ソースコード上に存在しない」ので、C2網羅が100%でも、巨大なバグは手つかずで残っています。

 機能の漏れを検出するには、ソースコードではなく「機能のC0、C1、C2カバレッジ」を100%網羅しなければなりません。このためには、要求仕様書を1行ずつチェックし、機能を全て網羅していることを確認し、ラインマーカーで塗りつぶす地道な作業が必要になります。

*5:「機能漏れ」はバグの中で最も多く、全体の3割とも4割とも言われています

Copyright © ITmedia, Inc. All Rights Reserved.