热门标签 | 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回 总结

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

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



推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
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社区 版权所有