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,一种基于搜索的框架,通过利用编译错误信号进行信用分配,提升从伪代码到代码的合成效果。通过多分类或基于前缀的剪枝方法定位有缺陷的伪代码行翻译,该方法在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%的失败是由编译错误引起的。
  • 应用多分类分类器,基于错误信息和伪代码上下文输入,预测最可能引起编译失败的单个代码行。
  • 实施基于前缀的剪枝策略,识别并标记错误的代码前缀,确保搜索过程中仅保留正确的前缀。
  • 将错误定位整合到最佳优先搜索策略中,通过降低权重或标记黑名单方式排除有问题的翻译,引导搜索向正确程序靠近。
  • 使用测试用例验证功能正确性,编译错误作为信用分配的主要反馈来源。

实验结果

研究问题

  • RQ1能否有效利用编译错误信号来指导伪代码到代码合成中的搜索?
  • RQ2基于编译结果的错误定位方法与标准搜索方法相比,在提升合成成功率方面表现如何?
  • RQ3在模糊情况下,引入伪代码上下文是否能提高错误定位的准确性?
  • RQ4在较难的程序上,基于前缀的剪枝是否优于多分类分类?
  • RQ5基于编译错误的信用分配在多大程度上减少了成功合成所需的编译次数?

主要发现

  • 在100次程序编译的预算下,所提出的基于搜索的方法实现了44.7%的成功率,而使用伪代码顶级单一线翻译的方法仅为25.6%。
  • 多分类错误定位模型在15.5%的程序上,将合成尝试次数的中位数减少了26次,相对减少中位数达42%。
  • 尽管在较简单程序上略微增加了编译次数,基于前缀的剪枝在较难程序上优于多分类分类器,原因在于其错误定位更准确。
  • SPoC 数据集包含18,356个C++程序,配有手工编写的伪代码和多个测试用例,支持功能正确性的评估。
  • 结合错误信息和伪代码上下文的错误定位方法,在模糊情况下(如区分多个可修复的语法错误)显著提升了定位准确性。
  • 在案例研究中,基于前缀的剪枝方法早期检测并移除了一个有缺陷的代码前缀,将尝试次数从1,511次减少至413次,而多分类模型因错误定位失败而未能成功。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。