| name | .claude/skills/boundary-value-analysis/SKILL.md |
| description | 境界値分析と同値分割を専門とするスキル。 📚 リソース参照: このスキルには以下のリソースが含まれています。 必要に応じて該当するリソースを参照してください: - `.claude/skills/boundary-value-analysis/resources/boundary-value-fundamentals.md`: 境界値分析の基本概念と境界値±1の系統的テスト手法の基礎 - `.claude/skills/boundary-value-analysis/resources/combination-strategies.md`: 複数パラメータの組み合わせテスト最適化戦略(ペアワイズ・直交表・全組み合わせ) - `.claude/skills/boundary-value-analysis/resources/edge-cases-catalog.md`: 極端な値・空値・NULL・特殊文字・同時実行・タイムアウト等の実践的エッジケースカタログ - `.claude/skills/boundary-value-analysis/resources/equivalence-partitioning.md`: 入力空間を同じ動作のグループに分割し代表値でテストする同値分割技法と有効・無効クラスの設計 - `.claude/skills/boundary-value-analysis/templates/test-case-design-template.md`: テストケース設計テンプレート - `.claude/skills/boundary-value-analysis/scripts/boundary-test-generator.mjs`: 境界値テストケース生成スクリプト 専門分野: - 境界値分析: 境界値での系統的テスト - 同値分割: 入力空間の効率的な分割 - エッジケース: 極端な値、空値、特殊ケース - テストケース最適化: 最小限のテストで最大のカバレッジ 使用タイミング: - テストケースを設計する時 - 入力の妥当性検証をテストする時 - バグが境界値で発生した時 - テスト数を最適化したい時 Use proactively when designing test cases for validation logic. |
| version | 1.0.0 |
Boundary Value Analysis
概要
境界値分析(BVA)と同値分割(EP)は、効率的なテストケース設計のための 体系的な技法です。最小限のテストで最大のバグ検出率を実現します。
核心原則:
- バグは境界値で発生しやすい
- 同値クラス内の値は同じ動作をする
- 効率的なテストは戦略的に設計する
対象ユーザー:
- ユニットテスター(.claude/agents/unit-tester.md)
- 品質エンジニア(@quality-engineer)
- ビジネスロジック実装者(.claude/agents/logic-dev.md)
リソース構造
boundary-value-analysis/
├── SKILL.md # 本ファイル
├── resources/
│ ├── boundary-value-fundamentals.md # 境界値分析の基礎
│ ├── equivalence-partitioning.md # 同値分割
│ ├── edge-cases-catalog.md # エッジケースカタログ
│ └── combination-strategies.md # 組み合わせ戦略
├── scripts/
│ └── boundary-test-generator.mjs # 境界値テストケース生成
└── templates/
└── test-case-design-template.md # テストケース設計テンプレート
コマンドリファレンス
リソース読み取り
# 境界値分析の基礎
cat .claude/skills/boundary-value-analysis/resources/boundary-value-fundamentals.md
# 同値分割
cat .claude/skills/boundary-value-analysis/resources/equivalence-partitioning.md
# エッジケースカタログ
cat .claude/skills/boundary-value-analysis/resources/edge-cases-catalog.md
# 組み合わせ戦略
cat .claude/skills/boundary-value-analysis/resources/combination-strategies.md
スクリプト実行
# 境界値テストケース生成
# 仕様から境界値テストケースとVitestテンプレートを自動生成
# 数値範囲
node .claude/skills/boundary-value-analysis/scripts/boundary-test-generator.mjs --range 1 100
# 文字列長
node .claude/skills/boundary-value-analysis/scripts/boundary-test-generator.mjs --type string --maxLength 255
# 配列サイズ
node .claude/skills/boundary-value-analysis/scripts/boundary-test-generator.mjs --type array --maxSize 10
# 日付範囲
node .claude/skills/boundary-value-analysis/scripts/boundary-test-generator.mjs --type date --from 2024-01-01 --to 2024-12-31
クイックリファレンス
境界値分析の基本
範囲: 1 ≤ x ≤ 100
テストすべき境界値:
├─ 0 (下限-1: 無効)
├─ 1 (下限: 有効)
├─ 2 (下限+1: 有効)
├─ 99 (上限-1: 有効)
├─ 100 (上限: 有効)
└─ 101 (上限+1: 無効)
詳細: resources/boundary-value-fundamentals.md
同値分割の基本
入力: 年齢(0-150の整数)
同値クラス:
├─ 無効: 負の数(-∞ ~ -1)
├─ 有効: 子供(0 ~ 17)
├─ 有効: 成人(18 ~ 64)
├─ 有効: 高齢者(65 ~ 150)
└─ 無効: 範囲外(151 ~ +∞)
詳細: resources/equivalence-partitioning.md
テストケース設計フロー
ステップ1: 入力の特定
対象: validateAge(age: number): boolean
入力:
- age: 数値(整数を期待)
- 有効範囲: 0 ~ 150
ステップ2: 同値クラスの定義
同値クラス:
EC1: age < 0 → 無効
EC2: 0 ≤ age ≤ 150 → 有効
EC3: age > 150 → 無効
EC4: 非数値 → 無効
ステップ3: 境界値の特定
境界値:
BV1: -1 (EC1の境界)
BV2: 0 (EC1/EC2の境界)
BV3: 150 (EC2/EC3の境界)
BV4: 151 (EC3の境界)
ステップ4: テストケースの生成
it.each([
// 同値クラス + 境界値
{ input: -1, expected: false, desc: "下限未満" },
{ input: 0, expected: true, desc: "下限" },
{ input: 75, expected: true, desc: "中央値" },
{ input: 150, expected: true, desc: "上限" },
{ input: 151, expected: false, desc: "上限超過" },
{ input: NaN, expected: false, desc: "非数値" },
])(
"validateAge($input) should return $expected ($desc)",
({ input, expected }) => {
expect(validateAge(input)).toBe(expected);
},
);
よくある境界値パターン
数値範囲
| パターン | テスト値 |
|---|---|
min ≤ x ≤ max |
min-1, min, max, max+1 |
min < x < max |
min, min+1, max-1, max |
x ≥ min |
min-1, min, min+1 |
x ≤ max |
max-1, max, max+1 |
文字列長
| パターン | テスト値 |
|---|---|
len = n |
n-1, n, n+1 |
len ≤ max |
0, 1, max-1, max, max+1 |
min ≤ len ≤ max |
min-1, min, max, max+1 |
配列サイズ
| パターン | テスト値 |
|---|---|
| 空配列許可 | [], [1], [1,2,...n] |
| 空配列禁止 | [], [1], [1,2] |
| 最大n個 | [n-1個], [n個], [n+1個] |
ベストプラクティス
すべきこと
境界を明確にする:
- 仕様から境界値を特定
- 暗黙の境界も考慮
同値クラスを網羅:
- 有効クラスから最低1つ
- 無効クラスから最低1つ
特殊値をテスト:
- null, undefined, NaN
- 空文字列、空配列
- 最大値、最小値
避けるべきこと
ランダムな値のみ:
- 境界を見逃す
- 再現性がない
境界のみ:
- 同値クラスの代表値も必要
- 中央値のテストも重要
過度なテスト:
- 同値クラス内で複数テストは冗長
- 効率的なテスト数を維持
選択ガイド
境界値分析を選ぶ場面
- 数値範囲の検証
- 文字列長の制限
- 配列サイズの制限
- 日付範囲のチェック
同値分割を選ぶ場面
- 入力タイプによる分岐
- カテゴリ分類
- 複数の有効パターン
両方を組み合わせる場面
- 複雑な検証ロジック
- 複数条件の組み合わせ
- 高品質なテストが必要
関連スキル
- .claude/skills/tdd-principles/SKILL.md (
.claude/skills/tdd-principles/SKILL.md): TDDの基本原則 - .claude/skills/test-doubles/SKILL.md (
.claude/skills/test-doubles/SKILL.md): テストダブル - .claude/skills/test-naming-conventions/SKILL.md (
.claude/skills/test-naming-conventions/SKILL.md): テスト命名規約 - .claude/skills/vitest-advanced/SKILL.md (
.claude/skills/vitest-advanced/SKILL.md): Vitest高度な使い方
参考文献
- 『ソフトウェアテストの技法』 Boris Beizer著
- 『テスト技法』 Lee Copeland著
- ISTQB Foundation Level Syllabus
使用上の注意
このスキルが得意なこと
- 境界値分析(2値、3値、堅牢性テスト)の適用
- 同値分割によるテストケース効率化
- エッジケースカタログからの網羅的テスト設計
- ペアワイズテスト等の組み合わせ戦略
このスキルが行わないこと
- テストコードの具体的な実装(→ .claude/skills/vitest-advanced/SKILL.md)
- テストダブルの選択(→ .claude/skills/test-doubles/SKILL.md)
- テスト命名の詳細(→ .claude/skills/test-naming-conventions/SKILL.md)
- パフォーマンステスト/負荷テスト
変更履歴
| バージョン | 日付 | 変更内容 |
|---|---|---|
| 1.0.0 | 2025-11-26 | 初版作成 - 境界値分析と同値分割 |