致力于更智能的自动化来修复代码

2021-03-01 13:59:19

在软件开发领域,有许多用于修复错误的自动化工具。但是,大多数这样的程序只能找到剪切和粘贴样式的错误-如果您要求他们找到更高级的模式,尤其是可能逃避专家程序员注意的那种模式,它们就会崩溃。

麻省理工学院计算机科学与人工智能实验室(CSAIL)研究人员开发的新系统旨在提供帮助。该工具被称为Yogo,它使在代码中进行系统的更改变得容易得多,并且可以使用多种编程语言进行更改。

例如,考虑一个电子商务应用程序,它将购物车中的商品表示为具有重复项的无序数组。Yogo可以帮助您在列表中找到对某个给定项目的频率进行计数的所有代码,这是一些较大的重构的一部分–是将其全部替换为更有效的频率计数实现,还是切换到购物车的另一种表示形式共。

Yogo可以协助解决的其他模式包括:

1)找到可以完成一些工作的代码以计算要打印的日志消息,然后由于关闭了日志记录而没有将其打印出来。(此模式在许多语言中很有用。)

2)逆向工程。Yogo可以识别各个功能,然后识别使用它们的越来越大的构建块,直到确定出更高级别的算法为止。

3)多种语言的API。从Facebook的公共API到MongoDB的大量软件都具有适用于多种语言的API。通常,它们在每种语言中的工作方式相同。

“使用Yogo,您可以编写一个声明式查询,以在整个代码库中找到给定的概念,”麻省理工学院硕士课程的学生Pond Premtoon说,他是该项目新论文的主要作者。

合著者吉米·科佩尔(Jimmy Koppel)表示,诸如Google之类的搜索引擎对待搜索代码与在网页中搜索文本几乎一样。麻省理工学院(MIT CSAIL)博士生Koppel说:“它的速度非常快,但并不老练。”

研究人员的许多现有代码搜索方法旨在通过抽象化语句的确切顺序来实现更广泛的通用性,以便识别一个语句何时使用另一个结果(数据依赖)或受条件保护(控制依赖)。 但是,这些所谓的“程序依赖图”(PDG)无法处理表达计算的替代方法,更不用说整个替代API。

输入Yogo。Yogo的工作方式不仅是考虑函数的数据流图,而且还考虑通过一组重写规则可到达的所有等效函数的数据流图。这样,即使它使用备用API,具有不同但在数学上等效的形式或被临时变量分开,它也可以识别操作。

尽管大多数“智能”工具(例如Yogo)都是针对一种语言构建的,并且不容易移植,但Yogo是建立在Koppel博士的工作之上的,该博士专注于构建多语言工具的更好方法。Yogo支持Java和Python,甚至可以编写一个对两种语言都适用的查询。

下一步,作者计划调查Yogo是否可用于识别设计模式并提供有关代码的设计级反馈。他们还正在探索将Yogo变成商业性的bug查找项目的可能性。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。