软件测试是评估产品质量的重要手段,软件测试贯穿产品开发的始终,那么在整个软件测试过程中,应该如何来度量软件测试的质量呢?在整个测试过程中,质量度量主要包括以下几个方面:
1、测试覆盖率;
2、测试执行的质量和效率;
3、测试用例深度、质量和有效性;
4、缺陷分布分析;
一、测试覆盖率
测试覆盖率是指在测试过程中对被测试对象的需求、功能、代码测试的程度。主要包括对需求和代码两个方面的覆盖评估,但其实这两个方面的评估本质是一致的,都是通过测试用例来评估覆盖率。
1)基于需求的测试覆盖评估依赖于对已执行/运行的测试用例的核实和分析,其主要是通过评估测试用例覆盖率来评估,在测试过程中的目标是要求需求的覆盖率达到100%。在实际测试过程中,可以通过统计已执行的覆盖率和执行成功的覆盖率来评估需求覆盖率的值。
已经执行的测试用例覆盖率指所有测试用例中被执行用例所占百分比,公式如下:
已执行的测试覆盖率=Tx/Rft
其中,Tx 表示已执行的测试用例数,Rft 是测试需求的总数。
成功执行的覆盖率指测试过程中执行成功的测试用例所占百分比,公式如下:
成功的测试覆盖率=Ts/Rft
其中,Ts 表示已执行并且执行状态为成功的测试用例,Rft 是测试需求的总数。
2)基于代码的测试覆盖率是对被测试的程序代码语句、路径或条件的覆盖率分析。代码覆盖可以建立在控制流(语句、分支或路径)或数据流的基础上,主要用于白盒测试阶段。控制流覆盖的目的是测试代码行、分支条件、代码中的路径或软件控制流的其他元素;数据流覆盖的目的是通过软件操作测试数据状态是否有效,例如,数据元素在使用之前是否已经定义。
基于代码的测试覆盖通过以下公式计算:
已执行的测试覆盖率=Tc/Tnc
其中,Tc 是指使用代码语句、条件分支、代码路径、数据状态判定点方法设计的并被执行的用例数,Tnc(Total number of items in the code)是指项目中总的代码数。
二、测试执行的质量和效率
测试执行的效率是指测试工程师每天执行的测试用例数,一般每天执行50条测试用例。
测试执行的质量包括两个方面:一方面是指每个测试用例发现的缺陷数;另一方面是指软件发布后遗留的软件缺陷数占总缺陷数的百分比,一般要求低于0.5%。
故测试执行的质量和效率一般使用以下指标来统计:
a.每人每天所执行的测试用例数;
b.每人每天发现的缺陷数;
c.缺陷遗留率;
三、测试用例深度、质量和有效性
测试用例是所有测试活动的基础,测试用例质量的好坏直接影响软件测试的质量。
测试用例的度量主要从测试用例深度(也叫测试用例密度)、质量和有效性三个方面来实现。当然如果开展了自动化测试,还可以从测试用例自动化的程度这一维度来度量。
测试用例深度(Test Case Depth,TCD)指每KLOC(千行代码)设计的测试用例数或每个功能点所设计的测试用例数,一般情况下认为每KLOC 设计的用例数越多,表示测试的质量越高。当然必须考虑冗余或重复的用例数,在设计用例时应该尽量避免出现冗余或重复。
测试用例质量(Test Case Quality,TCQ)其实是一个很复杂的指标,它包括两个方面:一方面指如何设计一个好的测试用例;另一方面指测试发现缺陷的数量。
一般情况下,一个好的测试用例应该考虑以下几个方面:
测试用例覆盖程度;
测试用例是否已达到工作量最小化;
测试用例的分类、描述是否清晰;
测试用例是否表明目的;
测试用例的易维护性;
有充分的负面测试;
测试用例没有重复、没有冗余;
发现缺陷方面主要是指测试用例发现的缺陷数量,公式如下:
TCQ=测试用例发现的缺陷数量/总的缺陷数量
总的缺陷数量除了测试用例发现的缺陷数外,还包括通过ad-hoc 测试(随机、自由的测试)、集体走查(Work-through)和Fire-drill 测试(类似消防训练的用户压力/验收测试)等其他手段发现的缺陷。
企业开展自动化测试,可以计算可自动化测试用例的数量,这也是衡量测试用例质量的一个方面,将手动测试用例转换为自动化测试用例可以节约写自动化测试用例的时间,可转换的越多,节约的成本就越多。
四、缺陷分布分析
缺陷是测试过程中体现工作效率和价值的重要指标之一,也是分析系统质量的重要指标。在测试过程中除了要提交缺陷外,还需要对缺陷的分布情况进行分析,这样可以作为改进系统质量的依据。
在提交缺陷时,需要注意一些必需的元素项,即一个好的缺陷通常需要包含的内容,现在一些企业通常会使用缺陷管理工具来管理测试过程中所发现的缺陷。
对提交的缺陷需要进行分析,这样可以进一步改进系统质量,并且可以改进测试方法和测试策略,常用的缺陷分析方法有:ODC 正交缺陷分析法、Gompertz 缺陷分析法、Rayleigh 缺陷分析法、四象限缺陷分析法和根源缺陷分析法。