• 公開日
    2024 年 11 月 26 日
  • シェアする

適切に設計された正しいコードを作成することは、すべての開発者の目標です。これを実現する上で際立った方法論の 1 つが、テスト駆動開発 (TDD) です。TDD はコードを設計したり、代わりにコードを作成したりすることはありませんが、反復的な開発サイクルで設計上の決定に関する迅速なフィードバックを得ることができるソフトウェア開発の方法論です。 

コーディングの前または後にユニット テストを書くか、あるいはテストをまったく書かないかは、開発者の選択によります。明らかに、テストをまったく書かないと、運用時に重大な状況が発生しますが、開発者が運が良ければ、手動テストの段階でエラーを発見できるでしょう。 

コードが完成した後にテストを書くことは、テストを書かないよりはましです。私たちを含め、ほとんどの開発者は、コードファーストのアプローチをそのまま適用してからテストを書いています。しかし、書かれたコードはそれほど良くはありません。テストケースを忘れると、いくつかの機能エラーが発生します。コードごとに失敗するテストケースを事前に書いておき、TDD サイクルに従ってそのテストをパスするコードを追加する方がはるかに良いです。

現在、私たちはGenerative AIを使ってどのように仕事を自動化できるかを議論しています。この研究では、 アレン・ヘルトンのブログプロジェクトのテストケースをいくつか作成し、ChatGPT にテスト関連のコードを生成するように依頼します。 

テストファースト開発のための生成AI 

手動テストでは人為的エラーが発生する可能性があることを考えると、次のような疑問が生じます。なぜ Generative AI を使用して TDD を自動化しないのでしょうか? Generative AI は、ユニット テストとそれに対応するコードの作成を自動化することで、TDD に変革をもたらす役割を果たします。提案されているワークフローは次のとおりです。

  1. 開発者が記述するテスト: 開発者は、コードの望ましい結果を指定して、最初の単体テストを記述することから始めます。
  2. AI によって生成されたコード: ジェネレーティブ AI はこれらのユニット テストを読み取り、テストに合格するために必要なコードを生成します。コードが正常に実行された場合は、ディスクに保存されます。そうでない場合、AI はエラー レポートを生成し、正しいコードを再度生成しようとして、テストに合格するまでループを作成します。このように AI を組み込むことで、開発者はコードが徹底的にテストおよび検証され、エラーのリスクが最小限に抑えられることを保証できます。
エクラン・レスミ 2024-11-04 13.29.43.png

TDD で生成 AI を使用する利点

コード生成とテストのプロセスを自動化すると、開発サイクルを大幅にスピードアップできます。また、テストケースやコード作成における人為的エラーの可能性も低減します。これにより、すべてのテストが包括的かつ一貫してカバーされ、手作業の作業負荷を増やすことなく開発プロセスを簡単に拡張できます。

潜在的な課題と解決策

Generative AI を TDD に統合すると多くのメリットが得られますが、課題がないわけではありません。TDD 用の AI システムの初期設定は複雑で時間がかかる場合があります。開発者は、AI ツールを効果的に使用して信頼するためにトレーニングが必要になる場合があります。しかし、開発者がそれを処理する準備ができている場合でも、AI はトレーニング データで十分に表現されていない固有のケースやエッジ ケースに苦労する可能性があるため、要求されたシナリオが混乱する可能性があります。Generative AI は適切なコードで応答しますが、優れた最良の選択ではありません。なぜなら、まだコードはフィードバック メカニズムを適用していないからです。優れたコードを生成するには、開発者のコ​​ード レビュー アプローチのようなフィードバック メカニズムを AI に適用する必要があります。少なくとも今のところは、AI と人間の監視を組み合わせて複雑なシナリオを処理できます。:)

TDD におけるフィードバック応用生成 AI

エクラン・レスミ 2024-11-04 13.31.52.png

フィードバックメカニズム

プロセスをさらに改善するために、フィードバック メカニズムを導入できます。開発者がユニット テストを作成し、開発者エージェントがコードを生成します。コード レビュー担当者エージェントによって新しい精査レイヤーが追加され、コードがレビューされて開発者エージェントにフィードバックが提供されます。

反復改善

開発エージェントは、レビュー担当者のフィードバックに基づいてコードを修正し、レビューのために再送信します。この反復プロセスは、コードがレビューに合格するまで継続されます。

最終テスト

コードがレビュー担当者によって承認されると、ユニット テストが実行されます。テストに合格すると、コードが保存されます。テストに不合格になると、エラー レポートが生成され、プロセスはコード生成に戻ります。

本質的には、ワークフローは次のようになります。

  1. 開発者はユニットテストを作成します。
  2. AI はこれらのテストを読み取り、必要なコードを生成します。
  3. テストが正常に実行されると、コードが保存されます。正常に実行されない場合は、エラー レポートが生成され、AI がループ内でコードの修正を試みます。
  4. この初期の自動化により、エラーが発生しやすいコードが生成される可能性があり、ここでフィードバック メカニズムが役立ちます。
  5. 開発者は単体テストを記述し、開発エージェントが必要なコードとメソッドを生成します。
  6. コード レビュー担当者エージェントがコードをレビューし、開発者エージェントにフィードバックを送信します。
  7. 開発エージェントはフィードバックに基づいてコードを改良し、レビューのために再送信します。
  8. このサイクルは、コード レビュー担当者がコードを承認するまで続きます。
  9. 承認されると、ユニット テストが実行されます。成功した場合はコードが保存され、失敗した場合はエラー レポートが生成され、ループが続行されます。

フィードバック メカニズムを組み込むことで、生成されたコードの品質が大幅に向上し、必要な標準を満たし、すべてのテストに確実に合格できるようになります。

結論

テスト駆動開発(TDD)にジェネレーティブAIを統合すると、ソフトウェア開発に革命を起こす可能性があります。ユニットテストとそれに対応するコードの生成を自動化することで、開発者はコードの品質を高め、エラーを減らし、ワークフローを合理化できます。克服すべき課題はありますが、メリットは最初のハードルをはるかに上回り、コーディングの将来にとって有望なアプローチとなっています。 コーダーAI 生成 AI を使用したプログラミングのサポートに興味がある場合は、このプロジェクトに参加してください。 

今後の方向性

このアプローチに基づいて構築する予定の項目は 3 つあります。

  • 言語サポートの拡張: これまで Java に重点を置いてきましたが、この方法論は Python、JavaScript などの他の言語にも拡張できます。

  • 自動テスト生成: 手動でテストを作成する代わりに、開発者が提供する高レベルの要件に基づいて、Generative AI にテストの作成を指示できます。 

  • エージェント AI チームの拡張: 単純なコード レビュー担当者の枠を超えて、エッジ ケースをテストするための QA エージェント、コード パフォーマンスを最適化するためのパフォーマンス エージェントなど、より専門的なエージェントを導入できます。

すべてのソフトウェア開発者は、より堅牢で正確なテストケースの作成に時間を費やし、Generative AI の力を活用して高品質のコードを作成することをお勧めします。