qe-test-design-techniques について
QA エンジニアやコーディングエージェント向けのテスト設計スキルです。境界値や組み合わせなど、シナリオに応じた手法で冗長性を抑えたテストケース設計を案内します。
主な機能
- 01境界値分析
- 02同値分割
- 03ビジネスルール向け決定表
- 04状態遷移のモデル化
- 05ペアワイズ・全組み合わせテスト
活用シーン
- 01数値入力の境界テスト設計
- 02複数条件のルール検証
- 03ステートフルなワークフローのテスト
- 04多数のパラメーター組み合わせの削減
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ proffesor-for-testing/ agentic-qe --skill qe-test-design-techniquesインストール後、Claude Code で/qe-test-design-techniquesを入力して読み込まれたか確認します。
詳細
テスト設計技法
<default_to_action> テストケースを体系的に設計するときは、次の手順に従います。
- 境界値分析(最小値、最大値、境界をテスト)を適用します
- 同値分割(各分割から1つずつテスト)を使用します
- 決定表(複雑なビジネスルール向け)を作成します
- 状態遷移(状態を持つ振る舞い)をモデル化します
- ペアワイズテストで組み合わせを絞り込みます
すばやく選ぶには:
- 数値範囲 → BVA + EP
- 複数の条件 → 決定表
- ワークフロー → 状態遷移
- 多数のパラメーター → ペアワイズテスト
成功の重要な要因:
- 体系的な設計により、少ないテストでより多くのバグを発見できます
- ランダムテストは非効率です
- 40年以上にわたる研究により、これらの技法の有効性が裏付けられています </default_to_action>
クイックリファレンスカード
使用する場面
- 新しいテストスイートを設計するとき
- 既存のテストを最適化するとき
- 複雑なビジネスルールを扱うとき
- テストの重複を減らすとき
技法の選択ガイド
| シナリオ | 技法 |
|---|---|
| 数値入力の範囲 | BVA + EP |
| 複数の条件 | 決定表 |
| 状態を持つワークフロー | 状態遷移 |
| 多数のパラメーターの組み合わせ | ペアワイズ |
| すべての組み合わせが重要 | 全組み合わせ |
境界値分析(BVA)
原則: バグは境界に集中します。
境界でテストします:
- 有効な最小値
- 最小値のすぐ下(無効)
- 最小値のすぐ上(有効)
- 有効な最大値
- 最大値のすぐ上(無効)
// Age field: 18-120 valid
const boundaryTests = [
{ input: 17, expected: 'invalid' }, // Below min
{ input: 18, expected: 'valid' }, // Min boundary
{ input: 19, expected: 'valid' }, // Above min
{ input: 119, expected: 'valid' }, // Below max
{ input: 120, expected: 'valid' }, // Max boundary
{ input: 121, expected: 'invalid' } // Above max
];
同値分割(EP)
原則: 同値クラスごとに1つのテストを実施します。
// Discount rules:
// 1-10: No discount
// 11-100: 10% discount
// 101+: 20% discount
const partitionTests = [
{ quantity: -1, expected: 'invalid' }, // Invalid partition
{ quantity: 5, expected: 0 }, // Partition 1: 1-10
{ quantity: 50, expected: 0.10 }, // Partition 2: 11-100
{ quantity: 200, expected: 0.20 } // Partition 3: 101+
];
// 4 tests cover all behavior (vs 200+ if testing every value)
決定表
用途: 複数の条件を含む複雑なビジネスルールに使用します。
Loan Approval Rules:
┌──────────────┬───────┬───────┬───────┬───────┬───────┐
│ Conditions │ R1 │ R2 │ R3 │ R4 │ R5 │
├──────────────┼───────┼───────┼───────┼───────┼───────┤
│ Age ≥ 18 │ Yes │ Yes │ Yes │ No │ Yes │
│ Credit ≥ 700 │ Yes │ Yes │ No │ Yes │ No │
│ Income ≥ 50k │ Yes │ No │ Yes │ Yes │ Yes │
├──────────────┼───────┼───────┼───────┼───────┼───────┤
│ Result │Approve│Approve│Reject │Reject │Reject │
└──────────────┴───────┴───────┴───────┴───────┴───────┘
// 5 tests cover all decision combinations
状態遷移テスト
状態の変化をモデル化します:
States: Logged Out → Logged In → Premium → Suspended
Valid Transitions:
- Login: Logged Out → Logged In
- Upgrade: Logged In → Premium
- Payment Fail: Premium → Suspended
- Logout: Any → Logged Out
Invalid Transitions to Test:
- Logged Out → Premium (should reject)
- Suspended → Premium (should reject)
test('cannot upgrade without login', async () => {
const result = await user.upgrade(); // While logged out
expect(result.error).toBe('Login required');
});
ペアワイズ(組み合わせ)テスト
問題点: すべての組み合わせを考慮すると、組み合わせ数が指数関数的に増加します。
// Parameters:
// Browser: Chrome, Firefox, Safari (3)
// OS: Windows, Mac, Linux (3)
// Screen: Desktop, Tablet, Mobile (3)
// All combinations: 3 × 3 × 3 = 27 tests
// Pairwise: 9 tests cover all pairs
const pairwiseTests = [
{ browser: 'Chrome', os: 'Windows', screen: 'Desktop' },
{ browser: 'Chrome', os: 'Mac', screen: 'Tablet' },
{ browser: 'Chrome', os: 'Linux', screen: 'Mobile' },
{ browser: 'Firefox', os: 'Windows', screen: 'Tablet' },
{ browser: 'Firefox', os: 'Mac', screen: 'Mobile' },
{ browser: 'Firefox', os: 'Linux', screen: 'Desktop' },
{ browser: 'Safari', os: 'Windows', screen: 'Mobile' },
{ browser: 'Safari', os: 'Mac', screen: 'Desktop' },
{ browser: 'Safari', os: 'Linux', screen: 'Tablet' }
];
// Each pair appears at least once
エージェント主導のテスト設計
// Auto-generate BVA tests
await Task("Generate BVA Tests", {
field: 'age',
dataType: 'integer',
constraints: { min: 18, max: 120 }
}, "qe-test-generator");
// Returns: 6 boundary test cases
// Auto-generate pairwise tests
await Task("Generate Pairwise Tests", {
parameters: {
browser: ['Chrome', 'Firefox', 'Safari'],
os: ['Windows', 'Mac', 'Linux'],
screen: ['Desktop', 'Tablet', 'Mobile']
}
}, "qe-test-generator");
// Returns: 9-12 tests (vs 27 full combination)
エージェント連携のヒント
メモリの名前空間
aqe/test-design/
├── bva-analysis/* - Boundary value tests
├── partitions/* - Equivalence partitions
├── decision-tables/* - Decision table tests
└── pairwise/* - Combinatorial reduction
フリートの連携
const designFleet = await FleetManager.coordinate({
strategy: 'systematic-test-design',
agents: [
'qe-test-generator', // Apply design techniques
'qe-coverage-analyzer', // Analyze coverage
'qe-quality-analyzer' // Assess test quality
],
topology: 'sequential'
});
関連スキル
- agentic-quality-engineering - エージェント主導のテスト
- risk-based-testing - リスクに基づく優先順位付け
- mutation-testing - テストの有効性を検証
覚えておくこと
体系的な設計 > ランダムテスト。 40年以上にわたる研究により、アドホックなアプローチよりも、これらの技法のほうが少ないテストで多くのバグを発見できることが示されています。
技法を組み合わせて網羅性を高めましょう。 境界にはBVA、分割にはEP、ルールには決定表、組み合わせにはペアワイズを使用します。
エージェントを使う場合: qe-test-generator がこれらの技法を自動的に適用し、網羅性を最大化し、重複を最小限に抑えた最適なテストスイートを生成します。エージェントはコード分析から境界、分割、組み合わせを特定します。
コメント
Markdown 対応