热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

第29回软件质量度量

软件产品质量度量是软件质量度量重要组成之一,其度量的对象是软件产品,测量其软件平均失效时间、缺陷密度、适用性、可靠性等产品的质量属性,用于对软件产品进行评价,并在此基础之上不断优化产品设计


件产品质量度量是软件质量度量重要组成之一,其度量的对象是软件产品,测量其软件平均失效时间、缺陷密度、适用性、可靠性等产品的质量属性,用于对软件产品进行评价,并在此基础之上不断优化产品设计、产品制造和产品服务。

 
      
软件产品质量度量包括软件复杂度、客户满意度的度量,由于篇幅所限,在此略去。 软件产品质量度量,则主要集中在软件缺陷的度量,而且这和软件测试有直接的关系。

质量是反映软件与需求相符程度的指标,而缺陷被认为是软件与需求不一致的某种表现,所以通过对测试过程中所有已发现的缺陷进行评估,可以了解软件的质量状况。也就是说,软件缺陷评估是评估软件质量的重要途径之一,软件缺陷评估指标可以看作是量度软件产品质量的重要指标,而且缺陷分析也可以用来评估当前软件的可靠性或预测软件产品的可靠性变化。

软件评估首先是建立基线,为软件产品的质量、软件测试评估设置起点,这个基准线上再设置测试的目标,作为对系统评估是否通过的标准。缺陷评测的基线是对某一类或某一组织的结果的一种度量,这种结果可能是常见的或典型的,如10000行源程序(LOC)是程序规模的一个基准,每一千行代码有3个错误是测试中错误发现率的基准。基准对期望值的管理有很大帮助,目标就是相对基准而存在,也就是定义可接受行为的基准,如表1所示。

1某个软件项目质量的基准和目标

条目

目标

低水平

缺陷清除效率

>95%

<70%

缺陷密度

每个功能点 <4

每个功能点 >7

超出风险之外的成本

0%

>=10%

全部需求功能点

<1% 每个月平均值

>=50%

全部程序文档

每个功能点页数 <3

每个功能点页数 >6

 

软件缺陷评估的方法相对比较多,从简单的缺陷计数到严格的统计建模,基于缺陷分析的产品质量评估方法有以下几种:

  • 缺陷密度——软件缺陷在规模上的分布
  • 缺陷率——缺陷在时间上的分布
  • 整体缺陷清除率
  • 阶段性缺陷清除率
  • 缺陷趋势、预期缺陷发现率
  • 软件产品性能评估技术
  • 借助工具的其他方法

1.缺陷密度

Myers有一个关于软件测试的著名的反直觉原则:在测试中发现缺陷多的地方,还有更多的缺陷将会被发现。这个原则背后的原因在于:如果缺陷发现缺陷多的地方、漏掉的缺陷可能性也会越大,或者告诉我们测试效率没有被显著改善之前,那么在纠正缺陷时将引入较多的错误。这条原理的数学表达就是缺陷密度的度量——每KLOC或每个功能点(或类似功能点的度量——对象点、数据点、特征点等)的缺陷数,缺陷密度越低意味着产品质量越高。

  • 如果缺陷密度跟上一个版本相同或更低,就应该分析当前版本的测试效率是不是降低了?如果不是,意味着质量的前景是乐观的;如果是,那么就需要额外的测试,还需要对开发和测试的过程进行改善。
  • 如果缺陷密度跟上一个版本高,那么就应该考虑在此之前为显著提高测试效率进行了有效的策划并在本次测试中得到实施?如果是的,虽然需要开发人员更多的努力去修正缺陷,但质量还是得到更好的保证;如果没有,意味着质量恶化、质量很难得到保证。这时,要保证质量,就必须延长开发周期或投入更多的资源。


2.缺陷率

缺陷率的通用概念是一定时间范围内的缺陷数与错误几率(OFEopportunities for error)的比值。前面我们已经讨论过软件缺陷和失败的定义,失败是缺陷的实例化,可以用观测到的失败的不同原因数目来近似估算软件中的缺陷数目。

软件产品缺陷率,即使对一个特定的产品,在其发布后不同时段也是不同的。例如,对应用软件的角度来说,90%以上的缺陷是在发布后两年内被发现出来,而对操作系统,90%以上的缺陷通常在产品发布后需要四年的时间才能被发现出来。

 

3整体缺陷清除率

  让我们先引入几个变量,F为描述软件规模用的功能点;D1为在软件开发过程中发现的所有缺陷数;D2为软件发布后发现的缺陷数;D为发现的总缺陷数。因此,D=D1+D2

  对于一个应用软件项目,则有如下计算方程式(从不同的角度估算软件的质量):

  • 质量 = D2/F;
  • 缺陷注入率 = D/F;
  • 整体缺陷清除率= D1/D;


假如有100个功能点,即F=100,而在开发过程中发现了20个错误,提交后又发现了3个错误,则:D1 =20,D2 =3, D= D1+D2 =23

  • 质量(每功能点的缺陷数)=D2/F= 3/100= 0.03 ( 3% )
  • 缺陷注入率= D/F= 20/100= 0.20 ( 20%)
  •  整体缺陷清除率= D1/D= 20/23= 0.8696 ( 86.96%)


有资料统计,美国的平均整体缺陷清除率目前只达到大约85%,而对一些具有良好的管理和流程等著名的软件公司,其主流软件产品的缺陷清除率可以超过98%

众所周知,清除软件缺陷的难易程度在各个阶段也是不同。需求错误、规格说明、设计问题及错误修改是最难清除的,如表2所示。

表2 不同缺陷源的清除效率

缺陷源

潜在缺陷

清除效率(%)

被交付的缺陷

需求报告

1.00

77

0.23

设计

1.25

85

0.19

编码

1.75

95

0.09

文档

0.60

80

0.12

错误修改

0.40

70

0.12

合计

5.00

85

0.75

表3反映的是CMM五个等级是如何影响软件质量的,其数据来源于美国空军1994年委托SPR(美国一家著名的调查公司)进行的一项研究。从表中可以看出,CMM级别越高,缺陷清除率也越高。

3 SEI CMM级别潜在缺陷与清除率

SEI CMM 级别

潜在缺陷

清除效率(%)

被交付的缺陷

1

5.00

85

0.75

2

4.00

89

0.44

3

3.00

91

0.27

4

2.00

93

0.14

5

1.00

95

0.05

 

4.阶段性缺陷清除率 

阶段性缺陷清除率是测试缺陷密度度量的扩展。除测试外,它要求跟踪开发周期所有阶段中的缺陷,包括需求评审、设计评审、代码审查。因为编程缺陷中的很大百分比是同设计问题有关的,进行正式评审或功能验证以增强前期过程的缺陷清除率有助于减少出错的注入。基于阶段的缺陷清除模型反映开发工程总的缺陷清除能力。

进一步分析缺陷清除有效性(DREDefect Remove Efficiency)DRE可以定义为:

开发阶段清除的缺陷数/产品潜伏的缺陷总数 x 100%

因为潜伏缺陷的总数是不知道的,必须通过一些方法获得其近似值,如经典的种子公式方法。当用于前期的和特定阶段的时候,此时DRE相应地被称为早期缺陷清除有效性和阶段有效性,对给定阶段的潜伏缺陷数,可以估计为:

                   当前阶段的潜伏缺陷数 = 当前阶段排除的缺陷数+以后发现的缺陷数

给定阶段的DRE度量值越高,遗漏到下一个阶段的缺陷就越少。

         缺陷是在各个阶段注入到阶段性产品或者成果中去,通过表4 描述的与缺陷注入和清除相关联的活动分析,可以更好地理解缺陷清除有效性。回归缺陷是由于修正当前缺陷时而引起相关的、新的缺陷,所以即使在测试阶段,也会产生新的缺陷。

 

4 与缺陷注入和清除相关联的活动

开发阶段

缺陷注入

缺陷清除

需求

系统/概要设计

详细/程序设计

编码和单元测试

集成测试

系统测试

验收测试

需求收集过程和功能规格说明书

设计工作

设计工作

编码

集成过程、回归缺陷

回归缺陷

回归缺陷

需求分析和评审

设计评审

设计评审

代码审查、测试

构建验证、测试

测试、评审

测试、评审

 

      清除的缺陷数等于检测到的缺陷数减去不正确修正的缺陷数。如果不正确修正的缺陷数所占的比例很低(经验数据表明,测试阶段大概为2%),清除的缺陷数就近似于检测到的缺陷数。

友情链接:http://www.csdn.net/community2006/vote/index.rails?id=1

预知后事如何,请读下回分解:第30回 总结

版权所有,软件测试演义®

——系列讨论的目录,见:  软件测试演义——中高级系列(序)



推荐阅读
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • QNX 微内核(procnto-instr)的监测版本内置了高级跟踪与分析工具,能够实现实时系统监控。该模块适用于单处理器及多处理器系统。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 随着 DCG 问题的不断恶化,Gemini 客户可能面临流动性受限和资产回收延迟等挑战。本文探讨了可能的发展方向及客户的应对措施。 ... [详细]
  • Flowable系列教程:运用ProcessEngineConfigurator实现高级流程引擎配置
    本文探讨了通过ProcessEngineConfigurator接口实现对Flowable流程引擎的高级配置方法。这种方法允许开发者通过自定义配置器来增强或修改流程引擎的行为。 ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 本文介绍了如何利用Python编程语言实现类似Photoshop的图像对比度调整功能。通过详细的算法解析和代码示例,帮助读者理解和应用这一技术。 ... [详细]
author-avatar
uai_128366833952
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有