【论文阅读-ICSE-2021】CodeShovel: 构造方法级别上的源代码历史信息 Constructing Method-Level Source Code Histories
CodeShovel: Constructing Method-Level Source Code Histories
Conference: ICSE 2021
Github:https://github.com/ataraxie/codeshovel/
工具展示页面:https://se.cs.ubc.ca/CodeShovel/index.html
下图是这篇文章所提出工具的一个展示网页。这个工具的一个亮点是,在修改文件名,修改文件路径后依然能够在很大准确率下追踪源代码方法级别上完整的修改历史。
这篇文章通过对42名专业软件开发人员的调查了解到,现有用于检查源代码历史的工具提供的输出与完成代码历史分析任务所需的内容之间的严重不匹配。这篇文章提出了CodeShovel,这是一种用于发现代码中方法修改历史的工具,它可以快速地为90%的方法(包括97%的所有方法更改)生成完整而准确的更改历史,优于现有研究(例如FinerGit)和实践(例如IntelliJ/git log)的主要工具。CodeShovel帮助开发人员浏览源代码方法的整个历史,以便他们能够更好地理解方法是如何演变的。对16位工业开发人员进行的工业代码库的实地研究证实了我们的经验结果,即CodeShovel的正确性、较低的运行时开销,并且还表明该方法可用于广泛的工业开发任务。
简介
版本控制系统(VCS)通过跟踪开发人员对文件的行级更改来存储项目的源代码历史记录。 不幸的是,这些系统不能完全理解源代码的发展,这主要是由于文件在文件系统中的频繁移动和重命名以及在文件之间移动多行导致的。
研究和开发人员通常只关注项目中部分代码的更改历史。但VCS系统常常无法做到。
这篇文章研究集中在提高源代码历史记录构造的准确性和可用性上,这通常被称为“历史切片”。
这些研究的主要区别在于所生成历史的粒度。 例如,在功能级别上,人们可以提取与特定软件功能相关的所有相关提交。类似地,也可以只为给定的感兴趣文件生成历史记录。在某些情况下,研究人员和开发人员社区都希望使用较低粒度的源代码历史记录,因此也存在针对代码行级别的研究。但这样会因为某些代码行偶然间相同而导致false positive和false negative的情况。
这些观察结果支持方法级源代码历史记录的需要,以在过于粗略(例如文件级)和精细度(例如行级)粒度之间取得平衡。 但只有少数几种方法专门研究方法级历史。
这篇文章使用来自20个受欢迎的开源项目存储库的人工构建的Oracle评估了CodeShovel的准确性和运行时性能,并将其准确性与最新的工具(FinerGit)和最佳实践工具(IntelliJ和git log -L)进行了比较。我们还进行了一项工业现场研究,以验证CodeShovel还可以为工业系统生成准确的历史记录。 在这两种情况下,CodeShovel都能正确确定约90%的评估方法的完整历史记录,而中值运行时间约为2秒。
基本结论
在工业界找了42位开发人员进行调研,主要得到两个结论:
RQ1: Do developers use histories?
开发人员常常会使用到代码历史信息。他们最感兴趣的是method-level和class-level粒度的信息。并且经常遍历他们正在研究信息的完整历史记录。
RQ2: How do developers generate histories?
现有工具不足以以最期望的粒度级别提取历史记录。 面对这些任务时,开发人员最常使用按需工具,例如git log和IntelliJ。
主要使用的方法:
CodeShovel利用不同的源代码指标(例如,正文相似度,签名相似度和行相似度)来确定两种给定的方法是否相似。 如果这些相似度超过了我们数据通知的阈值,则认为两种方法是相同的。 这个过程一直持续到找到给定方法的第一个(简介)提交为止。 每个更改提交还与更改种类(例如BodyChange)相关联,这使CodeShovel的输出有助于程序理解
实验验证:
RQ3: How accurate and robust is CodeShovel for producing complete and correct method histories?
CodeShovel的召回超过了相关的工业和研究工具。 对于我们的100个方法测试,它揭示了90%的方法的完整方法历史记录; 就这些方法的更改而言,它发现830/859(97%)的方法更改。
RQ4: What is CodeShovel’s runtime performance, and is it acceptable for on-demand use?
尽管CodeShovel按需计算方法历史记录,但它可以在不到两秒钟的时间内发现大多数方法的全部历史记录。
工业界研究:
RQ5: In which scenarios are method-level histories useful to industrial developers and why?
工业工程师赞赏能够使用CodeShovel快速检查方法的出处,以帮助进行可追溯性,理解和入门,尽管这些方法经常进行重构。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

