一种结合二者的新方法,展示如何查找已发布软件中的bug.doc
《一种结合二者的新方法,展示如何查找已发布软件中的bug.doc》由会员分享,可在线阅读,更多相关《一种结合二者的新方法,展示如何查找已发布软件中的bug.doc(4页珍藏版)》请在三一文库上搜索。
1、一种结合二者的新方法,展示如何查找已发布软件中的bug程序分析通常有两种方法,分别基于数理逻辑和自然语言理解。通过将程序表示成图结构,来自微软研究院和西门菲莎大学的研究者展示了一种结合二者的新方法,可以直接从源代码中学习,且更准确地查找已发布软件中的 bug。过去五年,基于深度学习的方法给大量应用带来了变革,如需要理解图像、话语和自然语言的应用。对于计算机科学家而言,一个自然出现的问题是:计算机是否能够学会理解源代码。乍一看这个问题似乎很简单,因为编程语言的设计初衷就是被计算机理解。但是,很多软件 bug 的出现是因为我想让软件这么做,但是写出来却是另外一回事。也就是说,小的拼写错误可能导致严
2、重后果。看一下以下这个简单示例:float getHeight return this.width; .该示例中,人类或者理解height和width意思的系统可以很快发现问题所在。源代码具备两种功能。首先,它与计算机进行准确交流,以执行硬件指令。其次,它与其他程序员(或源代码作者)针对程序的运行情况进行交流。后者通过选择代号、代码布局和代码注释来实现。在发现两种交流渠道似乎可以分离后,一个自动发现软件 bug 的系统出现了。之前的程序分析主要关注程序的正式、机器可理解语义或将程序看作(有点奇怪的)自然语言。前者的方法来自于数理逻辑,要求对每个需要处理的新案例进行大量的工程工作。而自然语言方法
3、需要在纯句法任务上性能优越但尚无法学习程序语义的自然语言处理工具。在 ICLR 2018 的一篇论文Learning to Represent Programs with Graphs中,来自微软研究院和西门菲莎大学的研究者展示了一种结合二者的新方法,并展示了如何查找已发布软件中的 bug。程序图为了学习源代码中的大量结构,研究者首先把源代码转换成程序图(program graph)。图中的节点包括程序的 token(即变量、运算子、方法名等)及其抽象句法树的节点(定义语言句法的语法元素,如 IfStatement)。程序图包含两种不同类型的边:句法边,表示代码解析方式,如 while loo
4、p 和 if block;语义边,即简单程序分析的结果。图 1:句法边句法边包括简单的NextToken边、用于表示抽象句法树的Child边,以及连接一个 token 和源代码中它最后一次出现的LastLexicalUse边。图 1 展示了此类边用于 statement Assert.NotNull(clazz) 的部分示例,其中对应 token 的节点是灰色框,对应程序语法的非终端的节点是蓝色椭圆形框。Child 边是蓝色的实线边,而 NextToken 边是黑色的双线边。语义边包括连接一个变量和它在程序执行中最后一次使用的LastUse边(如果是循环案例,则变量在程序执行中最后一次使用的情
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一种 结合 二者 新方法 展示 如何查找 发布 软件 中的 bug
链接地址:https://www.31doc.com/p-3364807.html