1. テストとはなにか?
プログラムを特定の条件下で動作させ、「実際の動作」 と 「期待する動作」 を比較すること。
テストの目的は「正しく動くことを確認する」だけでなく、仕様通りに動いているかを検証し、欠陥を早期に発見することにある。
2. テストケースとはなにか?
最小の時間と労力でエラーを発見できるように設計されたテストの単位。
テストケースは次の3つで構成される:
- 入力:何を与えるか
- 出力:何を期待するか
- 手順:どう実行するか
明確なテストケースを作成することで、テストの再現性や網羅性を確保し、属人的な判断を防ぐことができる。
3. テストの種類
| 種類 | 対象 | 特徴 | |
|---|---|---|---|
| ブラックボックステスト | 要件・仕様 | 内部構造を考慮せず、外部からの入力と出力のみを確認する | 利用者視点で機能を検証できるため、ユーザー体験に直結する品質確認が可能 | 
| ホワイトボックステスト | 内部実装 | コードや制御構造を分析し、内部ロジックを確認する | 内部の誤動作や見落としを技術者視点で発見できる | 
4. テストのレベル
| レベル | 対象 | 目的 | |
|---|---|---|---|
| 単体テスト | 関数・モジュールなど最小単位 | 部品が正しく動作するか確認 | 早期にエラーを発見でき、修正コストが低い | 
| 統合テスト | 結合されたモジュール群 | 機能間の連携を確認 | モジュール間のデータや制御の受け渡しミスを防ぐ | 
| システムテスト | 全体のアプリケーション | 全体としての品質確認 | リリース前に仕様通りに動くかを総合的に評価 | 
| 受け入れテスト | 顧客による検証 | システムが要求を満たしているか確認 | 納品判断の最終段階であり、信頼性を確立する重要な工程 | 
5. ブラックボックステストの手順
- 仕様書を分析する
 →どのような動作が期待されているかを理解する
- 有効な入力値と無効な入力値を選定する
 →入力の幅を明確化
- 入力値ごとの期待出力を決定する
 →正しい結果を定義
- テストケースを作成する
 →再現可能な形にまとめる
- テストを実施する
 →実際に動作を確認
- 実際の出力と期待の出力を比較する
 →結果を検証
- 正常に機能しているかを判定する
 →合否を明確化
6. ブラックボックステストのメリットとデメリット
メリット:
- 有効で効率的なサブセットを選択できる
 →限られたテストで最大効果
- 投資対効果が高い
 →リソースを効率的に使用
デメリット:
- 内部のどこをテストできたか不明
 →カバレッジが測定困難
- 内部ロジックの欠陥を発見できない
 →実装ミスを見逃す可能性
7. ブラックボックステストの代表的な技法
| 技法 | 内容 | 理由 | 
|---|---|---|
| 同値クラステスト | 同じ結果を返す入力群から代表値を選ぶ | 入力の冗長なテストを省き、効率的に網羅できる | 
| 境界値テスト | 上限・下限・その前後を確認 | エラーは境界で発生しやすいため重要 | 
| デシジョンテーブルテスト | 条件と結果を表形式で整理 | 複雑な条件分岐を体系的に漏れなくテストできる | 
| ペア構成テスト | 変数のすべてのペアを網羅 | 組み合わせ爆発を防ぎつつ、相互作用の欠陥を発見できる | 
| 状態遷移テスト | 状態と遷移をモデル化 | 状態ごとの不正遷移を防止できる | 
| ドメイン分析テスト | 上限+1、下限-1、中央値などを選定 | 入力範囲の正確な扱いを確認できる | 
| ユースケーステスト | 実際の利用シナリオで確認 | 現実的な利用パターンで信頼性を評価できる | 
8. ホワイトボックステストの手順
- 実装を分析する
 →構造・分岐を理解
- パスを識別する
 →実行経路を把握
- 各パスを実行する入力を選定する
 →再現可能な形にまとめる
- テストを実施する
 →実際に動作を確認
- 実際の出力と期待出力を比較する
 →結果を検証
- 正常に機能しているか判定する
 →合否を明確化
9. ホワイトボックステストのメリットとデメリット
メリット:
- テストの到達範囲(カバレッジ)を正確に把握できる
- 内部の誤動作やロジックエラーを発見できる
デメリット:
- テストケースが膨大になりやすい
- 入力データに依存する欠陥を見逃す可能性
- 高いプログラミングスキルが必要
10. ホワイトボックステストの技法
| 技法 | 内容 | |
|---|---|---|
| 制御フローテスト | 分岐処理・条件文の網羅 | 全ての分岐を確認することで未実行経路を防ぐ | 
| データフローテスト | 変数の定義・使用・破棄の流れを確認 | 変数の誤使用・未初期化エラーを防ぐ | 
| カバレッジ分析 | 実行率を数値化 | テストの達成度を定量的に評価できる | 
