学习定责:基于数据驱动诊断的初学者类型错误定位
编程语言
2017-09-19 v2
摘要
在具有全局类型推导的语言中,定位类型错误是一项挑战,因为类型检查器必须对程序员的意图做出假设。我们引入了 Nate,一种基于监督学习的错误定位数据驱动方法。Nate 分析一个大型训练数据语料库——即错误类型程序及其“修复”版本的配对——以自动学习一个关于最有可能发现错误的模型。给定一个新的错误类型程序,Nate 执行该模型以生成一个按可能性排序的潜在定责分配列表。我们通过在一组来自两期入门级编程课程的超过 5000 个错误类型 OCaml 程序上,将其精度与 SOTA 进行比较来评估 Nate。我们表明,当考虑排名第一的定责分配时,Nate 的数据驱动模型能够在 72% 的情况下正确预测应被更改的确切子表达式,比 OCaml 高 28 个百分点,比 SOTA 的 SHErrLoc 工具高 16 个百分点。此外,当我们考虑前两个位置时,Nate 的准确率超过 85%,如果考虑前三个位置,则达到 91%。
引用
@article{arxiv.1708.07583,
title = {Learning to Blame: Localizing Novice Type Errors with Data-Driven Diagnosis},
author = {Eric L. Seidel and Huma Sibghat and Kamalika Chaudhuri and Westley Weimer and Ranjit Jhala},
journal= {arXiv preprint arXiv:1708.07583},
year = {2017}
}
备注
OOPSLA '17