テストの基本概念
テストとは?
ソフトウェアテストとは、品質確保のためにプログラムに意図的に操作を行い、予測される結果と実際の結果を比較する作業です。
テストの目的: バグの発見、品質保証、リスク低減、要件適合性の確認
テストの7原則
テストはバグが存在することを示す
全数テストは不可能
早期テストが効果的
バグの集中(パレートの法則)
殺虫剤パラドックス
テストは状況に依存する
バグがないという誤った認識
テスト計画の要素
テスト範囲と対象
テストアプローチと戦略
スケジュールとマイルストーン
役割と責任
必要なリソースとツール
リスクと対策
テスト技法
ブラックボックステスト
内部構造を考慮せず、外部からの振る舞いのみをテスト
主な技法:
同値分割
境界値分析
デシジョンテーブル
状態遷移
ユースケースベース
ホワイトボックステスト
コードの内部構造や実装に基づいてテスト
主な技法:
命令網羅
分岐網羅
条件網羅
パス網羅
データフロー解析
テストレベル
V字モデル
単体テスト
最小単位の検証
結合テスト
モジュール間連携
システムテスト
全体動作確認
受入テスト
ユーザー要件確認
単体テスト(Unit Test)
個々のコンポーネント(関数・メソッド・クラス)を独立してテスト
特徴:
- 開発者自身が実施することが多い
- 自動化が容易
- スタブやモックを使用
結合テスト(Integration Test)
複数のコンポーネントを組み合わせたときの動作確認
アプローチ:
ビッグバン
トップダウン
ボトムアップ
サンドイッチ
テストドキュメント
テスト計画書
テスト全体の戦略的な計画を記述する文書
目的・範囲・スケジュール
テスト環境・ツール
採用するテスト技法
テスト仕様書
個々のテストケースの詳細な内容を記述
テスト項目・目的
前提条件・手順
期待結果・判定基準
バグ管理
バグライフサイクル
効果的なバグ報告
バグレポートに含めるべき情報:
- タイトル: 簡潔で本質を表す表現
- 重要度/優先度: バグの影響度と修正の緊急性
- 再現手順: 明確かつ詳細なステップ
- 期待される結果: 正常時の挙動
- 実際の結果: 発生した問題の症状
- 環境情報: OS、ブラウザ、バージョンなど
バグの重要度と優先度
重要度 | 説明 |
---|---|
Critical | システム全体が機能しない |
Major | 主要機能に影響あり |
Minor | 小さな問題、回避策あり |
Trivial | 見た目のみの問題など |
テスト自動化
自動化すべきテスト
繰り返し実行するテスト
データ駆動型テスト
回帰テスト
負荷テスト・パフォーマンステスト
主要なテスト自動化ツール
単体テスト:
JUnit
NUnit
pytest
Jest
UI/E2Eテスト:
Selenium
Cypress
Playwright
Appium
APIテスト:
Postman
REST Assured
Karate