基于搜索的代码模板泛化与细化
1. 引言
在程序搜索和转换工具中,源代码模板是一种简洁描述感兴趣的源代码片段的方式。例如,模板可以描述特定错误的所有实例、需要重构或转换的代码片段、设计模式的实例等。然而,代码模板往往难以准确指定:当用户缺乏使用模板的经验,或者需要编写更大、更复杂的模板时,模板可能无法产生预期的结果。模板可能过于通用,导致匹配的代码片段过多;也可能过于具体,导致匹配的代码片段过少。
为了帮助 Java 模板搜索和转换工具 Ekeko/X 的用户,我们引入了一种基于搜索的方法和一套变异算子。当模板匹配结果过多或过少时,Ekeko/X 用户可以标记出不需要或遗漏的匹配结果,然后调用我们的基于搜索的方法。该方法会自动寻找对模板的一系列变异,使模板仅匹配所需的代码片段。此方法使用单目标进化算法(EA),并通过一个实验来评估该算法能否自动找到合适的解决方案。
2. Ekeko/X 程序转换工具
2.1 概述
Ekeko/X 是一个用于 Java 的程序搜索和转换工具,其中搜索和转换是通过代码模板来指定的。代码模板是一段 Java 代码,其中部分(对应于抽象语法树(AST)节点)可以用通配符和元变量替换,并可以添加不同的注解(称为指令)。这些构造用于添加或移除模板部分的约束。
模板匹配的过程是寻找所有满足模板中指定约束的具体 Java 代码片段。例如,下面的模板描述了任何定义了 toString 方法的公共类:
public class ... {[public void toString (){...
超级会员免费看
订阅专栏 解锁全文
21

被折叠的 条评论
为什么被折叠?



