软件工程第十一章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11.1概述
11.1.1 软件质量的定义
软件质量定义为:
(1)与所确定的功能和性能需求的一致性。
(2)与所成文的开发标准的一致性。
(3)与所有专业开发的软件所期望的隐含特性的一致性。
11.1.2 软件质量的度量和评价
影响软件质量的因素可以分为两大类:
(1)可以直接度量的因素,如单位时间内千行代码(KLOC)中产生的错误数。
(2)只能间接度量的因素,如可用性或可维护性。
在软件开发和维护的过程中,为了定量地评价软件质量,必须对软件质量特性进行度量,以测定软件具有要求质量特性的程度。
11.1.3 软件质量保证
1. 什么是软件质量保证
软件的质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。
2. 质量保证的策略
质量保证策略的发展大致可以分为以下三个阶段:
(1)以检测为重。产品制成后才进行检测,这种检测只能判断产品的质量,不能提高产品质量。
(2)以过程管理为重。把质量保证工作重点放在过程管理上,对制造过程的每一道工序都进行质量控制。
(3)以新产品开发为重。
3. 质量保证的主要任务
(1)正确定义用户要求。
(2)技术方法的应用。
(3)提高软件开发的工程能力。
(4)软件的复用。
(5)发挥每个开发者的能力。
(6)组织外部力量协作。
(7) 排除无效劳动。最大的无效劳动是因需求规格说明有误、设计有误而造成的返工。
(8) 提高计划和管理质量。
4. 质量保证与检验
软件质量必须在设计和实现过程中加以保证。
11.2 质量度量模型
11.2.1McCall质量度量模型
这是McCall等人于1979年提出的软件质量模型。针对面向软件产品的运行、修正、转移,软件质量概念包括11个特性,其定义如下:
(1)面向软件产品操作。
(2)面向软件产品修改。
(3)面向软件产品适应。
11.2.2 ISO的软件质量评价模型
软件质量度量模型由三层组成。
11.3 软件复杂性
11.3.1 软件复杂性的基本概念
软件复杂性度量的参数很多,主要有:
(1)规模,即总共的指令数,或源程序行数。
(2)难度,通常由程序中出现的操作数的数目所决定的量来表示。
(3)结构,通常用于程序结构有关的度量来表示。
(4)智能度,即算法的难易程度。
软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。
要求复杂性度量满足以下假设:
(1)它可以用来计算任何一个程序的复杂性。
(2)对于不合理的程序,例如对于长度动态增长的程序,或者对于原则上无法排错的程序,不应当使用它进行复杂性计算。
(3)如果程序中指令条数、附加存储量、计算时间增多,不会减少程序的复杂性。
11.3.2 软件复杂性的度量方法
1. 代码行度量法
度量程序的复杂性,最简单的方法就是统计程序的源代码行数。此方法的基本考虑是
统计一个程序的源代码行数,并以源代码行数作为程序复杂性的质量。
2. McCabe 度量法
McCabe度量法是由Thomas McCabe 提出的一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称环路度量。它认为程序的复杂性很大程度上取决于程序的复杂性。单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。程序图是退化的程序流程图。也就是说,把程序流程图的每一个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作分支和循环的具体条件。因此,它往往把一个简单的IF 语句与循环语句的复杂性看成是一样的,把嵌套的IF 语句与CASE的复杂性看成是一样的。下面给出计算环路复杂性的方法,如图11-4所示。
根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出:
V(G)=m-n+2p
其中,V(G)是有向图G中环路数,m 是图G中弧数,n是图G中结点数,p是图G中强连通分量个数。在一个程序中,从程序图的入口点总能到达图中任何一个结点,因此,程序
总是连通的,但不是强连通的。为了使图成为强连通图,从图的入口点到出口点加一条用
虚线表示的有向边,使图成为强连通图。这样就可以使用上式计算环路复杂性了。以图4-11所给出的例子示范,其中,结点数n=6,弧数m=9,p=1,则有
V(G=m-n+2p=9-6+2=5
即McCabe 环复杂度度量值为5。这里选择的5 个线形无关环路为(abefa),(beb),(abea), (acfa),(abcfa),其他任何环路都是这5 个环路的线形组合。
当分支或循环的数目增加时,程序中的环路也随之增加,因此,McCabe 环复杂度度量值实际上是为软件测试的难易程度提供一个定量度量的方法,同时也间接表示了软件的可靠性。实验表明,源程序中存在的错误数以及为了诊断he纠正这些错误所需要的时间与McCabe 环复杂度度量值有明显的关系。
利用McCabe 环复杂度度量值时,有几点说明。
(1)环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目时其复杂度也增加。环路复杂度与程序中覆盖的路径条数有关。
(2)环路复杂度是可增加的。例如,模块A的复杂度为3,模块B的复杂度为4,则模块A与模块B的复杂度是7。
(3)McCabe建议,对于复杂度超过10的程序,应分成几个小程序,以减少程序中的错误。
(4)这种度量的缺点是:
①对于不同种类的控制流的复杂度不能区分。
②简单IF语句与循环语句的复杂性同等看待。
③嵌套IF语句与简单CASE 的复杂性是一样的。
④模块间接口当成一个简单分支一样处理。
⑤一个具有1000行的顺序程序与一行语句的复杂性相同。
尽管McCabe 复杂度度量法有许多缺点,但它容易使用,而且在选择方案和估计排错
费用等方面都是很有效的。
11.4 软件可靠性
11.4.1 软件可靠性定义
软件可靠性定义表明了一个程序按照用户的要求和设计的目标,执行其功能的正确程度。一个可靠的程序应要求是正确的、完整的、一致的和健壮的。
11.4.2 软件可靠性指标
软件可靠性与可用性的定量指标,是指能够以数字概念来描述可靠性的数学表达式中
所使用的量。下面主要讨论常用指标平均失效等待时间MTTF 与平均失效间隔时间MTBF。
1. MTTF(Mean Time To Failure)
平均失效等待时间MTTF 定义为:
2. MTBF(Mean Time Betmeen Failure)
MTBF是平均失效间隔时间,它是指两次相继失效之间的平均时间。
11.4.3 软件可靠性模型
软件可靠性是软件最重要的质量要素之一。
令MTTF是机器的平均无故障时间,MTTR 是错误的平均修复时间,则机器的稳定可
用性可定义为:
A=MTTF/(MTTF+MTTR)
软件可靠性模型通常分为如下几类:
(1)由硬件可靠性理论导出的模型。
(2)基于程序内部特性的模型。
(3)植入模型。