上海で実演したテストケースの方針(メモ)その2

上海で実演したテストケースの方針(メモ) | 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 ということで。

カテゴリー: 開発, xUnit パーマリンク