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