第9章软件质量与软件工程标准化.ppt
《第9章软件质量与软件工程标准化.ppt》由会员分享,可在线阅读,更多相关《第9章软件质量与软件工程标准化.ppt(71页珍藏版)》请在冰点文库上搜索。
第9章软件质量与软件工程标准化,本章主要内容:
1软件质量概念2软件质量保证3软件可靠性与复杂性4软件工程标准化5ISO9000标准及质量认证教学目的及要求:
1.掌握软件质量概念、质量保证、软件可靠性等基本理论知识。
2.熟悉软件质量度量、建立软件质量保证体系和软件可靠性评价方法、步骤和策略。
3.了解软件工程标准化和质量认证的基本知识。
9.1软件质量概念,9.1.1质量定义及特征指标软件产品的质量实际上就是软件项目工作质量的反映。
反映产品或服务满足明确或隐含需求能力的特征和特性的总和。
软件质量特性是用以描述和评价软件产品质量的一组属性。
1)功能特征:
与一组功能及其指定性质有关的一组属性,这里的功能是满足明确或隐含的需求的那些功能。
2)可靠性特征:
与在规定的一段时间和条件下能维持其性能程度有关的一组属性。
3)易用性特征:
由一组规定或潜在的用户为使用软件所需作的努力和所作的评价有关的一组属性。
4)效率特征:
与在规定条件下软件的性能水平与所使用资源量之间关系有关的一组属性。
5)可维护性特征:
与进行指定的修改所需的努力有关的一组属性。
6)可移植性特征:
与软件从一个环境转移到另一个环境的能力有关的一组属性。
其中每一个质量特征都分别与若干子特征相对应。
9.1.2质量评价模型,人们通常用软件质量模型来描述影响软件质量的特性。
已有多种软件质量的模型,它们共同的特点是把软件质量特性定义成分层模型。
1)ISO软件质量评价模型按照ISOTC97SC7WG31985130N382,软件质量度量模型由三层组成。
(1)高层(Toplevel):
软件质量需求评价准则(SQRC)。
(2)中层(Midlevel):
软件质量设计评价准则(SQDC)。
(3)低层(Lowlevel):
软件质量度量评价准则(SQMC)。
ISO软件质量度量模型,2)McCall软件质量评价模型,McCall等人于1979年提出的软件质量模型。
其软件质量概念基于11个特性之上。
而这11个特性分别面向软件产品的运行、修正、转移。
它们与特性的关系如所示。
质量要素的量化估计,某质量要素矩阵M:
则,第j个准则的权:
某个质量要素的得分:
Fq=a1w1+a2w2+aLwL,Mij为代理第i个打分员为第j个准则加的权。
3)Boehm质量评价模型,1976年,Boehm等人提出了定量地评价软件质量的概念,并给出了60个质量量度公式,说明怎样用来评价软件质量。
Boehm等认为,软件产品质量主要应从以下三个方面来评价:
(1)软件的可使用性。
(2)软件的可维护性。
(3)软件的可移植性。
Boehm等人提出的软件质量量度模型,9.1.3软件质量控制与质量保证,质量保证是为保证产品和服务充分满足用户要求的质量而进行的有计划、有组织的活动。
总是围绕着质量保证过程和质量控制过程两方面。
1.软件质量控制(SoftwareQualityControl,SQC)是为了保证每一件工作产品都满足对它的需求而应用于整个开发周期中的一系列的检测活动(代码走查、单元测试、集成测试、环境测试等),由开发人员负责。
2.软件质量保证(SoftwareQualityAssurance,SQA)是为保证产品和服务充分满足用户要求的质量而进行的有计划、有组织、有系统的管理活动(审查、复查和测试)。
软件质量控制和软件质量保证的关系:
如果将软件的生产比喻成一条产品加工生产线的话,那SQA只负责生产线本身的质量保证,而不管生产线中单个产品的实际质量情况。
SQA通过保证生产线的质量来间接保证软件产品的质量。
而SQC不管生产线本身的质量,而只关注生产线中生产的产品在每一个阶段的质量是否符合预期的要求。
9.1.4质量保证体系,软件的质量保证活动,是涉及各个部门的活动,贯穿在软件生命周期的每个阶段。
图10-5是软件质量保证体系的图例。
在质量保证体系图上,各部门横向安排,而纵向则顺序列出在软件生命周期各阶段质量保证活动的工作。
每项活动范围所涉及到的相关部门,质量管理部门的质量控制活动贯穿在每项工作中。
并且在软件生命周期每个阶段结束之前,都用结束标准对该阶段生产出的软件配置成分进行严格的评审。
9.2软件可靠性与复杂性,9.2.1可靠性软件可靠性的含义是:
软件系统在规定的时间间隔内,按照规定的条件,完成规定功能而不发生故障的概率。
在这个定义中包含的随机变量是“时间间隔”。
显然随着运行时间的增加,运行时遇到程序故障的概率也将增加,即可靠性随着时间间隔的加大而减小。
9.2.2可靠性的评价指标,1)可用性可用性指软件运行后在任一随机时刻需要执行规定任务或完成规定功能时,软件处于可使用状态的概率。
可用性是对应用软件可靠性的综合(即综合各种运行环境以及完成各种任务和功能)度量。
简而言之,就是系统完成特定功能的时间总量。
2)初期故障率,初期故障率是指软件在初期故障期(一般以软件交付给用户后的三个月内为初期故障期)内单位时间的故障数。
一般以每100小时的故障数为单位。
可以用它来评价交付使用的软件质量与预测什么时候软件可靠性基本稳定。
3)偶然故障率,指软件在偶然故障期(一般以软件交付给用户后的四个月以后为偶然故障期)内单位时间的故障数。
一般以每1000小时的故障数为单位,它反映了软件处于稳定状态下的质量。
4)平均失效前时间(MTTF)或平均无故障时间MTTF(MeanTimeToFailure)指软件在失效前正常工作的平均统计时间。
是系统按照规格说明书的规定成功运行的平均时间,它主要取决于系统中潜伏的缺陷数目,因此和测试的关系十分密切。
系统的可靠性越高,平均无故障时间越长。
指软件在相继两次失效之间正常工作的平均统计时间。
在实际使用时,MTBF通常是指当n很大时,系统第n次失效与第n+1次失效之间的平均统计时间。
对于失效率为常数和系统恢复正常时间很短的情况下,MTBF与MTTF几乎是相等的。
国外一般民用软件的MTBF大体在1000小时左右。
对于可靠性要求高的软件,则要求在100010000小时之间。
5)平均失效间隔时间(MTBF),6)缺陷密度(FD),指软件单位源代码中隐藏的缺陷数量。
通常以每千行无注解源代码为一个单位。
一般情况下,可以根据同类软件系统的早期版本估计FD的具体值。
如果没有早期版本信息,也可以按照通常的统计结果来估计。
典型的统计表明,在开发阶段,平均每千行源代码有5060个缺陷,交付后平均每千行源代码有1518个缺陷。
7)平均失效恢复时间(MTTR),或平均维修时间MTTR(MeanTimetoRepair),指软件失效后维修和重恢复正常工作所需的平均统计时间。
对于软件,其失效恢复时间为排除故障或系统重新启动所用的时间,而不是对软件本身进行修改的时间(因为修改软件过程的时间常常无法确定)。
它取决于维护人员的技术水平和对系统的熟悉程度,也和系统的可维护性有重要关系。
即系统的可维护性越好,平均维修时间越短。
8)平均不工作时间(MTBD),指软件系统平均不工作时的间隔时间,MTBD一般比MTBF要长,它反映了系统的稳定性。
9)平均操作错误时间(MTBHE)指软件操作错误的平均间隔时间。
它一般与软件的易操作性和操作人员的训练水平、因软件缺陷造成的不工作时间、因软件缺陷而损失的时间等有关。
10)软件系统不工作时间均值(MDT),指软件因系统故障不工作时间的平均值。
11)初始错误个数(NC)指在软件进行排错之前,估计出的软件中含有错误的个数。
12)剩余错误个数(ND)指在软件经过一段时间的排错之后,估计出软件中含有错误的个数。
9.2.3系统的稳态可用性计算,如果在一段时间里,软件系统故障停机时间分别为td,td2,td3正常运行时间分别为tul,tu2,tu3则系统的稳态可用性A为:
Atui(tui+tdi)如果引进系统平均无故障时间MTTF和系统平均维修时间MTTR的概念,那么,软件系统的稳态可用性可以表示A为:
AMTTF(MTTF+MTTR)100%由此可见,系统的可用性定义为系统保持正常运行时间的百分比。
例如,假设某软件系统平均每六个月出现一次故障,将该软件恢复到正常工作状态平均需要60分钟。
则该软件系统的可用性为:
可用性=6*30*24*60(6*30*24*6060分钟)99.98%,为了直观地度量软件的可靠性,还可以采用“平均失效间隔时间”MTBF(MeanTimeBetweenFailure)。
具体来说,是指相邻两次故障之间的平均工作时间,也称为平均故障间隔。
MTBFMTTFMTTRMTBF值越大,无故障工作的时间越长,就越稳定可靠。
9.2.4平均无故障时间(MTTF)的估算,指软件在失效前正常工作的平均统计时间,也称平均失效前时间。
Et:
测试之前程序中的缺陷总数;It:
机器指令总数衡量的程序长度;:
测试(包括调试)时间;Ed():
在0时间内发现的错误总数;Ec():
在0时间内改正的错误总数;E:
在0时间后剩余的缺陷数。
K为常数,测试之前程序中的缺陷总数Et进行估算,已交付产品中潜伏的缺陷数是一个十分重要的量值。
它既直接标志软件的可靠程度,又是计算MTTF的重要参数。
严格地说,人们无法精确计算这一数据。
但是从统计学的角度上来看,可以通过下面两种方法来对Et进行估算。
1)植入故障法,在测试之前,由专人在程序中随机地植入Ns个错误,测试之后,根据测试小组发现的故障中原有的n个和植入的ns个,那么,用N来估计程序中原有的总故障数Et为:
植入故障法的基本假定是所用的测试方案发现植入错误和原有错误的概率相同。
但是这种假设并不总是成立,因此有时计算结果有较大的偏差。
2)分别测试法,设想由两个测试人员同时测试一个软件程序的两个副本。
用T表示测试时间。
在T0时,故障总数为B;T=T1时,测试员甲发现的故障数为B1;T=T1时,测试员乙发现的故障数为B2;T=T1时,测试员甲、乙发现的相同故障数为Bc;则在统计的角度上,测试之前的故障总数:
为进一步求精,可以每隔一段时间进行一次并行测试,如果几次估算的结果相差不多,则可取其均值作为Et的结果估算值。
例:
对一长度为72000条指令的程序进行测试,第1个月由A、B两名测试员独立测试。
第1个月后,A发现并改正40个错误,使MTTF达到20h。
而B发现32个错误,其中的8个A也发现了。
以后由A单独继续测试这个程序。
问:
(1)刚开始测试时,程序原有错误共多少个?
(2)为使MTTF达到360h,还必须改正多少个错误?
解:
(1)本题采用了分别测试法,因此,可以估算出刚开始测试时程序中原有错误总数为:
(2)由于:
则:
如果:
那么:
(个),所以,为了达到平均无故障时间360h,总共需改正153个错误,A测试员已经改正40个错误,还需再改正113个错误。
9.2.5复杂性,软件复杂性(complexity)是指程序的结构性、模块性、简明性、简洁性和可理解性的程度。
程序复杂性度量的参数主要有:
规模:
程序指令条数或源程序行数;难度:
与程序操作数和操作符有关的度量;结构:
与程序分支数有关的度量;智能度:
算法的难易程度。
程序复杂性度量的方法主要有三种。
1)代码行度量法,它是用程序代码行的多少来衡量程序的复杂性。
该方法的基本考虑是统计一个程序模块的源代码行数目,并以源代码行数做为程序复杂性的度量。
若设每行代码的出错率为每100行源程序中可能有的错误数目,例如每行代码的出错率为1,则是指每100行源程序中可能有一个错误。
Lipow及其他研究者得出一个结论:
对于少于100个语句的小程序,源代码行数与出错率是线性相关的。
随着程序的增大,出错率以非线性方式增长。
这是早期最简单的计算程序复杂性的量度。
这种方法十分粗糙。
因为对程序的数据结构和控制结构复杂的程序,其复杂程度肯定不同。
2)McCabe度量法,又称环路复杂性度量,是一种基于程序控制流的复杂性度量方法。
计算环路复杂性的方法:
在一个有向图G(程序图)中,环路的个数V(G)由以下公式给出:
其中,V(G)是有向图G中环路个数,m是图G中弧数,n是图G中结点数。
程序图:
如果把程序流程图中每个处理符号都退化成一个结点,原来联结不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。
McCabe度量法示例:
在右侧的程序图中,结点数n11,弧数m12,则有V(G)mn2121123。
即McCabe环路复杂度度量值为3。
它也可以看做由程序图中的有向弧所封闭的区域个数。
利用McCabe环路进行复杂度度量的4点说明:
(1)环路复杂度取决于程序控制结构的复杂度。
当程序的分支数目或循环数目增加时其复杂度也增加。
环路复杂度与程序中覆盖的路径条数有关。
(2)环路复杂度是可加的。
例如,模块A的复杂度为3,模块B的复杂度为4,则模块A与模块B的复杂度是7。
(3)McCabe建议,对于复杂度超过10的程序,应分成几个小程序,以减少程序中的错误。
Walsh用实例证实了这个建议的正确性。
他发现,在McCabe复杂度为10的附近,存在出错率的间断跃变。
(4)McCabe环路复杂度隐含的前提是:
错误与程序的判定加上例行子程序的调用数目成正比。
而加工复杂性、数据结构、录入与打乱输入卡片的错误可以忽略不计。
3)Halstead的软件科学,这种方法是根据程序中可执行代码行的操作符和操作数的数量来计算程序的复杂性。
程序的操作符是有限的,其最大数目不会超过关键字的数目,而操作数的数目却随程序规模的增大而增加,一般地操作符和操作数的量越大,程序结构也就越复杂。
(1)程序长度,即预测的Halstead长度,令n1表示程序中不同运算符(包括保留字)的个数,令n2表示程序中不同运算对象的个数,令H表示“程序长度”,则有:
Hn1log2n1+n2log2n2这里,H是程序长度的预测值,它不等于程序中语句个数。
在定义中,运算符包括:
算术运算符,赋值符(或:
),数组操作符,逻辑运算符,分界符(,或;或:
),子程序调用符,关系运算符括号运算符,循环操作符等。
特别地,成对的运算符,例如“BEGINEND”、“FORTO”、“REPEATUNTIL”、“WHILEDO”、“IFTHENELSE”、“()”等都当做单一运算符。
运算对象:
包括变量名和常数。
(2)实际的Halstead长度,设N1为程序中实际出现的运算符总个数,N2为程序中实际出现的运算对象总个数,N为实际的Halstead长度,则有:
NN1+N2(3)程序的词汇表Halstead定义程序的词汇表为不同的运算符种类数和不同的运算对象种类数的总和。
若令n为程序的词汇表,则有:
nn1+n2,示例:
一个用FORTRAN语言写出的交换排序程序,因此有:
预测的词汇量Hn1log2n1+n2log2n210log210+7log2752.87实际的词汇量NN1+N228+2250程序的词汇表nn1+n210+717,(4)程序量V,程序量V,可用下式算得V(N1+N2)log2(n1+n2)它表明了程序在“词汇上的复杂性”。
其最小值为V*(2+n2*)log2(2+n2*)这里,2表明程序中至少有两个运算符:
赋值符“:
”和函数调用符“f()”,n2*表示输入输出变量个数。
对于上面的例子,利用n1,N1,n2,N2,可以计算得:
V(28+22)log2(10+7)204等效的汇编语言程序的V328。
这说明汇编语言比FORTRAN语言需要更多的信息量(以bit表示)。
(5)程序量比率(语言的抽象级别),LV*V或L(2n1)(n2N2)这里,N2n2log2n2。
它表明了一个程序的最紧凑形式的程序量与实际程序量之比,反映了程序的效率。
其倒数:
D1L表明了实现算法的困难程度。
有时,用L表达语言的抽象级别,即用L衡量在表达程序过程时的抽象程度。
对于高级语言,它接近于1,对于低级语言,它在01之间。
下面列出的是根据经验得出的一些常用语言的语言抽象级别。
(6)程序员工作量E,EVL(7)程序的潜在错误Halstead度量可以用来预测程序中的错误。
认为程序中可能存在的差错应与程序的容量成正比。
因而预测公式为B(N1+N2)log2(n1+n2)3000V3000B表示该程序的错误数。
例如,一个程序对75个数据库项共访问1300次,对150个运算符共使用了1200次,那么预测该程序的错误数:
B(1300+1200)log2(75+150)30006.5即预测该程序中可能包含67个错误。
Halstead度量是目前最好的度量方法。
但它也有缺点:
没有区别自己编的程序与别人编的程序。
这是与实际经验相违背的。
这时应将外部调用乘上一个大于1的的常数Kf(应在15之间,它与文档资料的清晰度有关)。
没有考虑非执行语句。
补救办法:
在统计n1、n2、N1、N2时,可以把非执行语句中出现的运算对象,运算符统计在内。
在允许混合运算的语言中,每种运算符必须与它的运算对象相关。
如果一种语言有整型、实型、双精度型三种不同类型的运算对象,则任何一种基本算术运算符(、)实际上代表了4种运算符。
如果语言中有4种不同类型的算术运算对象,那么每一种基本算术运算符实际上代表了种运算符。
在计算时应考虑这种因数据类型而引起差异的情况。
没有注意调用的深度。
Halstead公式应当对调用子程序的不同深度区别对待。
在计算嵌套调用的运算符和运算对象时,应乘上一个调用深度因子。
这样可以增大嵌套调用时的错误预测率。
没有把不同类型的运算对象,运算符与不同的错误发生率联系起来,而是把它们同等看待。
例如,对简单IF语句与WHILE语句就没有区别。
实际上,WHILE语句复杂得多,错误发生率也相应地高一些。
忽视了嵌套结构(嵌套的循环语句、嵌套IF语句、括号结构等)。
一般地,运算符的嵌套序列,总比具有相同数量的运算符和运算对象的非嵌套序列要复杂得多。
解决的办法是对嵌套结果乘上一个嵌套因子。
9.2.6提高软件可靠性的方法,提高和保证软件可靠性应贯穿整个软件生命周期,落实到软件生命周期中各阶段的每个环节。
1)建立以可靠性为核心的质量管理体系;2)选择合适的软件开发方法;3)软件重用;4)使用开发管理工具;5)加强测试;6)引入模型化技术和容错设计技术。
9.3软件工程标准化,9.3.1软件工程标准化的意义软件工程的标准化会给软件工作带来许多好处,比如:
提高软件的可靠性、可维护性和可移植性(这表明软件工程标准化可提高软件产品的质量),提高软件的生产率,提高软件人员的技术水平,减少差错和误解,有利于软件管理,有利于降低软件产品的成本和运行维护成本,有利于缩短软件开发周期。
软件工程标准的类型,软件工程标准的类型也是多方面的。
软件标准化包括程序设计语言的标准化和软件过程的标准化。
它可能包括:
过程标准(如方法、技术、度量等)、产品标准(如需求、设计、部件、描述、计划、报告等)、专业标准(如职别、道德准则、认证、特许、课程等)以及记法标准(如术语、表示法、语言等)等等。
9.3.2软件工程标准化的层次,根据软件工程标准制定的机构和标准适用的范围有所不同,它可分为五个级别,即国际标准(ISO)、国家标准(GB)、行业标准(IEEE)、企业(机构)标准及项目(课题)标准。
9.3.3我国的软件工程标准化工作,从1983年起,我国国家标准总局和原电子工业部主持成立了“计算机与信息处理标准化技术委员会”,已陆续制定和发布了20项国家标准。
这些标准可分为4类:
1)基础标准:
GB/T11457-89软件工程术语GB1526-891(ISO5807-1985)信息处理-数据流程图、程序流程图、系统结构图、程序网络图和系统资源图的文件编制符号及约定等;2)开发标准:
GB8566-88软件开发规范等;3)文档标准:
GB8567-88计算机软件产品开发文件编制指南等;4)管理标准:
GB12504-90计算机软件质量保证计划规范等。
9.3.4ISO9000标准及质量认证,ISO9000由ISO/TC176/SC1质量管理和质量保证技术委员会制定,ISO9000标准可帮助各种类型的组织实施并运行有效的质量管理体系。
这种质量管理体系给企业管理注入新的活力和生机,给世界贸易带来质量可信度,给质量管理提供评价的基础。
通过ISO9000认证已经成为企业证明自己产品质量、工作质量的一种护照。
ISO9000标准简介,ISO9000族标准源自英国标准BS5750。
国际标准化组织(ISO)于1987年产生了首版IS09000族标准,即ISO9000:
1987系列标准。
它包括:
ISO8402质量术语、ISO9000质量管理和质量保证标准选择和使用指南、ISO9001质量体系设计开发、生产、安装和服务的质量保证模式、ISO9002质量体系生产和安装的质量保证模式、ISO9003质量体系最终检验和试验的质量保证模式、ISO9004质量管理和质量体系要素指南等6项国际标准,通称为ISO9000系列标准。
ISO9000系列标准内容,ISO9000系列标准的主体部分可以分为两组:
1)“需方对供方要求质量保证”的标准900190032)“供方建立质量保证体系”的标准9004ISO9000质量管理和质量保证标准:
选择和使用导则9001、9002和9003之间的区别在于其对象的工序范围不同。
9001范围最广,包括从设计直到售后服务。
9002为9001的子集,而9003又是9002的子集。
ISO9000系列标准原本是为制造硬件产品而制定的标准,不能直接用于软件制作。
曾试图将9001改写用于软件开发方面,但效果不佳。
后以ISO9000系列标准的追加形式,另行制定出ISO9000-3标准,成为“使9001适用于软件开发、供应及维护”的“指南”。
9.3.5质量认证,质量体系认证则是通过第三方机构,依据规定程序对提供产品,服务单位的质量管理出具书面保证(ISO质量管理体系认证合格证书),证明其符合ISO9000标准规定要求所做出的评价。
贯彻执行并适时取得质量管理体系认证,将为企业带来有别于传统管理的优势和好处。
1)使企业管理规范化、程序化、法制化;2)与国际先进管理接轨的质量管理模式,将增强员工质量意识,优化质量成本,减少质量损失,使产品或服务保持稳定和一致性。
3)提高了企业自身素质,改善了企业形象和面貌;4)有利于国际间的经济合作和技术交流。
推行ISO9000的五个必不可少的过程,知识准备立法宣贯执行监督、改进
(1)企业原有质量体系识别、诊断;
(2)任命管理者代表、组建ISO9000推行组织;(3)制订目标及激励措施;(4)各级人员接受必要的管理意识和质量意识训练;(5)ISO9001标准知识培训;(6)质量体系文件编写(立法);(7)质量体系文件大面积宣传、培训、发布、试运行;内审员接受训练;(8)若干次内部质量体系审核;(9)在内审基础上的管理者评审;(10)质量管理体系完善和改进;,申请质量认证应具备的条件,1)产品质量认证的条件
(1)中国企业持有工商行政管理部门颁发的企业法人营业执照;外国企业持有有关机构的登记注册证明;
(2)产品符合中国国家标准、行业标准及其补充技术要求,或者符合国务院标准化行政主管部门确认的标准;(3)产品质量稳定,能正常批量生产,并提供有关证明材料;(4)企业质量体系符合GBT19000ISO9000族标准或者外国申请人所在国等同采用ISO9000族标准及其补充要求。
2)质量体系认证的条件,
(1)持有有关登记注册证明;
(2)已按GBT19000ISO9000系列标准或其他国际公认的质量体系规范建立了文件化的质量体系。
9.4软件能力成熟度模型CMM,软件能力成熟度模型(CapabilityMaturityModelforSoftware,简称SW-CMM,我国在很多场合下所说的CMM就是SW-CMM),是一种用于评价软件承包能力并帮助其改善软件质量的方法,也就是评估软件能力与成熟度的一套标准,它侧重于软件开发过程的管理及工程能力的提高与评估。
9.4.1CMM级别,CMM把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。