はじめに
テストを完璧に実施できれば、バグも発生せず開発を制したと言っても過言ではないぐらい開発者にとっては大切なテスト。
そんなテストの方法について知見があまりなかったので調べてみた。
初歩的なところから記載していく。
テストの種類
テストの種類は大きく分けて以下の2種類が存在する。
- ホワイトボックステスト
- プログラム内部の関数やメソッド内部の条件分岐や繰り返し文などを確認するテスト。
また、テストでどのぐらいの条件を網羅するかはカバレッジ(網羅率)によって判断する。主に単体テストとして行われる。 - ブラックボックステスト
- プログラムの入出力だけに注目し仕様通りにプログラムが動作するかをテストする。
テストケースの作成などに関して、内部の処理手順やプログラムの構造などは考慮しない。
主に機能テストやシステムテストとして行われる。
ホワイトボックステスト
ガバレッジを意識して単体テストを行う事でどれだけテストが網羅されているかを判断する事ができる。
カバレッジ(網羅率)
所定のテストがどれだけ網羅されているかを割合で表したもの。
コードカバレッジ
テスト対象となるプログラムコード(内部ロジック)全体の中で、テストが行われた部分が占める割合。
func hoge() {
// 条件分岐A
if (条件A) {
// 処理A
} else {
// 処理B
}
// 条件分岐B
if (条件B || 条件C) {
// 処理C
} else {
// 処理D
}
}
C0(ステートメントカバレッジ / 命令網羅)
処理に着目して全ての処理が1度以上行われる様にテストする。
処理A, 処理B, 処理C, 処理Dの全てを通る様にテストを行う。
パターン | 確認処理 |
---|---|
1 | 処理A |
2 | 処理B |
3 | 処理C |
4 | 処理D |
処理のみに着目しているので4パターンで確認する。
処理のみに着目しているので条件分岐の内容までは詳細に確認しない。
C1(ブランチカバレッジ / 分岐網羅)
条件分岐に着目して条件式のすべての組み合わせ(true, false)をテストする。
あくまで条件分岐に対しての確認なので条件Bと条件Cの値はそれぞれで確認せずに条件分岐Bとして扱う。
パターン | 条件分岐A | 条件分岐B |
---|---|---|
1 | true | true |
2 | true | false |
3 | false | true |
4 | false | false |
C2(コンディションカバレッジ / 条件網羅)
条件分岐内の条件に着目して全ての条件結果をテストする。
条件分岐Bも条件Bと条件Cに分けて全てのパターンを網羅する様にテストを行う。
パターン | 条件A | 条件B | 条件C |
---|---|---|---|
1 | true | true | true |
2 | true | true | false |
3 | true | false | true |
4 | true | false | false |
5 | false | true | true |
6 | false | true | false |
7 | false | false | true |
8 | false | false | false |
ブラックボックステスト
主に結合試験などで行われるテスト方法。
全てのパターンを網羅する事が出来れば良いが条件が複雑になる程、テストの数が膨大になってしまう。
そこで同値分割法と境界値分析利用する事により工数を削減しつつテストの品質を担保する事が出来る。
同値分割法
正常系の値を有効同値、準異常系・異常系を無効同値に分類してテストする方法。
例:月の値を例とした場合には以下の様に分類される。
月 | 有効・無効 |
---|---|
0 | 無効同値 |
1~12 | 有効同値 |
13 | 無効同値 |
境界値分析
境界値分析とは、有効同値と無効同値を組み合わせるなどして、処理と処理の境界となる値(境界値)をテストする手法。
例:月の売り上げを例とした場合には以下の様に分類される。
(※4月~7月は繁忙期とする)
月 | 有効・無効 | 繁忙期 | 境界値 | 備考 |
---|---|---|---|---|
0 | 無効同値 | × | ○ | 無効同値の境界線 |
1 | 有効同値 | × | ○ | 有効同値の最小値 |
2 | 有効同値 | × | × | |
3 | 有効同値 | × | ○ | 繁忙期との境界線(-1) |
4 | 有効同値 | ○ | ○ | 繁忙期の最小値 |
5 | 有効同値 | ○ | × | |
6 | 有効同値 | ○ | × | |
7 | 無効同値 | ○ | ○ | 繁忙期の最大値 |
8 | 無効同値 | × | ○ | 繁忙期との境界線(+1) |
12 | 無効同値 | × | ○ | 有効同値の最大値 |
13 | 無効同値 | × | ○ | 無効同値の境界線 |
#まとめ
何処をテストするかも重要だが、それと同じぐらいテストしないケースを決める事も重要だと学ぶことができた。
これからも学んだ事を更新していこうと思う!