? 我们建议测试生成器应该利用通过 Jdoctor 自动生成的可执行过程规范来依赖程序员编写的非正式规范 。可执行过程规范可以充当 oracle,从而使自动生成的测试用例更加有效,并且可以避免生成由易于出错的启发式方法派生的无效测试用例,如第 6 节所述 。
1.2 贡献本文记录的研究工作的主要贡献是 Jdoctor,它是一种将非正式 Javadoc 代码注释转换为可执行过程规范的方法 。这种方法是自然语言解析和模式,词汇和语义匹配技术的新颖组合 。第二个贡献是该方法的开放源代码实现,该方法可以复制本文中提到的实验并执行其他实验 。第三个贡献是对该方法的多次实验评估,证实了该方法的准确性和实用性,从而减少了自动生成的测试报告的错误警报的数量 。
? 我们通过实验评估了 Jdoctor 将 Javadoc 注释转换为过程规范的准确性 。Jdoctor 的性能明显优于其他最新方法 。然后,我们证明 Jdoctor 不仅准确,而且在测试生成领域也很有用 。与测试生成工具(Randoop)集成后,Jdoctor 的规范可减少误报 。
2 代码注释分析我们的工作受代码注释分析的启发并重用了其中的想法 。与我们的分析代码注释技术有关的最接近的工作是@ tComment [50]、ALICS [41]和 Toradocu [24] 。@tComment 使用模式匹配来确定与参数空缺有关的三种前提条件属性 。它可以达到很高的精度,并且可以召回与模式匹配的注释,但是这些模式非常狭窄,并且不能一概而论 。ALICS 使用词性标记,然后针对少量硬编码名词和术语进行模式匹配,从而根据代码注释生成过程前置条件和后置条件 。同样,可概括性一点也不明显,并且需要为每个新域进行手动扩展 。Toradocu 是我们最初的工作,因此产生了 Jdoctor 。它使用自然语言解析,并使用近似词典序法匹配将识别出的名词和动词与任意程序表达式和运算进行匹配 。Toradocu 仅在特殊情况下起作用,这仅占 Javadoc 注释的一小部分 。@tComment 和 Toradocu 都将其提取的属性应用于测试生成问题 。ALICS 尚未应用于任何开发任务 。
? Jdoctor 旨在结合并适当扩展这些技术中的最佳技术 。模式匹配无法捕获 Javadoc 标签中自然语言的表现力和多样性,即使仅在我们案例研究中的程序上进行评估也是如此 。Jdoctor 与自然语言解析一起对模式匹配进行了补充,ALICS 和 Toradocu 也是如此 。但是,与以前的工作不同,Jdoctor 不仅限于特定注释或规范的小语法,而且可以根据要分析的程序中定义的抽象来表达规范 。与以前的所有工作不同,Jdoctor 添加了一种新颖的语义相似性概念 。这样处理的注释使用的术语尽管在语义上是相关的,但与代码中的标识符不同 。
? 简而言之,Jdoctor 会为各种过程行为生成规范:先决条件(与 Toradocu 不同)、常规后置条件(与@tComment 和 Toradocu 不同)和特殊后置条件(与@tComment 不同),并且比以前的工作更具通用性 。与@tComment 不同,Jdoctor 不需要程序针对非法输入遵守特定行为(对于@tComment,则为与 null 相关的行为) 。与@tComment 和 ALICS 不同,Jdoctor 不仅限于特定注释或规范的小语法,而且可以根据要分析的程序中定义的抽象表示规范 。Jdoctor 结合了文本模式匹配和自然语言处理(不同于@tComment),并引入了比 ALICS 和 Toradocu 更先进,更有效的新技术 。与 ALICS 不同,Jdoctor 规范是可执行的,并且涉及数据结构,例如数组和集合以及数学表达式 。
3 启发性的 Javadoc 例子Java 开发人员的标准做法是使用 Javadoc 注释形式的非正式规范对代码进行注释 。Javadoc 工具会根据此类注释自动生成 html 格式的 API 文档 。Javadoc 注释由自由格式的文本组成,其中一些前面带有“标签”:用于前提条件的@param标签以及分别用于常规后置条件和异常行为的@return和@throws标签 。现在,我们介绍一些例子 。从流行的开放源代码 Java 代码中摘录的 Javadoc 注释的示例,以及 Jdoctor 产生的输出,以突出显示此工作的挑战以及先前工作的局限性 。
3.1 前置条件@param标记可表征方法参数并声明调用者必须遵守的前提条件 。考虑以下注释,该注释来自 google Guava 的BloomFilter类 。Jdoctor 将此注释转换为可执行规范,该规范显示在 Javadoc 注释下方的框中 。这些子句与 Java 条件运算符“和”(&&)结合在一起以形成完整的过程规范 。

文章插图
? Jdoctor 使用数学表达式(第二和第三@param注释)和复合条件(第三@param注释)正确处理注释 。Jdoctor 还了解到,有关第一个参数的注释未指定任何前提条件,因此不会产生有关参数漏斗的任何说明 。
推荐阅读
- 还没来过峨眉山的青少年朋友,千万不要将遗憾留到成年以后哦!
- 在Python中使用Torchmoji将文本转换为表情符号
- 基于springboot+shiro+freemarker的快速开发框架,代码免费分享
- 北京新增公交、出租、环卫等车辆将基本采用电动车
- 教师|终于等到你,教师行业或将实行“工龄退休”,好消息一波接一波
- 射电望远镜|中国空间站将支持上千项科学研究:明年发射空间巡天望远镜
- 古代将军墓 据考古报告从数十处战国以前的墓葬中发现了铁器实物
- 莞藏老茶抱团进京拓市,莞香生产与制作技艺将申报国家非遗
- 代码封装技巧和原则
- 架构大更新的英特尔Rocket Lake处理器可将频率提升至5.0GHz
