AI 不上位,与程序员合作写代码才是正道

  • 2019 年 11 月 29 日
  • 笔记

By 超神经

著名的游戏研发公司育碧( Ubisoft )和开源技术大厂 Mozila 近期发布了联手开发的 Clever-Commit 编程辅助工具,为工程师提供 Bug 预警和更正的功能。

我们曾发布过文章《协助你写 Python,只是 AI 取代程序员的第一步》,介绍了写代码的过程中有越来越多的 AI 工具可以帮助工程师,提高自己的代码质量和工作效率。

协助你写 Python,只是 AI 取代程序员的第一步(点击图片阅读)

比如 GitHub CEO 投资的 Kite ,能够智能地根据当前的生产环境,起到代码片段补全、函数调用和文档 demo 查询的功能。我们因为 Kite 曾调侃 AI 的野心不止于给人类打下手,最终是要替代掉工程师职能的。

当然这些只是玩笑,就目前看来 AI 想要完全替代掉手艺人的可能性并不大,在未来更多的还是 AI 的介入帮助工程师更高效优质的工作。

当你发现你的代码运行不了

近日,一款由 Mozila 和育碧公司联合开发的 AI 编码助手 Clever-Commit 冒了出来,而它的作用,就是将 Firefox 后面的工程师从 Bug 中解救出来。2月12 日, Mozila 发出消息,他们与 Ubisoft 合作开始使用这款工具,促使代码编写更高效,从而带给 Firefox 的用户更好的使用浏览体验。

Clever-Commit :前方高能 Bug 预警!

Clever-Commit 的前身是 Ubisoft 于去年推出的 Commit- Assistant 。

Commit- Assistant 是用于查找 Bug 和建议修复的系统,它是一款辅助开发人员改善游戏体验的代码助手。而这个 AI 助手的诞生,得益于他们拥有庞大的代码库。据称,在训练时,它接受了 Ubisoft 约十年的工作代码,包括有许多被修改过 Bug 的代码。

在这样的背景下,Mozlia 和 Ubisoft 合作,推出了升级版的 Clever-Commit 。

Clever-Commit 是一款辅助编程工具,可以简单的说是对代码进行检查的 AI 助手。开发人员将代码更改提交到 Firefox 代码库时,它能把新加入的代码和之前的进行比较,看是否和已经找出的 bug 类似。如果助手判断新提交的部分很可疑,则会提醒开发人员。

如果这个助手的判断准确率很高,这意味着可以在将 Bug 提交到源存储库之前查出并提醒。对于部分 Bug ,Clever-Commit 甚至可以提出合适的修复建议。

Mozilla 计划首先在代码审查期间使用 Clever-Commit,然后随着时间的推移,将其扩展到其他开发阶段。值得一提的是,它完全适用于Mozilla用于Firefox的三种语言: C ++ , JavaScript 和 Rust 。

它发现 Bug 的原理是什么?

其实它的出现是必然的,故障的自动预防和解决是软件发展的一个必由之路。现有方法利用代码和流程度量来构建基于度量的模型,可以有效地防止软件项目中的缺陷插入。

而这里面用到的技术叫做 CLEVER ,最早是由 Ubisoft 和 Concordia 大学的研究人员开发出来的,他们曾写过一篇论文《 CLEVER: Combining Code Metrics with Clone Detection for Just-In-Time Fault Prevention and Resolution in Large Industrial Projects 》,阐释了它的细节,总的来说是一种结合级别的 Bug 预防和解决技术。

文章地址:https://montreal.ubisoft.com/wp-content/uploads/2018/05/ICSE-CE-MSR-165.pdf

它的要点在于将代码加入时,准确的判断出是否是有风险的部分,从而进行拦截或者修复。

实施的方法主要有两个阶段,第一是基于已有指标建立一个库,这能够判断新加入的代码是不是和有风险的代码相似;第二阶段是在代码的克隆区加入这些看起来危险的代码,然后再判断是否为风险代码。

此外, CLEVER 不仅仅只对当前项目评估,它的判定也考虑了其他的关联项目,所以达到了更高的智能性。基于代码库匹配和之前的数据积累, CLEVER 在 Bug 识别率和改进意见方面都处在领先的水平。

Ubisoft 和 Firefox 的跨界合作

说到 CLEVER 为什么厉害,那是因为它的背后,拥有强大的资源。Ubisoft 是视频游戏界的巨头,专门从事高预算视频游戏的设计和实施。

Ubisoft 软件系统高度耦合,包含数百万个文件和提交,由分布在六大洲29个地点的8,000多名开发人员开发和维护。这对 CLEVER 的开发和训练都是得天独厚的优势。

为了对比 CLEVER 的性能,他们在 12 个 Ubisoft 系统进行了测试,结果表明 CLEVER 对于有风险的代码提交,达到了 79% 的精度和 65% 的召回率,这超出同类方法 Commit-guru( 66% 精度和 63% 召回)的性能。此外,CLEVER 能够向开发人员推荐如何修复 66.7% 的风险提交。

应用了 CLEVER 技术的 Clever-Commit,一旦完全融入 Mozilla 的开发流程,预计会取得很好的效果,这也会大大减少开发人员的苦楚。在提交之前,捕获四到五个漏洞,比它们提交进去之后才发觉,要节省更多的资源。

Firefox 的工程团队已经表明,将在其代码编写,测试和发布过程中开始使用 Clever-Commit。他们期望能够通过这个方法,节省数百小时的漏洞风险分析和检测。

还有其他的?

使用机器学习从大型代码库中进行 Bug 排查也有其他的尝试。

去年,微软就在 Visual Studio 中推出了类似的工具:IntelliCode

据悉,IntelliCode 研究了最受欢迎的公共 GitHub 存储库(超过 2,000 个项目,每个项目超过100颗),以发现最佳编码实践的特征。

IntelliCode 的初始目的挺保守的,它根据其他项目如何使用相同的 API,通过了解哪些建议更有可能被使用,提供更智能的 IntelliSense 完成建议。它还用于检测编码样式和空格使用情况,以便它能够以类似代码写作风格的方式写代码。

像 Clever-Commit 一样,IntelliCode 可用于查找 Bug。对开发人员的一时纰漏进行及时的补救。

超神经小百科

注意力机制 Attention mechanism

视觉注意力机制是人类视觉所特有的大脑信号处理机制。这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。

深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。

注意力模型( Attention Model )被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。