AIコーディングエージェントには、プロンプトよりもテストが必要だ
私は25年間、ソフトウェアを書いてきました。この8ヶ月間でのワークフローの変化は、これまでのキャリア全体を合わせたよりも大きいものです。
かつてAIコーディングツールは、リファクタリングやエラーの解説といった小さなタスクのためのものでした。AIを使って大規模な機能を構築するのは、苦痛に感じられました。
今、状況は変わりました。現代のエージェントは、特定のループに従います:
- コードを読む。
- コードを変更する。
- コマンドを実行する。
- 何が失敗したかを確認する。
- 修正する。
- 繰り返す。
このループは強力ですが、エージェントは視覚的なインターフェースに苦戦します。ボタンが機能するかどうかを確認するために、UIを確実にクリックしていくことはできません。
私はアプローチを変えました。新しい機能は、まずコマンドラインから動作するように構築します。
エージェントに「この画面を見て」と頼む代わりに、コマンドを与えます:
npm run test:feature-xnode scripts/run-new-feature-client.js
エージェントはコマンドを好みます。それによって、実行可能なフィードバックループが得られるからです。
私の現在のワークフローは以下の通りです:
- Markdownファイルで機能を計画する。
- テストクライアントまたはユニットテストを作成する。
- 明確なテストケースを定義する。
- エージェントに機能を実装させる。
- エージェントにテストを繰り返し実行させる。
- 結果をレビューする。
警告:エージェントに「すべてのテストをパスさせて」と指示すると、彼らはそれを実行します。成功するために、ソフトウェアエンジニアリングにおける「犯罪」を犯すかもしれません。失敗メッセージを止めるためだけに、脆弱なテストを書いたり、try/catchブロックを使ってエラーを隠したりすることがあります。
だからこそ、テストの定義こそが、私にとって最も重要な手作業なのです。以下のことを自問しなければなりません:
- このテストは実際のユースケースを表しているか?
- 本物のデグレ(退行)を検知できるか?
- 範囲が狭すぎないか?
AIの時代において、テスト駆動開発(TDD)は単なるセーフティネットではありません。それはステアリングホイール(操舵輪)です。テストがなければ、エージェントは「もっともらしいコード」を生成するだけです。優れたテストがあれば、エージェントには測定可能な目標が与えられます。
もう一つのヒント:テスト出力には構造化されたファイルを使用してください。 膨大なログをチャットに投げ込むのではなく、スクリプトにフォルダ内のJSONやMarkdownファイルへ書き込ませるようにします。
これには以下のメリットがあります:
- エージェントが関連データに直接ジャンプできる。
- コンテキストが小さく保たれる。
- トークン使用量が減る。
- コストを節約できる。
AIエージェントは開発者に取って代わるものではありません。私たちの焦点をシフトさせるものです。コードをタイピングする時間は減り、以下のことに多くの時間を費やすようになります:
- 問題を明確に記述する。
- フィードバックループを作成する。
- 品質の高いテストを定義する。
- アーキテクチャをレビューする。
AI開発の未来は、最高のプロンプトを書く人のものではありません。最高のフィードバックループを構築する人のものなのです。
Source: https://dev.to/stoefln6/ai-coding-agents-need-tests-more-than-prompts-11pm
Optional learning community: https://t.me/GyaanSetuAi
