Yasuo's Notebook

ソフトウェア開発の話題が中心の備忘録です。

Pexが生成するケース

前回Pexでのテストコード生成を紹介しました。
今回は、Pexでどんなテストケースが生成されるかを見ていきます。

まず、複数の条件がORで判定されるケースです。

例えば、if (a>5 || b>5 || c>5)のような条件に対してブランチカバレッジを満たすケースを考えると、a,b,cのいずれかが6以上になるケース1件と、a,b,cのいずれもが5以下であるケース1件で、網羅していることになります。
Pexでテスト生成した結果を以下に示します。

f:id:yasuo99:20120107221607j:plain

結果として3ケースが生成されました。a,bが6以上のケースは生成されていますがcが6以上のケースは生成されませんでした。
同じようにif (a>5 || b>5 || c>5 || d>5)という条件も試してみましたが、この場合は、a,b,cが6以上のケースが生成されて、dが6以上のケースは生成されませんでした。


次に、テスト対象の関数から別の関数を呼び出している場合もテストしてみた結果が以下の通りです。

f:id:yasuo99:20120107221611j:plain

ちゃんと全ての戻り値のケースが通るように、他の関数の実装も考慮した形で入力値が生成されていることが判ります。



一方、境界値の観点でみると、値の選択は境界値を選択するようになっているようですが、最初の例で、a,b,cが5の場合は生成されませんでした。
今回試行で、レガシーコードをリファクタリングする際や、実装したテストコードがどの程度の強度かを測る際には十分有用だと感じました。