🔍 テストの基本概念

テストとは?

ソフトウェアテストとは、品質確保のためにプログラムに意図的に操作を行い、予測される結果と実際の結果を比較する作業です。

テストの目的: バグの発見、品質保証、リスク低減、要件適合性の確認

テストの7原則

1
テストはバグが存在することを示す
2
全数テストは不可能
3
早期テストが効果的
4
バグの集中(パレートの法則)
5
殺虫剤パラドックス
6
テストは状況に依存する
7
バグがないという誤った認識

テスト計画の要素

📋
テスト範囲と対象
🔄
テストアプローチと戦略
📅
スケジュールとマイルストーン
👥
役割と責任
🛠️
必要なリソースとツール
⚠️
リスクと対策

📊 テスト技法

ブラックボックステスト

内部構造を考慮せず、外部からの振る舞いのみをテスト

主な技法: 同値分割 境界値分析 デシジョンテーブル 状態遷移 ユースケースベース

ホワイトボックステスト

コードの内部構造や実装に基づいてテスト

主な技法: 命令網羅 分岐網羅 条件網羅 パス網羅 データフロー解析

🔄 テストレベル

V字モデル

要件分析 システム設計 詳細設計 受入テスト システムテスト 結合テスト 単体テスト
単体テスト
最小単位の検証
結合テスト
モジュール間連携
システムテスト
全体動作確認
受入テスト
ユーザー要件確認

単体テスト(Unit Test)

個々のコンポーネント(関数・メソッド・クラス)を独立してテスト

特徴:
  • 開発者自身が実施することが多い
  • 自動化が容易
  • スタブやモックを使用

結合テスト(Integration Test)

複数のコンポーネントを組み合わせたときの動作確認

アプローチ:
ビッグバン トップダウン ボトムアップ サンドイッチ

📝 テストドキュメント

テスト計画書

テスト全体の戦略的な計画を記述する文書

📄
目的・範囲・スケジュール
📄
テスト環境・ツール
📄
採用するテスト技法

テスト仕様書

個々のテストケースの詳細な内容を記述

📄
テスト項目・目的
📄
前提条件・手順
📄
期待結果・判定基準

🐞 バグ管理

バグライフサイクル

New Open Rejected Fixed Closed

効果的なバグ報告

バグレポートに含めるべき情報:
  • タイトル: 簡潔で本質を表す表現
  • 重要度/優先度: バグの影響度と修正の緊急性
  • 再現手順: 明確かつ詳細なステップ
  • 期待される結果: 正常時の挙動
  • 実際の結果: 発生した問題の症状
  • 環境情報: OS、ブラウザ、バージョンなど

バグの重要度と優先度

重要度 説明
Critical システム全体が機能しない
Major 主要機能に影響あり
Minor 小さな問題、回避策あり
Trivial 見た目のみの問題など

🛠️ テスト自動化

自動化すべきテスト

繰り返し実行するテスト
データ駆動型テスト
回帰テスト
負荷テスト・パフォーマンステスト

主要なテスト自動化ツール

単体テスト:
JUnit NUnit pytest Jest
UI/E2Eテスト:
Selenium Cypress Playwright Appium
APIテスト:
Postman REST Assured Karate

テスト自動化の成熟度

初級 30%
中級 60%
上級 85%
マスター 100%