AI時代 テストについて考える
テストの必要性と今後の方針
テストが必要な理由
受け入れテスト
外部(発注者・ユーザー)を無条件に信頼せず、受け入れ可能なレベルかをチェックする行為
研修・確認のような性質を持つ
テストコード(自動テスト)
境界値・カバレッジ・例外など、手動では通りにくいケースの検出
テストが書きやすい設計を強制されるため、コードの保守性が高まる
テストコード自体が仕様のドキュメントになり、リファクタリング時の気づきになる
手動テストの問題
実行のたびに人間のコストがかかる
属人化しやすい(誰がどこまで確認したか不明確)
プロダクトが成長するほどコストが増大し、回帰テストが現実的でなくなる
AIにテストコードを書かせることへの考え
メリット
境界値・カバレッジ・例外の網羅は人間より漏れが少ない
レガシーコードへのテスト追加を量的に推進しやすい
懸念点
AIがコードもテストも書くと、誤った前提があったとき両方が同じ方向に間違える
「テストが書きにくいから設計を見直す」という設計へのフィードバックループが失われる可能性がある
レガシーコードへの適用では、バグも仕様として固定してしまう「キャラクタリゼーションテスト」問題が起きやすい
レガシーコードへのテスト導入方針
目的を明確にしないと後で混乱する。目的によって使い方を分ける。
table:_
目的 方針
リファクタリングの安全網 AIに任せて量を稼ぐのは合理的。キャラクタリゼーションテストでもよい
設計改善・仕様の明確化 人間がテストを書く過程に意味がある。AIは補助止まりにする
結論的な視点
AIにテストを書かせると、テストが存在するという事実は残るが、テストを書く過程で得られる設計へのフィードバックループが消える。
テストコード導入を推進するなら、チームで「このテストは何のために書くか」を先に合意しておくことが最重要。