近日,英特尔开源了自动代码调试工具 ControlFlag 源代码,ControlFlag 现在可通过 GitHub 获得。
据了解,ControlFlag 可用来帮助更多开发者自主检测代码错误,主要利用 AI 自动识别软件和固件代码中的错误,为开发人员节省手动调试时间。
据悉,英特尔于去年年底首次宣布 ControlFlag,目前该系统只有英特尔内部人员使用,用来自动检测公司软件开发过程中的异常情况。
减少代码调试时间与成本支出
由于代码调试对于程序开发至关重要,因为几乎所有大型软件都需要不断调试,才能最大程度上避免出错。
但是对于绝大多数开发人员来说,这个过程不仅非常耗时,而且大部分调试只能手工作业。因为修复一个软件缺陷可能需要几天、几周甚至几个月的时间,据估计,多达 50% 的软件开发时间花在调试程序上。这是因为大多数错误都需要语义分析来识别、评估根本原因,即使是最先进的调试系统也无法有效执行这种分析。
英特尔实验室首席人工智能科学家 Justin Gottschlich 也表示:“尽管在过去的几十年里,研究自动化调试方面取得了部分进展,但现有工具仍无法完美发现日益复杂的软件错误。这也是调试仍然主要由人为驱动的过程的一个关键原因。”
除此之外,调试代码的消耗支出也很高。据英特尔官方介绍,2020 年 IT 行业在与调试代码相关的软件开发成本上花费了大约 2 万亿美元,约占平均 IT 预算的一半。
据悉,该系统是英特尔机器编程研究 (MPR) 项目的一部分,该项目的总体目标是通过自动化有望将开发软件所需的时间减少 1,000 倍。例如,Gottschlich 的团队正在研究的领域之一是最终扩展 ControlFlag 的能力,以自动修复它检测到的错误。
自去年推出以来,英特尔已在各种软件系统上测试了该机器学习工具,并取得了可喜的成果。“当我们最初设计系统时,我们没有预料到它能够发现高度复杂的缺陷,”Gottschlich 说。“然而,鉴于其自我监督的设计,ControlFlag 能够发现高度复杂、细微的软件缺陷,甚至连我们这些构建它的人都感到震惊。”
“超能的” ControlFlag
英特尔的团队使用一种无监督的学习方法,以允许 ControlFlag 检测更广泛的存储库中的错误。该系统从超过 10 亿行未标记的源代码中学习编码模式,使其能够达到很高的准确性,甚至可以适应开发人员的风格,以区分软件异常和编程语言的风格变化。
据悉,ControlFlag 适用于任何包含控制结构的编程语言(如 C/C++),旨在通过利用无监督的学习方式减少调试工作。通过无监督学习,一个算法被置于 “未知” 数据中,ControlFlag 能够自己对数据进行分类、处理未标记的数据,并从其固有的结构中学习。
ControlFlag 能够不断地从未标记的源代码中学习,随着新数据的引入而 “进化”,使自己变得更好。虽然它还不能自动解决它所发现的代码错误,但该工具可以为开发人员提供了潜在的修改建议。
英特尔实验室首席人工智能科学家 Justin Gottschlich 表示,目前为止仅在两个专有软件存储库上使用 ControlFlag,就发现了生产质量、已部署程序中的 300 多个缺陷。例如,去年 ControlFlag 在名为 Client URL (cURL) 的计算机软件项目中检测到代码异常,该项目每天使用各种网络协议传输数据超过 10 亿次。在向 cURL 团队报告异常后,他们同意 ControlFlag 的发现并重新设计代码以修补问题。
不断进步的 ControlFlag
随着英特尔团队致力于开发 ControlFlag,过去的一年也带来了相当多的学习点。Gottschlich 表示,需要改进的两个关键领域是减少该工具报告的误报数量——报告的不是实际错误的缺陷数量——以及将更先进的语义分析器集成到 ControlFlag 的推理中。
然而,作为一个将成为英特尔机器编程工具套件旗舰产品之一的系统,ControlFlag 将继续发展。“ControlFlag 的进步不太可能停止,”Gottschlich 说。“这主要是因为随着软件编程语言、硬件描述语言和计算设备的发展,ControlFlag 也需要发展以跟上它们的步伐。”
与此同时,英特尔的 MPR 团队正在开展一些专注于简化软件开发的项目。例如,去年,该公司发布了一款与麻省理工学院实验室共同开发的工具,该工具可以研究代码片段以了解软件打算做什么。该系统称为 MISIM(机器推断代码相似性),它使用预先存在的代码目录来理解新算法背后的意图,并通过建议其他编程方法或提供使代码更高效的选项来帮助工程师开发软件。
Gottschlich 预计 MISIM 有一天会与 ControlFlag 一起工作。“当正确融合在一起时,我们设想了一个更强大的新系统,该系统将能够检测 ControlFlag 目前可以检测到的所有缺陷,以及由于潜在的复杂性而目前无法检测到的数百种缺陷,”Gottschlich 说。