Skip to main content
QUICK REVIEW

[论文解读] Deep Learning for Bug-Localization in Student Programs

Rahul Gupta, Aditya Kanade|arXiv (Cornell University)|May 28, 2019
Software Testing and Debugging Techniques参考文献 27被引用 4
一句话总结

本文提出了一种新颖的深度学习方法,用于在学生程序中进行语义错误定位,采用树卷积神经网络预测测试结果,并利用神经归因技术识别出错误代码行。该方法在无需执行程序或依赖启发式规则的情况下,优于最先进的动态与静态基线方法,且与编程语言无关。

ABSTRACT

Providing feedback is an integral part of teaching. Most open online courses on programming make use of automated grading systems to support programming assignments and give real-time feedback. These systems usually rely on test results to quantify the programs' functional correctness. They return failing tests to the students as feedback. However, students may find it difficult to debug their programs if they receive no hints about where the bug is and how to fix it. In this work, we present the first deep learning based technique that can localize bugs in a faulty program w.r.t. a failing test, without even running the program. At the heart of our technique is a novel tree convolutional neural network which is trained to predict whether a program passes or fails a given test. To localize the bugs, we analyze the trained network using a state-of-the-art neural prediction attribution technique and see which lines of the programs make it predict the test outcomes. Our experiments show that the proposed technique is generally more accurate than two state-of-the-art program-spectrum based and one syntactic difference based bug-localization baselines.

研究动机与目标

  • 为大规模在线编程课程中提供可操作反馈,解决自动化评分仅报告测试失败的问题。
  • 实现在不执行代码或依赖参考实现的情况下,自动定位学生程序中的错误代码行。
  • 开发一种与编程语言无关的技术,避免依赖基于启发式的静态分析或动态谱分析。
  • 通过高精度识别可疑代码行,提升反馈质量,从而帮助学生和教师。

提出的方法

  • 在程序-抽象语法树(AST)和测试ID对上训练一种新型树卷积神经网络(Tree-CNN),以预测程序在给定测试中是否通过。
  • 使用最先进的神经预测归因技术,将网络的预测结果追溯到源代码中的具体代码行。
  • 对程序嵌入向量应用K-means聚类,以降低基线比较的搜索成本,提升效率而不损失准确性。
  • 利用来自AST的程序嵌入向量实现与编程语言无关的分析,避免依赖语法或结构相关的启发式规则。
  • 将错误程序的归因分数与同一聚类中一组正确程序的分数进行比较,以对可疑代码行进行排序。
  • 采用判别式模型进行错误定位,避免在训练过程中需要显式的错误标注。

实验结果

研究问题

  • RQ1在不执行程序的情况下,基于程序-AST与测试ID对训练的深度学习模型能否准确预测功能正确性?
  • RQ2神经归因技术能否通过识别故障程序中最具可疑性的代码行,有效定位语义错误?
  • RQ3与现有的基于谱分析和语法差异分析的错误定位技术相比,所提方法在准确性上表现如何?
  • RQ4对程序嵌入向量进行聚类在多大程度上提升了效率,同时不降低错误定位的准确性?
  • RQ5所提技术能否在不进行语言特定调优的情况下,推广至多种编程语言?

主要发现

  • 所提出的基于深度学习的错误定位技术在大多数评估指标上优于两种最先进的基于动态谱分析的方法和一种基于静态语法差异分析的方法。
  • 对程序嵌入向量应用K-means聚类,将基线搜索成本降低了5倍,且所有指标的准确率下降不足0.5%。
  • 模型在识别错误代码行方面表现出高精度,示例案例中前5个可疑代码行正确包含了实际错误(第9行和第10行)。
  • 该技术与编程语言无关,因其依赖于基于AST的嵌入向量,不依赖于语法或结构相关的启发式规则。
  • 该方法在训练过程中无需任何人工标注、参考实现或程序执行,因此适用于大规模在线课程的可扩展性。
  • 神经归因机制成功定位了语义错误,通过突出显示对失败预测贡献最大的代码行,即使在无执行轨迹访问的情况下也有效。

更好的研究,从现在开始

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

无需绑定信用卡

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