解説
AIが書いたテストは間違いを検出できる?わざと違う結果を入れて点検しよう
テストが通っても、必要な条件を確認しているとは限らない。型だけの確認と、独立した期待値の確認を、小さな関数で比べる。

AIに関数とテストを作ってもらい、全部通った。けれど、そのテストは間違った結果も通してしまわないだろうか。正しいと分かる例と、意図的に違う結果を返す例を分け、テストの検出力を確かめてみよう。
今回はPythonの小さな架空の計算だけを使う。実際のプロジェクトや本番コードを書き換えず、一時的な練習用プログラムで試すよ。
仕様から期待値を先に決める
仕様は「単価と個数を掛け、合計を返す」。単価4、個数3なら、期待する値は12。この値は関数を実行して写すのではなく、仕様から独立して求める。
型が整数であるかだけを見ると、12以外の整数も通ってしまうね。何を満たせば合格かを、実装とは別に書いておくことが大切だよ。
正しい関数と、わざと違う関数を比べる
def correct_total(price, count):
return price * count
def wrong_total(price, count):
return price + count
def type_only(calc):
return isinstance(calc(4, 3), int)
def expected_value(calc):
return calc(4, 3) == 12
for name, calc in [("correct", correct_total), ("wrong", wrong_total)]:
print(name, type_only(calc), expected_value(calc))
期待する表示はcorrectがTrue True、wrongがTrue False。足し算に変えた関数も整数7を返すので、型だけでは間違いを検出できない。期待値と比較する条件なら、今回の違いを見つけられるよ。
これは意図的に小さな間違いを入れた練習で、正しいコードを本番で壊す手順ではない。確認後は練習用の関数だけを片付けよう。
間違いが検出できても、テストは完成ではない
4と3の例が通るだけでは、0個、負の値、端数、異なる型などの扱いは分からない。どこまで認める仕様かを決め、その範囲へ確認を広げる必要がある。
例えば0個が有効な仕様なら、単価4、個数0の期待値は0。わざと足し算した実装は4を返すので、この例でも違いを検出できる。何が正しいかを定めずに、境界の数字だけを増やさないようにしよう。
AIへの依頼には、仕様と期待値を渡す
単価×個数の合計関数を点検します。
単価4・個数3の期待値は12、単価4・個数0は0です。
型だけでなく期待値を確認するテストを示してください。
実装を足し算へ変えた練習用の関数に対して、どの確認が失敗するかも説明してください。
本番のコードを書き換える操作は行わないでください。
これは依頼文の例。AIの説明が自然でも、示されたテストを実際に動かし、どの間違いが検出されたかを見ることが必要だよ。
実装から同じ式をコピーして期待値を作ると、同じ誤りを共有する可能性がある。業務の仕様、手計算できる小例、既存の確かめられた結果など、別の根拠を持つようにしよう。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。