acm-header
登录

ACM通信

研究突出了

技术角度:借用大代码来自动化编程活动


大数据与机器学习的结合彻底改变了计算机视觉、机器人和自然语言处理等领域。在这些领域,自动检测和利用隐藏在大型数据集中的复杂模式的技术一再优于基于人类洞察力和直觉的技术。

但是,尽管理论上可以利用大量的代码(大代码)来为软件提供类似的进步,但事实证明,编程对这种自动化非常抗拒。今天的许多编程都是由开发人员在诸如Stack Overflow这样的在线信息聚合器上部署关键字搜索来找到,然后手动调整实现所需行为的代码序列组成的。

下面的文章介绍了利用大型代码自动化两项编程活动的新技术:为JavaScript标识符选择可理解的名称,为JavaScript变量生成类型注释。基本方法利用大型JavaScript代码库构建概率模型,根据周围的上下文(包括常量、JavaScript API调用和JavaScript表达式和语句中的变量使用)预测名称和类型注释。

当在模糊了原始变量名的程序上运行时,实现的系统能够恢复原始变量名的时间超过60%。类型注释的结果更加有趣——所实现的系统为超过一半的基准测试程序生成了正确的类型注释。作为比较,程序员提供的注释仅对这些程序中的四分之一多一点是正确的。该系统可透过互联网登入jsnice.org拥有数十万用户。

这些结果展示了这种方法如何帮助JavaScript程序员生成更容易阅读和理解的程序。一个潜在的长期后果可能是JavaScript程序方面(如变量名和程序结构与类型之间的关系)的事实标准逐渐出现。更广泛地说,结果还突出了全世界JavaScript代码中存在的大量冗余,并提出了生成这些代码真正需要多少人力的问题。

为什么这项研究如此成功?首先,作者选择了一个非常适合机器学习的问题,而不是大代码。目前的机器学习技术不能提供正确的结果;相反,它们只提供与训练集中以前的结果相似的结果。变量名或类型注释预测器不必总是正确的;它只需要足够的时间是正确的,是有用的。JavaScript程序共享足够多的变量名和类型注释模式,以支持合理准确的模型。

第二个原因是技术上的,特别是公开变量和周围上下文之间相关关系的程序表示的开发,包括如何在JavaScript语句和表达式中使用变量。在这个程序表示中暴露出的特征使条件随机场能够立即应用,这是机器学习中用于结构化预测的标准技术,以前被证明对解决自然语言处理和计算机视觉等领域的问题有效,以解决学习和预测问题。为该领域开发一种新的近似MAP推断算法,在处理每个节点数千个标签时,可以实现交互使用所需的性能(与以前的许多应用程序相比,以前的应用程序只能处理每个节点数十个标签)。


为什么这项研究如此成功?首先,作者选择了一个非常适合机器学习的问题,而不是大代码。


我们可以从这一研究方向看到什么未来?最明显的下一步包括各种自动化编程助手,用于代码搜索、代码完成和自动补丁生成等任务。在这里,助理将与程序员互动,以指导将模糊的、不确定的或不明确的目标转化为部分或完全实现的代码的过程,需要程序员监督来完成和/或确保结果代码的正确性。

如何在对正确性、自主性或新颖性要求更高的编程任务上取得进展还不太清楚。关键的一步可能是找到有效的方法,将概率推理与应用于计算机程序的更传统的逻辑推理结合起来。未来的研究将决定这一目标的可行性,部分可能受到本文所提出的结果的启发。

回到顶部

作者

马丁·c·Rinard是美国麻省理工学院电气工程与计算机科学系的教授,也是计算机科学与人工智能实验室的成员。

回到顶部

脚注

查看所附文件,请访问doi.acm.org/10.1145/3306204


版权归作者所有。
向所有者/作者请求(重新)发布许可

数字图书馆是由计算机协会出版的。版权所有©2019 ACM股份有限公司


没有发现记录

登录为完全访问
»忘记密码? *创建ACM Web帐户
文章内容:
Baidu
map