是否有使用神经网络进行静态代码分析的现有示例?

人工智能 神经网络 机器学习 质量控制
2021-10-25 02:02:16

背景背景:

过去,我大量应用了各种“代码质量指标”来静态分析代码,以了解代码的“可维护性”,并使用此处提到的可维护性指数等内容。

但是,我面临的一个问题是,一种语言是否具有有效测量此类指标的库 - 只有这样它才能使用,否则它是相当主观/任意的。鉴于在企业系统中必须处理的语言过多,这可能会变得相当笨拙。

提议的想法:

构建和训练一个“提取代码文件夹”的人工神经网络(即,假设该文件夹/包中的所有文件都包含我们想要计算其质量指标的“项目”)。这可能再次取决于语言,但让我们假设它存在于我最难使用的语言(用于衡量“可维护性”):Scala。

McCabe's complexity使用类似或可能是“约定”的数字指标,Cyclomatic complexity但并不完全相关。无论语言如何,类/方法长度之类的东西几乎总是相关的。因此,通过主观评估提供一些“数字度量”+抽象的可读性概念来训练人工神经网络将是人工神经网络“输入”的良好平衡。输出要么是可维护性的分类low, medium, high等,要么是介于0 and 1.

问题:

是否已尝试过,是否有任何参考资料?我花了一些时间通过 Google Scholar 进行挖掘,但没有发现任何“可用”或有价值的东西。如果它不是 Scala 也没关系,但是 ANN 是否被用于测量代码质量(即静态分析),这样的好处或坏处是什么?

PS:希望这个问题不会太宽泛,但如果是这样,请在评论中告诉我,我会尽可能具体。

1个回答

肯定有关于相关主题的文献:代码异味检测。

“代码异味”是代码存在维护问题的标志,并暗示存在技术债务。有很多气味的代码质量较低是合理的。代码异味包括巨型类、高圈复杂度等。

丰塔纳等人。有一个很好的 2016 年调查,比较了检测代码异味的不同 ML 方法。对该论文的反向引用搜索发现了许多其他似乎相关的论文,包括:

这似乎是一个经过充分研究的领域。虽然我无法找到一个跨语言模型,但我怀疑一个很可能存在。