本发明属于软件工程中的软件测试领域,尤其涉及一种回归测试中测试用例优先级计算方法。
背景技术:
在软件工程实践中,软件测试环节至关重要;回归测试是软件测试中的一个非常重要步骤,即在软件代码发生修改后对软件的测试;最可靠的回归测试方法是对全部测试用例执行回归测试,但是在时间紧和预算受限等条件下,对全部测试用例执行回归测试显得不现实,因此,如何有选择性地执行回归测试,是软件测试中一个重要内容。
基于优先级的测试用例选择方法是回归测试用例选择中的常用方法,可以根据过往的测试结果、各模块覆盖率、历史故障率等因素进行优先级计算,也可以基于模块风险计算优先级,这些方法在实际应用中的效果各有千秋。
基于模块风险的测试用例优先级计算方法,通过计算错误发生的可能性以及由错误带来的危害来度量模块风险值,从而确定优先级;模块风险一般可表示为两种指标,其一是模块失效的概率或发生故障的可能性,其二是模块失效产生的损失或影响;对这两种指标的评估在很多情况下完全依赖于经验,需要进行人工处理,这对测试的效率带来很大的影响,同时较多的人工处理也带来效果的不确定性。
为了解决此类问题,本发明提出了一种回归测试中测试用例优先级计算方法,可以根据用户需求、需求变更、代码以及修改情况等因素,在进行回归测试前计算模块的风险因子和测试用例的风险值,从而实现回归测试用例优先级计算,具有较好的应用效果。
技术实现要素:
回归测试中测试用例优先级的计算方法,包括以下步骤。
步骤1,以模块为单位,收集并统计因需求变更导致的代码变更情况;
所述模块可以是实现某个具体功能的函数或方法,也可以是包含多个具体函数或方法的类或者集合。
步骤2,计算模块因需求变更导致的风险因子;
需求变更是导致代码修改的重要因素,模块中代码的修改次数、修改的程度是影响该模块风险的重要因素;因此,一个模块涵盖的需求变更越多,其风险程度越高;
模块因需求变更导致的风险因子可用模块需求变更次数与总需求变更次数的比值表示。
步骤3,计算模块因需求复杂性导致的风险因子;
通常情况下,一个复杂的模块通常包含更多的需求项,反过来包含更多需求项的模块也更加复杂,其风险也更大;
模块因需求复杂性导致的风险因子可用模块包含的需求项与总需求项的比值表示。
步骤4,计算模块因代码复杂性导致的风险因子;
通常情况下,代码中使用的判断和循环的次数会影响模块的复杂性,逻辑关系越复杂,其风险越大,这可以用圈复杂度来衡量;
模块因代码复杂性导致的风险因子可用模块的圈复杂度与所有模块最大圈复杂度的比值表示。
步骤5,计算模块因代码量导致的风险因子;
通常情况下,代码行数越多,潜在的风险也越大;因此代码行数也是衡量模块风险的重要指标;
模块因代码量导致的风险因子可用该模块的代码行数与所有模块中最大代码行数的比值表示。
步骤6,计算模块失效可能性值;
所述模块失效,指该模块在运行过程中出现运行错误,以及未达到预期功能的行为;
模块失效可能性值可用步骤2~步骤5中计算的各个模块风险因子的乘积表示。
步骤7,统计模块的所有被调用模块;
模块之间的调用关系反映了软件内部的模块间依赖关系;如果一个模块包含错误,在发生故障时显然也会影响那些直接或间接依赖于该模块的模块;
模块的所有被调用模块表示为该模块中所有被调用模块的集合,即子模块集合;可以简单扫描代码得到静态的子模块集合。
步骤8,人工指定模块的重要性值;
模块的重要性表征模块应该被重视的程度,可由人工指定。
步骤9,计算模块失效冲击值;
模块失效后,所有调用该模块的其他模块都会受到影响;
模块失效冲击值可以表示为其子模块集合中各模块重要性的平均值与全部模块重要性最大值的比值。
步骤10,计算模块的风险因子;
模块的风险因子可表示为模块失效可能性值和模块失效冲击值的乘积。
步骤11,计算测试用例的风险值和优先级;
对单元测试用例测试时可能只包含一个模块;
对集成测试用例测试时可能包含多个模块;
计算测试用例包含的所有模块的风险因子并累加,作为该测试用例的风险值;
按风险值对测试用例排序,风险值最大的优先级最高;
从而实现对测试用例优先级的计算和对测试用例的排序。
本方法针对回归测试中测试用例的优先级问题,首先根据需求变更次数、需求的复杂度、代码的复杂性和代码量,计算出模块失效可能性值;再根据模块的调用关系和重要程度,计算模块失效冲击值;将两者的乘积作为模块的风险因子;对测试用例包含的所有模块的风险因子进行累加,得到测试用例的风险值,对其排序得到测试用例的优先级。该方法中的计算依据在很大程度上反映了回归测试中关心的问题,其模块失效可能性值以及模块失效冲击值较能反映出代码异常带来的影响,与实际情况较为吻合;该方法具有简单、高效等特点,不仅适合于单元测试,也适合集成测试,具有良好的应用效果。
附图说明
图1为本发明方法的流程示意图。
具体实施方式
为了更加清楚地展示本发明的目的和技术方案,下面将结合具体的实施过程和附图,对本发明的具体实施方式和参数进行更加详细的描述。
回归测试中测试用例优先级的计算方法,如图1所示,包括以下步骤。
步骤1,以模块为单位,收集并统计因需求变更导致的代码变更情况;
所述模块可以是实现某个具体功能的函数或方法,也可以是包含多个具体函数或方法的类或者集合。
步骤2,计算模块因需求变更导致的风险因子;
模块因需求变更导致的风险因子可用模块需求变更次数与总需求变更次数的比值表示。
设某模块涉及到的需求变更数量为rci,本次回归测试时总的需求变更数量为nrc,则该模块因需求变更导致的风险因子可表示为rci/nrc,该值的范围为0~1。
如某模块需求变更数为3,本次回归总需求变更数为100,则该风险因子为0.03。
步骤3,计算模块因需求复杂性导致的风险因子;
模块因需求复杂性导致的风险因子可用模块包含的需求项与总需求项的比值表示。
设某模块包含的需求项为ri,总需求项为nrv;则该模块因需求复杂性导致的风险因子可表示为ri/nrv,该值的范围为0~1。
如某模块需求项为5,总需求项为100,则该风险因子为0.05。
步骤4,计算模块因代码复杂性导致的风险因子;
模块因代码复杂性导致的风险因子可用模块的圈复杂度与所有模块最大圈复杂度的比值表示。
设某模块的圈复杂度为ci,所有模块的最大圈复杂度为mcc,则该模块因代码复杂性导致的风险因子可表示为ci/mcc,该值的范围也为0~1。
如某模块圈复杂度为10,最大圈复杂度为100,则该风险因子为0.10。
步骤5,计算模块因代码量导致的风险因子;
模块因代码量导致的风险因子可用该模块的代码行数与所有模块中最大代码行数的比值表示。
设某模块的代码行数为li,所有模块中行数的最大值为mlc,则该模块因代码量导致的风险因子可表示为li/mlc,该值的范围也为0~1。
如某模块代码行数为50,最大代码行为200,则该风险因子为0.40。
步骤6,计算模块失效可能性值,可表示为步骤2到步骤5计算的各因子的乘积,即:rci/nrc×ri/nrv×ci/mcc×li/mlc。
如按步骤2~步骤5的数据,某模块因需求变更导致的风险因子为0.03;因需求复杂性导致的风险因子为0.05;因代码复杂性导致的风险因子为0.10;因代码量导致的风险因子为0.40;则模块失效可能性值为:0.03×0.05×0.1×0.4=6e-5。
步骤7,统计模块的所有被调用模块;
模块的所有被调用模块表示为该模块中所有被调用模块的集合,即子模块集合;
所述子模块即为被调用的模块;可以简单扫描代码得到静态的子模块集合;
扫描源代码,若某模块包含了被调用模块,将后者加入到子模块集合;
子模块的所有被调用子模块也需要加入,因此注意扫描时的递归和循环,统计子模块时不要重复;
如m1模块调用了m3、m5,m5调用了m6、m7,则该集合为:{m3,m5,m6,m7}。
步骤8,人工指定模块的重要性值;
模块的重要性表征模块应该被重视的程度,由人工指定;
可以将模块的重要性值范围设定为1~5,5为最重要,1为最不重要。
步骤9,计算模块失效冲击值;
模块失效冲击值可以表示为其子模块集合中各模块重要性的平均值与全部模块重要性最大值的比值;
设某模块的子模块集合中各模块重要性平均值为ii,最大值miv,则该模块失效带来的冲击值可表示为ii/miv,该值的范围也为0~1。
按步骤7中的例子,设模块m3、m5、m6和m7的重要性分别为2、3、1、4,则m1的子模块集合中重要性平均值为:(2+3+1+4)/4=2.5;设全部模块重要性最大值为4,则该项失效冲击值为2.5/4=0.625。
步骤10,计算模块的风险因子;
模块的风险因子可表示为模块失效可能性值和模块失效带来的冲击值的乘积。
如按步骤2~步骤9的数据,模块失效可能性值为6e-5,失效带来的冲击值0.625,则m1模块的风险因子为:3.75e-5。
步骤11,计算测试用例的风险值和优先级;
对单元测试用例测试时可能只包含一个模块;
对集成测试用例测试时可能包含多个模块;
计算测试用例包含的所有模块的风险因子并累加,作为该测试用例的风险值;
按风险值对测试用例排序,风险值最大的优先级最高;
从而实现对测试用例优先级的计算和对测试用例的排序。
如测试用例t1包含模块m1和m2模块,测试用例t2包含了m3和m4模块,m1、m2、m3、m4模块的风险因子分别为3.75e-5、1e-5、3e-5和2e-6,则t1测试用例的风险值为4.75e-5,t2测试用例的风险值为3.2e-5,t1的风险值大于t2,优先级也大于t2。
最后应说明的是,以上实施例仅用以说明本发明的技术方案,而非对其进行限制;尽管前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;或者修改各个步骤的使用顺序;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围;本发明各种阈值及范围的取值,也会因为具体情况不同而有所改变。
技术特征:
1.回归测试中测试用例优先级的计算方法,其特征在于,包括以下步骤:
步骤1,以模块为单位,收集并统计因需求变更导致的代码变更情况;
步骤2,计算模块因需求变更导致的风险因子;
步骤3,计算模块因需求复杂性导致的风险因子;
步骤4,计算模块因代码复杂性导致的风险因子;
步骤5,计算模块因代码量导致的风险因子;
步骤6,计算模块失效可能性值;
步骤7,统计模块的所有被调用模块;
步骤8,人工指定模块的重要性值;
步骤9,计算模块失效冲击值;
步骤10,计算模块的风险因子;
步骤11,计算测试用例的风险值和优先级;
从而实现对测试用例优先级的计算和对测试用例的排序。
2.所述步骤2,计算模块因需求变更导致的风险因子,包括:
模块因需求变更导致的风险因子可用模块需求变更次数与总需求变更次数的比值表示。
3.所述步骤3,计算模块因需求复杂性导致的风险因子,包括:
模块因需求复杂性导致的风险因子可用模块包含的需求项与总需求项的比值表示。
4.所述步骤4,计算模块因代码复杂性导致的风险因子,包括:
模块因代码复杂性导致的风险因子可用模块的圈复杂度与所有模块最大圈复杂度的比值表示。
5.所述步骤5,计算模块因代码量导致的风险因子,包括:
模块因代码量导致的风险因子可用该模块的代码行数与所有模块中最大代码行数的比值表示。
6.所述步骤6,计算模块失效可能性值,包括:
模块失效可能性值可用步骤2到步骤5计算的各个模块风险因子的乘积表示。
7.所述步骤7,统计模块的所有被调用模块,包括:
模块的所有被调用模块表示为该模块中所有被调用模块的集合,即子模块集合;可以简单扫描代码得到静态的子模块集合。
8.所述步骤9,计算模块失效冲击值,包括:
模块失效冲击值可以表示为其子模块集合中各模块重要性的平均值与全部模块重要性最大值的比值。
9.所述步骤10,计算模块的风险因子,包括:
模块的风险因子可表示为模块失效可能性值和模块失效冲击值的乘积。
10.所述步骤11,计算测试用例的风险值和优先级,包括:
计算测试用例包含的所有模块的风险因子并累加,作为该测试用例的风险值;
按风险值对测试用例排序,风险值最大的优先级最高。
技术总结
本发明提供一种回归测试中测试用例优先级计算方法,根据需求变更次数等计算出模块失效可能性值;再根据模块的调用关系和重要程度计算模块失效冲击值;最终得到测试用例的风险值,对其排序得到测试用例的优先级。该方法中的计算依据在很大程度上反映了回归测试中关心的问题,其模块失效可能性值以及模块失效冲击值较能反映出代码异常带来的影响,与实际情况较为吻合;具有简单、高效等特点,不仅适合于单元测试,也适合集成测试。
技术研发人员:冯子亮;王洋;陈阳;胡嵽;邓茜文;单强达;吴晋子;朱鑫;司马铭骏
受保护的技术使用者:四川大学
技术研发日:.10.16
技术公布日:.02.21