Skip to main content
QUICK REVIEW

[論文レビュー] SPoC: Search-based Pseudocode to Code

Sumith Kulal, Panupong Pasupat|arXiv (Cornell University)|Jun 12, 2019
Software Testing and Debugging Techniques参考文献 45被引用数 11
ひとこと要約

本論文では、コンパイルエラー信号を信用配分のためのものとして用いることで、疑似コードからコードへの合成を向上させる検索ベースのフレームワーク、SPoCを提案する。マルチクラス分類またはプレフィックスベースの pruning を用いて、誤った疑似コード行の翻訳を局所化することで、100回のコンパイル予算のもとで機能正しさを25.6%から44.7%に向上させ、人間が作成した疑似コードとテストケースを含む新しい18,356件のサンプルからなるデータセットにおいて、トップワン翻訳ベースラインを著しく上回った。

ABSTRACT

We consider the task of mapping pseudocode to long programs that are functionally correct. Given test cases as a mechanism to validate programs, we search over the space of possible translations of the pseudocode to find a program that passes the validation. However, without proper credit assignment to localize the sources of program failures, it is difficult to guide search toward more promising programs. We propose to perform credit assignment based on signals from compilation errors, which constitute 88.7% of program failures. Concretely, we treat the translation of each pseudocode line as a discrete portion of the program, and whenever a synthesized program fails to compile, an error localization method tries to identify the portion of the program responsible for the failure. We then focus search over alternative translations of the pseudocode for those portions. For evaluation, we collected the SPoC dataset (Search-based Pseudocode to Code) containing 18,356 programs with human-authored pseudocode and test cases. Under a budget of 100 program compilations, performing search improves the synthesis success rate over using the top-one translation of the pseudocode from 25.6% to 44.7%.

研究の動機と目的

  • 自然言語の疑似コードとテストケースから、長大で機能的に正しいプログラムを合成するという課題に対処すること。
  • プログラム合成におけるフィードバックの疎らさの制限を克服するため、コンパイルエラーを標的化された信用配分の出力源として用いること。
  • エラーメッセージと疑似コードの文脈を用いて、誤った疑似コード行の翻訳を局所化することで、検索の効率を向上させること。
  • 人間が作成した疑似コードと複数のテストケースを含む新しい大規模データセットを用いて、検証のための評価を実施すること。
  • エラーに基づく信用配分が、単にトップワン翻訳に依存するのと比較して、より効果的な検索を可能にすることを示すこと。

提案手法

  • 各疑似コード行を離散的翻訳ユニットとして扱い、個々の行の代替コード翻訳に対する検索を可能にする。
  • コンパイル失敗を失敗分析の主な信号として用いる。なぜなら、88.7%の失敗がコンパイルエラーに起因しているからである。
  • エラーメッセージと疑似コードの文脈を入力として、コンパイル失敗の原因として最も可能性の高い1行のコードを予測するマルチクラス分類器を適用する。
  • プレフィックスベースの pruning を実装し、誤ったコードプレフィックスを特定・ブラックリスト化することで、検索中に正しいプレフィックスのみを保持することを保証する。
  • エラー局所化をベストファースト検索戦略に統合し、問題のある翻訳を低重み化またはブラックリスト化することで、正しいプログラムへの検索を導く。
  • テストケースを用いて機能正しさを検証し、コンパイルエラーを信用配分の主なフィードバックとして用いる。

実験結果

リサーチクエスチョン

  • RQ1コンパイルエラー信号は、疑似コードからコードへの合成における検索をガイドするために効果的に活用できるか?
  • RQ2コンパイル結果に基づくエラー局所化は、標準的な検索手法と比較して、合成成功の向上にどの程度寄与するか?
  • RQ3疑似コードの文脈を組み込むことで、曖昧な状況におけるエラー局所化の精度が向上するか?
  • RQ4プレフィックスベースの pruning は、より難しいプログラムにおいて、マルチクラス分類よりも優れているか?
  • RQ5コンパイルエラーに基づく信用配分は、成功した合成に必要なコンパイル回数をどの程度削減できるか?

主な発見

  • 100回のプログラムコンパイル予算のもとで、提案された検索ベースの手法は44.7%の成功率を達成した。一方、疑似コードのトップワン翻訳では25.6%にとどまった。
  • マルチクラスエラー局所化モデルは、15.5%のプログラムにおいて、中央値として26回の合成試行を削減し、相対削減率の中央値は42%であった。
  • プレフィックスベースの pruning は、より難しいプログラムにおいてマルチクラス分類器を上回った。これは、より正確な失敗局所化のおかげであり、やや簡単なプログラムではコンパイル回数が増加するが、全体としての性能向上が見られた。
  • SPoCデータセットには、人間が作成した疑似コードと複数のテストケースを含むC++プログラムが18,356件含まれており、機能正しさの評価が可能である。
  • エラーメッセージと疑似コードの文脈の両方を用いたエラー局所化は、複数の修正可能な構文エラーを区別できるような曖昧な状況において、精度を向上させた。
  • 事例研究では、プレフィックスベースの pruning が誤ったコードプレフィックスを早期に検出し、削除した。これにより、試行回数は1,511回から413回に削減された。一方、マルチクラスモデルは誤った局所化により失敗した。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。