测试工时受限的测试策略研究
2014-02-09陈辉,周丰
陈 辉,周 丰
(华北计算技术研究所,北京100083)
0 引 言
要想对软件进行尽可能完备的测试,需要设计和执行充足的测试用例。但是,测试用例也不是无止尽的越多越好,因为需要设计和执行的测试用例越多,测试成本也就越高。在现实中,很多软件项目存在开发进度延迟的问题,导致测试工时有限乃至不足,而软件又面临按时发布的压力。因此,有必要研究在测试工时受限条件下,如何使用较少的测试用例进行尽可能充分的测试。
当前,对如何使用较少的测试用例进行尽可能充分的测试,主要集中在回归测试领域,如测试用例优先排序[1-3]、测试用例集缩减和测试用例集扩充[4,5],这些技术无法在测试用例设计好之前使用。也有一些技术可以在测试用例设计前使用,如统计测试方法[6],但是应用该方法之前需要建立软件使用模型,这本身就很消耗工作量,而且因为是一种随机测试方法,难以在软件投入使用之前判定测试的充分性。另外,张德平[7]等人研究了划分测试中划分方案确定情形下,如何在各个子域中合理选择测试用例问题,但是由于要求测试人员了解待测软件的错误分布,并给出失效概率矩阵,因此不便于在实际应用领域使用。为此,分析了制定测试策略时需要考虑的几个因素,提出了一种对将要设计的测试用例进行优先级估计的方法,该方法的最大特点就是可在设计测试用例之前使用,在以上基础上,提出了测试工时受限的测试策略。
1 影响测试策略的因素
制定测试策略时需要考虑的因素有很多,下面只对测试工时、测试充分性展开探讨。
1.1 测试工时
在本文中,测试工时表示分配给测试工作的时间,也指完成测试工作所需要的时间。测试工作包括测试策划、测试设计和实现、测试执行、测试总结。假设有一个测试项目,有m个全职测试人员,要求在n个工作日内完成,每个工作日有t小时的有效工作时间,那么对这个测试项目的测试工时有
测试策略的制定必然受到分配给测试工作的时间的影响,如果分配给测试工作的时间少于完成测试工作所需要的时间,则需要对测试策略进行必要的调整和优化。测试需求直接决定了完成测试工作所需要的时间,测试需求直接决定了需要进行哪些类型的测试以及相应的测试设计方法,及测试用例的最少数量。测试用例的设计执行所需时间直接受到测试用例类型、测试用例数量及单位测试用例的设计执行时间的影响。
1.2 测试充分性
从测试设计角度上看,采用的测试类型和测试用例设计方法,以及设计的有效测试用例数量,会影响到测试充分性。采用的测试类型越多,不同测试用例设计方法设计出的有效测试用例数量越多,则能达到的测试覆盖率越高,也越可能发现更多的潜在缺陷,从而更能保证测试的充分性。但是另外一方面,采用的测试类型越多,测试用例数量越多,也会导致测试成本更高。因此,在测试实践当中,需要在测试充分性与测试成本之间寻找合适的平衡点。
假设测试发现的所有缺陷都被修复,测试成本与有效测试用例数量直接相关,则判断有效测试用例数量是否足够的一个方法是:潜在的遗留缺陷(即在测试中未被发现的潜在缺陷)导致的质量风险成本≤测试成本,如图1所示。
图1 测试用例数量、测试成本与质量风险成本的关系
2 一种测试用例优先级估计方法
在有限的测试工时中,如果依照测试类型和相应的测试方法设计所有的用例,则必然会消耗较多的宝贵的测试工时,因此有必要对将要设计的测试用例进行优先级估计,然后再有选择地设计较高优先级的测试用例。
目前,对于已设计或执行的测试用例的优先级研究较多[8-10],但是却没有适合在测试用例设计前就预估其优先级的实用方法,为此假设每个测试用例被设计之前都有针对性的测试目标,通过专家经验及实际测试经验,提出了测试用例优先级的6个度量元(见表1)供参考,即被测目标重要度、被测目标复杂度、被测目标紧迫度、用例重要度、预计用例的检测缺陷能力、开发团队信心度,然后依据这6个度量元去估算测试用例的优先级。记这6个度量元分别为ap、ac、ae、tp、td、tc,则测试用例的优先级p的计算方法如下
表1 测试用例优先级的度量元权值
3 测试工时受限的测试策略
在制定测试计划时,进行测试设计之前,需要依据测试需求确定相应的测试类型,提出测试的基本方法,估计可产生的各类测试用例及其优先级、测试用例数量以及单位测试用例所需的测试时间,然后进行测试用例选择,仅设计和执行选中的测试用例,从而能够在测试设计阶段就力争用最少的测试用例发现尽可能多的缺陷。
3.1 测试用例估计
测试设计人员可依照“测试用例优先级的度量元权值”(见表1)估算测试用例的优先级,然后依据经验或者历史测试数据,估算出各测试目标对应的测试用例数量以及每个测试用例所需的测试时间,填写测试用例估计表(见表2)。
表2 测试用例估计表(示例)
完成测试用例估计后,测试用例可表示为
式中:TC——测试用例,ID——用例标识,SM——被测软件模块,TK——测试目标,即采用何种测试类型及测试方法,测试相应种类的缺陷,SF——是否合法用例,MP——测试用例的优先级,TT——测试所需的时间。
3.2 测试用例选择方法
依据测试用例优先级,以及设计、执行这些测试用例所需的测试工时,可以计算出整个测试所需的测试工时。假设可设计出i个测试用例,第i个测试用例的优先级、所需测试时间分别为pi、ti,则这些测试用例所需的测试工时ts为
记可支配的测试工时为tp,依据tp与ts的大小关系,判断是否需要进行测试用例选择:
(1)如果tp=ts,则表示可以按时完成预计的所有测试用例的设计和执行。
(2)如果tp>ts,则表示可以提前完成预计的所有测试用例的设计和执行,可以考虑是否补充更多的测试用例。
(3)如果tp<ts,则表示无法按时完成预计的所有测试用例的设计和执行,需要通过测试用例的选择来调整测试用例数量,以减少测试所需时间。
本文着重考虑第三种状况,即无法在可支配的测试工时范围内,按时完成预计的所有测试用例的设计和执行。对于这种状况,需要进行测试用例选择,然后仅设计和执行选中的测试用例。
测试用例选择策略如下:
(1)对每一个功能模块,从其相应的测试用例中,选择一个优先级最高的合法用例,从而确保每一个软件功能至少被一个合法用例所覆盖;
(2)按第一个策略选择完测试用例后,优先选择优先级高的测试用例,如果两个测试用例的优先级相同,则优先选择预计所需测试工时较少的那个。
假设可选测试用例的集合为T,已选择的测试用例的集合为S,已选择用例的累计所需测试工时为ts,可支配的测试工时为tp,则上述测试策略对应的算法如下:
(1)0→ts;
(2)计算各测试用例的优先级;
(3)将T中的测试用例按照被测软件模块分组,依次从每组测试用例中选择最高优先级的合法测试用例到S中(如果同组中有多个用例的优先级并列第一,则从这些用例中随机选择一个),同时从T中删除相应测试用例;
(4)S中所有测试用例所需的测试工时→ts;
(5)如果ts≥tp或者T中的测试用例数为0,则算法终止,否则转入(6);
(6)将T中的测试用例按照优先级升序排序;
(7)选取T中的最后一个测试用例到S中,同时从T中删除相应测试用例,ts+该测试用例所需测试时间→ts;
(8)如果ts≥tp或者T中的测试用例数为0,则算法终止,否则转入(7)。
需要说明的是,如果已选中的用例所需测试工时远超可支配的测试工时,则说明测试工时严重不足,一定需要增加更多的可支配工时。另外,对未被选择的测试用例,可能需要视情况决定是否进行风险决策。假设单位测试工时的成本为c,则设计和执行该测试用例的成本ct=c*ti,假设该测试用例预计所检测的缺陷在软件实际运行中出现的概率为pt,该缺陷显现导致的损失和修复成本为qt,如果ct<pt,则表示该测试用例值得设计和执行。另外,如果有严格的测试内容、测试类型覆盖要求,还需要验证选择的测试用例是否完全覆盖了测试内容,是否有对应必要测试类型的测试用例。
4 实验结果与分析
以某办公系统为实验对象,该办公系统功能包括用户登录、系统管理(含部门管理、用户管理、通知公告管理、消息管理等)、资源共享、考勤管理、假期管理等,其中用户登录、部门管理、用户管理部分复用代码库中的代码,其余部分为新编写的代码。使用功能点估算法估计的系统规模为286FP。首先依据测试需求、计划采用的测试类型及测试设计方法,估算出预计产生的各类测试用例的优先级、数量、单位用例设计和执行所需的工时,形成测试用例估计表(见表3)。如果不进行测试用例选择,预计会产生1447个测试用例,完成所有测试工作大约需要142人时。
表3 测试用例估计(用户登录功能)
随后,不进行测试用例选择,按照测试需求、计划采用的测试类型及测试方法,设计和执行所有的测试用例。最后再依据测试用例估计表,假设事先进行了测试用例选择,则不同的测试用例选择数的设计执行时间(测试工时,单位:人时)、检出缺陷数、单位测试用例的设计执行时间(人时/用例)、单位测试用例检出的缺陷数(检出缺陷数/用例)、检出缺陷数/人时的比较结果见表4。从表4可看出,分配给测试的时间越少,能选择的测试用例数越少,但是按照测试用例的估计和选择方法选择出的测试用例,平均每个用例检出了更多的缺陷,单位时间检出的缺陷数也更多。
表4 不同的测试用例选择数(示例)
选择不同数量的测试用例时,平均每个测试用例检出的缺陷数的趋势如图2所示,利用本文的测试策略,确实选择出了检出缺陷能力更强的测试用例。
选择不同数量的测试用例时,检出的各级缺陷数如图3所示,在4个缺陷级别中,一级缺陷表示致命缺陷,二级缺陷表示严重缺陷,三级缺陷表示一般缺陷,四级缺陷表示不影响用户使用的缺陷。在选择出的测试用例数比较少时,所选的测试用例检出重大缺陷的能力较强,但是也说明,要想检测出所有较重大的缺陷,测试用例数不能太少,也就是说分配给测试工作的时间不能太少。
实验结果表明,所提出的测试工时受限的测试策略,能够选择出检出缺陷能力更强,尤其是检出重大缺陷能力更强的测试用例,从而可以在适当减少需设计的测试用例数量的基础上,达到较好的测试效果。
图2 单位测试用例检出的缺陷数
图3 选择的测试用例检出的各级缺陷数
5 结束语
在测试工时受限的情况,如何制定有效的测试策略是一个有待解决的现实问题,为此提出了测试工时受限的基于测试用例优先级的测试策略。该策略将测试用例按被测目标重要度、被测目标复杂度、被测目标紧迫度、用例重要度、预计用例的检测缺陷能力、开发团队信心度等多种因素综合考虑,计算出各类测试用例的优先级,接着估算各类测试用例的数量、设计和执行单位用例所需的工时,然后采用测试用例选择方法,确保在有限的测试工时内,设计和执行尽可能多的优先级高的测试用例,且力保每个功能至少被一个合法测试用例所覆盖。实验结果表明了该测试策略的有效性。
[1]CHEN Xiang,CHEN Jihong,JU Xiaolin,et al.Survey of test case prioritization techniques for regression testing[J].Journal of Software,2013,24(8):1695-1712(in Chinese).[陈翔,陈继红,鞠小林,等.回归测试中的测试用例优先排序技术述评[J].软件学报,2013,24(8):1695-1712.]
[2]Mei H,Hao D,Zhang LM,et al.A static approach to prioritizing JUnit test cases[J].IEEE Trans on Software Engineering,2012,38(6):1258-1275.
[3]YANG Guanghua,BAO Yang,LI Donghong,et al.Test case prioritization based on requirement[J].Computer Engineering and Design,2011,32(8):2724-2728(in Chinese).[杨广华,包阳,李东红,等.基于需求的测试用例优先级排序[J].计算机工程与设计,2011,32(8):2724-2728.]
[4]ZHANG Xiaofang,CHEN Lin,XU Baowen,et al.Survey of test suite reduction problem[J].Journal of Frontiers of Computer Science and Technology,2008,2(3):235-247(in Chinese).[章晓芳,陈林,徐宝文,等.测试用例集约简问题研究及其进展[J].计算机科学与探索,2008,2(3):235-247.]
[5]Yoo S,Harman M.Regression testing minimization,selection and prioritization:A survey[J].Software Testing,Verification &Reliability,2012,22(2):67-120.
[6]ZHANG Deping,NIE Changhai,XU Baowen.Acceleration testing method of safety-critical software with testing resource constraint[J].Computer Science,2009,36(5):138-141(in Chinese).[张德平,聂长海,徐宝文.测试资源受约束的安全关键软件加速测试方法[J].计算机科学,2009,36(5):138-141.]
[7]ZHANG Deping,ZHA Rijun.Risk decision approach to test allocation problem in partition testing[J].Application Research of Computers,2010,27(12):4536-4540(in Chinese).[张德平,查日军.划分测试用例选择的风险决策方法[J].计算机应用研究,2010,27(12):4536-4540.]
[8]DAI Ruxin,GU Chunhua.Advanced test case prioritization for black box testing[J].Computer Engineering and Design,2010,31(20):4343-4346(in Chinese).[戴如昕,顾春华.用于黑盒测试的测试用例优先级改进算法[J].计算机工程与设计,2010,31(20):4343-4346.]
[9]PAN Weifeng,LI Bing,MA Yutao.Test case prioritization based on complex software networks[J].Acta Electronica Sinica,2012,40(12):2456-2465(in Chinese).[潘伟丰,李兵,马于涛.基于复杂软件网络的回归测试用例优先级排序[J].电子学报,2012,40(12):2456-2465.]
[10]Pravin A,Srinivasan S.Effective test case selection and prioritization in regression testing[J].Journal of Computer Science,2013,9(5):654-659.