上海で実演したテストケースの方針(メモ) | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/2217
の第2弾…のメモです。
先の例では、DAO(Data Access Object)なのでテスト対象は主に SQL になる訳ですが、今度は業務ロジック(business logic)を中心に解説します。
業務ロジックの場合は、基本は以下の 4 箇所がテストの対象になります。
- メソッドのパラメータ
- if 文による分岐
- for 文による繰り返し
- 内部メソッドの呼び出し
ここで、内部メソッドの呼び出しは既にテスト済みであることが前提です。
サンプル的には次のコードを頭に入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // 引数は, 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 ということで。