一种基于测试切片的众包测试扩增方法技术

技术编号:33274722 阅读:14 留言:0更新日期:2022-04-30 23:33
本发明专利技术披露了基于测试切片的众包测试扩增方法,包括下列步骤:1)利用静态信息作为测试扩增的全局引导,通过动态符号执行技术运行测试,对已有众包测试的运行信息进行分析和统计,形式包括测试原子、测试切片、测试驱动;2)对待测众包测试中的未探索路径进行识别和排序,进而按照顺序挑选路径并进行求解得到新测试数据;3)将新测试数据输入填充到相应众包测试代码模板中得到可运行的全新测试用例,从而实现了对待测众包测试结果的扩增。本发明专利技术能够有效提高众包测试代码的测试充分性,同时生成具有高可读性的测试用例,适配众包测试场景、填补众包测试扩增技术的空缺。填补众包测试扩增技术的空缺。填补众包测试扩增技术的空缺。

【技术实现步骤摘要】
一种基于测试切片的众包测试扩增方法


[0001]本专利技术属于软件工程领域,尤其是程序分析和动态符号执行技术在软件工程领域的应用,用于扩增众包测试的结果代码。

技术介绍

[0002]众包测试是一种有效的软件测试模式,旨在通过众包的方式,运用群体智能解决软件测试问题,目前广泛应用于安卓测试、单元测试和测试报告管理等领域。众包测试通常依托于云平台,可以收获大量的测试代码,能够提供丰富的测试代码模板和测试输入。然而,众包测试代码可能会出现测试性低下、可读性差的情况,其结果需要被进一步强化。
[0003]测试扩增是一项被广泛研究的技术,能够在已有测试的基础上生成新的测试以强化原有测试的效果。现有的测试扩增技术大都面向回归测试,主要探究如何在软件版本迭代过程中,利用前驱版本提供的信息对后续版本的回归测试进行优化。这里将这类技术统称为回归测试扩增技术。由于面向场景的不同,回归测试扩增技术无法很好地满足众包测试扩增的需要,主要原因在于:1)回归测试扩增技术通常利用软件演化信息(如代码变更)来识别待测系统中的变更部分,并根据这些信息增量生成测试数据。然而,众包测试不涉及系统版本的变更,因此无法提供这类演化信息;2)回归测试扩增技术没有考虑众包测试提供的一些特有信息,例如:测试重叠。众包测试工人往往会提交彼此之间存在重叠的测试代码,这些代码重复针对待测软件系统的相似区域。一方面,测试重叠是一种冗余的测试行为,但从另一反面,测试重叠反映的待测系统各个区域的受重视的程度,因此能够提供信息将测试扩增导向被严重忽略的未探索区域;3)回归测试扩增技术没有充分利用众包测试代码中蕴含的测试代码模板。测试代码模板是指测试用例去除或忽略具体测试数据后余下的代码实体。传统的测试生成/扩增技术只生成测试数据,或者是在生成测试数据的同时生成固定的测试代码模板。这对于可以提供大量测试代码模板的众包测试来说是一种极大的浪费。

技术实现思路

[0004]本专利技术要解决的问题是:众包测试的结果代码的测试充分性低、可读性差的情况;适配众包测试场景、填补众包测试扩增技术的空缺。
[0005]本专利技术的技术方案为:一种基于测试切片的众包测试扩增方法,包括以下内容:1)通过静态分析抽取出其中每个待测方法的控制流图,其中 是节点的集合,表示程序中的一条语句, 是有向边的集合,表示语句间的转移,每个控制流图有唯一的入口点和出口点;然后根据在的基础上裁剪去除所有的非条件判定语句、保留原有控制流不变,组合得到全局条件图,其中, 。
[0006]2)引入测试提纯技术,首先通过代码变换将每个已有众包测试用例 分解成包含单一断言语句的形式,即测试原子;接着应用静态程序切片技术移除无关语句,得到包含 个长度更短、可读性更强的测试切片的集合。
[0007]3)在执行测试的过程为测试驱动的每个参数建立符号,进而在此基础上收集路径约束,具体步骤如下:3.1)首先,对于每一个测试切片,通过静态程序变换的方式,抽取出每个中包含的具体输入,随后对应建立参数列表,通过将具体参数替换为对应的参数的方式分离出原始测试用例所包含的测试代码模板,并通过程序变换将转换成对应测试驱动;3.2)然后,对于1)中获得的每一个测试驱动,为每个参数建立一个符号,得到符号列表,例如:为一组测试输入建立符号列表;3.3)接着,带入符号列表的和具体输入,通过动态符号执行的方式运行,以一组具体输入为起点,通过维护并求解方程(例如求解得到的一个可行解为)得到符号值的方式运行程序,并在执行判定语句时记录方法签名(能够唯一标识一个方法的字符串,通常由返回值类型、方法名、参数类型组成)、执行深度(执行路径的长度),以及判定表达式(例如
“”
,对应分支语句“if(x+1>2)”的true分支),形成执行节点,最终构成执行轨迹。其中:是由常量、变量(符号)和运算符组成的无量词一阶布尔表达式;是由一组节点构成的序列,节点的下标表示深度,表示轨迹长度;3.4)最后,利用映射关系(代表取值操作)获取每个节点中的判定表达式,进而通过析取连接所有判定表达式,获得路径约束,例如:。
[0008]4)以一组匹配规则(用于识别动态执行过程中遇到的循环结构)为基础、以全局条件图为框架、以测试执行轨迹为内容对已有测试的执行信息进行统计,将符合匹配规则的测试执行路径归并到对应的节点/边,同时改变节点/边的权重(匹配计数)、并记录匹配关系,具体匹配规则如下:录匹配关系,具体匹配规则如下:录匹配关系,具体匹配规则如下:
其中:下标和分别表示“静态”和“动态”,分别对应通过静态分析获得的框架信息以及动态符号执行过程中收集得到路径约束中的信息;、、表示判定表达式中可能出现的结构,分别对应变量(如,)、常量和复合体(如); 表示取值映射,
“”

“”
分别表示匹配关系和相等关系。
[0009]5)利用两级策略量化未搜索路径的重要性。首先通过一级策略量化路径的重要性并按照得分进行降序排列,一级策略如下所示:其中:表示的路径,表示的节点,表示节点被匹配的次数,表示路径被覆盖的次数,表示路径的长度,、、是可调节参数;然后,按照排序优先选择重要性得分高的未探索路径,并按照匹配关系映射到对应的执行序列;接着,通过二级策略量化执行序列的重要性并进行降序排列,二级策略如下所示:其中,表示执行轨迹,表示轨迹的长度,表示涉及到的不重复符号,表示取基数;最后,按照排序优先翻转重要性得分高的序列对应的路径约束,进而交付求解器求解得到新测试数据。
[0010]6)在达到终止条件之前,扩增过程将持续进行。通过将测试驱动的对应参数替换为新数据组合后再次执行的方式不断循环扩增流程,直到停止增长、或超出预设的资源限制。
[0011]7)输出扩增结果。首先组合新生成的测试数据得到一组测试输入,其中是组合测试数据得到的输入组数;接着通过静态程序变换的方式,将测试数据集合中的每一组输入对应填充到测试代码模板,最后得到全新测试用例集合;本专利技术的特点在于:1、通过静态分析待测方法得到控制流图、并在此基础上裁剪非条件语句得到全局条件图;2、通过动态符号执行收集测试执行信息,获取路径约束;3、建立测试驱动参数、符号、具体数据之间的对应关系;4、建立匹配机制,实现静态路径与执行轨迹之间的对应匹配;5、提出两级策略量化候选路径的重要性,按照重要性从高到底选择路径进行翻转求解。将这5点结合,本专利技术可以利用已有众包测试代码提供的测试数据以及测试代码模板,从而有效生成测试数据并产生具有高可读性的可运行测试用例。
[0012]本专利技术的有益效果是:通过分解已有众包测试代码,以及记录测试运行信息,能够有效的提高众包测试代码的测试充分性,同时生成具有高可读性的测试用例。
附图说明
[0013]图1 为本专利技术的整体流程图图2 为待测系统(SUT)示例图3 为测试代码形式及转换示例图4 初始全局条件图,由静态分析得到,START和END节点是每个待测方法虚拟入口和出口点;虚线表示未被覆盖的待测元素图5 本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于测试切片的众包测试扩增方法,其特征是利用静态信息作为测试扩增的全局引导,通过动态符号执行技术运行测试,对已有测试的运行信息进行分析和统计,接着利用这些信息对待测程序中的未探索路径进行识别和排序,进而按照顺序挑选路径并进行谓词翻转后交付求解器求解得到新测试数据,最终将新测试输入填充到相应测试代码模板中得到可运行测试用例,实现对原有众包测试结果的扩增。2.根据权利要求1所述的一种基于测试切片的众包测试扩增方法,其特征是对于一个待测系统,首先通过静态分析抽取出其中每个待测方法的控制流图 ,其中是节点的集合,每个节点表示程序中的一条语句,是有向边的集合,每条边表示语句间的转移,每个控制流图有唯一的入口点和出口点;然后根据在 的基础上裁剪去除所有的非条件判定语句、保留原有控制流不变,组合得到全局条件图,其中, 。3.根据权利要求1所述的一种基于测试切片的众包测试扩增方法,其特征是引入测试提纯技术,首先通过代码变换将每个已有众包测试用例分解成包含单一断言语句的形式,即测试原子;接着应用静态程序切片技术移除无关语句,得到包含个长度更短、可读性更强的测试切片的集合。4.根据权利要求1所述的一种基于测试切片的众包测试扩增方法,其特征是在执行测试的过程为测试驱动的每个参数建立符号,进而在此基础上收集路径约束,具体步骤如下:1)首先,对于每一个测试切片,通过静态程序变换的方式,抽取出每个中包含的具体输入
ꢀꢀ
,随后对应建立参数列表 ,通过将具体参数替换为对应的参数的方式分离出原始测试用例所包含的测试代码模板,并通过程序变换将转换成对应测试驱动;2)然后,对于1)中获得的每一个测试驱动,为每个参数 建立一个符号 ,得到符号列表;3)接着,带入符号列表 的和具体输入 ,通过动态符号执行的方式运行,以一组具体输入为起点,在执行程序的过程中维护一组符号值,不断求解方程得到具体值,利用这些具体值推进程序运行,并在执行判定语句时记录能够唯一标识一个方法的方法签名、执行路径的长度 ,以及判定表达式 ,形成执行节点,最终构成执行轨迹,其中:是由常量、符号和运算符组...

【专利技术属性】
技术研发人员:杨鹏张晋桂余明辉钟闰禄钱瑞祥陈振宇
申请(专利权)人:广东拓思软件科学园有限公司
类型:发明
国别省市:

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

1