テストの抜けを見つける
カバーされていない分岐を、本番障害の起こりやすさ順に挙げる
以下は私の実装と既存のテストです。テストが届いていない箇所を見つけてください:1)すべての分岐と境界を挙げ、ケースがないものを示す;2)「誤ったときに本番で最も影響が大きい」順に並べ、追加すべき上位5件のケースを示す(入力、期待結果、なぜ漏れやすいか);3)既存のケースのうち、重複していて削っても信頼感が落ちないものを指摘する;4)振る舞いではなく実装の詳細を検証しているテストがあれば指摘する。 ``` [コードとテストを貼り付けてください] ```
使い方
まず上位3件だけ追加しましょう。残りは実際に問題が出てからで十分です。一度に全部書こうとしないこと。
向いている場面
- 決済、クーポン、権限の中核ロジックを変更する直前で、テストは半年前に書かれたものです。まだ効くのか分からないとき。
- カバレッジは 78% あるのに、本番事故が境界条件で起き続けているとき。
向いていない場面
- コード自体が固まっていない(エンドポイントが 1 日 3 回変わる)なら、まず契約を決めます。テストがそれに追従してしまいます。
- カバレッジの数字を上げたいだけなら、このプロンプトは「書く価値のないケース」を返します。
例
入力
def apply_coupon(order, coupon):
if coupon.expired_at < now(): return order
if order.amount < coupon.min_amount: return order
if coupon.id in order.used_coupon_ids: return order
if len(order.applied_coupons) >= 3: return order
return order._replace(amount=order.amount - coupon.value)
既存テスト:通常の割引が 1 件、期限切れクーポンが 1 件のみ。得られるもの
未カバーとして、金額が下限ちょうどの場合、同一ユーザーの 2 回目の利用、3 枚を超える重ね掛け、割引後の金額が 0 または負になる場合、同時実行で同じクーポンが 2 つの注文に使われる場合を挙げます。本番影響の大きい順に並べ、上位 5 件では「割引後が負」と「同時利用」を追加すべきと示します。期限切れのテストが `_is_expired` の呼び出しを検証しており、実装の詳細を断言している点も指摘します。
よくある誤用
- 実装だけを貼り、既存テストを貼らないと、「カバーされていない」と「貼られていないだけ」を区別できません。
- 「足りないテストを全部書いて」と頼むと、価値の低い 40 件が返り、維持コストが益を上回ります。
こう変えると効く
- 「ケースの入力、期待結果、漏れやすい理由だけ。テストコードはまだ不要」と加えると、一覧をレビューしてから書け、大きな手戻りを避けられます。
- 「時間や並行性の mock が必要なケースに印を付けて」と加えると、テスト基盤の不足が早く見つかります。