Skip to main content
QUICK REVIEW

[论文解读] InvAASTCluster: On Applying Invariant-Based Program Clustering to Introductory Programming Assignments

Pedro Orvalho, Mikoláš Janota|arXiv (Cornell University)|Jun 28, 2022
Online Learning and Analytics被引用 5
一句话总结

本文提出 InvAASTCluster,一种用于入门级编程作业(IPAs)的新颖程序聚类方法,通过结合匿名抽象语法树(AASTs)与动态生成的程序不变量,提升语义相似性检测能力。通过利用不变量捕捉程序语义,并结合 AASTs 实现结构化表示,该方法在识别语义等价程序方面优于基于语法的聚类方法,从而在基于聚类的程序修复工具(如 Clara)中实现更快、更准确的修复。

ABSTRACT

Due to the vast number of students enrolled in programming courses, there has been an increasing number of automated program repair techniques focused on introductory programming assignments (IPAs). Typically, such techniques use program clustering to take advantage of previous correct student implementations to repair a new incorrect submission. These repair techniques use clustering methods since analyzing all available correct submissions to repair a program is not feasible. However, conventional clustering methods rely on program representations based on features such as abstract syntax trees (ASTs), syntax, control flow, and data flow. This paper proposes InvAASTCluster, a novel approach for program clustering that uses dynamically generated program invariants to cluster semantically equivalent IPAs. InvAASTCluster's program representation uses a combination of the program's semantics, through its invariants, and its structure through its anonymized abstract syntax tree (AASTs). Invariants denote conditions that must remain true during program execution, while AASTs are ASTs devoid of variable and function names, retaining only their types. Our experiments show that the proposed program representation outperforms syntax-based representations when clustering a set of correct IPAs. Furthermore, we integrate InvAASTCluster into a state-of-the-art clustering-based program repair tool. Our results show that InvAASTCluster advances the current state-of-the-art when used by clustering-based repair tools by repairing around 13% more students' programs, in a shorter amount of time.

研究动机与目标

  • 解决在自动化修复中高效识别入门级编程作业(IPAs)中语义等价的正确学生实现方案的挑战。
  • 克服基于语法和控制流的程序表示方法的局限性,这些方法易受干扰且无法有效捕捉语义等价性。
  • 开发一种鲁棒的程序表示方法,整合结构特征(AAST)与语义特征(不变量),以提升聚类准确性。
  • 在真实世界的程序修复流水线中评估所提方法,证明其优于现有最先进聚类技术。
  • 通过减少聚类数量同时提高修复成功率,实现更高效、更有效的 MOOC 自动化反馈。

提出的方法

  • 构建匿名抽象语法树(AASTs)以表示程序结构,同时保留因变量命名不同而产生的语法差异。
  • 通过在多次测试执行中使用 Daikon 动态生成程序不变量,以捕捉诸如循环不变量和变量关系等语义特性。
  • 将 AASTs 与不变量集合整合为每个程序的统一向量表示,以支持基于相似性的聚类。
  • 利用组合向量表示的余弦相似度计算程序相似性,并形成语义等价程序的聚类。
  • 将 InvAASTCluster 集成至 Clara 程序修复框架中,评估其对修复性能与可扩展性的影响。
  • 应用基于聚类的修复:对于每个错误的学生提交,识别其所在聚类中最接近的正确程序,并应用最小化修复。

实验结果

研究问题

  • RQ1与仅基于语法的表示相比,结合 AASTs 与动态生成不变量的程序表示是否能提升语义等价 IPA 的聚类准确性?
  • RQ2在入门级编程作业中常见的小型命令式程序中,使用不变量是否能增强检测语义等价性的能力?
  • RQ3当集成至最先进的基于聚类的程序修复工具(如 Clara)时,InvAASTCluster 在实际应用中的表现如何?
  • RQ4InvAASTCluster 是否能减少覆盖所有正确学生提交所需的聚类数量,同时保持或提升修复成功率?
  • RQ5与现有聚类技术相比,该方法是否带来更短的修复时间与更高的修复覆盖率?

主要发现

  • 结合 AASTs 与不变量的 InvAASTCluster 表示方法,在 IPA 的聚类正确性方面显著优于仅基于语法的表示方法。
  • 在 Clara 修复框架中集成 InvAASTCluster 后,其修复的错误学生提交数量高于原始 Clara 聚类方法。
  • 使用 InvAASTCluster 减少了所需聚类数量,同时保持或提升了修复准确性,从而增强了可扩展性。
  • 由于聚类代表更具准确性和语义意义,使用 InvAASTCluster 的修复过程速度更快。
  • 该方法在多种编程练习中表现出鲁棒性,显著提升了聚类形成过程中的精确率与召回率。
  • 将不变量融入程序表示,使得能够更好检测出在语法上不同但语义等价的程序,例如使用不同变量名或控制流顺序的程序。

更好的研究,从现在开始

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

无需绑定信用卡

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