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

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

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

2. C1カバレッジ

 C1カバレッジの前に、C0カバレッジの問題点を振り返ります。C0はプログラムの各命令文(例えば「a = a + 1」)だけに着目したものです。そのため、分岐を考慮せず、テストに漏れが発生します(*2)。

*2:C0カバレッジを適用する場合、「テストで漏れがある」ことは承知の上で、その代わり、「作業量が少ない」という利点を重視します。これがトレードオフで、全てに良い「八方美人的な方法」は存在せず「一方が良くなれば、他方は不足」します。この「不足分」をどうするか? 潔く「諦める」のも1つの方法でしょうし、「別の方法で補う」人もいるでしょう。これがエンジニアとしての決断、信念であり、センスが濃厚に出ます。

 C1カバレッジは、C0の欠点である「分岐の網羅不足」に対策したテスト手法で、if文内の「真」「偽」両方を実行します。次のフロー(図.1)から考えましょう。

photo 図1.制御フロー図

 図.1は、2つの条件文 A Bと2つの命令文(1)(2)を持った制御フローです。このフローからC1カバレッジ100%を満たすテスト項目を作成する場合、各条件文を「YES」「NO」に分岐する必要があります。例えば、次が考えられます(表.1)。

表.1 制御フローに対するテスト項目例(C1:100%)
テスト項目No 条件文A 条件文B
1 YES YES
2 NO NO

 表.1はテスト項目例を表しています。テスト項目No.1では、条件文 A Bがどちらも「YES」のパス、No.2では、どちらも「NO」のパスを通るように作成しました。ちなみにパスを通りさえすれば、通る方向は関係ありません。つまり、1個目で条件文A:「YES」、条件文B:「NO」に、2個目で条件文A:「No」、条件文B:「YES」のように作成しても構いません。通過したパスを図.1上に重ねて記述すると、図.2になります。

図.3 テストパス例 図.3 テストパス例

 図.2は、表.1のテスト項目の実行パスを示したものです。2つの条件文の「真」「偽」が実行されていることが確認でき、C1カバレッジ100%と言えます(*3)。

 C1カバレッジの利点は、テスト量が少なく、具体的な数字で表現でき、説得力があることです。次節で詳しく説明します。

*3:C1を100%網羅すると、C0も自動的に100%網羅となります。ただし、逆は成立しません。

Copyright © ITmedia, Inc. All Rights Reserved.