上海で実演したテストケースの方針(メモ) | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/2217
の第2弾…のメモです。
先の例では、DAO(Data Access Object)なのでテスト対象は主に SQL になる訳ですが、今度は業務ロジック(business logic)を中心に解説します。
業務ロジックの場合は、基本は以下の 4 箇所がテストの対象になります。
- メソッドのパラメータ
- if 文による分岐
- for 文による繰り返し
- 内部メソッドの呼び出し
ここで、内部メソッドの呼び出しは既にテスト済みであることが前提です。
サンプル的には次のコードを頭に入れます。
// 引数は, id と name の 2 つ
public int func( int id, string name )
{
// パラメータで判別
if ( id == 0 ) {
return -1;
}
// 内部関数の呼び出し
DataTable dt = this.GetPersons( name );
// 繰り返し処理
foreach ( DataRow row in dt.Rows )
{
if ( id == (int)row["id"] ) {
// 正常値
return (int)row["age"];
}
}
// 異常値
return -1;
}
■テストコードを書く順番
前回の DAO と同じように、簡単なものから複雑なものへと進めていきます。前のテストコードがコピー&ペーストで使えるようにします。
0) TestZero
動作確認のテストコードを書きます。
1) TestOK
正常系が通るテストコードを書きます。
2) TestNG
戻り値が異常値となるテストコードを書きます。
3) TestParam
パラメータが変化した時の戻り値をチェックします。
4) TestIf
条件分岐に対するテストです。
switch-case による複数分岐もここに入れます(複数分岐の場合は、網羅性を追求せず、サンプリングします)
5) TestFor
繰り返しが1回の場合、複数回の場合、0回の場合をチェックします。
6) TestBorder
パラメータの変更による境界値試験です。
7) TestInner
内部メソッドに渡すパラメータが変化するパターンをチェックします。
内部メソッドについてテスト済みなので、パラメータより引き渡される条件で、2,3 ぐらいチェックすれば十分です。
まぁ、ざっとこんな感じでパターンを頭に入れておけば、OK ということで。
