0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0188(2025/07/07) 明日から使える PICT 入門ガイド

Last updated at Posted at 2025-07-07

明日から使える PICT 入門ガイド

目的

  • 明日から即実戦投入できるように、Microsoft 製 OSS PICT の概要と使い方を集中解説します。
  • 本稿を読めば「モデルファイル作成 → pict 実行 → シート共有」までひと通り流せます。

1. PICT とは?

  • Pairwise Independent Combinatorial Testing の略。
  • 指定した t-wise(デフォルト 2‑wise)で 全組合せを最小行数に圧縮してくれる CLI ツール。
  • 制約(IF〜THEN など)、重み付け、事前シード固定など現場要件に便利な機能が充実。
  • 追い付きやすい: モデルファイルはシンプルなテキスト、実行は 1 コマンド、生成は数 ms〜数百 ms。

参考 : Microsoft/PICT GitHub レポジトリ, “PICT User Guide” (PDF)


2. インストール & セットアップ

2.1 CLI 本体

# macOS / Linux (Homebrew)
brew install pict

# Windows
choco install pict   # or GitHub Releases の zip を展開

# Python 包 (サーバー用途)
pip install pypict   # pict バイナリ同梱 wheel

2.2 VS Code 拡張(GUI 補助)

  • Marketplace で "VSCode PICT" を検索→インストール。
  • .pict ファイルのシンタックスハイライトとモデル検証が可能。

3. モデルファイルの作り方

# login.pict
OS:        Windows, macOS, Linux
Browser:   Chrome, Firefox, Edge
Lang:      JP, EN

# 無効組合せ除外
IF [OS] = "macOS" THEN [Browser] <> "Edge";
  • 書式 : パラメータ名: 値1, 値2, ... を 1 行ずつ。
  • コメントは #
  • 制約文は SQL ライクで読みやすい。

n‑wise 組合せ数を手計算してみる

以下の 3 パラメータを例に 2‑wise3‑wise の理論組合せ数を求めてみます。

Parameter 値数
OS 3 (Windows / macOS / Linux)
Browser 3 (Chrome / Firefox / Edge)
Language 2 (JP / EN)

2‑wise(ペアワイズ)

  1. ペアの取り出し方は 3C2 = 3 通り。

  2. 各ペアの値直積:

    • OS × Browser → 3 × 3 = 9
    • OS × Language → 3 × 2 = 6
    • Browser × Language → 3 × 2 = 6
  3. 合計 9 + 6 + 6 = 21 ペア

PICT の出力は 21 ペアを およそ 6 行 でカバーします。

3‑wise

  • 取り出しは 3C3 = 1 通り(3 パラメータ全取り)。
  • 値直積は 3 × 3 × 2 = 18 通り

PICT ならこの 18 通りを 12 行前後 に圧縮可能です(モデル順やシードで前後)。

「n」を上げると理論ペア数は指数的に増えるため、実務では 基本 2‑wise+ハイリスク部のみ 3‑wise という運用が多いです。


4. テストケース生成フロー

# 4.1 ペアワイズ生成
pict login.pict > cases.tsv

# 4.2 3‑wise(/o:3) + 統計表示
pict login.pict /o:3 /s
  • /s理論ペア数と生成行数を事前チェック。
  • 出力は タブ区切り TSV。スプレッドシートにドラッグ&ドロップで貼り付け可。

5. Python からの自動活用

5.1 subprocess で直接呼び出し

import csv, subprocess, pathlib

# --- パス設定 ---
model = pathlib.Path('login.pict')
output = pathlib.Path('cases.tsv')

# --- pict 実行 ---
subprocess.run(['pict', str(model)], check=True, stdout=output.open('w'))

# --- 読み込み&pytest 展開 ---
cases = list(csv.DictReader(output.open(), delimiter='\t'))

def idfn(row):
    return f"{row['OS']}-{row['Browser']}-{row['Lang']}"

import pytest
@pytest.mark.parametrize('row', cases, ids=idfn)
def test_login(row):
    # row は辞書型
    ...

5.2 pypict ラッパー使用

from pypict import pict
model_text = """OS: Windows, macOS; Browser: Chrome, Firefox"""
for row in pict(model_text):
    print(row)  # => ['Windows', 'Chrome'] など
  • CI/CD に組み込むなら subprocess で TSV をアーティファクト化するのが簡単。
  • pytest のパラメータ化と相性抜群 → テスト関数は 1 つで済み、ケースは増殖しても保守コスト増えない。

6. 何が効率化できるか?

  • 組合せ爆発の手計算から解放:6 パラメータ・各 4 値なら理論 2‑wise ペア = 180。pict は 10 行前後 で網羅。
  • 仕様変更耐性:モデルファイルを書き換えて再生成するだけ。手修正ゼロ。
  • 再現性確保/r:固定シード で毎回同じ行順 → 差分レビューがクリーン。
  • テスト失敗パターン固定:シード行 (/e:seed.tsv) で不安定ケースを必ず含める。

7. ベストプラクティス & Tips

  • 値は同値分割後の代表値に絞る → pict 生成行を最小化。
  • 業務ルールはすべて制約に落とす → 出力後の手動フィルタリングは禁忌。
  • 3‑wise 以上はリスク基準で:全パラメータを 3‑wise にすると行数が急増。高頻度障害領域だけ別モデルに分割。
  • モデル名 = 機能名 で管理 → Git に置いて PR レビューで仕様も共有。

8. よくあるハマりポイント

症状 原因例 解決策
行数が思ったより多い ネガティブ値 ~ を多用 → 対象値扱い 値を具体化、制約で除外
無効組合せが混ざる 制約不足 or 誤記 /s 出力を読み、IF 文追加
TSV が壊れる モデルにタブ文字混入 値区切りを ,; に統一

9. 参考リンク

  1. Microsoft GitHub – PICT: https://github.com/microsoft/pict
  2. Jacek Czerwonka, “Pairwise Testing in Practice,” IEEE Software, 2009.
  3. Blog: “Pairwise Testing – Why & How” by Hexawise.

おわりに

pict は「少ないテストで広いバグ網を張る」ための武器。モデルファイルさえ書けば明日からでも回せます。まずは 2‑3 パラメータで動かして行数の圧縮率を体感してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?