第28回 软件测试过程和质量的度量


        测试阶段的过程度量内容或项目比较多,包括软件测试进度、测试覆盖度、测试缺陷出现/到达曲线、测试缺陷累积曲线、测试效率等。在进行测试过程度量时,要基于软件规模度量(如功能点、对象点等)、复杂性度量、项目度量等方法,从三个不同的测度来完整度量测试的过程状态:
  1.  测试广度的测量提供了多少需求(在所有需求的数目中)在某一时刻已经被测试,来度量测试计划的执行、测试进度等状态;
  2.  测试深度是对被测试覆盖的独立基本路径占在程序中的基本路径的总数的百分比的测度,基本路径数目的度量可以用McCabe环形计算复杂度方法来计算。
  3.  过程中收集的缺陷数度量,发现的、修正的和关闭的缺陷数量在过程中的差异、发展趋势等,为过程质量、开发资源额外投入、软件发布预测提供重要依据。
如前所述,测试过程的度量可以将过程状态度量和过程结果度量结合起来分析,是测试过程度量更有效。

在测试阶段,主要的过程质量度量有:
  • 缺陷度量或缺陷分布度量
  • 测试用例的深度、质量和有效性
  • 测试执行的效率和质量
  • 缺陷报告的质量
  • 测试覆盖度(测试整体的质量)
  • 测试环境的稳定性或有效性
       缺陷度量是测试阶段的主要度量内容,包括产品缺陷度量和缺陷过程度量。产品缺陷度量将在下一回做详细介绍,而测试环境的稳定性或有效性度量,就像软件有效性一样,用MTTF来测量。所以下面将简单介绍其他度量内容,如 软件缺陷到达模式、PTR出现/积压模型、 测试用例的度量、基于需求的测试覆盖评估、基于代码的测试覆盖评估等等。

1. 基于时间的缺陷到达模式
      产品的缺陷密度、或者测试阶段的缺陷率是一个概括性指标,缺陷到达模式可以提供更多的过程信息,有时即使得到的整体缺陷率是一样的,但其质量差异可能较大,原因就是缺陷到达的模式不一样。越多的缺陷到达越早,则测试过程质量就越好。无论是从测试进展的观点,还是从用户重新发现(customer rediscoveries)的观点来看,缺陷的过程跟踪是非常重要的,开发周期里大量的严重缺陷将有可能阻止测试的进展,也必然直接影响软件产品的质量和性能。
       相对产品发布时间、上一个版本的缺陷水平来说,经常会被项目经理或开发经历问的就是:
  •  缺陷何时到达峰值?这个峰值有时多少?
  •  在到达峰值后又要化多少时间趋于(降低)到一个低而稳定的水平?
  • 低而稳定的水平持续多少时间,当前版本可以发布?
       回答这些问题,正是缺陷达到模式要实现的目标。定性的分析比较容易,测试团队越成熟,峰值到达得越早,有时可以在第一周末或第二周就达到峰值。这个峰值的数值取决于代码质量、测试用例的设计质量和测试执行的策略、水平等,多数情况下,可以根据基线(或历史数据)推得。从一个峰值达到一个低而稳定的水平,需要长得多的时间,至少是达到峰值所用的时间的4-5倍。这个时间取决于峰值、缺陷移除效率等等。

2. PTR累积模型
       测试的目标在于尽早地发现软件缺陷,通过测试用例可以更有效、更快地发现软件中缺陷,而软件缺陷通过PTR(问题跟踪报告,Problem Tracking Report)来描述。因此,PTR的数量一定程度上代表了软件的质量。每个缺陷/PTR都有一个生命周期,从测试人员发现问题并形成报告(称为PTR出现,也称缺陷到达),开发/设计人员要重现、修正这个PTR/缺陷,并构建、提交包含已修正PTR/缺陷的新软件包(New Build)给测试组,所修正的问题得到验证直到该问题通过测试为止(称为PTR关闭),测试过程中特定时间PTR保持的数量(所有新发现的PTR和关闭的PTR的差值)——PTR累积/积压值。PTR出现/累积模型就是根据问题跟踪报告的两种数据——某个时间单位内的PTR出现值和某个时间PTR累积值来度量测试中所发现的缺陷变化过程,即软件产品质量状态的变化过程。

3.测试用例的深度、质量和有效性
      测试用例是测试执行的基础,其质量的好坏直接关系到测试的质量,也就影响着软件质量的保证过程。测试用例的度量将包含测试用例的深度、质量和有效性,而且包含自动化程度的度量,即多少比例的测试用例已被自动化了。
      测试用例的深度(TCD, Test Case Depth)度量可以表示为每KLOC的测试用例数或每个功能点/对象点的测试用例数,而测试用例的效率可以用每100或1000个测试用例所发现的缺陷数来衡量,不同的测试阶段是不一样,应该对同一阶段的不同版本进行比较,而不宜对同一版本的不同阶段进行比较。而测试用例的质量(TCQ, Test Case Quality)可以用由测试用例发现的缺陷数量来度量,即
TCQ = 测试用例发现的缺陷数量/总的缺陷数量
      因为还有一部分缺陷可以通过ad-hoc 测试(随机、自由的测试)、集体走查(Work-through)和Fire-drill测试(类似消防训练的用户压力/验收测试)等其他手段发现缺陷

4.测试执行的效率和质量
        测试执行的质量一般可以用软件发布后所遗留的软件缺陷和总缺陷数的比值来衡量,一般要求低于0.5%,也可以通过种子公式或交叉测试等方法衡量。测试执行的效率可以用下列几种方法来综合度量:
  • 每个人日所执行的测试用例数
  • 每个人日所发现的缺陷数
  • 每修改的KLOC所运行的测试用例数

5.缺陷报告的质量
      缺陷报告质量可以评估测试人员工作质量的方法之一,如可测量的指标有:
  •  缺陷报告有效性,所有修正/关闭的(等级高的)缺陷和测试人员所报的所有(等级高的)缺陷的比值,这个值越接近1,有效性就越高,如果考察等级高的缺陷,其正常值大约在0.92 – 0.96
  • 缺陷报告质量,可以用一些中间状态为“需要补充信息”、“不是缺陷”的缺陷数量来衡量,一般占总缺陷数的3%-5%为正常,高于或低于这个值都可能不正常,高于5%,可能说明缺陷报告质量低;低于3%,可能说明测试人员缺少怀疑精神。

6.基于需求的测试覆盖评估

       基于需求的测试覆盖评估是依赖于对已执行/运行的测试用例的核实和分析,所以基于需求的测试覆盖评测就转化为评估测试用例覆盖率:测试的目标是确保100%的测试用例全部成功地执行。一般在测试计划中,就定义了测试的工作量、测试用例数量和测试用例覆盖率(98%-100%),我们根据事先确定的测试日程安排,可以将测试计划值做成曲线,然后根据实际执行结果,定期(每天或每周)去画实际值曲线,从而可以进行测试全过程监控和预测。
    在执行测试活动中,评估测试用例覆盖率又可分为两类测试用例覆盖率估算:
  • 确定已经执行的测试用例覆盖率,即在所有测试用例中有多少测试用例已被执行。假定Tx已执行的测试过程数或测试用例数,Rft是测试需求的总数:
  • 已执行的测试覆盖 = Tx/Rft
  • 确定成功的测试覆盖,即执行时未出现失败的测试,如没有出现缺陷或意外结果的测试,假定Ts是已执行的完全成功、没有缺陷的测试过程数或测试用例数。
  • 成功的测试覆盖 = Ts/Rft

7.基于代码的测试覆盖评估

        基于代码的测试覆盖评测是对被测试的程序代码语句、路径或条件的覆盖率分析。如果应用基于代码的覆盖,则测试策略是根据测试已经执行的源代码的多少来表示的。这种测试覆盖策略类型对于安全至上的系统来说非常重要。
        评估代码覆盖率,需要断定测试目标期望的、总的测试代码行数,在测试中真正执行的代码行数及其百分比,将此结果记录在测试评估报告中。测试过程中已经执行的代码的多少,与之相对的是要执行的剩余代码的多少。代码覆盖可以建立在控制流(语句、分支或路径)或数据流的基础上。控制流覆盖的目的是测试代码行、分支条件、代码中的路径或软件控制流的其他元素。数据流覆盖的目的是通过软件操作测试数据状态是否有效,例如,数据元素在使用之前是否已经定义。
    基于代码的测试覆盖通过以下公式计算:
已执行的测试覆盖 = Tc/Tnc
    其中Tc是用代码语句、条件分支、代码路径、数据状态判定点或数据元素名表示的已执行项目数,Tnc(Total number of items in the code)是代码中的项目总数。

预知后事如何,请读下回分解: 第29回 软件质量度量

友情链接: http://www.csdn.net/community2006/vote/index.rails?id=1
版权所有,软件测试演义® ——系列讨论的目录,见: 软件测试演义——中高级系列(序)

 
软件测试实习日记(共计3000字) 第一天: 今天是我软件测试实习的第一天,我来到了公司的测试部门。首先,我和我的导师进行了简单的介绍和交流,他向我介绍了公司的测试流程和工作内容。然后,我开始熟悉测试环境和工具的使用,包括测试管理工具、缺陷管理工具等。在导师的指导下,我还学习了一些基本的测试技术和方法。今天的实习经历让我对软件测试有了更深入的了解。 第二天: 今天我开始参与到项目的测试工作中。我首先阅读了项目的需求文档和设计文档,了解了项目的功能和设计思路。然后,我根据需求文档编写了测试用例,并进行了测试计划的制定。在导师的指导下,我还学习了如何进行黑盒测试和白盒测试。通过今天的实践,我对测试用例的编写和测试计划的制定有了更深入的理解。 第三天: 今天我开始执行测试用例,并记录测试结果。在执行测试用例的过程中,我发现了一些功能上的问题,并及时向开发人员反馈。同时,我还学习了如何使用调试工具来定位问题,并进行了一些简单的调试工作。通过今天的实践,我对测试执行和问题定位有了更深入的了解。 第四天: 今天我继续执行测试用例,并记录测试结果。在测试过程中,我发现了一些性能上的问题,并及时向开发人员反馈。同时,我还学习了如何使用性能测试工具来进行性能测试,并进行了一些简单的性能测试工作。通过今天的实践,我对性能测试有了更深入的了解。 第五天: 今天我参与了项目的集成测试工作。我首先了解了项目的集成测试计划和测试环境的搭建情况。然后,我根据集成测试计划编写了集成测试用例,并进行了集成测试的执行和记录。在导师的指导下,我还学习了如何进行接口测试和系统测试。通过今天的实践,我对集成测试有了更深入的了解。 第六天: 今天我参与了项目的测试工作。我首先了解了项目的测试计划和测试环境的搭建情况。然后,我根据测试计划编写了测试用例,并进行了测试的执行和记录。在导师的指导下,我还学习了如何进行自动化测试和持续集成。通过今天的实践,我对测试有了更深入的了解。 第七天: 今天我参与了项目的验收测试工作。我首先了解了项目的验收测试计划和验收测试环境的搭建情况。然后,我根据验收测试计划编写了验收测试用例,并进行了验收测试的执行和记录。在导师的指导下,我还学习了如何进行用户体验测试和安全性测试。通过今天的实践,我对验收测试有了更深入的了解。 第八天: 今天我参与了项目的文档编写工作。我首先整理了项目的测试文档,并进行了一些修改和完善。然后,我根据项目的需求和设计文档编写了测试报告,并进行了一些简单的数据分析。在导师的指导下,我还学习了如何进行缺陷分析和风险评估。通过今天的实践,我对测试文档编写有了更深入的了解。 第九天: 今天我参与了项目的团队会议。在会议上,我向团队成员汇报了我的实习进展,并分享了一些测试经验和技巧。同时,我还听取了其他团队成员的报告和分享,并进行了一些讨论和交流。通过今天的团队会议,我对团队协作和沟通有了更深入的了解。 第十天: 今天我参与了项目的总结和评估工作。我首先对我的实习经历进行了总结和反思,并提出了一些改进的建议。然后,我参与了项目的评估工作,对项目的测试质量和效果进行了评估和分析。在导师的指导下,我还学习了如何进行测试过程改进和质量管理。通过今天的实践,我对测试总结和评估有了更深入的了解。 第十一天: 今天我参与了项目的知识分享和培训工作。我首先准备了一个关于软件测试的主题演讲,并向团队成员进行了分享。同时,我还参与了一些培训活动,学习了一些新的测试技术和方法。通过今天的实践,我对知识分享和培训有了更深入的了解。 第十二天: 今天我参与了项目的客户交流和支持工作。我首先与客户进行了一次电话会议,了解了他们对项目的需求和期望。然后,我根据客户的反馈和问题提供了一些解决方案和支持。在导师的指导下,我还学习了如何进行客户管理和需求分析。通过今天的实践,我对客户交流和支持有了更深入的了解。 第十三天: 今天我参与了项目的质量保证工作。我首先了解了项目的质量保证计划和质量保证流程。然后,我根据质量保证计划进行了一些质量度量和分析工作。在导师的指导下,我还学习了如何进行质量度量质量改进。通过今天的实践,我对质量保证有了更深入的了解。 第十四天: 今天我参与了项目的技术支持工作。我首先了解了项目的技术支持计划和技术支持流程。然后,我根据技术支持计划提供了一些技术支持和解决方案。在导师的指导下,我还学习了如何进行问题分析和解决。通过今天的实践,我对技术支持有了更深入的了解。 第十五天: 今天是我软件测试实习的最后一天。在这段时间里,我通过参与项目的测试工作,学习了很多软件测试的知识和技能。我不仅熟悉了测试流程和工具的使用,还掌握了一些测试技术和方法。通过实习,我对软件测试有了更深入的了解,并提升了自己的实际操作能力。我相信这段实习经历对我的职业发展会有很大的帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值