Agent Skillを書く時の心得。SKILL.mdに何を書き、何を書かないかの判断基準と、レビュー指摘の採否の基準を定める。 Agent Skillを作成する時、編集する時、レビュー指摘の採否を決める時に読み込む。
software-test
ソフトウェアテストを書く時の心得。何をtestし、何をtestしないかの判断基準と、アクセス権限のtestの書き方、落ちたtestの直し方、fixtureの仮名を定める。testを書く時、足すか決める時、落ちたtestを直す時、レビューする時に読み込む。
含まれるファイル(1)
- SKILL.md7.0 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
ソフトウェアテストを書く時の心得
AIは放っておくと、無限に正常系のtestを書き、アクセス権限の境界のtestが下手である。以下の基準は、きりが無い正常系のtestをやめ、情報漏洩を避ける為にクリティカルな境界条件を見つけてそこをtestする為の物である。testを書く時、足すかどうかを決める時、落ちたtestを直す時、レビューする時に従う。
心得1. 守りたいラインを決めて、そこだけに最小限書く
testは、そのPRが正しい事の証明であると同時に、別の変更によって壊されないように守る物である。守りたいラインを決めて、将来壊れるだろう場所を予測して、そこだけに最小限書く。ラインを決めずに書くと、仕様変更の度にtestの大半を書き直す事になり、その作業でミスが入って情報が漏洩するので、testが実質的に何も守ってくれない状態になる。
- 「別の機能追加によって壊されるかも」と思った箇所に重点的に仕込む。別ファイルの関数を1つだけimportして使っている、ファイルの読み込み順や関数の登録順に依存している、依存ライブラリを更新した、ライブラリ同士の食い合わせが悪い、といった経路で、無関係だと思っていた機能同士が実はどこかで関係している
- 壊れても問題ない部分には書かない
心得2. 情報が漏洩していないかを重点的にtestする
memberであればアクセスできる事ではなく、memberではない人がアクセス拒否される事をtestする。test書きすぎを防ぐ為にtest対象を削る時も、正常にアクセス拒否できる事、つまり情報漏洩防止のtestは書く。
権限がある人がアクセスできない不具合は、その人が「見れないんですけど」と報告してくれる。権限が無い人がアクセスできてしまう不具合は、その多くが報告されない。自分には権限があって正常に見えているだけだと思っているか、報告が面倒か、他人の非公開情報が見えても自分に実害が無い事も多い。クリティカルな実害が発生してからようやく報告が来て、謝罪プレスリリースを出す事になる。
- 必要なラインギリギリを見極めて、その危険側を集中的にtestする。アクセス権限の境界は1つではない。project memberだけが読めるページなら、守りたいのはmemberである・ないの境界で、ログインしているがmemberではない人にアクセスさせて403が返る事をtestする。ログインしていない人で試すのは間違いで、ログインしている・していないという別の境界をtestした事になる
- 期待するstatus codeは厳密に見る。403を期待する所で404が返ったら、testは落ちる
- 権限がある人に200が返る事のtestだけでは、権限が無い人にも200が返っているかもしれないので、ほとんど何も守れない。今後もメンテナンスをし続ける余裕と、testの実行時間の余裕があるなら、書いてよい
- 全組み合わせを網羅せず、権限の境界の最小セットだけ書く。誰でも読めるpublic projectの読み取りなら、最も権限が低い人が通る1件で足りる
- 実装側は逆に、権限がある事を確認する。権限の種類は将来必ず増え、権限がある事を確認する実装なら、増えた権限の人にはデータが返らないので安全側に倒れる
心得3. データ形式のtestとアクセス権限のtestは分けて書く
- アクセス権限のtestは、controllerにリクエストして、拒否される事を期待するstatus codeで確かめる。pathとユーザーの種別と期待するstatus codeの組み合わせの表として書くと、一気に確かめられる。メンテが大変でなければ、境界ギリギリ以外も充実させてよい。一覧や検索のように、含まれる物で権限が決まるAPIでは、含まれてはいけない物が含まれない事を見る
- データ形式のtestは、methodの返り値を見る。単純なAPIならまとめてtestしてよい
- 超重要ではない機能で、レスポンスにfieldが存在するか確認する類のtestは書かない。書き始めるときりが無い。使っていれば分かる程度の不整合は、見つけ次第直せばよい
心得4. 実装の写しになるtestを書かない
正常系のtestを無限に足すと、実装のただのコピーになる。実装を変える時に二重に書き換える事になり、変更コストを上げるだけで何も守らない。testを足す前に、実装の量と釣り合っているか、bugがあった時に何が起きるかを考える。bugの帰結が情報漏洩や権限の逸脱のような危険側なら、その異常を検知するtestを検討する。表示が減る・処理が呼ばれないだけで実害が無い安全側なら書かない。次のtestは、安全側で実装の写しになる物なら書かない。
- 定数配列や、
arr.map(fn)のようにロジックの無い薄いラッパーの単体test - fixtureを整形関数に渡して、出力の部分文字列を確かめるtest
- schema validatorを直した時に、validatorが正しく書けている事を確かめるだけのtest
- 処理の呼び出しを消しただけの修正で、消した処理が実行されない事を確かめるtest
- bug修正で、直した事を確かめる為の「念の為の回帰防止」の正常系test。「将来誰かが再導入したら検出できる」は弱い動機で、確認は手元の実行で済ませる
心得5. testを通す事だけを目的に、実装やtestの機構に手を加えない
testが落ちた時に、testを通す事だけを目的に、実装のほうを直したり、testの根本的な方針や機構に手を加えたりしない。test runnerを移行する時は、前後でtestの合計件数が変わらない事を確かめる。
心得6. fixtureの仮名には、ユーザー自身のhandleを使う
test fixtureや設定の例で仮のメールアドレスやユーザー名を書く時、局所部には、作業を指示しているユーザー自身のhandleを使う。taro のような汎用的な人名は、実在の人物のアカウントと同じになると問題になる。自分のhandleなら、実在しても本人である。ドメインは .example か、既存のtestに合わせる。
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
ソースコード中のコメントを書く時の心得。コメントに何を書き、何を書かないかの判断基準と、置く位置、日本語の文体を定める。 ソースコードのコメントを書く時、直す時、レビューする時に読み込む。
リポジトリのセキュリティ調査を領域ごとに進める。同じサービスを構成する複数のリポジトリを束ねて調査できる。 このsessionは調査を指揮し、領域ごとに起動したsubagentが調査してレポートを出力する。 レポートの問題のトリアージと、問題の自動修正、問題を直すpull requestの状態の同期も指揮する。 複数sessionにまたがる長期作業を想定し、実行するたびに現状を確認して続きの作業を行う。 ユーザーが手動で起動する。
セキュリティ調査で検出された問題を1つ修正し、pull requestをready for reviewまで仕上げる。 codepatrol skillが起動したsubagentが実行する。ユーザーが直接呼び出す事は想定していない。
本番に出る前の修正が積まれたrelease pull requestに、デプロイの前後に人間がやる事をまとめたコメントを投稿・更新する。 codepatrol skillが起動したsubagentが実行する。ユーザーが直接呼び出す事は想定していない。
リポジトリの1つの領域をセキュリティ観点で調査し、Codexの批判的レビューを経てレポートを出力する。 codepatrol skillが起動したsubagentが実行する。ユーザーが直接呼び出す事は想定していない。