AIコーディングエージェントには、プロンプトよりもテストが必要だ

私は25年間、ソフトウェアを書いてきました。この8ヶ月間でのワークフローの変化は、これまでのキャリア全体を合わせたよりも大きいものです。

かつてAIコーディングツールは、リファクタリングやエラーの解説といった小さなタスクのためのものでした。AIを使って大規模な機能を構築するのは、苦痛に感じられました。

今、状況は変わりました。現代のエージェントは、特定のループに従います:

  • コードを読む。
  • コードを変更する。
  • コマンドを実行する。
  • 何が失敗したかを確認する。
  • 修正する。
  • 繰り返す。

このループは強力ですが、エージェントは視覚的なインターフェースに苦戦します。ボタンが機能するかどうかを確認するために、UIを確実にクリックしていくことはできません。

私はアプローチを変えました。新しい機能は、まずコマンドラインから動作するように構築します。

エージェントに「この画面を見て」と頼む代わりに、コマンドを与えます:

  • npm run test:feature-x
  • node 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