[ contents ]
ガイド

良い仕様の作成

あなたはめったに仕様を白紙から作成しません。プレーンテキストで変更を説明し、/rasen:propose は要件とシナリオをドラフトし、次にそれを良いものにします。このページはその最後の部分についてです — 「良い」とはどのように見えるか、および AI をそれに向けてどのように操縦するか。

これは 変更のレビュー のコンパニオンです:レビューはドラフトの弱いスポットをキャッチしており、作成は強いものがどのように構成されているかを知ることです。

仕様はコードではなく動作です

仕様はあなたのシステムが行うことを言い、コード構築方法ではなく、誰でもチェックできる用語で。それは要件(動作ステートメント)とシナリオ(それらを証明する具体的な例)で構成されています。

### Requirement: Session Timeout
The system SHALL expire a session after 30 minutes of inactivity.

#### Scenario: Idle timeout
- GIVEN an authenticated session
- WHEN 30 minutes pass with no activity
- THEN the session is invalidated and the user must re-authenticate

方法 — キュー、ライブラリ、テーブルスキーマ — を design.md またはコードに保ちます。動作と実装が 1 つの要件に混合されると、要件はテスト可能であることを停止し、コードが変更された瞬間に古い状態になり始めます。

良い要件の内容

良い要件は 1 つの動作です。他の誰かがテストするために渡すほどに単純に述べられています。

  • 1 ステートメント、1 つの SHALL/MUST 要件に 3 つの「そしてまた」句がある場合、それは実際には 3 つの要件です。分割。

  • 観察可能。 コード外の誰かが保持するかどうかを判断できるはずです。「システムは アップロードが 10 MB を超える場合はエラーバナーを表示しなければならない」は観察可能です。「システムは 大きなアップロードをグレースフルに処理しなければならない」ではなく。

  • 正しい強度。 Rasen は RFC 2119 キーワードを使用しており、異なるものを意味します:

    キーワード 意味
    MUST / SHALL ハード要件。交渉不可。
    SHOULD 強い推奨事項、正当な例外の余地あり。
    MAY 真にオプション。

    デフォルトで MUST/SHALL に到達します。SHOULD を使用するのは、あなたが本当に「正当な理由がない限り」を意味する場合のみです。

要件のテスト:コードを見たことがないテスターが、それが渡されたかどうかを判断できますか? そうでない場合、シャープニングが必要です。

良いシナリオの内容

シナリオは要件が報酬に値する場所です。各シナリオは自動化されたテストになる可能性のある具体的な GIVEN / WHEN / THEN です。

  • それは要件を実行します。 要件を他の単語で単に言い直すシナリオは何もテストしません。特定の状況と特定の結果を持つ特定の状況にします。
  • 重要なケースをカバー、幸せなパスだけでなく。 有効なログインは簡単です。空の入力、期限切れのトークン、2 番目のクリック、問題が発生したもの — これらはバグが生まれる場所であり、シナリオが最も価値がある場所です。
  • タイトルの場合を命名します。 「シナリオ:期限切れトークンを拒否」はレビュアーに一目でカバーされるものを伝えます。「シナリオ:テスト 2」ではなく。

有用な習慣:承認する前に、私が壊れるのを見たくない 1 つのケースは何ですか? — そしてシナリオがそれを命名していることを確認します。

正しい種類のデルタを選択

変更は 3 つのセクションタイプで仕様への編集を説明しています。正しいものを使用すると、アーカイブされた仕様が誠実になります:

  • ## ADDED Requirements — 以前は存在しなかった新しい動作。
  • ## MODIFIED Requirements — 既に存在していて変更されている動作。完全な新しいバージョンを含めます。変更に関する簡潔なメモがレビュアーを助けます。
  • ## REMOVED Requirements — 去りつつある動作、理由に関する行付き。

アーカイブ時に、ADDED はメイン仕様に付加され、MODIFIED は古いバージョンを置き換え、REMOVED は削除されます。実際の変更を ADDED としてマークすると、競合する要件が 2 つ終わります。新しい動作を MODIFIED として説明すると、置き換えるものがありません。確信がない場合は、現在の仕様を開いて、要件が既にあるかどうかを確認します。

変更の適切なサイズ設定

単一の最も一般的な作成エラーは、単語がない要件ではなく、3 つの変更しようとしている変更です。

良い変更には、1 つの意図があります。文で説明できます。 「ダークモードトグルを追加。」「ログインエンドポイントをレート制限。」「セッションをクッキーから移行。」変更の説明に多くの「そしてまた」が必要な場合、それは分割するシグナルです。

変更が大きすぎることを示唆:

  • 提案のスコープは、関連のない機能のリストのように読みます。
  • レビューには午後が必要になるため、誰もしません。
  • 2 人は衝突なく作業できませんでした。
  • 半分のタスクは自分で出荷できました。

より小さな変更は、確認するのが簡単で、1 つの焦点の合った セッションで構築するのが簡単で、6 ヶ月後にアーカイブが残っているときに推論するのが簡単です。複数の変更を並列で実行できます — 編集 & 反復ワークフロー を参照してください。

反対のことも起こります:1 行のタイプミス修正は 3 つの要件と設計ドキュメントを必要としません。セレモニーを賭けと一致させます。

AI を良いドラフトに向けて操縦する方法

/rasen:propose は最初のドラフトを行うため、得られるものの質は与える品質を追跡します。要件を手で書く必要はありません — AI をよく目標にする必要があります:

  • 意図と境界を述べます。 「OS 設定に続く最初の読み込みのダークモードトグルを追加 — 既存のテーマ API に触れないでください。」 スコープ外の半分はスコープ内の半分と同じくらい重要です。
  • あなたが気にするケースを命名してください。 「既にテーマを手動で選択したユーザーのシナリオがあることを確認してください。」 AI は指すものをカバーします。
  • それから編集。 それはプレーン マークダウンです。曖昧な SHALL をしっかり、テストしないシナリオを削除、逃した場合を追加 — または AI に尋ねます:「タイムアウト要件は曖昧です、30 分に固定します。」

ドラフト、シャープン、繰り返し。いくつかのラウンドが信頼できる仕様を生成するため、ポイント全体です。

クイックチェックリスト

  • 各要件は 1 つの観察可能な SHALL/MUST の動作です。
  • 実装詳細は要件に焼き込まれていません。
  • すべての要件には、実際にそれを実行する少なくとも 1 つのシナリオがあります。
  • 重要なエッジとエラーケースはシナリオを持つため、幸せなパスだけではありません。
  • デルタは現在の仕様に対して ADDED / MODIFIED / REMOVED を正しく使用します。
  • 全体の変更には、1 つの意図があります。文で説明できます。

次に移動する場所

  • 変更のレビュー — ドラフトを通して滑ってきたものをキャッチする 2 分パス。
  • コンセプト — 仕様、変更、デルタの背後にあるより深いモデル。
  • 例 & レシピ — 開始から終了までの実際の変更。