本发明涉及软件领域,尤其涉及一种基于数据驱动及多种覆盖策略的软件测试用例生成方法、系统及存储介质。
背景技术:
近年来,随着嵌入式软件的复杂度越来越高,对软件的质量要求也越来越严格,一个微小的错误就能造成巨大的损失,因此高效的嵌入式软件测试是必要的。此外,由于嵌入式软件测试的工作量很大,所以嵌入式软件测试需要的测试人员较多,消耗的时间较长,所需的成本也很高。由此,为减轻测试人员的工作负担,降低测试的成本和风险,提高嵌入式软件测试的效率和质量,图形建模已广泛应用于嵌入式软件测试领域。
在实施于软件测试时,测试用例作为测试的标准,测试人员需按照测试用例严格实施测试,为保证测试用例的准确性、完整性,规划测试数据则成为重要的一部分。由于嵌入式软件的复杂性,测试数据还需满足测试要求的各种覆盖策略,因此测试数据的准备其工作量及其工作难度都是极大的。因此,采用测试数据驱动的方法、基于模型进行计算,生成满足各种覆盖策略的测试用例方法被提上日程。
技术实现要素:
本发明提供了一种基于数据驱动及多种覆盖策略的软件测试用例生成方法,包括依次执行以下步骤:
步骤s1:初始化环境;
步骤s2:创建测试建模工程;
步骤s3:测试人员打开建模工程,读取模型;
步骤s4:对系统资源进行定义与配置;
步骤s5:针对已定义的系统资源进行具体测试数据的生成;
步骤s6:测试人员对软件系统进行测试建模,并基于模型进行约束设计;
步骤s7:测试人员配置各种覆盖策略,基于测试数据生成固定格式的测试用例。
作为本发明的进一步改进,在所述步骤s2中,建模工程包含模型的文件与模型的数据,模型采用活动图的形式;
在所述步骤s4中,系统资源包含数据、时间约束和io电平信号。
作为本发明的进一步改进,在所述步骤s5中,还包括执行以下步骤:
第1步骤:数据表达;数据表达主要涉及到数据格式、数据类型、数据精度以及数据范围;
第2步骤:测试数据的生成。
作为本发明的进一步改进,在所述第1步骤中,数据格式包括:
a.单个数据:一个数据一个单独的物理含义;
b.结构数据:某物理数据有多个不同属性数据组成,这种数据通常会同时采集、计算和处理。
c.集合数据:一组数据中含有多个物理数据,每个物理数据之间没有太多的关联,只是简单的组合,可以在一起进行处理,也可以分开进行处理。
作为本发明的进一步改进,在所述第2步骤中,所述测试数据的生成包括以下五种情况:
a、数据可以手工确定取值域,并且分别设置有效类、无效类;
b、通过设置数据的范围或识别简单的逻辑运算表达式,自动根据等价类、边界值的算法抽样生成确定的有效值和无效值;
c、连续数据生成;连续接收某数据,数据可以不变,更多的情况是数据在实时变化;
d、时间约束;范围类型的时间约束采用五值法生成,分别为左边界-精度,左边界,中间值,右边界,右边界 精度值;
e、io电平信号;io电平信号根据跳变持续个数,是否允许毛刺、允许毛刺个数生成。
作为本发明的进一步改进,在步骤s6中,所述测试建模为建立测试模型,所述建立的测试模型为可嵌套的活动图,所述的约束设计包含数据约束、预置条件、时间约束和时序关系的设计。
作为本发明的进一步改进,在所述步骤s7中,测试人员依据软件的不同测试风险级别,配置各种覆盖策略,根据数据覆盖策略组合测试数据,在测试数据驱动下,得到满足测试目标的测试数据集合,基于模型图中的测试场景,最终按照测试用例设计格式生成最终的测试用例。
作为本发明的进一步改进,所述覆盖策略包含数据覆盖策略、条件判定覆盖策略、路径覆盖策略以及子图覆盖策略,其中数据覆盖策略包含ec、2-wise,3-wise,n-wise,条件判定覆盖策略包含分支覆盖和条件组合覆盖,路径覆盖策略采用基于深度的路径覆盖,子图覆盖策略包含展开、贯通和组合三种关系。
本发明还公开了一种基于数据驱动及多种覆盖策略的软件测试用例生成系统,包括:存储器、处理器以及存储在所述存储器上的计算机程序,所述计算机程序配置为由所述处理器调用时本发明的软件测试用例生成方法所述的软件测试用例生成方法的步骤。
本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序配置为由处理器调用时本发明的软件测试用例生成方法所述的软件测试用例生成方法的步骤。
本发明的有益效果是:1.采用本发明的软件测试用例生成方法测试人员可依据软件的不同测试风险级别,灵活地配置软件的覆盖策略;2.本发明的软件测试用例生成方法在测试数据的驱动下,测试人员可得到满足测试目标的测试数据集合,大大地减轻了测试人员的工作负担;3.本发明的软件测试用例生成方法可准确的获得完整的测试用例供测试人员执行,提高测试人员的工作效率,降低测试的成本与风险。
附图说明
图1是本发明的方法流程图。
具体实施方式
如图1所示,本发明公开了一种基于数据驱动及多种覆盖策略的软件测试用例生成方法,包括依次执行以下步骤:
步骤s1:初始化环境;
步骤s2:创建测试建模工程;
步骤s3:测试人员打开建模工程,读取模型;
步骤s4:对系统资源进行定义与配置;
步骤s5:针对已定义的系统资源进行具体测试数据的生成;
步骤s6:测试人员对软件系统进行测试建模,并基于模型进行约束设计;
步骤s7:测试人员配置各种覆盖策略,基于测试数据生成固定格式的测试用例。
测试人员通过采用活动图的形式化表达方式对嵌入式软件系统进行测试建模,常用到的图元有开始,结束,判断,合并,动作等,然后基于模型进行约束设计,配置各种覆盖策略确定测试目标,采用测试数据驱动的方法,基于模型进行计算并记录相关覆盖信息和测试数据,直至满足数据覆盖策略、条件判定覆盖策略、路径覆盖策略和子图覆盖策略,即完成测试目标,结合模型中的测试场景按照特定格式输出测试用例。
在所述步骤s2中,建模工程包含模型的文件与模型的数据,模型采用活动图的形式;
在所述步骤s4中,系统资源包含数据、时间约束和io电平信号。
为实现测试数据驱动,在所述步骤s5中,还包括执行以下步骤:
第1步骤:数据表达;数据表达主要涉及到数据格式、数据类型、数据精度以及数据范围;
第2步骤:测试数据的生成。
在所述第1步骤中,数据格式包括:
a.单个数据:一个数据一个单独的物理含义;
b.结构数据:某物理数据有多个不同属性数据组成,例如导航数据中包括时间、高度、速度等。这种数据通常会同时采集、计算和处理。
c.集合数据:一组数据中可能含有多个物理数据,每个物理数据之间没有太多的关联,只是简单的组合,可以在一起进行处理,也可以分开进行处理。
在所述第2步骤中,所述测试数据的生成包括以下五种情况:
a、数据可以手工确定取值域,并且分别设置有效类、无效类;
b、通过设置数据的范围或识别简单的逻辑运算表达式,自动根据等价类、边界值的算法抽样生成确定的有效值和无效值,具体的算法描述如下-算法1所示:
算法名称:算法1
输入:数据
输出:具体测试数据
过程:获取数据的信息;判断是单个数据还是多个数据;针对单个数据,覆盖数据的各个等价类以及边界值(7值法、9值法);针对多个数据,先确定单个数据的取值,然后对多个数据进行组合测试(ec、2-wise、3-wise、n-wise等);将测试数据保存。
c、连续数据生成;连续接收某数据,数据可以不变,更多的情况是数据在实时变化;
d、时间约束;范围类型的时间约束采用五值法生成,分别为左边界-精度,左边界,中间值,右边界,右边界 精度值;
e、io电平信号;io电平信号根据跳变持续个数,是否允许毛刺、允许毛刺个数生成。
具体如下:
获取io电平信号的初始状态(高、低),跳变持续个数m,是否允许毛刺、允许毛刺个数n和毛刺位置等信息,然后根据如下规则生成具体测试数据:若不允许毛刺,或者允许毛刺且毛刺个数n为0,则生成一组测试数据;若允许毛刺,且n大于0,则生成7组测试数据:毛刺个数为零、n-1和n 1三种情况,三组测试数据;毛刺位置,所有毛刺连续情况考虑连续出现在1-n,中间,(m-n)-m和毛刺离散出现四种情况,四组测试数据。
在步骤s6中,所述测试建模为建立测试模型,所述建立的测试模型为可嵌套的活动图,所述的约束设计包含数据约束、预置条件、时间约束和时序关系的设计。
约束设计如下所述:
(1)数据约束设计
在活动图中的活动节点中引用数据配置中的输入数据,根据定义好的数据,添加数据约束条件,采用逻辑表达式表示约束,通过逻辑表达式可确定在什么样的情况下走哪条分支。引用定义数据采用$符号,自动将所有定义好数据快捷引用,采用逻辑运算符{>,<,=,&&,||,!}等进行约束,引用一次数据变量代表在数据变量取值集合中取值一次。
(2)预置条件
在模型图中的图元上,添加预置条件。预置条件的设置可以分为两种:一是整个模型的预置条件,相当于该模型表达的功能或场景执行之前设置前提条件,多用于用例套执行;二是某个活动的预置条件,相当于在执行该活动前必须满足的前提条件。预置条件可以是文字表述,也可以是引用数据的逻辑表达。为了完整的表达需求,可以将模型图难以描述的需求或者连接线上数据约束难以完成表达的约束,在图元上的预置条件进行定义。
(3)时间约束
在模型图中的活动节点上,可以表达时间约束,时间可能是绝对时间,也可能是相对时间,具体可以分为以下3类:
a)时间点约束,限制时间产生或结束的时刻;
b)持续时间约束,限制任务执行持续时间或者开始前等待时间;
c)周期时间约束,限制任务重复执行的时间间隔;
(4)时序关系
在活动模型图上,可以表达以下4种情况的时序逻辑关系:
时间点之间时序关系;
时间点与持续时间的时序关系;
持续时间之间的时序关系;
时间点与周期时间之间的时序关系。
在所述步骤s7中,测试人员依据软件的不同测试风险级别,配置各种覆盖策略,根据数据覆盖策略组合测试数据,在测试数据驱动下,得到满足测试目标的测试数据集合,基于模型图中的测试场景,最终按照测试用例设计格式生成最终的测试用例。
所述覆盖策略包含数据覆盖策略、条件判定覆盖策略、路径覆盖策略以及子图覆盖策略,其中数据覆盖策略包含ec、2-wise,3-wise,n-wise,条件判定覆盖策略包含分支覆盖和条件组合覆盖,路径覆盖策略采用基于深度的路径覆盖,子图覆盖策略包含展开、贯通和组合三种关系。
所述覆盖策略具体如下:
(1)数据覆盖策略:为各层图形提供数据覆盖策略选择,包含ec、2-wise,3-wise,n-wise和无覆盖选择。其中,ec为单一选择组合,每个因子至少出现一次;2-wise,3-wise,n-wise:n为是不同数据因素之间交互的力度,两种特殊的情况下,单因素覆盖标准,组合生成的测试用例数为c=max{ai},数据因素完全组合覆盖时,组合生成的测试用例数为
(2)条件判定覆盖:提供条件组合覆盖选择,不勾选时默认分支覆盖,类似于白盒测试中的逻辑覆盖。
(3)路径覆盖策略:提供1,2,3,n的深度下拉框选择,采用基于深度的路径覆盖策略,该策略以判定节点为两个相邻路径的交叉汇合点,计算相邻路径的覆盖深度,设定深度越大,覆盖程度越高,生成的测试路径越多,最终生成的测试用例用测试路径进行分类,每条路径可能会有多组数据执行。
(4)子图覆盖策略:
提供的子图覆盖策略包含展开、贯通和组合三种策略。展开关系:为了直观或方便显示,将子图作为父图的一部分单独成图,覆盖策略与父图一致;贯通关系:取子图中任一贯通路径融入父图中,层次化测试思路;组合关系:子图中所有路径与父图连接路径进行全组合,考虑在父图中有多个入路径或出路径的情况。
本发明还公开了一种基于数据驱动及多种覆盖策略的软件测试用例生成系统,包括:存储器、处理器以及存储在所述存储器上的计算机程序,所述计算机程序配置为由所述处理器调用时实现本发明的软件测试用例生成方法所述的软件测试用例生成方法的步骤。
本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序配置为由处理器调用时实现本发明的软件测试用例生成方法所述的软件测试用例生成方法的步骤。
本发明的有益效果是:1.采用本发明的软件测试用例生成方法测试人员可依据软件的不同测试风险级别,灵活地配置软件的覆盖策略;2.本发明的软件测试用例生成方法在测试数据的驱动下,测试人员可得到满足测试目标的测试数据集合,大大地减轻了测试人员的工作负担;3.本发明的软件测试用例生成方法可准确的获得完整的测试用例供测试人员执行,提高测试人员的工作效率,降低测试的成本与风险。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
1.一种基于数据驱动及多种覆盖策略的软件测试用例生成方法,其特征在于,包括依次执行以下步骤:
步骤s1:初始化环境;
步骤s2:创建测试建模工程;
步骤s3:测试人员打开建模工程,读取模型;
步骤s4:对系统资源进行定义与配置;
步骤s5:针对已定义的系统资源进行具体测试数据的生成;
步骤s6:测试人员对软件系统进行测试建模,并基于模型进行约束设计;
步骤s7:测试人员配置各种覆盖策略,基于测试数据生成固定格式的测试用例。
2.根据权利要求1所述的软件测试用例生成方法,其特征在于,
在所述步骤s2中,建模工程包含模型的文件与模型的数据,模型采用活动图的形式;
在所述步骤s4中,系统资源包含数据、时间约束和io电平信号。
3.根据权利要求1所述的软件测试用例生成方法,其特征在于,在所述步骤s5中,还包括执行以下步骤:
第1步骤:数据表达;数据表达主要涉及到数据格式、数据类型、数据精度以及数据范围;
第2步骤:测试数据的生成。
4.根据权利要求3所述的软件测试用例生成方法,其特征在于,在所述第1步骤中,数据格式包括:
a.单个数据:一个数据一个单独的物理含义;
b.结构数据:某物理数据有多个不同属性数据组成,这种数据通常会同时采集、计算和处理。
c.集合数据:一组数据中含有多个物理数据,每个物理数据之间没有太多的关联,只是简单的组合,可以在一起进行处理,也可以分开进行处理。
5.根据权利要求3所述的软件测试用例生成方法,其特征在于,在所述第2步骤中,所述测试数据的生成包括以下五种情况:
a、数据可以手工确定取值域,并且分别设置有效类、无效类;
b、通过设置数据的范围或识别简单的逻辑运算表达式,自动根据等价类、边界值的算法抽样生成确定的有效值和无效值;
c、连续数据生成;连续接收某数据,数据可以不变,更多的情况是数据在实时变化;
d、时间约束;范围类型的时间约束采用五值法生成,分别为左边界-精度,左边界,中间值,右边界,右边界 精度值;
e、io电平信号;io电平信号根据跳变持续个数,是否允许毛刺、允许毛刺个数生成。
6.根据权利要求1所述的软件测试用例生成方法,其特征在于,在步骤s6中,所述测试建模为建立测试模型,所述建立的测试模型为可嵌套的活动图,所述的约束设计包含数据约束、预置条件、时间约束和时序关系的设计。
7.根据权利要求1所述的软件测试用例生成方法,其特征在于,在所述步骤s7中,测试人员依据软件的不同测试风险级别,配置各种覆盖策略,根据数据覆盖策略组合测试数据,在测试数据驱动下,得到满足测试目标的测试数据集合,基于模型图中的测试场景,最终按照测试用例设计格式生成最终的测试用例。
8.根据权利要求7所述的软件测试用例生成方法,其特征在于,所述覆盖策略包含数据覆盖策略、条件判定覆盖策略、路径覆盖策略以及子图覆盖策略,其中数据覆盖策略包含ec、2-wise,3-wise,n-wise,条件判定覆盖策略包含分支覆盖和条件组合覆盖,路径覆盖策略采用基于深度的路径覆盖,子图覆盖策略包含展开、贯通和组合三种关系。
9.一种基于数据驱动及多种覆盖策略的软件测试用例生成系统,其特征在于,包括:存储器、处理器以及存储在所述存储器上的计算机程序,所述计算机程序配置为由所述处理器调用时实现权利要求1-8中任一项所述的软件测试用例生成方法的步骤。
10.一种计算机可读存储介质,其特征在于:所述计算机可读存储介质存储有计算机程序,所述计算机程序配置为由处理器调用时实现权利要求1-8中任一项所述的软件测试用例生成方法的步骤。
技术总结