是否有任何机器学习技术来检测违反编码标准的情况?

人工智能 神经网络 机器学习 参考请求 进化算法 电脑编程
2021-11-13 03:49:23

是否有任何机器学习技术(例如深度学习或进化算法)来检测违反编码标准的情况?哪一个会更合适?

我没有想到任何特定的编程语言,但类似于PHP_CodeSniffer(遵循这些标准),但不是使用硬编码规则,算法应该学习好的技术,但我不确定基于什么训练数据。您将如何处理培训课程,有什么建议吗?

1个回答

如果系统声称一段代码违反了标准,那么为了对程序员有用,它确实需要提供比“是/否”分类器更多的信息:你需要某种形式的解释来说明为什么它被声称是错的。

显然,人工神经网络对此没有多大用处。

如果我正在解决这样的问题(我怀疑可能会花费大量精力尝试并未能重现已经很好理解的编码标准),那么我的倾向是使用更明确的基于规则的表示。

可能性包括:

  • 遗传编程

  • 学习分类系统

  • 决策树

永远有用的“元启发式要点”有一整节关于规则集的演变。显然,没有什么能阻止您使用已知有用的规则来初始化进化过程。

正如我在这里指出的那样,对于我们当前的 AI 算法,一种方法的成功与否对人类在特征选择/预处理、选择训练集等方面的专业知识/努力非常敏感,因此对此进行创造性实验至关重要。

训练集:两组负例和正例如何,分别由(从错误代码中提取的特征)和重构版本(分别)组成?

功能的一个基本选择是应用一堆代码复杂度指标,并让学习算法将它们结合起来。在这样的数字域中工作的好处是学习算法可能很容易找到要利用的梯度。缺点是规则(可能是形式if mcabe > 2.8等)仍然不如预期的那样提供信息。

对于更复杂的规则(例如要求if elseif else),您可能希望从抽象语法树中提取您的特征。原则上您可以使用整个树,但据我所知,关于图和树结构的 ML仍处于相对起步阶段。