AIコード生成ツールの評価:研究
この記事では、トップのAIコード生成ツールのパフォーマンスについてレビューしてるよ。
― 1 分で読む
コード生成ツールはプログラマーがより良いコードを早く書くのを助けるんだ。これらのツールは、プログラマーが今やってることに基づいてコードスニペットを提案してくれる。この記事では、主に三つの人気のあるコード生成ツール、GitHub Copilot、Amazon CodeWhisperer、ChatGPTを見ていくよ。これらが有効で正確で、安全で信頼性が高く、メンテナンスしやすいコードを生成する能力を検証するんだ。
コード生成ツールって何?
コード生成ツールは、プログラマーがコードを書くときに提案を提供してくれるツールだ。これらは、コーダーが何をしているかのコンテキストを分析して、ミスを避けたりコーディングプロセスをスピードアップするための選択肢を提供してくれる。よく知られているツールには、GitHub Copilot、Amazon CodeWhisperer、ChatGPTがあるよ。
コードツールの種類
コード補完ツール: これらのツールは、プログラマーがその瞬間に必要としているかもしれない関連変数やメソッドのリストを表示する。開発者はそのリストから選ぶことで、エラーを減らし作業を効率化できる。
コードジェネレーター: シンプルなコード補完ツールとは違って、コードジェネレーターはプログラマーの入力(プレーンな言葉でのコメントなど)を受け取って、完全な関数ボディや大きなコードブロックを生成することができる。
なぜAIコードジェネレーターを調べるの?
AI支援のコーディングツールが注目されてる中、その効果や利点について多くの主張があるんだけど、これらのツールが実際のコーディング状況でどう機能するかを調査することが重要だよ。本当にプログラマーの仕事を良くしてくれるのかを理解したいんだ。
私たちの目標は、GitHub Copilot、Amazon CodeWhisperer、ChatGPTが生成するコードの質を、コードの有効性、正確性、安全性、信頼性、メンテナンス性を含む複数の基準に基づいて評価することだよ。
研究の質問
私たちの研究を導くために、5つの主要な質問に焦点を当てたよ:
- これらのツールからのコード提案はどれだけ有効か?
- コード提案はどれだけ正確か?
- 生成されたコードの安全性は?
- 結果の信頼性は?
- 生成されたコードのメンテナンス性は?
方法論
これらのツールを評価するための方法論、実験の設定、ツールの出力をどう分析したかを説明するよ。
実験の設定
私たちはHumanEvalデータセットを使って実験を行った。これは、関数定義、説明、テストがついているプログラミング問題のリストが含まれているデータセットだ。各問題には識別番号が付けられている。関数名と説明をツールに提供して、コードソリューションを求めたんだ。
出力を集めた後、生成されたコードが有効か正確かをチェックするためにテストを行った。また、SonarQubeなどのツールを使ってコードの質を評価したよ。
コード品質指標
生成されたコードの質をいくつかの基準を使って評価したよ:
- コードの有効性: コードがプログラミング言語の文法ルールに従っているか、エラーなく実行できるかをチェックする。
- コードの正確性: 生成されたコードが意図した機能をどれだけ正確に実行するか、提供された単体テストに合格するかで測る。
- コードの安全性: コードに攻撃の可能性を引き起こす脆弱性がないかをチェックする。
- コードの信頼性: 生成されたコードにバグがあるかを評価する。
- コードのメンテナンス性: コードがどれだけ読みやすく、修正しやすいかを評価し、コードスメル(悪いコーディングプラクティスの兆候)をチェックする。
結果
生成されたコードの有効性
コードの有効性については、以下のような結果が得られたよ:
- GitHub Copilotは91.5%の成功率で、164問題中150の有効なコードを生成した。
- Amazon CodeWhispererは90.2%の成功率で、148の問題について有効なコードを生成した。
- ChatGPTは少し良くて、93.3%の成功率で153の問題に対して有効なコードを生成した。
生成されたコードの正確性
コードがどれだけ正確かを見た結果:
- GitHub Copilotは46.3%の問題に対して正しいコードを生成した。30.5%は不正確で、23.2%は部分的に正しかった。
- Amazon CodeWhispererは31.1%の問題に対して正しいコードを生成した。不正確なコードは28.7%で、部分的に正しいコードは40.2%だった。
- ChatGPTは両方を上回り、65.2%の問題が正しい解決策だった。不正確な解決策は12.2%で、部分的に正しいのは22.6%だった。
生成されたコードの安全性
生成されたコードの安全性を分析した結果:
- どのツールも深刻なセキュリティの欠陥を持つコードは生成しなかったが、いくつかの脆弱性が見られた。
- ツールは一般的にコードの安全性に関しては良好で、深刻な問題が発生する可能性は低かった。
コードの信頼性
生成されたコードに関するバグは次のように見つかった:
- GitHub Copilotは生成されたコードの個々の問題で3つの主要なバグを持っていた。
- Amazon CodeWhispererは1つの主要なバグを持っていた。
- ChatGPTは1つのブロッカーバグともう1つの主要なバグを持っていて、信頼性の問題もあった。
コードのメンテナンス性
メンテナンス性を評価する際、コードスメルを見た。これは悪いコーディングプラクティスや潜在的な問題を示すものだ。
- GitHub Copilotの生成したコードは比較的高い数のコードスメルがあって、動作するコードを生み出したが、読みやすさやメンテナンスのしやすさには問題があるかもしれない。
- Amazon CodeWhispererも似たような問題があり、極端なケースは少なかった。
- ChatGPTは少し良いパフォーマンスを示したが、それでもメンテナンス性の課題は目立った。
入力の質の重要性
実験中、入力の質が出力にどう影響するかをテストした。問題から説明(ドキュストリング)を取り除いたとき、3つのツールのパフォーマンスは大幅に低下したよ:
- 例えば、GitHub Copilotの有効性のスコアは91.5%から78.0%に下がり、正確性のスコアも大きく低下した。
- Amazon CodeWhispererとChatGPTも同様の傾向が見られ、明確で正確な問題説明を提供することがコード生成ツールの効果に大きく影響することが示された。
ダミー関数名
別の実験では、有意義な関数名をダミー名の「foo」に置き換えた。この変更がツールのパフォーマンスに影響を与えたよ:
- GitHub Copilotのコードの有効性スコアは少し改善されたが、正確性のスコアは下がった。
- Amazon CodeWhispererとChatGPTは両方ともコードの正確性が減少し、説明的な関数名が正確なコード生成に重要であることを確認した。
時間の経過による変化
これらのツールのパフォーマンスが時間と共にどう進化したかを、GitHub CopilotとAmazon CodeWhispererの初期バージョンと最新バージョンを比較して調べた。
- GitHub Copilotの新しいバージョンは、単体テストの合格率を62%改善し、進展が見られた。
- Amazon CodeWhispererも改善を示し、前のバージョンに比べて単体テストの合格率が上昇した。
結論
私たちの評価に基づいて、ChatGPTはGitHub CopilotやAmazon CodeWhispererよりも有効で正確なコード生成で優れていることがわかった。ただし、3つのツールすべてがメンテナンス性や複雑なコーディングタスクの取り扱いに関して改善の余地がある。
重要なポイント
- コード生成を求める時に詳細な説明を提供すると、より良い出力が得られる。
- コード生成ツールは間違いを犯すことがあるので、人間の監視なしで頼ってはいけない。
- これらのツールの継続的な改善は、ソフトウェア開発の効率を向上させる可能性を示している。
- これらのツールの仕組みを良く理解することで、プログラマーはより良く活用できるようになる。
要するに、AI駆動のコード生成ツールの登場は、プログラミングに対するアプローチを変える可能性がある。適切な評価を行うことで期待を管理し、これらの革新的な技術を最大限に活用できるようにしよう。
タイトル: Evaluating the Code Quality of AI-Assisted Code Generation Tools: An Empirical Study on GitHub Copilot, Amazon CodeWhisperer, and ChatGPT
概要: Context: AI-assisted code generation tools have become increasingly prevalent in software engineering, offering the ability to generate code from natural language prompts or partial code inputs. Notable examples of these tools include GitHub Copilot, Amazon CodeWhisperer, and OpenAI's ChatGPT. Objective: This study aims to compare the performance of these prominent code generation tools in terms of code quality metrics, such as Code Validity, Code Correctness, Code Security, Code Reliability, and Code Maintainability, to identify their strengths and shortcomings. Method: We assess the code generation capabilities of GitHub Copilot, Amazon CodeWhisperer, and ChatGPT using the benchmark HumanEval Dataset. The generated code is then evaluated based on the proposed code quality metrics. Results: Our analysis reveals that the latest versions of ChatGPT, GitHub Copilot, and Amazon CodeWhisperer generate correct code 65.2%, 46.3%, and 31.1% of the time, respectively. In comparison, the newer versions of GitHub CoPilot and Amazon CodeWhisperer showed improvement rates of 18% for GitHub Copilot and 7% for Amazon CodeWhisperer. The average technical debt, considering code smells, was found to be 8.9 minutes for ChatGPT, 9.1 minutes for GitHub Copilot, and 5.6 minutes for Amazon CodeWhisperer. Conclusions: This study highlights the strengths and weaknesses of some of the most popular code generation tools, providing valuable insights for practitioners. By comparing these generators, our results may assist practitioners in selecting the optimal tool for specific tasks, enhancing their decision-making process.
著者: Burak Yetiştiren, Işık Özsoy, Miray Ayerdem, Eray Tüzün
最終更新: 2023-10-21 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2304.10778
ソースPDF: https://arxiv.org/pdf/2304.10778
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://code.visualstudio.com/docs/editor/intellisense
- https://www.jetbrains.com/
- https://github.com/features/copilot/
- https://openai.com/blog/openai-codex/
- https://plugins.jetbrains.com/plugin/17718-github-copilot
- https://github.com/features/codespaces
- https://aws.amazon.com/codewhisperer/
- https://openai.com/blog/chatgpt
- https://platform.openai.com/docs/model-index-for-researchers
- https://github.com/mirayayerdem/Github-Copilot-Amazon-Whisperer-ChatGPT/blob/main/misc/All_Experiment_Results.xlsx
- https://github.com/mirayayerdem/Github-Copilot-Amazon-Whisperer-ChatGPT/blob/main/misc/All
- https://www.sonarqube.org
- https://docs.github.com/en/github/copilot/research-recitation
- https://www.overleaf.com/project/63a6af42364fd2fc1786207c
- https://github.com/mirayayerdem/Github-Copilot-Amazon-Whisperer-ChatGPT