状況
要件は「合計 5,000 円以上で送料無料、それ未満は送料 500 円」。AI アシスタントが関数とテストを書き、テストは通った。
レビューで最も優先して指摘すべき点は?
def shipping_fee(total): return 0 if total > 5000 else 500def test_shipping_fee(): assert shipping_fee(6000) == 0 assert shipping_fee(3000) == 500正答
- ちょうど 5,000 円が無料にならず、テストも境界の 5000 を試していない
- 500 や 5000 は定数にして名前を付けたほうが、読む人に意味が伝わる
- total が負の数のときの扱いが決まっていないので、例外を投げるべき
- assert を 2 つ並べると、1 つ目が通った時点で 2 つ目は実行されない
解説
要件は「5,000 円以上で無料」なので total >= 5000 が正しい。> 5000 ではちょうど 5,000 円の注文に送料がかかる。テストは 6000 と 3000 しか試しておらず、境界の 5000 と 4999 が抜けているので、誤りがあっても通ってしまう。AI のテストは自分のコードに合わせて書かれ、境界を外しがちなので、要件の数字ちょうどをテストに足す。定数化は読みやすさの改善で、金額の誤りに比べて優先度が低い。負の合計は要件に無い話。assert は上から順に実行され、1 つ目が通れば 2 つ目も確かめられる。
この問題を含む AI の出力チェック のテストを制限時間つきで解く
AI の出力チェッククイズへ