Atsushi Shirafuji, Yusuke Oda, Jun Suzuki, Makoto Morishita, Yutaka Watanobe
会津大学, 東北大学, NTTコミュニケーションサイエンス研究所
サマリ
どういう論文?
- 大規模言語モデルを用いたプログラムリファクタリング。
先行研究と比べてどこがすごい?
- 自動リファクタリングの効率性と効果性の向上。
技術や方法のポイントはどこ?
- GPT-3.5を使用した少数例に基づくアプローチ。
どうやって有効と検証した?
- AOJのデータセットに基づいた実験で複雑性減少を確認。
議論の内容は?
- リファクタリングの適切性とコメント処理の重要性。
アブスト- GPT要約
少数例を用いた大規模言語モデルを使用したプログラムのリファクタリング
主要機能
- コードの複雑さ減少
- 可読性と保守性の向上
- 自動コメント処理
利点
- 効率的なリファクタリング
- より良いコード品質
- コメントの最適化
実験結果
- 平均サイクロマティック複雑性17.35%削減
- 平均行数25.84%減少
- コード全体の改善
評価と結論
GPT-3.5を利用したこのアプローチは、プログラムの複雑性を効率的に減らし、プログラムの全体的な品質を向上させる有効な手段であることを示している。
和訳
I. INTRODUCTION
プログラマーや学習者が読みにくい、冗長な、または複雑なプログラムを作成することが多いことが説明されています。これは、より単純なプログラムを書くための知識が不足していたり、最低限の要件を満たすために急いでいるためであることが多いです。初心者だけでなく、専門家にとっても、最初から読みやすく保守しやすいプログラムを書くことは難しいです。彼らはしばしば、コードの可読性と保守性を改善するために、以前のプログラムバージョンに小さな変更を反復的に加えます。これはコードリファクタリングと呼ばれます(図1)。
複雑で読みにくいプログラムは、メンテナンスが困難になるリスク(つまり、機能の追加、変更、削除が困難になる)や、プログラムを理解できるのは作者だけであるため、後継者に引き継ぐことが困難であるリスク、バグの発生や潜在的なバグの発見と修正の困難さをもたらします。
プログラマーは、時には、より単純で直截的な方法でプログラムを書くための知識が不足しているため、または修正コストが高いため(例えば、納期に間に合わせるための時間がないなど)意図的に複雑で読みにくいプログラムを残すことがあります。Fowlerらによるコードリファクタリングの定義の一つによれば、「ソフトウェアシステムを変更するプロセスであり、コードの外部的な振る舞いを変更せずに内部構造を改善する」とありますが、実際には、コードリファクタリングには、既に動作しているプログラムを壊すリスクもあり、プログラマーがコードリファクタリングをためらうもう一つの理由です。
近年、プログラミング言語だけでなく自然言語のテキストでも訓練された大規模言語モデル(LLM)が、プログラミング教育とソフトウェア開発の両方でプログラミングをサポートする可能性を示しています。プロンプトエンジニアリングの観点から、Whiteらはソフトウェアエンジニアリング活動をサポートするためのコードリファクタリングのためのいくつかのプロンプトパターンを提案しました。最も関連する研究として、MadaanらはCodexとCodeGenという2つの人気のあるLLMを使用して、プログラムの時間効率を改善しました。別の研究では、MadaanらはCodexを使用して変数名とコメントの可読性を向上させました。しかし、私たちの知る限り、LLMを使用してソフトウェアの複雑さを減らすためのコードリファクタリングを実証した先行研究はありません。
ソフトウェア開発とプログラミング教育の両方の分野で生じている問題に対処するために、私たちは既存のLLM、GPT-3.5を使用して、ユーザーが書いた複雑なPythonプログラムの複雑度を改善したバージョンを提案し、彼らがより良いプログラムを書く方法を学ぶことを促すことを提案します。また、プログラミング指導者の負担を軽減することも支援します。LLMのフューショットプロンプトの活用を図るために、各ターゲットプログラミング問題に最適なコードリファクタリング例を選択する方法を提案します。LLMは入力プログラムを壊す可能性があるため、生成されたプログラムは検証され、機能的に正しいプログラムのみがユーザーに提案されます。
実験では、Aizu Online Judge(AOJ)で提供されている44の初級プログラミング問題のセットからリファクタリングされるべき機能的に正しいPythonプログラムを収集し、各プログラミング問題で20のユニークなプログラムをランダムに選択します。正しいプログラムごとに10のコードリファクタリング候補を生成し、生成されたプログラムが文法的にも意味的にも正しいかどうかを検証します。LLMがユーザーが書いたプログラムに合わせて複雑さの少ないプログラムを生成する適用性を、定量的および定性的に評価します。
この作業の貢献は以下の通りです: ・LLMが入力プログラムの大多数に対して正確で複雑さの少ないプログラムを生成できることを実証します。 ・ユーザーが書いたプログラムとよりよく合わせるために、リファクタリング例を選択することによるフューショットプロンプトの活用を提案します。 ・定量的および定性的な評価により、コードリファクタリングにおけるLLMの性能と、プログラミングを支援する可能性を示します。 ・現在のアプローチの限界を議論し、コードリファクタリングにおけるLLMの活用に関する今後の研究への洞察を提供します。
VII. CONCLUSION
この論文は、大規模言語モデル(LLM)、特にGPT-3.5を使用して、ユーザーが書いたPythonプログラムの複雑さを軽減するための方法論を提示しています。提案されたアプローチは、慎重に選ばれた例を用いた数少ないショットプロンプトを活用し、ユーザーがより良いプログラムを書く方法を学ぶことを促します。
定量的評価によると、LLMは入力されたプログラムの大多数(95.68%)に対して、10個の候補を生成することで、正確で複雑度の低いプログラムを生成できることが示されています。平均的な循環的複雑性は17.35%減少し、平均コード行数も25.84%減少しており、LLMがコードリファクタリングにおける効果性を示しています。さらに、メトリクスにおけるいくつかの関連性から、LLMの能力と限界を示唆しています。
質的評価によると、LLMは変数名の変更やフォーマットを通じてコードの可読性を向上させることができます。しかし、既に分かりやすく読みやすいプログラムへの不必要な変更や、コメントの削除や翻訳も観察されました。
総じて、この研究はLLMがコードリファクタリングをサポートし、プログラムの複雑さを改善する可能性を示しています。今後の研究には、異なるLLMの使用や、提案されたリファクタリングの合格率と効果性を高めるためのコードリファクタリング例のさらなる改善が含まれます。