このリポジトリには、CHATGPTで生成されたコードを精製する紙のコードとデータが含まれています。ソフトウェアエンジニアリングと方法論(TOSEM)に関するACMトランザクションで公開されているコード品質の問題を特徴付けて軽減します。
私たちの実験は、ChatGPTによって生成されたコードの品質と正確性の評価に焦点を当てています。 ChatGPTの有効性に影響を与える要因を調査し、さまざまな種類のフィードバックで自己修復機能を調査します。このリポジトリには、2033のプログラミングタスク、生成されたコードをテストするスクリプト、およびコードをleetcodeに送信して結果を収集する自動スクリプトが含まれています。
.
├── data
│ ├── chatgpt_generated_code
│ ├── leetcode_tasks
│ ├── rq3
│ ├── results (the folder to store the results of the experiments)
├── src
│ ├── evaluation
│ ├── debugging
│ ├── leetcode_auto_submit
├── README.md
dataディレクトリには、3つのメインフォルダー、 leetcode_tasks 、 chatgpt_generated_code 、 rq3が含まれています。
leetcode_tasksフォルダーには、leetcodeプラットフォーム()からの2,033のプログラミングタスクが含まれています。タスクはJSON形式で保存され、次の情報を含めます。
フィールドの詳細な説明は次のとおりです。
id :タスクの一意の識別子(例: "001")。name :タスクの名前(たとえば、 "2-sum")。difficulty :タスクの難易度は、「簡単」、「中程度」、または「ハード」である可能性があります。link :leetcodeプラットフォーム上の元のタスクへのURL( "https://leetcode.com/problems/two-sum/")。task_description :問題のステートメント、入力形式、制約、および例を含むタスクの完全な説明。test_cases :生成されたコードの正確性を検証するために使用できる入力および予想される出力を備えた一連のテストケース。python_template :クラスとメソッドの署名を含むタスクのPythonコードテンプレート。java_template :クラスとメソッドの署名を含むタスクのJavaコードテンプレート。 chatgpt_generated_codeフォルダーは、 python.jsonとjava.json 2つのJSONファイルで構成されています。各ファイルには、 leetcode_tasksフォルダーのプログラミングタスクのCHATGPTによって生成されたコードスニペットが含まれています。また、静的分析とランタイムエラー検出の結果は、JSONファイルに含まれています。
フィールドの詳細な説明は次のとおりです。
name :タスクの名前。is_pass :ソリューションがテストケースに合格したかどうかを表すバイナリインジケーター(1または0)。test_cases :各テストケースの入力および予想出力の説明。error :エラーのタイプを説明する文字列。error_info :ランタイムエラーに関する追加情報。is_quality_issue :ソリューションに品質の問題があるかどうかを表すバイナリインジケーター(1または0)。quality_info :静的分析ツールによって生成された品質問題の説明(ある場合)。generated_code :タスクのChatGPTによって生成されたコードスニペット。 rq3フォルダーには、RQ3実験の結果が含まれています。 rq3フォルダーは、 simple_feedbackとfeedback_with_static_analysis_runtime 2つのサブフォルダーで構成されています。各サブフォルダーには、それぞれ簡単なフィードバックと静的分析フィードバックを使用して、実験の結果が含まれています。結果はJSON形式で保存されます。
srcディレクトリには、 evaluation 、 debugging 、 leetcode_auto_submit 2つの3つのフォルダーが含まれています。
chatgpt_code_generation.py 、chatgptを使用してコードを生成するためのメインスクリプトです。
評価サブディレクトリには、生成されたコードの品質を評価するためのスクリプトが含まれています。生成されたコードの品質を評価するプロセスでは、静的分析ツールを使用して、生成されたコードの品質問題を検出します。詳細については、 src/evaluationディレクトリのREADME.mdファイルをお読みください。
デバッグサブディレクトリには、ChatGPTの自己不開発機能を探索するためのスクリプトが含まれています。 Simple_feedback.pyスクリプトは、簡単なフィードバックを使用して実験を実施しますが、Static_analysis_feedback.py Scriptには静的分析ツールとランタイムエラーが組み込まれているため、CHATGPTへのより詳細なフィードバックが提供されます。
leetcode_auto_submitフォルダーには、生成されたコードをleetcodeプラットフォームに自動的に送信するためのスクリプトが含まれています。スクリプトはSeleniumを使用して、LeetCodeプラットフォームにログインしてコードを送信するプロセスを自動化します。
パラメーター
ユーザー名:(タイプ:文字列) - ChatGPTサービスへのログインに使用されるメールアドレス。
パスワード:(タイプ:文字列) - chatgptサービスの電子メールアドレスに関連付けられたパスワード。これを安全に保ちます。
skip_login :(タイプ:boolean) - Trueに設定されている場合、クライアントはログインに保存されたセッションを使用しようとし、資格情報の必要性を回避します。繰り返しの実行に役立ちます。
ヘッドレス:(タイプ:Boolean) - ブラウザがヘッドレスモード(GUIなし)で実行されるかどうかを判断します。 falseに設定して、ブラウザUIを表示します。
Incognito :( Type:Boolean) - Trueの場合、ブラウザはIncognitoモードで起動し、以前のセッションからCookieや履歴が使用されないようにします。
user_data_dir :(タイプ:文字列) - ユーザーデータ(Cookieやログインセッションなど)が保存されているディレクトリへのパスで、実行間のセッションの持続性が可能になります。
login_type(オプション):(タイプ:文字列) - 使用するログインのタイプを指定します(通常、手動で)。自動ログインプロセスの処理方法を決定します。
次のコードを使用して、コードをleetcodeに送信して結果を収集できます。
from leetcode_auto_submit import AutoLeetCode
import time
autoleet = AutoLeetCode (
headless = False ,
username = "your_username" ,
password = "your_password" ,
verbose = False ,
incognito = False ,
skip_login = False ,
user_data_dir = "data/profile/" ,
login_type = 'manully'
)
time . sleep ( 2 )
chatgpt_generated_code = "xxxxxxxxxxxx"
task_name = "Two Sum"
language = "Python3"
# if only run code and collect
result_status , result_details = autoleet . run_and_collect ( task_name , language , chatgpt_generated_code )
# if submit codd and collect
result_status , result_details = autoleet . submit_and_collect ( task_name , language , chatgpt_generated_code )評価スクリプトには、次の依存関係が必要です。
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
このリポジトリまたは私たちの調査が役立つ場合は、私たちを引用することを検討してください。
@article{liu2023refining,
title={Refining ChatGPT-generated code: Characterizing and mitigating code quality issues},
author={Liu, Yue and Le-Cong, Thanh and Widyasari, Ratnadira and Tantithamthavorn, Chakkrit and Li, Li and Le, Xuan-Bach D and Lo, David},
journal={arXiv preprint arXiv:2307.12596},
year={2023}
}
このリポジトリは、MITライセンスの下でライセンスされています。