ミューテーションスコアでテストケースのバグ検出能力を測る
「ミューテーションスコア(MS)」とはプログラムに対して故意にわずかに異なる誤り(バグ)を作り出し、埋め込まれたバグを「テストスイート」(テストケースの集合)のテストでどれだけ検出できるかを計測し、数値化したものです。ミューテーションスコアが高ければ高いほど、そのテストスイートのバグ検出能力が高いことを指します。
作成するわずかに異なる誤り(バグ)を埋め込んだプログラムを「ミュータント」と呼びます。ミュータントにバグが埋め込まれたことをテストスイートが発見するのは「キルする」と呼びます。ミュータントが元のプログラムと同等な動作をする場合、そのミュータントは「等価ミュータント」と呼びます。
ミューテーションスコアの算出方法は以下の通りです。分母の「m - e」は、言い換えれば発見可能なバグが埋め込まれたミュータント数で、そのうち発見できたものの比率がミューテーションスコアということになります。

- k:キルしたミュータントの総数
- m:生成したミュータントの総数
- e:等価ミュータントの総数
埋め込む誤りは表7に示すようにいくつものパターンがありますが、今回は条件分岐に直接影響を及ぼす可能性が高い、算術演算子(+, -, *, /)、真偽値の逆転、関係演算子(<, <=, >, >=)を対象としました。
例えば、関係演算子(<, <=, >, >=)を対象にミューテーション操作によりミュータントを作成すると、図5のように変換されたソースコードが作成されます。
単体テストは仕様に基づく入力データを事前条件としてインプットするため、このように明らかにソースコードに誤りがある場合、単体テストは失敗となるべきです。
組み合わせ因子数に対するミューテーションスコアの測定結果
このようにして作成したソースコードを対象に、オールペア法で作成した組み合わせテストケースを用いて単体テストを行うことで、作成したテストケースのバグ検出能力、つまりテストケース自体の品質を測定しました。その結果を表8~10に示します。
組み合わせの因子数が少ないとミューテーションスコアは低くなり、テストケース自体のバグ検出能力は低いことがわかります。一方で、ある組み合わせ因子数に達すると、その後因子数を増やしてもミューテーションスコアが高くなることはありません。このミューテーションスコアが収束する組み合わせ因子数が、オールペア法で作成したテストケースにおいてテストケースの品質の観点での最適な数と判断できます。
