Styler:学习格式化约定以修复 Checkstyle 违规
软件工程
2022-08-22 v5
摘要
确保格式化约定的一致使用是现代软件质量保障的一个重要方面。虽然格式化约定违规可由 linter 中实现的格式检查器自动检测,但目前尚无令人满意的修复方案。手动修复格式化约定违规浪费开发人员时间,且代码格式化器未考虑开发人员为所用 linter 采用并配置的约定。在本文中,我们提出 Styler,一种专用于使用机器学习方法修复格式检查器报告的格式化规则违规的工具。对于给定的项目,Styler 首先通过在无违规的源代码文件中注入项目特定规则的违规来生成训练数据。然后,它通过将编码为 token 序列的训练数据输入长短期记忆(LSTM)神经网络来学习修复。最后,它用训练好的模型预测真实格式化违规的修复。目前,Styler 支持单一检查器 Checkstyle,这是一个高度可配置且流行的 Java 格式检查器。在实证评估中,Styler 修复了从 104 个 GitHub 项目挖掘的 26,791 个 Checkstyle 违规中的 41%。此外,我们将 Styler 与 IntelliJ 插件 CheckStyle-IDEA 以及基于机器学习的代码格式化器 Naturalize 和 CodeBuff 进行了比较。我们发现 Styler 修复了多样化 Checkstyle 规则(24/25 条规则)的违规,与其他系统相比生成更小的修复,并且在项目上训练后能在数秒内预测修复。通过手动分析,我们确定了 Styler 未能生成正确修复的情况,这可指导 Styler 的进一步改进。最后,结果表明 Styler 可有助于开发人员修复 Checkstyle 格式化违规。
引用
@article{arxiv.1904.01754,
title = {Styler: learning formatting conventions to repair Checkstyle violations},
author = {Benjamin Loriot and Fernanda Madeiral and Martin Monperrus},
journal= {arXiv preprint arXiv:1904.01754},
year = {2022}
}