1.简述APR目的及其过程,2.提出3个局限性,3.针对这三个局限性进行的改进,进行简要分析。4.写下了Recoder采用的两个新颖的技术,5.Recoder模型架构,6.最后照搬了文章的结果。
在后续1.会对Recoder采用的提供者决策者架构进行分析,2.对Recoder模型架构的四个组成部分(coder reader, AST reader, tree path reader, edit decoder)进行分析,3.对实验进行分析。

目录

  • 1.APR
  • 2.当前基于DL的APR的局限性
    • 1. 会包含语法错误的程序
    • 2. 对于小的编辑表示效率低(原因见3.2)
    • 3. 无法生成特定于项目的标识符
  • 3.Recoder:Repair Decoder针对对上述局限性的改进
    • 3.1确保语法正确性
    • 3.2编辑生成,显著减小补丁空间
    • 3.3生成占位符
  • 4.Novelty
    • 1. 基于提供者/决策器体系结构的语法制导Edit Decoding(针对局限性1,2)
    • 2. 占位符生成(针对局限性3)
  • 5.Overview of Recoder
  • 6.结果

1.APR

APR(automated program repair):有助于提高软件开发和维护的效率

#mermaid-svg-WctMSCk8GnFJkleb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WctMSCk8GnFJkleb .error-icon{fill:#552222;}#mermaid-svg-WctMSCk8GnFJkleb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WctMSCk8GnFJkleb .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-WctMSCk8GnFJkleb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WctMSCk8GnFJkleb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WctMSCk8GnFJkleb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WctMSCk8GnFJkleb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WctMSCk8GnFJkleb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WctMSCk8GnFJkleb .marker.cross{stroke:#333333;}#mermaid-svg-WctMSCk8GnFJkleb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WctMSCk8GnFJkleb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WctMSCk8GnFJkleb .cluster-label text{fill:#333;}#mermaid-svg-WctMSCk8GnFJkleb .cluster-label span{color:#333;}#mermaid-svg-WctMSCk8GnFJkleb .label text,#mermaid-svg-WctMSCk8GnFJkleb span{fill:#333;color:#333;}#mermaid-svg-WctMSCk8GnFJkleb .node rect,#mermaid-svg-WctMSCk8GnFJkleb .node circle,#mermaid-svg-WctMSCk8GnFJkleb .node ellipse,#mermaid-svg-WctMSCk8GnFJkleb .node polygon,#mermaid-svg-WctMSCk8GnFJkleb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WctMSCk8GnFJkleb .node .label{text-align:center;}#mermaid-svg-WctMSCk8GnFJkleb .node.clickable{cursor:pointer;}#mermaid-svg-WctMSCk8GnFJkleb .arrowheadPath{fill:#333333;}#mermaid-svg-WctMSCk8GnFJkleb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WctMSCk8GnFJkleb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WctMSCk8GnFJkleb .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-WctMSCk8GnFJkleb .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-WctMSCk8GnFJkleb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WctMSCk8GnFJkleb .cluster text{fill:#333;}#mermaid-svg-WctMSCk8GnFJkleb .cluster span{color:#333;}#mermaid-svg-WctMSCk8GnFJkleb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WctMSCk8GnFJkleb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Buggy Code
APR Tool
Patches
Impove Effiency and Quality


最近的APR技术结合深度学习,特别是使用编译器解码器架构来生成补丁。

2.当前基于DL的APR的局限性

Limitations of current DL-based APR:

1. 会包含语法错误的程序

2. 对于小的编辑表示效率低(原因见3.2)

3. 无法生成特定于项目的标识符

3.Recoder:Repair Decoder针对对上述局限性的改进

针对上面的局限性1:扩展AST中的Non-terminals来确保生成程序的语法正确性
针对上面的局限性2:Recoder的解码器组件生成一系列编辑而不是生成新的语句;且可以从含错误代码复制sub-tree
针对上面的局限性3:生成占位符

以下依次分析

3.1确保语法正确性

编辑语法定义如下(HL:host language)

首先由规则3可以看出,在另一个语句之前插入一个语句(HLStatement)时,HLStatement自身是语法正确的
其次,当用规则4 modify替换子树时,modify操作有两个参数。第一个参数是要替换的AST子树中的根节点的ID,第二个参数是根节点具有相同符号的AST子树,modify操作不能改变根节点。通过这种方式,modify确保了语法的正确性。第三,插入和修改操作要么使用HL的语法规则,要么复制具有相同根节点符号的子树(规则5 copy操作),最后看规则6,实例化占位符也可以确保语法的正确性( only replace a placeholder with a token whose lexical type is ⟨HLIdentifier⟩)。
以下图为例简单说明:

对于左边AST的修改操作(insert),右边的ID of Non-Term节点直接复制了左边AST的Method Invocation为根节点的子树。放在代码中理解,即为在修改的的代码中插入一个if声明,if声明含条件判断,condition左部直接复制了buggy code中的一部分(interface Type.getImplicaitPrototype()),这部分的抽象语法树刚好是以Method Invocation为根节点的那棵子树。

3.2编辑生成,显著减小补丁空间

Recoder的解码器组件生成一系列编辑而不是生成新的语句;且可以从含错误代码复制sub-tree(看3.1中的例子)。

以下buggy code为例:


上述语句仅更改一个标记,故只需要考虑仅包含一个token更改编辑的补丁空间。即要生成补丁,仅需在错误语句中选择一个标记(m1)\binom{m}{1}(1m​)并用一个新标记代替即可,在该补丁空间仅包含

记录(0) A Syntax-Guided Edit Decoder for Neural Program Repair相关推荐

  1. Anytime项目开发记录0

    Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...

  2. HFSS学习记录——0. HFSS软件安装(ANSYS Electromagnetics Suite 2023 R1)

    目录 0. 引言 1. 安装版本 2. 安装注意事项 3. 安装包 4. 安装步骤 5. 版本介绍 6. 版本更新内容 6.1 注意事项 6.2 使用感受 7. 有关软件的一些其他信息 7.1 各个版 ...

  3. 如何解决DOSBox 0.74无法运行edit指令

    看王爽的书第四章,里面有一处需要DOS环境下运行edit命令,但运行之后报错. 百度之后发现是缺少一个edit.exe的文件. 解决方法如下: 首先下载edit.exe文件,文末附下载链接. 如果提前 ...

  4. sap 采购信息记录0净价怎么创建

    我试着创建了一个可以,步骤如下: 1.ME11 创建信息记录,给个价格,保存 2.ME12 修改价格的condition ,把价格改为0 ,保存即可: 但是我觉得实际业务上是不需要的,大部分信息记录金 ...

  5. 记录0~9各数字出现的次数

    问题:编写一个程序,输入一个整数,输出0~9各个数字在该整数中出现的次数.(<C语言程序设计>夏宽理u3t1) 我一开始写的代码: #include <stdio.h> #in ...

  6. Hive 版本升级记录(0.13.0 - 2.3.3)

    背景: 我们这边有线上线下两套hive, 版本:0.13.0,由于版本较低,近期准备升级新的hive版本. 首先选择升级线下hive集群: 线下 hive 集群覆盖较广,牵扯大概10台左右客户端, 覆 ...

  7. 算法转AI平台工程师记录-0

    --- vim源码安装: 1. git clone https://github.com/vim/vim.git 2. cd vim && ./configure --prefix=x ...

  8. 记录0.7.1版本的seata批量保存会报错的情况

    at io.seata.rm.datasource.AbstractPreparedStatementProxy.addBatch(AbstractPreparedStatementProxy.jav ...

  9. Context-Transformer 迁移学习 few-shot目标混淆问题

    论文题目: Context-Transformer: Tackling Object Confusion for Few-Shot Detection 论文地址:https://arxiv.org/p ...

最新文章

  1. 【转载】【贪心】各种覆盖问题
  2. 宁波机器人餐厅需要预约吗_拍婚纱照需要预约吗 预约婚纱照需要注意哪些问题...
  3. Java洛谷P5461 赦免战俘讲解
  4. 小米路由器mini改打印服务器_如何把家里的闲置路由器用起来
  5. android程序崩溃了却没法通过log查看错误日志
  6. 计算机一级13点,2013年计算机一级考试MsOffice备考题及答案(13)
  7. java dib文件 加位图文件头_位图(bmp)文件格式分析
  8. 小结-python连接redis的基本配置-解决远程连接问题
  9. 2013年6月13日星期四
  10. mysql sharding 方案_mysql sharding 方案 分库分表(sharding)系列(4)
  11. Weblogic负载均衡/Session复制之集群架构
  12. 架构师如何才能够设计一个安全的架构
  13. 杂谈:Molehill API 的体现
  14. yml文件配置数据库
  15. python实时读取串口数据_串口的数据采集、以及数据的实时显示
  16. 哈哈哈,这个勒索软件笑死我了!太菜了~
  17. 【PHP基础-3】PHP常用运算符
  18. 基于单片机的测量心率脉搏健康系统设计与
  19. 取消iphone 自动更新提示
  20. .htaccess技巧: URL重写(Rewrite)与重定向(Redirect)

热门文章

  1. 城乡收入不平等及其动态演化模型构建——中国城乡收入差距变化的理论机制
  2. SCI论文,你是先写中文再翻译么?
  3. Linux中的默认权限与隐藏权限(文件、目录)
  4. 五:openSSH服务的密钥对验证
  5. 老毛桃启动U盘快速为硬盘分区图文教程
  6. GROM操作mysql数据库
  7. EL852 代替品 喆光WISELITE MPC-852光电晶体管 60mA 350V达林顿输出晶体管
  8. Win2008、Win2012和Win2016操作系统设置多用户同时远程。很方便
  9. 【GitHub开源项目实践】人脸口罩检测
  10. 模仿小米安全中心检测效果(进度条效果)