テストとは?
要件や仕様書の内容と、同じ処理がされているかを確認する。
仕様から漏れたプログラムのミスを見つけることが目的である。
ソフトウェアは常に変更されていくので、テスト当時にはバグが見つからなくても、後の変更されたタイミングで見つかる可能性がある。
つまり常にテストすることが大切。
テスト設計
テストをするときには、テスト設計を行う。
- 何のためにテストをするのか
- 何をテストするのか
- どういったテストをするのか
- どんな値を入れるのか
- 欲しい値が取れるか
- 欲しい値とは何か
- どのような期待結果を求めるのか
などを踏まえた上でテスト仕様書を作成する。
テストの種類
大きく分けて4種類のテストがある。
- 単体テスト
- 結合テスト
- 総合(システム)テスト
- 受入テスト
単体テスト
ざっくり言うと、作成したプログラムに対してのテスト。
クラス、メソッド、処理など作成したプログラム
結合テスト
プログラムがまとまり「機能」が作られる。
この機能を確認するテストのこと。
さらに機能と機能の連結確認のテストも行う。
例:ログインした状態で、YouTubeのトップ画面を表示させると、ユーザごとのおすすめ一覧が表示される
総合(システム)テスト
機能がまとまり「システム」としての動作確認のこと。
リリースできるか判断するテストに相当する。
- 性能確認
- アクセスして画面に何秒で表示されるのか
- 登録処理が何秒で終わるのか など
- 負荷確認
- 1秒間に1000回などのリクエストを送ったときに、アプリが落ちずに処理できているのか など
- セキュリティ
- 社内のセキュリティ専門チームが対応することが多い
- ユーザが使いやすいのか(UX)
受入テスト
納品されたシステムをユーザが確認するテストのこと。
機能要件、使い勝手、運用などを確認する。
ホワイトボックステスト
システムの機能や内容を把握している状態でのテストのこと。
カバレッジ(網羅率)
プログラムに対して、どこまでテストが実施され網羅されたのか割合を示す。
- 命令網羅
- 分岐網羅
- 条件網羅
仮にこのようなプログラムがあった場合の各網羅を記載する。
public class Coverage {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); // 標準入力
System.out.println("Movie or Game");
System.out.println("↓ 入力待ち");
String str = scan.nextLine(); // 1行分の入力を取得する
System.out.println(str + " を選択");
System.out.println("**********");
System.out.println("所持金は?");
System.out.println("↓ 入力待ち");
int money = scan.nextInt(); // 数値の入力を取得する
System.out.println("所持金は " + money);
System.out.println("**********");
System.out.println("今日は");
if (str.equals("Movie")) {
if (money >= 1900) {
System.out.println("映画を見る");
} else {
System.out.println("ゲームする");
}
} else if (str.equals("Game")) {
System.out.println("ゲームする");
} else {
System.out.println("入力ミスです");
}
}
}
「Movie」を選択かつ、「所持金が1900円以上」
→ 「映画を見る」 が表示される
「Movie」を選択かつ、「所持金が1900円より少ない」
→ 「ゲームする」 が表示される
「Game」を選択かつ、「所持金が1900円以上」
→ 「ゲームする」 が表示される
「Game」を選択かつ、「所持金が1900円より少ない」
→ 「ゲームする」 が表示される
「Movie」を選択かつ、「所持金が1900円以上」
|
|---No 「ゲームする」
|
Yes 「映画を見る」
命令網羅
プログラムが実行できているかを確認する。
例の場合、「Movie」
を選択し、「所持金が1900円以上
」なら「映画を見る」
が表示されることを検証する。
全てが網羅できるわけではない。
分岐網羅
YesもしくはNoの分岐処理が実行されたかを確認する。
分岐を網羅しているだけなので、「Game」を選択かつ、「所持金が1900円以上」
など条件は、抜けている可能性がある。
条件網羅
各分岐の各条件を全て網羅して、実行されたかを確認する。
ただしテストケースが膨大になる可能性がある。
ブラックボックステスト
要件や機能が実行できるかを確認するためのテストのこと。
プログラムの内容を見ずに、要件や仕様が実現されているかを確認する。
同値分割
入力した内容と出力された結果の組み合わせを確認する。
3つの入力フォームに、「1」「1」「1」と入力
→ 結果:「正三角形」と表示される
3つの入力フォームに、「2」「2」「1」と入力
→ 結果:「二等辺三角形」と表示される
境界値分析
値を入力するときに、「有効な値」と「無効な値」の境界でテストすること。
入力フォームに、「0〜100」の値が入力されると、「OK!」と表示させる機能がある
この場合「-1」「0」「1」「2」「98」「99」「100」「101」の値でテストすることで、全ての値で確認することなく、効率的に検証することができる。