ソフトウェアテスト技法まとめ【初心者〜実務向け】


ソフトウェアテストを体系的に理解し、実務に活かすためのまとめです。テスト粒度から代表的な技法、テスト自動化までを網羅しています。

参考書籍

https://www.amazon.co.jp/%E3%80%90%E3%81%93%E3%81%AE1%E5%86%8A%E3%81%A7%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8B%E3%80%91-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82-%E7%AC%AC2%E7%89%88-%E5%B8%83%E6%96%BD/dp/481560875X/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=36SUIH0L2GUNN&dib=eyJ2IjoiMSJ9.yRAy0Q4EczA_gB2UpZbuOKU3yMMCR-EhnjCEdCtXpKc_yxHSrc_WhdEst1lgqt3xkkHNwMLfxvP45WvFAGj1HjzaSwJ8aIxlNro4xGgFjzUoWHtRKO9q145FGqwSppjOyl4U5hapvJKFu3WyyS1tyjCprReska7YCpXlt-hGgY4rfszaznNM3OgmUh1nFznwVYXv93lFz-Fix92xZIgU7AY-nI_zIJrh_alSJ7GCOEkbOEB2sh7p--7ECzR4zpVRnbfiFcFRy99oNIKBJVgtM2EwKADMFCIl1amqXVM1LRk.jf0xKms41GFtWsy5XmnlFgM06vE5ABOfZjGcUk3Zeus&dib_tag=se&keywords=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8&qid=1746490603&sprefix=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%2Caps%2C168&sr=8-1

https://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E6%8A%80%E6%B3%95-%E3%83%AA%E3%83%BC%E3%83%BB%E3%82%B3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%B3%E3%83%89/dp/4822282511/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=218LGNOE7W8A2&dib=eyJ2IjoiMSJ9.IvpEw67osaH9yMs1ImSp29IM8azW_M4KhX-bnx6uefX6oZDBhf2rTtmGyJloDzYCSeNMpS3MZrX-FEfS16Xx27OpQ7mT-AMiPtro3vZ-cN6B0edAFtrRikPPvlDUhvXLxvmZwl7jpEGSEpbBQl-gb9uqA4oTHHaYN90j4dVZE-j6dkkKmPQqO4Vr99DIOJN7iRQ-FOaTaolHt8hMtGrUnccWucD0xvx2e5JceGkHG6ove1y_ZeNACq2SAbI2jl4MKwkJ5XWi77ma6gam5ymNr2ELammD2QhJwGGa5mlWnlw.ubppQYvsEIIphtv2RTxokrUrKB6jw-79ssOtmWFWmwE&dib_tag=se&keywords=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E6%8A%80%E6%B3%95&qid=1746490665&sprefix=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E6%8A%80%E6%B3%95%2Caps%2C160&sr=8-1

---

## 🧪 ソフトウェアテストとは

ソフトウェアにバグや仕様漏れがないかを**計画的に検出する活動**です。

- 品質の保証
- 欠陥の検出
- リスクの軽減
- ユーザー信頼の獲得

---

## 🔹 テストの粒度（レベル）

| テストレベル | 説明 | 担当者 | 目的 |
|--------------|------|--------|------|
| 単体テスト（Unit Test） | 関数・クラスなど最小単位のテスト | 開発者 | 処理単位の正しさを確認 |
| 結合テスト（Integration Test） | 複数モジュールの組み合わせを検証 | 開発者/QA | インターフェースの整合性 |
| 総合テスト（System Test） | システム全体の振る舞いを検証 | QA | 要件通りに動くか |
| 受入テスト（Acceptance Test） | ユーザー視点で最終確認 | 顧客/QA | 実業務で使えるかどうか |

---

## 🔍 ホワイトボックス vs ブラックボックステスト

| 観点 | ホワイトボックステスト | ブラックボックステスト |
|------|--------------------------|--------------------------|
| 対象 | 内部構造 | 外部仕様（入力と出力） |
| 使用者 | 開発者 | テスト担当者、QA |
| 主な技法 | 命令網羅、条件網羅、データフローなど | 同値分割、境界値、状態遷移など |

---

## 🧠 ホワイトボックステスト技法

### ◾ 制御フローテスト
- **命令網羅**：全ての命令を少なくとも1回通る
- **分岐網羅**：すべての条件分岐のtrue/falseを通る
- **条件網羅**：if文などの各条件のtrue/falseを通す

### ◾ データフローテスト
- 変数が定義（定義済み）されたあと、使用されるまでの**データの流れ**を検証

---

## 🧪 ブラックボックステスト技法

### ◾ 同値クラステスト（Equivalence Partitioning）
- 入力値を**正常/異常グループに分けて**、代表値でテスト

### ◾ 境界値分析（Boundary Value Analysis）
- 境界付近の値（0, 1, maxなど）を重点的にテスト

### ◾ デシジョンテーブルテスト（Decision Table Testing）
- 条件と結果の組み合わせを**表形式で網羅的にテスト**

### ◾ ペア構成テスト（PairWise Testing）
- **2つの項目のすべての組み合わせ**をカバーするようにテストケースを生成（全パターンより効率的）

### ◾ 状態遷移テスト（State Transition Testing）
- 状態とイベントの変化を**状態遷移図**で表し、網羅的にテスト

---

## 🧭 テスト技法の選び方（実践ガイド）

| シーン | 推奨技法 |
|--------|-----------|
| 単体の処理を検証したい | ホワイトボックス（命令網羅、分岐網羅） |
| 入力値のパターンが多い | 同値クラステスト、境界値分析 |
| 複雑な業務ロジックを整理したい | デシジョンテーブルテスト |
| パラメータの組合せが多い | ペア構成テスト（PairWise） |
| 状態によって動作が異なる | 状態遷移テスト |

---

## 🤖 テスト自動化について

### ◾ 目的
- テストの繰り返し実行を効率化
- 品質の安定化
- CI/CDパイプラインとの連携

### ◾ 自動化のレイヤーとツール例

| テスト種類 | 対象 | 代表的ツール |
|------------|------|----------------|
| ユニットテスト | 関数・モジュール | JUnit, Pytest, Jest |
| 結合/APIテスト | モジュール連携、API | SuperTest, Postman |
| E2Eテスト | UI全体の流れ | Selenium, Cypress, Playwright |
| 静的解析 | コード品質 | ESLint, SonarQube |
| CI/CD連携 | 自動実行 | GitHub Actions, CircleCI |

---

## ✅ まとめ

- テストは「粒度」「視点」「技法」を組み合わせて設計するのがベスト
- **効率よく不具合を見つける技法選び**がカギ
- テスト自動化で継続的な品質確保を