買った本
ソフトウェアテスト技法
Part1をやり終えたので学んだことを記録
同値分割法
テスト結果で同じ結果になるものをグループ分けして、その中で代表となる値のみテストをする。
例えば今月の獲得ポイントによって来月の会員ランクが決まるような処理
以下のような条件だった場合
図1 同値分割法の例
No | 獲得ポイント | 来月の会員ランク | 代表値 |
---|---|---|---|
1 | 0-100 | ノーマル | 50 |
2 | 101-500 | ブロンズ | 300 |
3 | 501-1000 | シルバー | 750 |
4 | 1001- | ゴールド | 2000 |
同値分割法は、同じ結果に範囲に分割して、その中で1つのみテストを実施する。
そうすることで、その範囲内の動作は正しいと判断するテスト。
ただし、ソースコードの組み方によっては、代表値だけのテストでは足りない場合もありうる。
public static String getRank(int point) {
switch(number) {
case 0:
return "ノーマル";
break;
case 1:
return "ノーマル";
break;
// caseが100まで続く
case 32:
return "ブロンズ";
break;
// caseが100まで続く
case 100:
return "ノーマル";
break;
}
}
こんなソースないとは思うが、もし間違って32の時に ブロンズを返すと書いていた場合、
同値分割法のテストで不具合を発見することはできない。
静的解析ツール、レビューで上記のような問題は解決されるはずなので大きな問題にはならないはず。
境界値分析
同値分割法で分割したクラスの境界値をテストする手法
図1を例とすると、ノーマルとブロンズの境界である、100, 101をテストする。
100はノーマル
101はブロンズとなるはず
// こんなメソッドがあった場合に不具合に気づくことができる。
public static String getRank(int point) {
if (0 <= point && point < 100) { // <= 100とすべきだが間違っている!!
return "ノーマル";
} else if(101 <= point && point <= 500) {
return "ブロンズ";
}
}
知識として持っているものを使用して、実際にテストケースを作成していく練習ができました!