基于动态风险的回归测试用例优先级计算方法转让专利

申请号 : CN201910980835.0

文献号 : CN110825621B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 冯子亮王洋陈阳李东璐韩震博刘季亭刘恒宇贺思睿郭照康

申请人 : 四川大学

摘要 :

本发明提供一种基于动态风险的回归测试用例优先级计算方法,根据需求变更等因素计算出模块错误发生概率,根据测试用例调用情况计算计算模块失效动态冲击值,最终得到该测试用例的动态风险值,对其进行排序得到测试用例的优先级。该方法中通过计算静态的模块错误发生概率和动态的模块失效冲击值,较为准确地反映了在实际测试运行过程中代码的执行情况,与实际运行情况较为吻合;具有简单、高效等特点。

权利要求 :

1.基于动态风险的回归测试用例优先级计算方法,其特征在于,包括以下步骤:步骤1,以模块为单位,收集并统计基于修复缺陷导致的代码变更情况;收集并统计基于需求变更导致的代码变更情况;

步骤2,计算模块因需求变更和需求复杂性导致的风险因子;该因子可用模块包含的需求变更数量与总需求变更数量的比值,乘以该模块需求项与总需求项的比值表示;

步骤3,计算模块因修复缺陷和复杂性导致的风险因子;该因子可用修改的缺陷个数与总缺陷数的比值,乘以该模块修改代码的行数与该模块代码的总行数的比值表示;

步骤4,计算模块因代码复杂性和代码量导致的风险因子;该因子可用模块的圈复杂度与所有模块的最大圈复杂度的比值,乘以该模块的代码行数与所有模块中最大代码行数的比值表示;

步骤5,计算因上述风险因子导致的模块错误发生概率;可表示为步骤2 4中计算的该~

模块的各风险因子的乘积;

步骤6,人工指定模块的重要性值;

步骤7,统计测试用例中模块之间的动态调用关系;

步骤8,计算测试用例中模块失效动态冲击值;可表示为在该测试用例该模块的所有动态子模块集合中,全部模块的重要性平均值与全部测试用例的全部模块重要性最大值的比值;

步骤9,计算测试用例中单个模块的动态风险因子;可表示为该模块的模块错误发生概率与该测试用例中该模块失效动态冲击值的乘积;

步骤10,计算测试用例的动态风险值和测试用例的优先级;

测试用例的动态风险值可表示为,该测试用例的动态子模块集合中全部模块的动态风险因子之和;

按测试用例的动态风险值排序,动态风险值最大的优先级最高;

从而实现对测试用例优先级的计算和对测试用例的排序。

2.根据权利要求1所述的方法,其特征在于,所述步骤5,计算因上述风险因子导致的模块错误发生概率,包括:

所述模块错误发生,指该模块在运行过程中出现运行错误,以及未达到预期功能的行为,也称模块失效。

3.根据权利要求1所述的方法,其特征在于,所述步骤6,人工指定模块的重要性值,包括:

模块的重要性值表征模块应该被重视的程度,由人工指定。

4.根据权利要求1所述的方法,其特征在于,所述步骤7,统计测试用例中模块之间的动态调用关系,包括:

测试用例执行时模块间的调用关系,称为动态调用关系;所有被实际调用模块的集合,称为该测试用例的动态子模块集合;

针对测试用例中的一个模块,在该测试用例执行时,其所有被调用模块的集合,称为该模块在该测试用例中的动态子模块集合。

说明书 :

基于动态风险的回归测试用例优先级计算方法

技术领域

[0001] 本发明属于软件工程中的软件测试领域,尤其涉及在集成测试阶段的回归测试中的一种基于动态风险的回归测试用例优先级计算方法。

背景技术

[0002] 回归测试是软件测试中一个非常重要的步骤,即在软件代码发生修改后对软件的测试;在集成测试阶段的回归测试中,最可靠的方法是对全部测试用例执行回归,但是在时
间紧和预算受限等条件下,这显得不切合实际,因此如何有选择性地进行回归测试,是集成
测试阶段的回归测试中的一项重要内容。
[0003] 基于模块风险的测试用例优先级计算方法,通过计算错误发生的概率和错误发生带来的冲击来度量测试用例的风险值,从而确定回归测试用例的优先级;但是大多数模块
风险计算方法都是基于静态的代码关系,忽略了在实际测试用例运行中逻辑和数据的动态
性,这在集成测试阶段的回归测试中会导致严重问题,如依赖关系简单但是逻辑复杂的模
块,计算出的优先级不高,从而得不到重视,这显然是违背常理的。
[0004] 为了解决此类问题,本发明针对集成测试阶段的回归测试,提出了一种基于动态风险的回归测试用例优先级计算方法,依据需求变更、缺陷修复和代码量等因素计算错误
发生概率,依据测试用例实际运行时的动态模块调用关系计算错误发生带来的动态影响,
进而得到测试用例的动态风险值,从而较为准确地实现回归测试用例优先级的计算。

发明内容

[0005] 基于动态风险的回归测试用例优先级计算方法,包括以下步骤。
[0006] 步骤1,以模块为单位,收集并统计基于修复缺陷导致的代码变更情况;收集并统计基于需求变更导致的代码变更情况;
[0007] 所述模块可以是实现某个具体功能的函数或方法,也可以是包含多个函数或方法的类或者集合。
[0008] 步骤2,计算模块因需求变更和需求复杂性导致的风险因子;
[0009] 需求变更是导致代码修改的重要因素,模块中代码的修改次数、代码的修改程度是影响该模块风险的重要因素;因此,一个模块涵盖的需求变更越多,其风险程度越高;
[0010] 另外一个复杂的模块通常包含更多的需求项,也意味着对该模块的要求较多且复杂,其风险程度也更大;
[0011] 模块因需求变更和需求复杂性导致的风险因子,可用模块包含的需求变更数量与总需求变更数量的比值,乘以该模块需求项与总需求项的比值表示。
[0012] 步骤3,计算模块因修复缺陷和复杂性导致的风险因子;
[0013] 修复缺陷是导致代码修改的另一因素,在代码修改的过程中,可能修复了原来的缺陷,但是有可能产生了新的缺陷;修改的缺陷个数越多,其风险程度越大;
[0014] 同时修改过程的复杂性会导致风险因子增加,代码修改的行数越多,其风险程度越大;
[0015] 模块因修复缺陷和复杂性导致的风险因子,可用修改的缺陷个数与总缺陷数的比值,乘以该模块修改代码的行数与该模块代码的总行数的比值表示。
[0016] 步骤4,计算模块因代码复杂性和代码量导致的风险因子;
[0017] 通常逻辑较为复杂的代码,使用了较多的判断和循环,会导致风险程度的增加,这可用圈复杂度度量;
[0018] 同时代码量也在一定程度上反映了代码的复杂程度,这可用模块的代码行数来度量;
[0019] 模块因代码复杂性和代码量导致的风险因子,可用模块的圈复杂度与所有模块的最大圈复杂度的比值,乘以该模块的代码行数与所有模块中最大代码行数的比值表示。
[0020] 步骤5,计算因上述风险因子导致的模块错误发生概率;
[0021] 所述模块错误发生,指该模块在运行过程中出现运行错误,以及未达到预期功能的行为,也称模块失效;
[0022] 模块发生错误概率可表示为步骤2 4中计算的该模块的各风险因子的乘积。~
[0023] 步骤6,人工指定模块的重要性值;
[0024] 模块的重要性值表征模块应该被重视的程度,由人工指定。
[0025] 步骤7,统计测试用例中模块之间的动态调用关系;
[0026] 模块之间的调用关系反映了软件内部模块间的依赖关系;如果一个模块包含错误,在发生故障时显然也会影响那些直接或间接调用该模块的模块;
[0027] 测试用例执行时模块间的调用关系,称为动态调用关系;所有被实际调用模块的集合,称为该测试用例的动态子模块集合;
[0028] 针对测试用例中的一个模块,在该测试用例执行时,其所有被调用模块的集合,称为该模块在该测试用例中的动态子模块集合。
[0029] 步骤8,计算测试用例中模块失效动态冲击值;
[0030] 在测试用例运行过程中,当某个模块失效后,所有调用该模块的其他模块都会受到影响;
[0031] 测试用例中模块失效动态冲击值,可表示为在该测试用例的该模块的所有动态子模块集合中,全部模块的重要性平均值与全部测试用例的全部模块重要性最大值的比值。
[0032] 步骤9,计算测试用例中单个模块的动态风险因子;
[0033] 测试用例中单个模块的动态风险因子可表示为,该模块的模块错误发生概率与该测试用例中该模块失效动态冲击值的乘积。
[0034] 步骤10,计算测试用例的动态风险值和测试用例的优先级;
[0035] 测试用例的动态风险值可表示为,该测试用例的动态子模块集合中全部模块的动态风险因子之和;
[0036] 按测试用例的动态风险值排序,动态风险值最大的优先级最高;
[0037] 从而实现对测试用例优先级的计算和对测试用例的排序。
[0038] 本方法针对集成测试中的回归测试用例优先级问题,根据需求变更、缺陷修改、代码复杂度等因素计算出模块错误发生概率,根据测试用例中模块间的动态调用关系,计算
该模块在该测试用例中失效时带来的模块失效动态冲击值,将两者的乘积作为该测试用例
中该模块的动态风险因子;对测试用例运行时动态调用的所有模块的动态风险因子累加,
得到该测试用例的动态风险值,对其进行排序,得到测试用例的优先级。该方法中通过计算
静态的模块错误发生概率和动态的模块失效冲击值,较为准确地反映了在实际测试运行过
程中代码的执行情况,与实际运行情况较为吻合;该算法具有简单、高效等特点,具有良好
的应用效果。

附图说明

[0039] 图1为本发明方法的流程示意图。

具体实施方式

[0040] 为了更加清楚地展示本发明的目的和技术方案,下面将结合具体的实施过程和附图,对本发明的具体实施方式和参数进行更加详细的描述。
[0041] 步骤1,以模块为单位,收集并统计基于修复缺陷导致的代码变更情况;收集并统计基于需求变更导致的代码变更情况。
[0042] 步骤2,计算模块因需求变更和需求复杂性导致的风险因子;
[0043] 模块因需求变更和需求复杂性导致的风险因子,可用模块包含的需求变更数量与总需求变更数量的比值,乘以该模块需求项与总需求项的比值表示。
[0044] 如某模块需求变更数量为3,本次回归总需求变更数量为100,两者的比值为0.03;该模块对应的需求项为5,总需求项为100,两者的比值为0.05;则最终该风险因子的值为
1.5E‑3。
[0045] 步骤3,计算模块因修复缺陷和复杂性导致的风险因子;
[0046] 模块因修复缺陷和复杂性导致的风险因子,可用修改的缺陷个数与总缺陷数的比值,乘以该模块修改代码的行数与该模块代码的总行数的比值表示。
[0047] 如某模块本次修复缺陷2个,本次回归修复的缺陷总数为20,两者的比值为0.10;对应的该模块代码修改为15行,该模块代码量为150行,两者的比值为0.10;则最终该风险
因子的值为1E‑2。
[0048] 步骤4,计算模块因代码复杂性和代码量导致的风险因子;
[0049] 模块因代码复杂性和代码量导致的风险因子,可用模块的圈复杂度与所有模块的最大圈复杂度的比值,乘以该模块的代码行数与所有模块中最大代码行数的比值表示。
[0050] 如某模块圈复杂度为10,所有模块的最大圈复杂度为100,两者的比值为0.10;该模块总代码量150行,所有模块中最大代码行数为300行,两者的比值为0.50,则最终该风险
因子的值为5E‑2。
[0051] 步骤5,计算因上述风险导致的模块错误发生概率;
[0052] 模块发生错误概率可表示为步骤2 4中计算的该模块的各风险因子的乘积。~
[0053] 如按上述过程中的数值,该模块发生错误的可能性值为1.5E‑3 × 1E‑2 × 5E‑2,最终的值为7.5E‑7。
[0054] 步骤6,人工指定模块的重要性值;
[0055] 模块的重要性值表征模块应该被重视的程度,由人工指定;
[0056] 可将模块的重要性值分为1 5共5个等级,其中1表示最不重要,5表示最重要。~
[0057] 步骤7,统计测试用例中模块之间的动态调用关系;
[0058] 针对测试用例中的一个模块,在该测试用例执行时,其所有被调用模块的集合,称为该模块在该测试用例中的动态子模块集合;
[0059] 如某测试用例包含了M1模块,而M1模块动态调用了M3、M5,M5动态调用了M6、M7,则该测试用例中M1模块的动态子模块集合为:{M3,M5,M6,M7}。
[0060] 步骤8,计算测试用例中模块失效动态冲击值;
[0061] 测试用例中模块失效动态冲击值,可表示为在该测试用例的该模块的所有动态子模块集合中,全部模块的重要性平均值与全部测试用例的全部模块重要性最大值的比值。
[0062] 按步骤7中的例子,设M3、M5、M6和M7的重要性分别为2、3,1,4,则模块M1的动态子模块的重要性平均值为:(2+3+1+4)/4=2.5;设全部测试用例的全部模块重要性最大值为4,
则该测试用例中M1模块的动态冲击值为2.5/4=0.625。
[0063] 步骤9,计算测试用例中单个模块的动态风险值;
[0064] 测试用例中单个模块的动态风险因子可表示为,该模块的模块错误发生概率与该测试用例中该模块失效动态冲击值的乘积。
[0065] 如测试用例中某模块错误发生的概率为7.5E‑7,该模块失效的动态冲击值为0.625,则该测试用例中该模块的动态风险因子为4.7E‑7。
[0066] 步骤10,计算测试用例的动态风险值和测试用例的优先级;
[0067] 测试用例的动态风险值可表示为,该测试用例的动态子模块集合中全部模块的动态风险因子之和;
[0068] 按测试用例的动态风险值排序,动态风险值最大的优先级最高;
[0069] 从而实现对测试用例优先级的计算和对测试用例的排序。
[0070] 如测试用例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。
[0071] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其进行限制;尽管前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可
以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同
替换;或者修改各个步骤的使用顺序,而这些修改或者替换,并不使相应技术方案的本质脱
离本发明各实施例技术方案的范围;本发明各种阈值及范围的取值,也会因为具体情况不
同而有所改变。