Test cases are essential for validating the reliability and quality of software applications. Recent studies have demonstrated the capability of Large Language Models (LLMs) to generate useful test cases for given source code. However, the existing work primarily relies on human-written plain prompts, which often leads to suboptimal results since the performance of LLMs can be highly influenced by the prompts. Moreover, these approaches use the same prompt for all LLMs, overlooking the fact that different LLMs might be best suited to different prompts. Given the wide variety of possible prompt formulations, automatically discovering the optimal prompt for each LLM presents a significant challenge. Although there are methods on automated prompt optimization in the natural language processing field, they are hard to produce effective prompts for the test case generation task. First, the methods iteratively optimize prompts by simply combining and mutating existing ones without proper guidance, resulting in prompts that lack diversity and tend to repeat the same errors in the generated test cases. Second, the prompts are generally lack of domain contextual knowledge, limiting LLMs' performance in the task.
論文ID : 2501.01329タイトル : The Prompt Alchemist: Automated LLM-Tailored Prompt Optimization for Test Case Generation著者 : Shuzheng Gao, Chaozheng Wang, Cuiyun Gao, Xiaoqian Jiao, Chun Yong Chong, Shan Gao, Michael R. Lyu分類 : cs.SE cs.AI cs.CL発表時期/会議 : JOURNAL OF LATEX CLASS FILES, VOL. 18, NO. 9, SEPTEMBER 2020論文リンク : https://arxiv.org/abs/2501.01329 テストケースはソフトウェアアプリケーションの信頼性と品質を検証するために不可欠である。最近の研究により、大規模言語モデル(LLM)が与えられたソースコードに対して有用なテストケースを生成する能力を備えていることが示されている。しかし、既存の研究は主に手動で作成された単純なプロンプトに依存しており、LLMの性能がプロンプトの品質に大きく依存するため、しばしば最適でない結果をもたらす。さらに、これらの方法はすべてのLLMに対して同じプロンプトを使用しており、異なるLLMが異なるプロンプトに最適に適応する可能性があるという事実を無視している。本論文では、多様性ガイド付きプロンプト生成、失敗駆動型ルール帰納、領域コンテキスト知識抽出の3つのコアモジュールを通じて、異なるLLMに対する自動プロンプト最適化を実現するMAPSメソッドを提案する。
テストケース生成はソフトウェアエンジニアリングにおける重要なタスクであり、EvosuiteやRandoopなどの従来の方法は検索と制約技術に依存している。一方、LLMベースの方法は潜在性を示しているが、以下の問題が存在する:
手動で作成された単純なプロンプトに依存しており、性能が最適でない すべてのLLMに対して同じプロンプトを使用しており、LLM間の差異を無視している テストケース生成タスクに特化した最適化が不足している テストケースの手動作成は時間がかかり困難である 高品質なテストケースはソフトウェア品質保証に不可欠である LLMのコード理解と生成における強力な能力は、プロンプト最適化を通じて完全に発揮される必要がある 著者は予備実験を通じて、既存の自動プロンプト最適化(APO)手法がテストケース生成タスクにおいて3つの主要な問題を抱えていることを発見した:
低い多様性 : 生成されたプロンプトは多様性に欠け、局所最適に陥りやすい繰り返されるエラー : 最適化されたプロンプトは依然として元のプロンプトと同じエラーを生成する領域知識の欠如 : 継承関係やクラス呼び出し情報などの必要なプロジェクトレベルのコンテキスト情報が不足している初の研究 : 著者の知る限り、これはテストケース生成タスクに特化したLLM適応型プロンプト最適化に関する初の研究である革新的な手法 : 多様性ガイド付きプロンプト生成、失敗駆動型ルール帰納、領域コンテキスト知識抽出を統合したMAPSメソッドを提案顕著な改善 : 3つの一般的なLLMでの実験により、MAPSは最強のベースライン手法と比較して、平均で行カバレッジを6.19%、分岐カバレッジを5.03%向上させることが示されたLLM適応化 : 異なるLLMに対するカスタマイズされたプロンプト生成の有効性を実証ブラックボックスモデルM、小規模開発セットDdev、テストセットDtest、スコアリング関数s(·)が与えられた場合、APOは自然言語空間からDdevに基づいて最適化されたプロンプトpを発見することを目指し、MがテストセットDtestでの性能を最大化する。
MAPSは3つのコアモジュールで構成されている:
このモジュールはLLMに関連するプロジェクトレベルのコンテキスト情報を提供する:
ファイル内コンテキスト知識 :
クラスシグネチャ:焦点メソッドを含むクラスの型と名前 焦点メソッド:テストケースを生成する必要がある具体的なメソッド メンバーメソッドシグネチャ:クラス内の他のメソッドの関数シグネチャ ファイル間コンテキスト知識 :
クラス継承情報:抽象クラスまたはプライベートクラスの場合、プロジェクト全体をスキャンしてそのサブクラスを特定 クラス呼び出し情報:焦点メソッドのパラメータ型を識別し、ユーザー定義型の定義とコンストラクタを追跡 このモジュールは異なる修正パスを探索することで、多様化されたプロンプトを作成する:
アルゴリズム2:PROMPTIMPROVEMENT
1. パフォーマンスが最も良いK個のプロンプトを選択
2. N個の異なる修正方法を生成
3. 各修正方法に基づいて新しいプロンプトを生成
4. 選択されたプロンプトと新しく生成されたプロンプトをマージ
このモジュールは失敗したテストケースを分析することでルールを帰納し、繰り返されるエラーを回避する:
失敗情報の選択 :
失敗したテストケースとエラー情報を収集 DBSCANクラスタリングアルゴリズムを使用して失敗情報を集約 クラスタサイズと過去の失敗との類似性に基づいて重み付けサンプリングを実施 エラー反思 :
代表的な失敗ケースを選択して反思プロンプトを構築 LLMに詳細な説明と解決策を提供させる 説明と解決策を簡潔なルールに変換 ルール検証 :
新しく生成された各ルールの有効性を検証 パフォーマンスが最も良いルールを保持 多様性の保証 : 異なる修正方法の使用を強制することで、プロンプトの多様性を確保し、局所最適を回避失敗からの学習 : 失敗ケースから学習し、ルール帰納を通じて最適化プロセスをガイドコンテキスト強化 : プロジェクトレベルのコンテキスト情報を提供し、LLMが正確なテストケースを生成するのを支援ソフト統合 : 反思出力を簡潔なルールに変換し、冗長なプロンプトによるパフォーマンス低下を回避広く採用されているDefects4Jベンチマークを使用し、5つのJavaプロジェクトを含む:
Apache Commons CLI(29個のバグ) Apache Commons CSV(15個のバグ) Google Gson(17個のバグ) JFreeChart(26個のバグ) Apache Commons Lang(60個のバグ) 合計:147個のバグ、85個の焦点クラス、5,278個の焦点メソッド 行カバレッジ(%) : テスト中に実行されたコード行の割合分岐カバレッジ(%) : テスト中に実行された分岐の割合LLMモデル :
ChatGPT(gpt-3.5-turbo-0125) Llama-3.1-70B-Instruct Qwen2-72B-Instruct ベースライン手法 :
Basic:最適なシードプロンプトのパフォーマンス APE:LLMに意味保存的なプロンプト変体の生成を直接要求 OPRO:パフォーマンス情報を組み合わせて新しいプロンプトを生成 EVOPROMPT(GA/DE):進化アルゴリズムに基づく最新のプロンプト最適化手法 シードプロンプト数:5 各ラウンドで生成されるプロンプト数:2 最大反復回数:5 開発セット:ランダムに10個のバグをサンプリング 実験を3回繰り返して平均結果を報告 ChatGPTでのパフォーマンス :
行カバレッジ:MAPSは53.80%に達し、最強のベースラインEVOPROMPT(GA)は46.63%で、7.17%の改善 分岐カバレッジ:MAPSは41.84%に達し、最強のベースラインは35.88%で、5.96%の改善 Llama-3.1でのパフォーマンス :
行カバレッジ:MAPSは50.59%に達し、最強のベースラインは46.52%で、4.07%の改善 分岐カバレッジ:MAPSは39.50%に達し、最強のベースラインは35.07%で、4.43%の改善 Qwen2でのパフォーマンス :
行カバレッジ:MAPSは45.51%に達し、最強のベースラインは39.41%で、6.10%の改善 分岐カバレッジ:MAPSは32.71%に達し、最強のベースラインは28.92%で、3.79%の改善 各モジュールの貢献分析(ChatGPTの例):
領域コンテキスト知識抽出を削除:行カバレッジが9.64%低下、分岐カバレッジが8.53%低下 多様性ガイド付きプロンプト生成を削除:行カバレッジが8.21%低下、分岐カバレッジが7.80%低下 失敗駆動型ルール帰納を削除:行カバレッジが6.94%低下、分岐カバレッジが4.76%低下 実験により、MAPSが異なるLLMに対するカスタマイズされたプロンプトを生成できることが検証された:
各LLMは専用の最適化プロンプトで最高のパフォーマンスを発揮 ChatGPTの最終プロンプトは、他のLLMのプロンプトと比較して、ChatGPT上で行カバレッジでそれぞれ2.45%と2.66%高い MAPS最適化プロンプトはすべて手動設計プロンプトを上回る ケース1 - Llama-3.1 : 第2の帰納ルールを通じて、モデルは例外処理を含むテストケースを正しく生成
ケース2 - ChatGPT : ファイル間コンテキスト知識を通じて、モデルは抽象クラスを正しく初期化できる
APE:LLMに意味保存的なプロンプト変体の生成を直接要求 OPRO:パフォーマンス情報を組み合わせてプロンプト生成をガイド EVOPROMPT:進化アルゴリズムに基づく最新の手法 従来の手法:Randoop(ランダムファジング)、Evosuite(検索アルゴリズム) 深層学習手法:AthenaTest(微調整BART)、A3Test(アサーション知識強化) LLM手法:ChatUniTest、ChatTESTERなど MAPSはすべてのLLMで既存のプロンプト最適化手法を大幅に上回る 異なるLLMは確かにカスタマイズされたプロンプトを必要とする 3つのコアモジュールはすべてパフォーマンス向上に重要な貢献をしており、領域コンテキスト知識抽出が最大の貢献をしている LLMの限界 : 3つの代表的なLLMでのみ評価を実施言語の限界 : 実験はJavaプロジェクトに限定され、他のプログラミング言語をカバーしていないデータセット範囲 : Defects4Jベンチマークのみを使用より多くのLLMとプログラミング言語への拡張 既存のLLMテスト生成手法との統合 より複雑なプロジェクトレベルのコンテキスト情報の探索 問題定義が明確 : LLMテストケース生成のプロンプト最適化問題を初めて体系的に研究手法の革新性が高い : 3つのモジュール設計が合理的で、既存手法の重要な問題を解決実験が充分 : 複数のLLM、複数のプロジェクトでの包括的な評価を実施実用価値が高い : 手法は汎用的で、異なるLLMとプロジェクトに適用可能計算コスト : 反復最適化プロセスは大量のAPI呼び出しを必要とする可能性があり、コストが高いルール品質 : 失敗駆動型ルール帰納はLLMの反思能力に依存しており、ルール品質が不安定である可能性があるコンテキスト抽出 : ファイル間コンテキスト抽出の完全性と正確性をさらに検証する必要がある学術的貢献 : LLMテストケース生成のプロンプト最適化研究の方向性を開拓実用的価値 : 実際のソフトウェア開発におけるテストケース生成に直接適用可能再現性 : 完全な再現パッケージを提供し、後続研究を容易にする高品質なテストケースの自動生成が必要なソフトウェアプロジェクト 異なるLLMを使用してコード生成を行うチーム LLMパフォーマンスを最適化する必要があるソフトウェアエンジニアリングタスク 論文は48篇の関連文献を引用しており、ソフトウェアテスト、プロンプトエンジニアリング、大規模言語モデルなど複数の分野の重要な研究をカバーしており、研究に堅実な理論的基礎を提供している。
総合評価 : これはLLMテストケース生成分野における重要な理論的および実用的価値を持つ高品質なソフトウェアエンジニアリング研究論文である。手法設計が合理的で、実験評価が充分であり、結果は説得力がある。いくつかの限界が存在するが、全体的な貢献は顕著であり、この分野の発展に重要な推進力を提供している。