不再重复造轮子,AI 给你推荐更好的代码,还没bug


不再重复造轮子,AI 给你推荐更好的代码,还没bug
本文插图
作者 | 青 暮
编辑 | 丛 末
程序员的的代码大部分都不是如同写书法那般一挥而就 , 而需要反复地抠bug , 抠到怀疑人生 。
不再重复造轮子,AI 给你推荐更好的代码,还没bug
本文插图
剑桥大学法官商学院发表的一项研究显示 , 程序员将50.1%的工作时间用于编程 , 而将一半的时间用于debug 。 估计每年的debug总费用为3120亿美元 。
现代软件系统越来越复杂 , 很多时候一个小小的错误就可能让系统崩溃 , 带来巨大损失 。 所以不仅是程序员 , 企业也在为debug付出巨大代价 。 但现在 , AI带来了福音 。
英特尔、麻省理工学院、佐治亚理工学院的研究人员合作开发了自动化代码相似性检测系统MISIM , 该系统可以判断两段代码的相似性 , 即便这两段代码使用的是不同的结构和算法 , 也可以依据它们是否执行相似的任务、是否有相似的代码特征加以判断 。
代码相似性检测可以应用在代码推荐、自动修复bug中 。 在代码推荐的应用过程有点像输入法的词推荐 , 由于MISIM可以对不完整的代码片段进行评估 , 当它检测到不完整的、有bug的代码时 , 就会从其它地方选出功能一样的、没有bug的代码 , 来替换原来的代码 。
不再重复造轮子,AI 给你推荐更好的代码,还没bug
本文插图
并且 , MISIM 还会将代码转换为统一的形式 , 确定代码功能 , 从而在不受编写方式的影响下进行代码片段的对比 。 由于MISIM不受编程语言限制 , 它还可以用于代码语言转换 。
在45,780个程序的实验评估中 , MISIM识别C和C ++程序中的代码 , 这些程序是由学生编写的 , 旨在解决104个编码问题 。 如果一对程序都解决了相同的问题 , 则它们在数据集中被标记为相似 。 MISIM的表现始终好于三个当前最先进系统 , 最高达到40.6倍 。
自动代码生成一直是一个研究热点 , 产业界和学术界都在此方向上努力着 。 OpenAI的GPT-3语言模型甚至可以根据自然语言描述生成网页布局的代码 。 而代码相似性检测则可以复用已有代码 , 使质量高的代码得到更有效的利用 。
不再重复造轮子,AI 给你推荐更好的代码,还没bug
本文插图
输入“创建一个长得像西瓜的按钮” , GPT-3就生成了上图中绿皮红瓢的原型按钮 。 或者输入“welcome to my newsletter的大号字体” , GPT-3就生成了上图中的红色大号字体 。
当然 , 代码相似性检测也可以用于代码查重 。 所以 , 计算机系的同学们 , 注意自己写作业!虽然现在已有非AI的代码查重系统 , 但谁知道AI什么时候会后来居上呢?
1
MISIM架构
不再重复造轮子,AI 给你推荐更好的代码,还没bug
本文插图
MISIM架构概览
MISIM由两个核心组件组成 。 首先 , MISIM具有新型的上下文感知语义结构(CASS) , 该结构通过捕获描述代码上下文的信息 , 使用机器学习算法来确定给定源代码的目的(例如 , 代码是一个函数调用、一个操作等) 。 其次 , MISIM还具有基于神经网络的代码相似性评估算法 , 该算法可通过各种神经网络架构来实现 。
一旦构建了CASS , 就将其向量化并用作神经网络的输入 , 神经网络会生成特征向量 。 生成特征向量后 , 就可以进行代码相似度评估(例如 , 向量点积、余弦相似度等) 。
对于MISIM的相似性评估算法 , 研究人员研究了三种神经网络方法:GNN、RNN和BoF神经网络 。 其中 , 使用GNN的 MISM 总体表现最好 , 能够以超过75%的准确率识别出两个程序的相似程度 。