mcpField
P
pict-test-designer

pict-test-designer

github.com/omkamalテスト・品質102379 回インストール31 週間前に更新
リポジトリ

pict-test-designer について

要件やコードをもとに、PICTでペアワイズテストスイートを設計するスキルです。パラメーター、値、制約、期待結果の整理を支援し、モデルとテストケースをソフトウェアテスト向けにまとめます。

主な機能

  1. 01パラメーターと制約の特定
  2. 02PICTモデルの作成
  3. 03ペアワイズテストケースの生成
  4. 04期待結果の定義
  5. 05テストスイートの表形式化
  6. 06Pythonヘルパースクリプトの利用

活用シーン

  1. 01複数入力を持つ機能のテスト設計
  2. 02設定テストの組み合わせ削減
  3. 03APIやフォームのテストマトリクス作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/omkamal/pypict-claude-skill --skill pict-test-designer

インストール後、Claude Code で/pict-test-designerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
CONTRIBUTING.md
CHANGELOG.md
LICENSE
STRUCTURE.md
PUBLISHING.md
QUICKSTART.md
README.md
.claude-plugin/
plugin.json
marketplace.json
.github/
pull_request_template.md
markdown-link-check-config.json
.github/ISSUE_TEMPLATE/
feature_request.md
bug_report.md
.github/workflows/
ci.yml
examples/
README.md
atm-test-plan.md
gearbox-test-plan.md
atm-specification.md
gearbox-specification.md
references/
pict_syntax.md
examples.md
releases/
README.md
scripts/
README.md
pict_helper.py

詳細

PICT テスト設計

このスキルでは、PICT(ペアワイズ独立組み合わせテスト)を使用して体系的にテストケースを設計できます。要件またはコードを受け取ると、システムを分析してテストパラメーターを特定し、適切な制約を含む PICT モデルを生成し、そのモデルを実行してペアワイズテストケースを作成し、期待される出力とともに結果を整形します。

このスキルを使用するタイミング

次の場合にこのスキルを使用してください:

  • 複数の入力パラメーターを持つ機能、関数、またはシステムのテストケースを設計するとき
  • 組み合わせが多数ある設定向けのテストスイートを作成するとき
  • 最小限のテストケースで包括的なカバレッジを実現したいとき
  • テストシナリオを特定するために要件を分析するとき
  • 複数の条件分岐を持つコードを扱うとき
  • API エンドポイント、ウェブフォーム、またはシステム設定向けのテストマトリックスを作成するとき

ワークフロー

テストを設計するには、次の手順に従ってください。

1. 要件またはコードを分析する

ユーザーの要件またはコードから、次の項目を特定します:

  • パラメーター:入力変数、設定オプション、環境要因
  • 値:各パラメーターで考えられる値(同値分割を使用)
  • 制約:ビジネスルール、技術的な制限、パラメーター間の依存関係
  • 期待される結果:さまざまな組み合わせで想定される動作

分析例:

次の要件を持つログイン関数の場合:

  • ユーザーはユーザー名とパスワードでログインできます
  • 2FA(オン/オフ)に対応します
  • 信頼済みデバイスでログイン状態を記憶します
  • ログイン失敗が 3 回続くとレート制限を適用します

特定されたパラメーター:

  • Credentials:有効、無効
  • TwoFactorAuth:有効、無効
  • RememberMe:チェック済み、未チェック
  • PreviousFailures:0、1、2、3、4
2. PICT モデルを生成する

次の内容を含む PICT モデルを作成します:

  • 明確なパラメーター名
  • 適切に定義された値の集合(同値分割と境界値を使用)
  • 無効な組み合わせに対する制約
  • ビジネスルールを説明するコメント

モデルの構造:

# Parameter definitions
ParameterName: Value1, Value2, Value3

# Constraints (if any)
IF [Parameter1] = "Value" THEN [Parameter2] <> "OtherValue";

次の項目については、references/pict_syntax.md を参照してください:

  • 完全な構文リファレンス
  • 制約の文法と演算子
  • 高度な機能(サブモデル、エイリアス、ネガティブテスト)
  • コマンドラインオプション
  • 詳細な制約パターン

次の項目については、references/examples.md を参照してください:

  • 分野別の実践的な例
  • ソフトウェア関数のテスト例
  • ウェブアプリケーション、API、モバイルアプリのテスト例
  • データベースと設定のテストパターン
  • 認証、リソースアクセス、エラー処理に関する一般的なパターン
3. PICT モデルを実行する

PICT モデルのテキストを生成し、ユーザー向けに整形します。Python コードを直接使ってモデルを処理できます:

# Define parameters and constraints
parameters = {
    "OS": ["Windows", "Linux", "MacOS"],
    "Browser": ["Chrome", "Firefox", "Safari"],
    "Memory": ["4GB", "8GB", "16GB"]
}

constraints = [
    'IF [OS] = "MacOS" THEN [Browser] IN {Safari, Chrome}',
    'IF [Memory] = "4GB" THEN [OS] <> "MacOS"'
]

# Generate model text
model_lines = []
for param_name, values in parameters.items():
    values_str = ", ".join(values)
    model_lines.append(f"{param_name}: {values_str}")

if constraints:
    model_lines.append("")
    for constraint in constraints:
        if not constraint.endswith(';'):
            constraint += ';'
        model_lines.append(constraint)

model_text = "\n".join(model_lines)
print(model_text)

ヘルパースクリプトを使用する場合(任意): Scripts/pict_helper.py スクリプトには、モデルの生成と出力の整形に使えるユーティリティが用意されています:

# Generate model from JSON config
python scripts/pict_helper.py generate config.json

# Format PICT tool output as markdown table
python scripts/pict_helper.py format output.txt

# Parse PICT output to JSON
python scripts/pict_helper.py parse output.txt

実際のテストケースを生成するには、ユーザーは次の手順を実行できます:

  1. PICT モデルをファイルに保存します(例:model.txt)
  2. 次のようなオンライン PICT ツールを使用します:
  3. または、PICT をローカルにインストールします(references/pict_syntax.md を参照)
4. 期待される出力を決定する

生成された各テストケースについて、次の内容に基づいて期待される結果を決定します:

  • ビジネス要件
  • コードのロジック
  • 有効/無効な組み合わせ

各テストケースに対応する期待される出力の一覧を作成します。

5. 完全なテストスイートを整形する

次の内容をユーザーに提示します:

  1. PICT モデル - パラメーターと制約を含む完全なモデル
  2. Markdown テーブル - テスト番号付きのテストケース
  3. 期待される出力 - 各テストケースの期待される結果

出力形式

次の構成で結果を提示します:

## PICT Model

```
# Parameters
Parameter1: Value1, Value2, Value3
Parameter2: ValueA, ValueB

# Constraints
IF [Parameter1] = "Value1" THEN [Parameter2] = "ValueA";
```

## Generated Test Cases

| Test # | Parameter1 | Parameter2 | Expected Output |
| --- | --- | --- | --- |
| 1 | Value1 | ValueA | Success |
| 2 | Value2 | ValueB | Success |
| 3 | Value1 | ValueB | Error: Invalid combination |
...

## Test Case Summary

- Total test cases: N
- Coverage: Pairwise (all 2-way combinations)
- Constraints applied: N

ベストプラクティス

パラメーターの特定

推奨:

  • 説明的な名前を使用します: AuthMethod、UserRole、PaymentType
  • 同値分割を適用します: FileSize: Small, Medium, Large(FileSize: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ではなく)
  • 境界値を含めます: Age: 0, 17, 18, 65, 66
  • エラーテスト用に負の値を追加します: Amount: ~-1, 0, 100, ~999999

避けること:

  • 汎用的な名前: Param1、Value1、V1
  • 分割せずに値を増やしすぎること
  • エッジケースの不足
制約の記述

推奨:

  • 理由を記載します: # Safari only available on MacOS
  • シンプルな状態から始め、段階的に追加します
  • 制約が想定どおりに機能することをテストします

避けること:

  • 制約を厳しくしすぎること(有効な組み合わせを排除しすぎます)
  • 制約が不十分なこと(無効なテストケースが生成されます)
  • 明確な説明のない複雑なネストロジック
期待される出力の定義

具体的に記述します:

  • 「ログインに成功し、ユーザーはダッシュボードにリダイレクトされる」
  • 「HTTP 400: 認証情報が無効です」
  • 「2FA プロンプトが表示される」

曖昧な表現は避けます:

  • 「動作する」
  • 「エラー」
  • 「成功」
スケーラビリティ

大規模なパラメーターセットの場合:

  • 異なる次数の関連パラメーターをグループ化するには、サブモデルを使用します
  • 関連のない機能には、個別のテストスイートを検討します
  • 次数 2(ペアワイズ)から始め、重要な組み合わせでは次数を上げます
  • 一般的に、ペアワイズテストでは全数テストに比べてテストケースを 80~90% 削減できます

よくあるパターン

Web フォームのテスト
parameters = {
    "Name": ["Valid", "Empty", "TooLong"],
    "Email": ["Valid", "Invalid", "Empty"],
    "Password": ["Strong", "Weak", "Empty"],
    "Terms": ["Accepted", "NotAccepted"]
}

constraints = [
    'IF [Terms] = "NotAccepted" THEN [Name] = "Valid"',  # Test validation even if terms not accepted
]
API エンドポイントのテスト
parameters = {
    "HTTPMethod": ["GET", "POST", "PUT", "DELETE"],
    "Authentication": ["Valid", "Invalid", "Missing"],
    "ContentType": ["JSON", "XML", "FormData"],
    "PayloadSize": ["Empty", "Small", "Large"]
}

constraints = [
    'IF [HTTPMethod] = "GET" THEN [PayloadSize] = "Empty"',
    'IF [Authentication] = "Missing" THEN [HTTPMethod] IN {GET, POST}'
]
構成のテスト
parameters = {
    "Environment": ["Dev", "Staging", "Production"],
    "CacheEnabled": ["True", "False"],
    "LogLevel": ["Debug", "Info", "Error"],
    "Database": ["SQLite", "PostgreSQL", "MySQL"]
}

constraints = [
    'IF [Environment] = "Production" THEN [LogLevel] <> "Debug"',
    'IF [Database] = "SQLite" THEN [Environment] = "Dev"'
]

トラブルシューティング

テストケースが生成されない
  • 制約が厳しすぎないか確認します
  • 制約の構文を確認します(; で終わる必要があります)
  • 制約内のパラメーター名が定義と一致していることを確認します([ParameterName] を使用します)
テストケースが多すぎる
  • 高次ではなく、次数 2(ペアワイズ)を使用していることを確認します
  • サブモデルへの分割を検討します
  • パラメーターを独立したテストスイートに分けられるか確認します
出力に無効な組み合わせが含まれる
  • 不足している制約を追加します
  • 制約ロジックが正しいことを確認します
  • NOT または <> 演算子を使用する必要があるか確認します
スクリプトエラー
  • pypict がインストールされていることを確認します: pip install pypict --break-system-packages
  • Python のバージョンを確認します(3.7 以上)
  • モデルの構文が有効であることを確認します

参考資料

  • references/pict_syntax.md - 文法と演算子を含む、PICT 構文の完全なリファレンス
  • references/examples.md - さまざまな分野の包括的な実例
  • scripts/pict_helper.py - モデル生成と出力形式の調整に使う Python ユーティリティ
  • PICT GitHub リポジトリ - PICT の公式ドキュメント
  • pypict ドキュメント - Python バインディングのドキュメント
  • オンライン PICT ツール - Web ベースの PICT ジェネレーター

例

例 1: シンプルな関数のテスト

ユーザーのリクエスト: 「2 つの数値を受け取り、結果を返す除算関数のテストを設計してください。」

分析:

  • パラメーター: 被除数(数値)、除数(数値)
  • 値: 同値分割と境界値を使用します
    • 数値: 負の値、ゼロ、正の値、大きな値
  • 制約: ゼロ除算は無効です
  • 期待される出力: 結果またはエラー

PICT モデル:

Dividend: -10, 0, 10, 1000
Divisor: ~0, -5, 1, 5, 100

IF [Divisor] = "0" THEN [Dividend] = "10";

テストケース:

テスト番号被除数除数期待される出力
1100エラー: ゼロ除算
2-101-10.0
30-50.0
410005200.0
5101000.1
例 2: E コマースのチェックアウト

ユーザーのリクエスト: 「支払い方法、配送オプション、ユーザー種別を含むチェックアウトフローのテストを設計してください。」

分析:

  • 支払い: クレジットカード、PayPal、銀行振込(ユーザー種別によって制限されます)
  • 配送: 通常、速達、翌日
  • ユーザー: ゲスト、登録ユーザー、プレミアム
  • 制約: ゲストは銀行振込を使用できません。プレミアムユーザーは速達が無料です

PICT モデル:

PaymentMethod: CreditCard, PayPal, BankTransfer
ShippingMethod: Standard, Express, Overnight
UserType: Guest, Registered, Premium

IF [UserType] = "Guest" THEN [PaymentMethod] <> "BankTransfer";
IF [UserType] = "Premium" AND [ShippingMethod] = "Express" THEN [PaymentMethod] IN {CreditCard, PayPal};

出力: 有効な支払い方法、配送、ユーザーのすべての組み合わせと、想定される費用および結果を網羅する 12~15 件のテストケース。

コメント