返回
Detecting Refactoring Commits in Machine Learning Python Projects: A Machine Learning-Based Approach
DOI:10.1145/3705309.png)
摘要
En 中文
重构旨在在不改变其功能行为的前提下提高软件质量。理解开发者的重构活动对于改进软件可维护性至关重要。近年来,机器学习(ML)库和框架在软件系统中的使用显著增加,这使得最大化其可维护性变得至关重要。由于ML库和框架具有数据驱动的特性,它们通常经历与传统项目不同的开发过程。因此,它们可能会经历各种类型的数据相关重构。当前最先进(state-of-the-art)的重构检测工具尚未在ML技术领域进行测试,并且它们并非专门设计用于检测ML项目中的ML特定重构类型(例如数据操作);因此,它们可能无法充分识别所有潜在的重构操作,特别是ML特定的重构操作。此外,大量ML库和框架是用Python编写的,而Python的重构检测工具支持有限。PyRef是一种基于规则且当前最先进的Python重构检测工具,能够识别11种类型重构操作,且具有较高的精度。相比之下,对于其他语言(如Java),当前最先进的工具能够检测更全面的重构列表。例如,Rminer可以为Java项目检测99种重构类型。受利用提交信息(commit messages)检测重构的先前工作启发,我们引入了MLRefScanner,这是一种原型工具,应用ML技术来检测ML Python项目中的重构提交。MLRefScanner能够检测涉及ML特定重构操作以及当前最先进重构检测工具检测范围之外的其他重构操作的提交。为了证明我们方法的有效性,我们在199个ML开源库和框架上评估了MLRefScanner,并将其与用于Python项目的其他重构检测工具进行了比较。我们的研究发现,MLRefScanner在检测与重构相关的提交方面优于现有工具,在识别与重构相关的提交时,达到了94%的总精度和82%的召回率。与当前最先进重构检测工具相比,MLRefScanner能够识别包含ML特定和附加重构操作的提交。当将MLRefScanner与PyRef结合使用时,我们可以进一步将精度和召回率分别提高到95%和99%。MLRefScanner为Python ML社区提供了有价值的贡献,因为它使ML开发者能够更有效地检测其ML Python项目中的与重构相关的提交。我们的研究为利用机器学习技术检测其他编程语言或技术领域的重构活动这一有前景的方向提供了启示,在这些领域中,常用的基于规则的重构检测方法是不够的。
Keyword:
Code Refactoring
Refactoring Detection
Python Refactoring
Machine Learning
Code Quality
期刊
A
IF:
6.2
论文数:
1.2K
被引数:
3.4K

