System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于蜕变关系的代码覆盖率统计工具测试的方法技术_技高网

基于蜕变关系的代码覆盖率统计工具测试的方法技术

技术编号:42684194 阅读:27 留言:0更新日期:2024-09-10 12:33
基于蜕变关系的代码覆盖率统计工具测试的方法,包括以下步骤:S1、获取源测试用例集合,对源测试用例添加全局变量;S2、运用蜕变关系对源测试用例进行变异生成相应的衍生测试用例;S3、代码覆盖率统计工具输入源测试用例和衍生测试用例,输出对应的代码覆盖率信息;S4、验证代码覆盖率信息是否满足于蜕变关系对应的输出关系,若不满足,则该源测试用例和该衍生测试用例触发代码覆盖率统计工具的缺陷,并自动报告该缺陷。本发明专利技术通过蜕变关系的代码覆盖率统计工具进行测试,无需人工参与,降低测试成本,可以有效检测检测代码覆盖率统计工具的缺陷,能够探测到之前方法未发现的深层次缺陷。

【技术实现步骤摘要】

本专利技术涉及代码覆盖率统计工具测试,尤其涉及基于蜕变关系的代码覆盖率统计工具测试的方法


技术介绍

1、无论在工业届还是学术界,代码覆盖率统计工具都扮演着十分重要的角色。在一些软件安全关键的领域,例如航空工业软件、嵌入式实时操作系统,开发人员对代码覆盖率信息的准确性有着极高的要求,他们利用代码覆盖率信息衡量软件被测试的全面程度,评估当前软件测试用例集的质量。在故障定位的研究中,基于频谱的故障定位技术利用代码覆盖率和测试用例执行结果推断程序中触发故障的代码行,还有编译器测试以及回归测试的研究都利用到代码覆盖率信息。正因为代码覆盖率信息被广泛地应用,不正确的代码覆盖率信息将严重误导人们的软件工程实践,因此对代码覆盖率统计工具进行充分的测试是十分有必要的。

2、由于代码覆盖率工具的测试用例是程序,输入域十分巨大,传统的测试方法很难有效发现代码覆盖率统计工具深层次缺陷,同时自动化测试代码覆盖率统计工具存在测试谕言缺失的问题,因此需要根据代码覆盖率统计功能的特点提出新的测试方法。


技术实现思路

1、针对
技术介绍
提出的问题,本专利技术的目的在于提出基于蜕变关系的代码覆盖率统计工具测试的方法,解决了难以有效发现代码覆盖率统计工具深层次缺陷,测试过程中测试谕言缺失的问题。

2、为达此目的,本专利技术采用以下技术方案:

3、基于蜕变关系的代码覆盖率统计工具测试的方法,包括以下步骤:

4、s1、获取源测试用例集合,对源测试用例集合中的源测试用例添加值为永真全局变量和永假全局变量,生成布尔表达式;

5、s2、根据布尔表达式,运用蜕变关系对源测试用例进行变异生成相应的衍生测试用例;其中,变异过程保持源测试用例与衍生测试用例语义的一致性;

6、s3、代码覆盖率统计工具以源测试用例和衍生测试用例为输入,分别输出源测试用例的代码覆盖率信息和衍生测试用例的代码覆盖率信息;

7、s4、验证源测试用例的代码覆盖率信息和衍生测试的代码覆盖率信息是否满足于蜕变关系对应的输出关系,若不满足,则该源测试用例和该衍生测试用例触发代码覆盖率统计工具的缺陷,并自动报告该缺陷。

8、优选地,在步骤s1中,源测试用例集合的获取来自编译器gcc的测试集。

9、优选地,在步骤s1中,对源测试用例添加值为永真全局变量和永假全局变量的方法为:在源测试用例的include头文件的包含语句后面分别定义值为1和值为0的全局变量;其中,所述全局变量的定义语句包括存储类型的修饰符、类型修饰符、变量类型、变量标识符和变量值五个组成部分,通过这五个组成部分组成符合c语言语法规则的全局变量的定义语句。

10、优选地,所述蜕变关系包括:

11、第一蜕变关系:对源测试用例插入永真全局变量的布尔表达式的if语句头,以生成衍生测试用例;

12、第二蜕变关系:对源测试用例插入永假全局变量的布尔表达式的if语句头,以生成衍生测试用例。

13、优选地,在步骤s2中,变异过程包括以下步骤:

14、s21、根据clang中的libtooling库将源测试用例解析为抽象语法树,随机选一括号节点,所述括号节点对应于代码中的大括号包围的代码块,其子节点为大括号内代码语句所对应的节点;

15、s22、任取两个子节点,将其对应的代码语句的位置分别标记为起始行lstart和结束行lend;

16、s23、对于第一蜕变关系,利用永真全局变量的布尔表达式的if语句头,将该if语句头包围起始行lstart和结束行lend之间的代码块,以生成衍生测试用例;对于第二蜕变关系,利用永假全局变量的布尔表达式的if语句头,复制起始行lstart和结束行lend之间的代码块作为该if语句块,且将该if语句头和if语句块插入到起始行lstart位置之前,以生成衍生测试用例;

17、s24、当生成的衍生测试用例无效时,需要重新对该源测试用例进行变异(执行步骤s21~s23),直至生成的衍生测试用例有效,且当变异次数超过10次时,丢弃该源测试用例并重新选择新的源测试用例。

18、优选地,在步骤s3中,代码覆盖率信息的生成包括以下步骤:

19、s31、通过配置编译选项编译源测试用例和衍生测试用例;

20、s32、运行可执行文件,可执行文件输出包含执行信息的文件;

21、s33、代码覆盖率统计工具解析包含执行信息的文件,生成代码覆盖率报告;其中,所述代码覆盖率报告显示代码覆盖率信息,包括统计程序的代码覆盖率和程序运行过程中代码语句的执行次数。

22、优选地,在步骤s4中,所述蜕变关系对应的输出关系包括:

23、第一蜕变输出关系:对于第一蜕变关系,则代码覆盖率统计工具的输出需满足于源测试用例和衍生测试用例之间对应代码行的代码覆盖率信息相同;

24、第二蜕变输出关系:对于第二蜕变关系,则代码覆盖率统计工具的输出需满足于源测试用例和衍生测试用例之间对应代码行的代码覆盖率信息相同,且if语句块内代码的执行次数为零。

25、与现有技术相比,上述技术方案中的一个技术方案具有以下有益效果:

26、本专利技术通过开源渠道获取源测试用例集合,对源测试用例添加值为永真全局变量和永假全局变量,这些变量在下一步的变异过程中被使用;运用蜕变关系对源测试用例进行变异生成相应的衍生测试用例,解决测试过程中测试谕言缺失的问题,且整个变异过程没有改变源测试用例和衍生测试用例的语义,有效提高测试效率。再根据代码覆盖率统计工具输出的源测试用例的代码覆盖率信息和衍生测试用例的代码覆盖率信息,测试验证是否满足于蜕变关系对应的输出关系,以便发现代码覆盖率统计工具深层次缺陷,无需人工参与,降低测试成本,可以有效检测检测代码覆盖率统计工具的缺陷,能够探测到之前方法未发现的深层次缺陷。

本文档来自技高网...

【技术保护点】

1.基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,在步骤S1中,源测试用例集合的获取来自编译器GCC的测试集。

3.根据权利要求1所述的基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,在步骤S1中,对源测试用例添加值为永真全局变量和永假全局变量的方法为:在源测试用例的include头文件的包含语句后面分别定义值为1和值为0的全局变量;其中,所述全局变量的定义语句包括存储类型的修饰符、类型修饰符、变量类型、变量标识符和变量值五个组成部分,通过这五个组成部分组成符合C语言语法规则的全局变量的定义语句。

4.根据权利要求1所述的基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,所述蜕变关系包括:

5.根据权利要求4所述的基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,在步骤S2中,变异过程包括以下步骤:

6.根据权利要求1所述的基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,在步骤S3中,代码覆盖率信息的生成包括以下步骤:

7.根据权利要求5所述的基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,在步骤S4中,所述蜕变关系对应的输出关系包括:

...

【技术特征摘要】

1.基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,在步骤s1中,源测试用例集合的获取来自编译器gcc的测试集。

3.根据权利要求1所述的基于蜕变关系的代码覆盖率统计工具测试的方法,其特征在于,在步骤s1中,对源测试用例添加值为永真全局变量和永假全局变量的方法为:在源测试用例的include头文件的包含语句后面分别定义值为1和值为0的全局变量;其中,所述全局变量的定义语句包括存储类型的修饰符、类型修饰符、变量类型、变量标识符和变量值五个组成部分,通过...

【专利技术属性】
技术研发人员:黎子铭曾志锐邓婉玲麦凯迪黄晖越
申请(专利权)人:广东和天信息科技有限公司
类型:发明
国别省市:

相关技术
    暂无相关专利
网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1