🧪 テスト開発とは?
「テスト開発」は、ソフトウェアやシステムが設計通りに正しく動作するかを確認し、品質を保証するための一連のプロセスです。早期にバグを発見し、修正コストを抑え、ユーザー満足度と信頼性を高めます。
概要
テスト開発の重要性は次の通りです:
- 品質保証: 不具合の少ない製品を提供し、信頼を獲得。
- バグの早期発見: 開発初期での検出により修正コストを削減。
- ユーザー満足度向上: 安定した体験が継続的な利用につながる。
- 信頼性向上: 継続的テストでシステム全体の信頼性を高める。
🧊 テストレベルの全体像(テストピラミッド)
単体テスト
関数・クラスなど最小単位を対象。高速・安定・数が多いのが理想。
結合テスト
モジュール間の連携・インターフェースを検証。I/O境界の異常系も重視。
システムテスト
要件通りにシステム全体が動くかを確認。E2E・回帰テストを含む。
受け入れテスト
ユーザー観点の最終確認。受入基準・シナリオに基づいて評価。
基本
テスト駆動開発(TDD)は「失敗するテスト → 実装 → リファクタリング」の短いサイクルで進めます。
// sum.js
export function sum(a, b) { return a + b; }
// sum.test.js
import { sum } from "./sum";
test("adds 1 + 2 to equal 3", () => {
expect(sum(1, 2)).toBe(3);
});
// 実行例(npm)
// npm i -D jest
// npx jest
🧰 モック/スタブ/フェイクの使い分け
- モック: 呼び出し回数や引数など相互作用を検証。
- スタブ: 事前に決めた戻り値を返す簡易実装。
- フェイク: 軽量な代替(例:インメモリDB)。
基礎
テストケース設計
- 同値分割/境界値分析
- 決定表・状態遷移テスト
- 組合せテスト(例: Pairwise)
- 非機能(性能・セキュリティ・アクセシビリティ)
小さなインブラウザTDDデモ
以下のミニテストランナーで、関数 isLeap をテストできます。
// テストエリア
assert(isLeap(2000) === true, "2000はうるう年");
assert(isLeap(1900) === false, "1900はうるう年ではない");
assert(isLeap(2024) === true, "2024はうるう年");
assert(isLeap(2025) === false, "2025はうるう年ではない");
最新情報
このセクションにはチーム内ニュースやリリースノートを追記できます(例:CI設定の更新、テストポリシー改訂)。
-
CIでテストの並列実行を有効化
E2E以外のJobを並列化し、パイプライン所要時間を40%短縮。
-
コードカバレッジ閾値を80%に引き上げ
失敗時はPRに自動コメント。例外はテックリード承認制。
応用
CI/CDとの統合
# GitHub Actions例(Jest + Coverage)
name: test
on: [push, pull_request]
jobs:
unit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: "22" }
- run: npm ci
- run: npm test -- --coverage --ci
- name: アーティファクト保存
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage
テストデータ戦略
- Factory/Fixtureの標準化(Seedデータ、ランダム生成の上限)
- テストアイソレーション(DBリセット、トランザクション)
- 外部APIはモックし、E2E環境で最小限の統合検証
パフォーマンステスト(例)
// k6を使ったHTTPロードテストのスケッチ
import http from 'k6/http';
import { sleep } from 'k6';
export const options = { vus: 50, duration: '30s' };
export default function () {
http.get('https://example.com/health');
sleep(1);
}
発展
- プロパティベーステスト(QuickCheck系・Hypothesis)
- コンポーネント視覚回帰(Storybook + 画像差分)
- 契約テスト(Consumer Driven Contracts)
- ミューテーションテスト(品質の高いアサーションを促す)
🧪 簡易ヘルスチェックAPI(PHP)
{"ok":true,"ts":1776197029}