著者:
(1) Bo Wang, Beijing Jiaotong University, Beijing, China ([email protected])
(2) Mingda Chen, Beijing Jiaotong University, Beijing, China ([email protected])
(3) Youfang Lin, Beijing Jiaotong University, Beijing, China ([email protected])
(4)マイク・パパダキス、ルクセンブルク大学([email protected])
(5) Jie M. Zhang, King’s College London, London, UK ([email protected])
Authors:
(1) Bo Wang, Beijing Jiaotong University, Beijing, China ([email protected])
(2) Mingda Chen, Beijing Jiaotong University, Beijing, China ([email protected])
(3) Youfang Lin, Beijing Jiaotong University, Beijing, China ([email protected])
(4)マイク・パパダキス、ルクセンブルク大学([email protected])
(5) Jie M. Zhang, King’s College London, London, UK ([email protected])
左のテーブル
1 導入2 背景と関連作品3 Study Design
4 Evaluation Results
5 Discussion
6 結論と参照抽象化
大型言語モデル(LLMs)は、コード関連のタスクにおける大きな可能性を示したが、変異テストにおけるその有用性は未知のものとなっている。この目的のために、我々は、有効な変異を生成するためのLLMのパフォーマンスを体系的に調査し、既存のアプローチと比較して、その可用性、欠陥検出の可能性、実際のバグとの関係を示している。特に、我々は、オープンソースと閉鎖ソースの両方のモデルを含む4LLMsを含む大規模な実験を実施している。我々は、既存のアプローチと比較して、LLMsは、本質的なバグと行動的に近いより多様な変異を生成することを発見する。この
1 導入
変異テストは、最も効果的なソフトウェアテスト技術の1つである(17、18、27、33、59)。それは、起源プログラムのソースコード(すなわち、変異体)に単純な合成変更(すなわち、変異)を行うことによってプログラムの変異を生成することによって行われます。これらの変異体は、元と変異体プログラムの異なる行動を引き起こすためにテストを要求するという意味で、テストの目標を形成します。
変異がテストの目的であるため、この方法の有効性は、使用している変異体のセットに大きく依存する。伝統的な技術は、変異操作子と呼ばれる単純な構文変換(ルール)を使用し、それらが適用するすべてのコードロケーションに構文変更を導入する。
残念なことに、ルールベースのアプローチは、テストプロセスに貢献しない大量の過剰変異体、すなわち、変異体を生み出し(5, 57)、したがって、この方法のコンピュータ上の一般的な問題や、生きた変異体を調べることにかかわる人間の努力を悪化させます。この問題を解決するために、研究者は、プロジェクトの歴史に基づいて変異操作者を形成するための深い学習アプローチを活用します(62, 70, 73)、これらがわずかですが効果的な変異を生成することを望んでいます。 興味深いながら、これらのアプローチは、いくつかのデータインスタンスで訓練されているため、効果的な変異を生み出すことができません(56)。
それにもかかわらず、変異テストを実行する際にどの変異が使用されるべきかという問題は、以下の課題のために開かれている: (1)効果的な変異を形成する。効果的であるためには、変異は、現存するほとんどの学習ベースの方法とは異なり、欠陥を明らかにする可能性がある(10、80)、すなわち、実際の欠陥と対処するのに良い可能性を持っている。既存の方法が効果的である一方で、まだ改善のための重要な余地がある(15)。 (2)自然変異を形成する。変異は、開発者の期待に応じた自然なコードパターンと慣行と一致する必要があります(3)変異を形成し、多様な変異を殺す。変異のカバーが無限に等しいかどうかを決定すること(88)。変異されたコード
これらの課題に対処するために、我々は、ビッグコードで訓練され、ヒューマンのようなコードを生成することができる大言語モデル(LLMs)を使用することを目指しています。既存の研究(26, 49, 65)に従って、我々はタスク指示、変異するコード要素、関連する方法コード、および実世界のバグからサンプルされたいくつかのショット例を含むデフォルトプロンプトを設計しました。
私たちの評価には、LLMsによって生成された変異の定量的および質的分析が含まれており、それらを既存のアプローチと比較してコストと効果を評価します。さらに、私たちは、さまざまなプロンプトエンジニアリング戦略とLLMs(すなわち、GPT-3.5-Turbo [4]、GPT-4-Turbo、CodeLlama-13bInstruct [64]、およびStarChat-β-16b [45])が課題の効果にどのように影響するかを研究します。
われわれの結果は、変異生成のための最良のモデルが GPT-4 であることを明らかにし、それは使用されるすべてのメトリクスで他の LLMs を上回るため、すなわち、同等の変異体、より高い欠陥検出潜在能力を持つ変異体、および実際の欠陥とのより高い接続およびセマンティックな類似性を生成します。 GPT-3.5 は、欠陥検出潜在性の面で2番目に優れているため、Defects4J で 96.7% のバグを検出し、ConDefects で 86.7% を生成します。他のテクニックから、Major は、Defects4J で 91.6% のバグと ConDefects で 68.9% のバ
私たちの分析のもう一つの興味深い発見は、変異体の多様性に関係しています(新しく導入されたASTノードタイプで測定)。 特に、私たちの結果は、GPTが最も多様性を示していることを示しています、新しく45の異なるASTノードタイプを導入し、メジャーのような伝統的なアプローチで使用される2つと異なり、LLMベースのアプローチのより良い文脈化を示すすべての既存のアプローチを補足します。
また、コンパイルに失敗するGPTによって生成された変異を分析し、学習ベースの変異の共通の問題であり、未知の方法の使用とコード構造破壊のタイプが最も普及している9つのコンパイルエラータイプに該当することを発見しました。
We wrapped up our method into a mutation tool called 変異ツールKumo実験データに基づいて、我々はまた、高品質のLLM生成変異体を含むデータセットを構築し、変異テストだけでなく、エラーローカライゼーションやエラー予測などの他のバグ種子アプリケーションにも使用することができる。
概要として、私たちの論文は以下の主要な貢献を行います。
• 私たちは、変異テストにおけるLLMの適用性を調査します. 私たちは、既存のツール / 方法に対してLLMを評価するための広範かつ詳細な比較実験を行います. 私たちの発見は、GPTモデルが真のバグを密接に模する変異を生成する上で優れていることを示しています。
• さまざまなプロンプトを比較し、適切なコードコンテキストで数ショットの学習が最高のパフォーマンスを提供することを発見します。
• 私たちは、非コンパイル性変異のエラーの種類を分析し、方法の呼び出しとメンバー評価がLLMを非コンパイル性変異を生成させる可能性が高いことを把握します。
私たちは、手動で分析された等価変異を含む高品質のJava変異データセットを構築します。
この論文は、CC by 4.0 Deed (Attribution 4.0 International) ライセンスの下で archiv で利用できます。
この紙は