0%

Mining Software Repositories in the age of AI

Mining Software Repositories in the age of AI

此文在我个人理解之上总结的,同时也并不是完整的报告内容,只是其中一部分,如有错误,恳请指正。

概念简介

  • Code Smell

    Code Smell中文译名一般为“代码异味”,或“代码味道”,它是提示代码中某个地方存在错误的一个暗示,开发人员可以通过这种smell(异味)在代码中追捕到问题。

    在计算机编程社区中,code smell代表了任何标志着事物变坏的征兆。它常常标志代码应该被refactored或者全部的设计都应该被reviewed。这个短语出现在 WardsWiki上,它是被Kent Beck杜撰出来的。在refactoring兴起之后,这个短语的使用率骤增。

    判断是否存在code smell经常是主观判断,并且随着语言、开发者、开发理论的不同而存在差异。

    经验丰富和知识渊博的开发人员通过对优秀设计有一种“感觉”,他们已经达到一种称之为“无意识能力 (UnconsciousCompetence)”的状态。也就是说,他们无需思考,只要通过查看代码或一段设计就可以立马对这个项目的代码质量有一种 “感觉”,能够对代码设计的优劣有一个大致的判断。

    但大家需要注意,code smell只是一种“暗示”,而非一种“确定”。将某些事物称之为“code smell”并未是一种攻击;它只是一种提示:开发人员需要对项目设计进行更进一步的查看。因此,code smell更多是“直觉的,本能的”。

  • Anti-pattern

    反模式:告诉你在开发、设计、管理中不要采用的糟糕的解决方案。
    与优秀的改进型模式相反,反模式告诉我们避免这些糟糕的模式采用优秀的模式。

    主要有这些反模式:

    • Organizational anti-patterns
    • Project management anti-patterns
    • Analysis anti-patterns
    • Software design anti-patterns(Object-oriented design anti-patterns)
    • Programming anti-patterns
    • Methodological anti-patterns
    • Configuration management anti-patterns

利用深度学习进行代码异味检测

CNN

Deep Learning Anti-patterns from Code Metrics History

使用卷积神经网络(CNN)捕获修订历史(revision history)中的结构代码变更。

image-1

关于源代码的历史信息的改变极大地提高了检测性能。

image-2

CNN的表现也优于传统的ML模型。

image-3

RNN

Connecting Software Metrics across Versions to Predict Defects

利用递归神经网络(RNN)捕获度量变化序列(sequences of metrics changes)

image-4

HVSM: Historical Version Sequence of Metrics

(a) constructing the historical version sequence of each file in our projects

(b) extracting the HVSM of each file from its version sequence

(c) leveraging RNN to predict file-level defects using the extracted HVSMs

image-5

与使用代码和过程度量的典型技术相比,使用HVSM的RNN具有更好的性能。

基于RNN的模型在不同的场景下都能优于基线分类器。

image-6