コード生成タスク(code-generating task、CGT)とは、主な出力が自動生成されたコード成果物であるソフトウェアエンジニアリングタスクを指す。その成果物はプログラミング言語で書かれ、コンパイルまたはインタプリタで解釈されて実行されることを意図している。この定義は 大規模言語モデルに基づくコード生成タスクの三次レビュー:動向、課題、今後の方向性 において統一的な包括概念として提案されたもので、その根拠は、既存の研究がコードを生み出すタスクを個別に扱うか、ソフトウェアエンジニアリング全体というはるかに広い文脈の中で扱うかのどちらかであり、この分野にはそれらのタスクについて共有された範囲設定が欠けているという点にある。

この定義には 2 つの境界が伴う。コードとして書かれたテストと修正パッチは、どちらも実行可能な成果物であるため CGT の出力に数えられる。インラインのコードコメント、docstring、ドキュメントなど、実行できないテキストだけを生み出すタスクは、明示的に CGT ではないとされる。出力の規模は限定されていない。CGT はコード補完のように行やトークンのレベルで動作することもあれば、プログラム合成のようにパッケージやシステム全体のレベルで動作することもある。入力も同様に多様であり、自然言語、既存のコード、ドキュメント、画像などの形態を含みうる。

用法

この用語は、一群の証拠を比較可能にするために存在する。これを提案したレビューは、先行する二次研究が、機械学習とソフトウェアエンジニアリングの交差領域全体を対象とするほど広すぎるか、ソフトウェアテストのような単一のタスクに限定されるほど狭すぎるかのどちらかであり、そのため LLM ベースのコード生成に固有の証拠の状況を切り出すことが難しいと論じている。これとは別に、このレビューは、先行する三次レビューに対して自らの範囲を位置づける中で、自身の CGT の集合を SWEBOK の知識領域とはある程度直交するものだと説明している。

このレビューは、名前の付いた CGT の作業用の集合をまとめており、それぞれを入力から出力への形で特徴づけている。コード生成(自然言語、例、または形式仕様からコードへ)、プログラム合成(同じく、より大きな規模で)、コード補完(コードの文脈から、局所的な文脈に条件づけられた次の行やブロックへ)、プログラム修正や脆弱性修正の一部としてのパッチ生成(コードから修正されたコードへ)、テスト生成(仕様またはコードから、コードとしてのテストへ)、コード翻訳(コードからコードへ、機能を保ったまま言語間で移行する)、そしてリファクタリング(コードから、機能を保ったコードへ)である。

30 件の二次研究で使われている不揃いなラベルをこれらのカテゴリに集約すると、どのタスクが支配的に見えるかが変わる。プログラム修正、脆弱性修正、バグ修正、バグフィックスといった用語を集計すると、パッチ生成と修正が 22 件の研究で最も頻繁に報告される CGT となり、コード生成の 20 件、コード翻訳の 9 件、コード補完の 8 件を上回る。プログラム合成、テスト生成、リファクタリングはそれより少ない頻度で登場する。文献で報告されている少数のラベル — コードの共進化、コード編集、メソッド名生成、テスト修正など — は定義に直接対応づけることができなかったが、著者らはそれらをリファクタリングや修正の活動と密接に関連するものだと述べている。

関連用語