国内刊号:11-2560/TP
国际刊号:1000-9825
发布日期:
作者:杜义恒,王赞,赵英全,陈俊洁,陈翔,侯德俊,郑开
单位:杜义恒,天津大学 智能与计算学部, 天津 30035011,王赞,天津大学 智能与计算学部, 天津 30035002,赵英全,天津大学 智能与计算学部, 天津 30035003,陈俊洁,天津大学 智能与计算学部, 天津 30035004,陈翔,南通大学 信息科学技术学院, 江苏 南通 226019;信息安全国家重点实验室 (中国科学院 信息工程研究所), 北京 10009305,侯德俊,天津大学 信息与网络中心, 天津 30007206,郑开,天津大学 智能与计算学部, 天津 30035007
关键词:Java虚拟机;JVM测试;测试程序约简;Delta调试
基金:国家自然科学基金(62232001,62002256)
为了对Java虚拟机(JVM)进行测试, 开发人员通常需要手工设计或利用测试生成工具生成复杂的测试程序, 从而检测JVM中潜在的缺陷. 然而, 复杂的测试程序给开发人员定位及修复缺陷带来了极高的成本. 测试程序约简技术旨在保障测试程序缺陷检测能力的同时, 尽可能地删减测试程序中与缺陷检测无关的代码. 现有研究工作基于Delta调试在C程序和XML输入上可以取得较好的约简效果, 但是在JVM测试场景中, 具有复杂语法和语义依赖关系的Java测试程序约简仍存在粒度较粗、约简效果较差的问题, 导致约简后的程序理解成本依然很高. 因此, 针对具有复杂程序依赖关系的Java测试程序, 提出一种基于程序约束的细粒度测试程序约简方法JavaPruner. 首先, 在语句块级别设计细粒度的代码度量方法; 随后, 在Delta调试技术上引入语句块之间的依赖约束关系来对测试程序进行约简. 以Java字节码测试程序为实验对象, 从现有的针对JVM测试的测试程序生成工具中筛选出具有复杂依赖关系的50个测试程序作为基准数据集, 并在这些数据集上验证JavaPruner的有效性. 实验结果表明, JavaPruner可以有效删减Java字节码测试程序中的冗余代码. 与现有方法相比, 在所有基准数据集上, 约简能力平均可提升37.7%. 同时, JavaPruner可以在保障程序有效性及缺陷检测能力的同时, 将Java字节码测试程序最大约简至其原有大小的1.09%, 有效降低了测试程序的分析和理解成本.
来源:2024年第7期
《软件学报》期刊编辑部