Skip to main content
QUICK REVIEW

[論文レビュー] FAPR: Fast and Accurate Program Repair for Introductory Programming Courses

Yunlong Lu, Na Meng|arXiv (Cornell University)|Jul 14, 2021
Software Testing and Debugging Techniques参考文献 33被引用数 8
ひとこと要約

FAPR は、構文的エンコードとテストベースの検証を用いたトークンレベルの比較を活用して、最小限で正しい修正を生成する、導入プログラミングコース向けの高速かつ正確なプログラム修復システムである。FAPR は 95.5% の修復提案カバレッジと、サンプル修復における 89.6% の正答率を達成し、C や C++ プログラムにおける速度、正確性、クロス言語移植性において Clara より優れている。

ABSTRACT

In introductory programming courses, it is challenging for instructors to provide debugging feedback on students' incorrect programs. Some recent tools automatically offer program repair feedback by identifying any differences between incorrect and correct programs, but suffer from issues related to scalability, accuracy, and cross-language portability. This paper presents FAPR -- our novel approach that suggests repairs based on program differences in a fast and accurate manner. FAPR is different from current tools in three aspects. First, it encodes syntactic information into token sequences to enable high-speed comparison between incorrect and correct programs. Second, to accurately extract program differences, FAPR adopts a novel matching algorithm that maximizes token-level matches and minimizes statement-level differences. Third, FAPR relies on testing instead of static/dynamic analysis to validate and refine candidate repairs, so it eliminates the language dependency or high runtime overhead incurred by complex program analysis. We implemented FAPR to suggest repairs for both C and C++ programs; our experience shows the great cross-language portability of FAPR. More importantly, we empirically compared FAPR with a state-of-the-art tool Clara. FAPR suggested repairs for over 95.5% of incorrect solutions. We sampled 250 repairs among FAPR's suggestions, and found 89.6% of the samples to be minimal and correct. FAPR outperformed Clara by suggesting repairs for more cases, creating smaller repairs, producing higher-quality fixes, and causing lower runtime overheads. Our results imply that FAPR can potentially help instructors or TAs to effectively locate bugs in incorrect code, and to provide debugging hints/guidelines based on those generated repairs.

研究の動機と目的

  • 導入プログラミングコースにおけるスケーラブルで正確かつクロス言語対応可能なプログラム修復フィードバックを提供すること。
  • 複雑な静的または動的解析に依存する既存ツールが抱える高いランタイムオーバーヘッドと言語依存性を低減すること。
  • 構文的エンコードとステートメントレベルの差分最小化を通じて、アルゴリズム的意図を保持しつつコード変更を最小限に抑えることで、修復品質を向上させること。
  • 手動でのエラーモデリングや複雑なプログラム解析を回避し、テストケースとトークンレベルの比較のみを用いて、効率的で移植可能で正確な修復提案を可能にすること。

提案手法

  • FAPR は、トークン列の最長共通部分列(LCS)を用いて、誤りのあるプログラムに最も類似する最大 100 個の正しいプログラムを特定する。
  • 抽象構文木(AST)からの深さ情報でトークン列を拡張し、構文構造をエンコードすることで比較の正確性を向上させる。
  • ステートメントレベルの差分を最小化するように最適な LCS を選ぶ独自のマッチングアルゴリズムを採用し、修復が最小限かつ意味的に適切であることを保証する。
  • 選択された正しいプログラムを、誤りのあるプログラムの変数名に置き換えることで正規化し、構文を一致させる。
  • 正規化された正しいプログラムと誤りのあるプログラムの間のコード差分の部分集合を探索することで、候補となる修復を生成する。
  • 各候補修復は自動テストを用いて検証され、静的または動的プログラム解析に依存せずに正しさを保証する。

実験結果

リサーチクエスチョン

  • RQ1複雑な静的または動的解析に依存せずに、高速かつ正確なプログラム修復システムを実現できるか?
  • RQ2構文的エンコードを補完したトークンレベルの比較は、最小限で正しい修復を生成するのにどの程度効果的か?
  • RQ3テストベースの検証アプローチは、クロス言語移植性と修復品質をどの程度確保できるか?
  • RQ4FAPR は、Clara らのような最先端のツールと比較して、修復カバレッジ、正答率、パフォーマンスのどの面でも優れているか?

主な発見

  • FAPR は 6,676 個の誤りのある C プログラムの 99% に対して修復を提案し、20,897 個の C/C++ プログラムの 95.5% に対しても同様の提案を実施し、高い修復カバレッジを示した。
  • 250 個のサンプル修復のうち 89.6% が最小限で正しいものであったため、高い修復品質が裏付けられた。
  • FAPR は全指標で Clara を上回った:より高い修復提案率、より小さい修復サイズ、より優れた修正品質、低いランタイムオーバーヘッド。
  • 14,221 個の正しいプログラムに対する全前処理時間はたったの 306 秒で、その効率性が顕著に示された。
  • C から C++ への移植にほとんど開発者の作業が不要であったため、強力なクロス言語移植性が確認された。
  • FAPR のテストベースの検証により、言語固有の解析に依存しなくなり、幅広いプログラミング言語に応用可能になった。

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

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

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

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