AI帮你除Bug,英特尔编程工具
最近,英特尔开源了ControlFlag的自动代码调试工具。ControlFlag可以帮助更多的开发者自主地检测代码错误,它主要是利用AI自动识别软件和固件代码中的错误,为开发者节省人工调试时间。
AI帮你除Bug,英特尔编程工具
降低代码调试时间。
因为代码调试对程序开发是非常重要的,因为几乎所有大型软件都需要不断地调试,以尽量避免错误。
但对大多数开发人员而言,这一过程不仅耗费大量的时间,而且大多数调试都只能手工完成。由于修正软件缺陷要花费数天、数周甚至数月的时间,据估计,大约有50%的软件开发时间是用来调试程序的。因为大多数错误都需要语义分析才能确定,并且评估根本原因,甚至最先进的调试系统也不能有效地执行该分析。
虽然在过去几十年中,在研究自动化调试方面有了一定的进步,但是现有工具仍然不能完美地发现日益复杂的软件错误,英特尔实验室的首席人工智能科学家JustinGottschlich说。调试仍然主要由人来驱动,这也是一个重要原因。”
此外,调试代码所需的开销非常大。根据英特尔官方的说法,2020年IT产业大约要花2万亿美元用于与代码调试有关的软件开发费用,也就是平均IT预算的一半。
据报道,这套系统是英特尔机器编程研究(MPR)项目的一部分,其总体目标是通过自动化,使人们能够减少1,000倍地开发软件的时间。举例来说,Gottschlich的团队正在研究的一个领域就是能够对ControlFlag进行自动修复的功能。
英特尔公司自去年推出以来,已经在多种软件系统中对这种机器学习工具进行了测试,并取得了可喜的结果。“Gottschlich说:“当我们开始设计这个系统的时候,我们并不期望它能发现非常复杂的缺陷。“不过,ControlFlag在自我监控的设计下,能够找出高度复杂、细微的软件缺陷,甚至令构建软件的人都惊呆了。”
ControlFlag超能力。
英特尔研究小组采用了一种非监督学习方法,允许ControlFlag在更大范围内发现错误。这个系统从10亿多行无标记源码中学习编码模式,这使得它能达到很高的准确度,甚至适合开发者的风格,以区别软件异常和编程语言的风格。
据了解,ControlFlag适合于任何包含控制结构的编程语言(例如C/C++),其目的是利用不受监督的学习方式减少调试工作量。在无监督学习的情况下,将一个算法放入“未知”数据中,ControlFlag可以对数据进行分类,处理未标记的数据,并学习它的固有结构。
ControlFlag能够不断地从没有标记的源代码中学习,并通过引入新数据来使自己变得更好。尽管这并不能自动地解决它所发现的代码错误,但是这个工具能够向开发者提供可能需要的修改建议。
迄今为止,使用ControlFlag只在两个专有软件仓库上使用,英特尔实验室的首席人工智能科学家JustinGottschlich说,在已经部署的程序中,有超过300个缺陷存在。举例来说,ControlFlag去年在计算机软件项目ClientURL(cURL)中发现了代码异常,该项目每天通过各种网络协议传送超过十亿次的数据。当将异常报告给cURL团队之后,他们同意ControlFlag的发现,然后重新设计代码来修复问题。
ControlFlag的进步。
在过去一年中,英特尔团队一直在努力开发ControlFlag,并在过去一年中吸引了不少学习点。Gottschlich说,有两个关键方面需要改进,那就是减少这个工具报告的错误数量,即报告的错误数量,还有把更高级的语义分析程序集成到ControlFlag的推理中。
不过,ControlFlag作为一款英特尔机器编程工具套件的旗舰产品,它将继续得到发展。“Gottschlich说,ControlFlag的进展不会停止。“由于ControlFlag在软件编程、硬件描述语言和计算设备等方面都有了进步,因此需要不断地改进。
同时,英特尔的MPR团队也在从事一些项目,以简化软件开发。举例来说,去年,该公司发布了一款工具,它与MIT实验室联合开发,能够对代码片断进行研究,从而理解软件的意图。这个叫做MISIM(机器推理代码相似度)的系统利用一个预先存在的代码目录来理解新算法背后的意图,并通过提出其他编程方法或者提供各种选择来帮助工程师开发软件。