[0028] 下面结合附图并通过具体实施方式来进一步描述本发明。
[0029] 图1为本发明算法中实施的One-test-at-a-time策略算法流程图。
[0030] 本发明所述的组合测试用例优先级方法,将One-test-at-a-time策略、多目标优化思想和组合测试用例优先级排序算法相结合,提出了一种多个优先级排序影响因子和根据实际测试结果调整影响因子取值的策略,用于组合测试用例优先级排序,如图2所示,包括以下步骤:
[0031] 步骤1:初始化测试用例序列集 输入组合测试用例集 是t0时刻的测试用例序列集, 是t0时刻的组合测试用例集。此时,i=0。
[0032] 步骤2:计算每条尚未执行的测试用例的优先级
[0033]
[0034] 其中,tcj是测试用例,ti是当前时刻,λ为组合覆盖力度, 是测试用例tcj多重待覆盖率。表示测试用例tcj,在ti时刻覆盖测试用例序列 以外组合力度为λ及λ以下所有组合的强度。 是测试用例tcj失效率。表示测试过程中,ti时刻测试用例tcj的失效率。 是测试用例tcj重要程度。α、β、γ分别表示多重待覆盖率、测试用例失效率和测试用例重要程度的权值,且α+β+γ=1。
[0035] 步骤2.1:计算测试测试用例tcj多重待覆盖率
[0036]
[0037] 其中0<ωk≤1.0且 多重待覆盖率则是考虑测试用例tcj覆盖测试用例序列集 中尚未覆盖组合的概率,并且要求覆盖的k元参数值组合,当k不同时,覆盖组合情况也存在不同。故引入权重的概念,使用所有k元参数值组合覆盖率的加权平均值作为多重待覆盖率。考虑测试用例tcj覆盖情况,测试用例tcj能够覆盖测试用例序列集 中尚未覆盖的组合越多,则测试用例tcj越容易被选取用于下一条测试的用例。若k固定时,只计算k元参数值组合覆盖率,故采用测试用例tcj已覆盖测试用例序列集 中组合的概率取反,得到测试用例tcj未覆盖测试用例序列集 中组合的概率。图3是测试用例待覆盖率的计算流程图。
[0038]
[0039] 其中, 是测试用例tcj待覆盖率,表示测试用例tcj,在ti时刻覆盖测试用例序列 中组合力度为k组合的强度。
[0040] 步骤2.2:计算测试用例tcj失效率
[0041]
[0042] 其中, 是参数取值失效率。表示测试过程中,ti时刻测试用例tcj的影响因素fk中,取值为p的失效率。 是参数取值失效个数。表示测试用例tcj中,ti时刻参数取值失效率不为0的参数取值个数,即 的参数取值个数。
[0043] 步骤2.3:计算测试用例tcj重要程度
[0044]
[0045] 其中,ω(fk,p)是参数取值优先级权值。表示影响因素fk中,取值为p的优先级权值。n是测试用例tcj中参数的个数。
[0046] 步骤2.4:计算测试用例tcj的优先级
[0047]
[0048] 步骤2.5:重复步骤2.1~2.4,直到组合测试用例集 中的所有测试用例的优先级计算出结果为止。
[0049] 步骤3:寻找ti时刻优先级最高的测试用例集equalSet。可能存在多个优先级最高的测试用例,将这些优先级相同且优先级最高的测试用例表示成一个优先级最高的测试用例集。
[0050] 步骤4:从测试用例集equalSet随机选取一条测试用例 并执行测试用例 且获取测试结果。
[0051] 步骤5:根据测试用例 的测试结果,调整测试用例的失效率,即调整参数取值失效率 使得ti+1时刻的测试用例的失效率能够在测试过程中动态调整。在测试过程中,测试用例的执行能够反馈当前可能存在的错误与缺陷,那么测试用例所覆盖的参数取值的失效率需要做出相应的调整,以保证测试用例失效率能够实时计算,确保最终优先级排序的准确性。若ti时刻,测试用例 检测出待测软件系统中存在缺陷,测试结果只能反应软件失效,但无法判断究竟是由哪些参数相互作用引发的失效。因此,只能对 覆盖的所有参数取值的失效率相应增加,其他参数取值的失效率保持不变。则ti+1时刻,各参数取值失效率可用以下公式:
[0052]
[0053] 其中,Δc为失效率的增加值。
[0054] 若ti时刻,测试用例 未检测出待测软件系统中存在缺陷,则该测试用例覆盖的所有参数取值的失效率变为0,其他参数取值的失效率保持不变。则ti+1时刻,各参数取值失效率可用以下公式:
[0055]
[0056] 步骤6:时刻i增加。将测试用例 插入到测试用例序列集 的尾部,将测试用例从组合测试用例集 中剔除。
[0057] 步骤7:重复步骤2~6,直到组合测试用例集 中测试用例的个数等于0为止。
[0058] 步骤8:输出测试用例序列集