mcpField
S
spec-probes

spec-probes

github.com/mdsmithaustinテスト・品質8146 回インストール今日更新
リポジトリ

spec-probes について

実装前に要件の不足を確認し、エッジケースや意図しない結果を洗い出すための開発者向けスキルです。データ形状に応じたエッジ検査と禁止事項の検査を行い、各項目の状態を記録します。

主な機能

  1. 01データ形状による要件の分類
  2. 02該当する境界値やエッジケースの検査
  3. 03未禁止の望ましくない結果の特定
  4. 04各項目の解決・却下・未解決の記録
  5. 05網羅状況とバックストップ数の集計

活用シーン

  1. 01実装前の要件レビュー
  2. 02境界入力に関する仕様不足の発見
  3. 03機能の望ましくない結果の確認
  4. 04未解決の仕様上の課題の記録

インストール

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

$npx skills add https://github.com/mdsmithaustin/pstack --skill spec-probes

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

詳細

仕様のプローブ

検証ツールが確認するのは、存在するアサーションだけです。仕様に記載のない境界ケースについては、確信を持って誤った判断を下します。解決策は、より優れた検証ツールではなく、仕様の完全性です。コードを書く前に、各要件に対して次の2つのパスをこの順序で実行してください。

パス 1:境界プローブ

各要件のデータ形状を numeric-range、collection、text、stateful、io に分類します。その形状と交差するカテゴリだけを取り上げます。純粋なテキスト要件に、オーバーフローについて尋ねることはありません。分類体系を意図的に限定しています。著者が確認しきれる8つのカテゴリのほうが、誰も最後まで確認できない30のカテゴリより優れています。

カテゴリ形状確認事項
境界値numeric-range各最小値、最大値、しきい値ちょうど、およびその前後1ステップでは、どうなりますか?
隣接collection2つの要素が完全に等しい、またはちょうど接しているとき、それらはマージされますか、衝突しますか、それとも別々のままですか?
空/退化ケースcollection, text空、単一要素、または null の入力に対する結果は何ですか?
エンコーディングtext長さと等価性は、バイト、コードポイント、書記素クラスター、正規化形式のどれに基づいて判定しますか?
順序/安定性collection要素が等しいと判定された場合、出力順序は仕様で定められ、安定していますか?
精度/オーバーフローnumeric-range丸め、タイブレーク、精度損失、オーバーフローはどこで発生する可能性があり、正確な契約は何ですか? half-up と half-even、floor と truncate のどちらですか?
冪等性stateful同じ入力に対してこれを2回実行した場合、どうなりますか?
並行性/効果の順序stateful, io中断された場合や並列実行された場合、何が保証されますか?

該当する形状がない文章上の要件には、項目を何も出さないのではなく、「未分類、手動で確認」というソフトな項目を1つ出します。

これによって検出できる欠陥の例:「重複する区間をマージする」だけでは、重なるのではなく接している [1,2] と [2,3] の扱いは決まりません。「最も近い整数に四捨五入する」だけでは、2.5 を2に丸める half-even の扱いが明示されません。「N文字に切り詰める」だけでは、文字がバイト、コードユニット、コードポイント、書記素のどれを指すのかが定まりません。

パス 2:禁止事項プローブ

境界形状からは、「リマインダーでユーザーを責めてはならない」といった事項を見つけられません。要件ごとに、**この機能が、著者の望まない形に気づかれないまま変質するとしたら、何が起こり得ますか? それを仕様は禁じていますか?**と問いかけます。まずは幅広く洗い出してください。要件ごとに候補を10個挙げるのが目安です。

次に、精度を高めるためのパスを1回行います。

  • 除外する:一般的なエンジニアリング上の事項。入力を変更してはならない、空入力で例外を投げてはならない、ハンドルをリークしてはならない、など。これらはパス1またはコードレビューで扱います。
  • 残す:価値観、公平性、プライバシー、透明性、安全性に関する事項。責めるような表現を使ってはならない、保護対象の属性を代理変数として使ってはならない、生の PII を平文で保存してはならない、など。
  • 独自に追加せず、参照する:専用ツールがすでに担当している事項(インジェクション、パストラバーサル、データ保持法、一般的なバイアスの原則など)。セキュリティまたはコンプライアンスの手順への手掛かりを1つ記したら、それ以上は続けません。

機能ごとの独自項目は2~3個が通常の成果です。純粋なユーティリティでは0個となり、それが適切な答えです。したがって、空でないリストには必ず意味のある情報が含まれます。

挙げた項目をすべて解決する

各項目は、次のいずれか1つの状態で終わらせます。

  • 解決済み:受け入れ基準に答えが記載されている(explicit。通常のテストで確認する)。または、完全には記述できないと分かっている境界ケースの代わりとして、保留テストもしくはプロパティベーステストを用意する(backstop)。または、テストではなく人間の判断が必要な禁止事項に対して judgment を付ける。
  • 却下:理由を付けます。「該当なし。入力は有界な列挙型であり、境界は存在しない」は有効ですが、何も記さずに済ませることはできません。その理由が監査証跡になります。
  • 未解決:明示的なギャップとして引き継ぎ、計画で必ず明らかにします。黙って破棄してはなりません。

backstop と judgment のタグは、仕様自体に記載してください。後でレビューする人は、それらの項目を目視確認で通過させず、判断を保留します。タグがなければ、レビューする人には自分の見落としに気づけません。

回答:要件ごとに、挙げた項目とその状態を示してください。続いて、適用可能、解決済み、未解決の件数、および backstop または judgment が付いた件数を含むカバレッジ数を示してください。

コメント