软件质量管理与质量保证§1软件质量概述1.1软件质量定义ANSI标准对软件质量的定义:“软件质量是软件产品或服务的特性和特性的整体”IEEE对软件质量的定义:•软件产品具备满足给定需求的特性及特征的总体的能力•软件拥有所期望的各种属性组合的程度•用户认为软件满足他们综合期望的程度•软件组合特性可以满足用户预期需求的程度GB/T12504-90•软件质量softwarequality软件质量是指软件产品中能满足给定需求的各种特性的总和。这些特性称做质量特性,它包括功能度、可靠性、易使用性、时间经济性、资源经济性、可维护性和可移植性等。•质量保证qualityassurance质量保证是指为使软件产品符合规定需求所进行的一系列有计划的必要工作。•从实际应用角度,软件质量(softwarequality)定义(1)与明确确定的功能和性能需求的一致性(2)与明确成文的开发标准的一致性(3)与所有专业开发的软件所期望的隐含的特性的一致性•上述定义突出了三点:(1)需求是质量度量的基础,缺少与需求的一致性就无质量可言;(2)专门的标准定义了一系列的开发准则,它指导软件工程化的开发方式;(3)通常,对许多隐含需求不采用直接提出的方法(如良好的可维护性的要求)而忽视满足软件隐含的需求,那末,这样的软件质量也是不可信的。1.2软件质量的质量特性McCall质量模型:提出软件质量特性包含的质量特性•可使用性(Usability)•正确性(Correctness)•可靠性(Reliability)•效率(Efficiency)•完整性、安全性(Integrity,Security)•灵活性(Flexibility)•可测试性(Restability)•可维护性(Maintainability)•可移植性(Portability)•复用性(Reuseability)•互操作性(Interperability)McCall的三层质量度量模型McCall质量度量模型框架特性评价准则评价准则评价准则度量度量度量面向管理观点的产品质量决定产品质量的软件属性定量化地度量软件属性ISO建议的软件质量评价模型标准分为三级:高层:质量需求评价准则(SQRC)中层:质量设计评价准则(SQDC)低层:质量度量评价准则(SQMC)ISO建议的软件质量评价模型正确性可跟踪性完备性准确性容错性简洁性模块性通用性扩充性可容性效率安全性可维护性适应性互连性SQDC(中层)SQRC(高层)SQMC(低层)可用性一致性使用单位自行制定8.1.3国际标准和国家标准规定的质量特性•ISO/IEC9126-1991Informationtechnologysoftwareproductevaluationqualitycharacteristicsandguidelinesfortheiruse我国1996年将其等同采用:•GB/T16260-1996软件产品评价质量特性及其使用指南8.1.4产品质量与过程质量产品质量开发技术成本、时间、进度过程质量人员素质影响产品质量的4个方面§8.2软件质量保证质量保证也是一个过程,已列入国际标准“ISO/IEC12207信息技术-软件生存期过程”中。8.2.1质量保证的主要功能•质量方针的制定和展开•质量保证方针的质量保证标准的制定•质量保证体系的建立和管理•各阶段的质量评审8.2.2质量保证的实施软件质量的度量•过程度量•产品度量软件质量评价:软件复杂性度量•静态度量•软件产品规模•软件产品程序控制结构的度量•数据结构的度量•开发度量Halstead的软件复杂度度量方法根据程序中可执行代码行的操作符和操作数的数量来计算程序的复杂性n1:程序中出现的不同操作符数目n2:程序中出现的不同操作数数目N1:程序中操作符出现的总数N2:程序中操作数出现的总数Halstead使用原始度量定义的算式(1)程序长度N=n1log2n1+n2log2n2(2)程序容量V=Nlog2(n1+n2)(3)语言级别L=(2×n2)/(n1×n2)(4)程序工作量E=V/L(5)程序编写时间T=E/SS:Stroud数(6)程序潜在错误的数量B=Nlog2(n1+n2)/3000Halstead认为程序中可能存在的错误与程序容量成正比例:一程序对75个数据库项共访问1300次,对150个操作符使用1200次,潜在错误数为:B=(1300+1200)log2(75+150)/3000=6.5(即6~7个错误)Halstead复杂性度量方法是一种较科学的方法但存在不足和问题:(1)未忽略模块特性(2)忽略了非执行语句(3)代码和数据的二义性(4)未考虑数据类型的差异(5)未注意调用深度(6)未区别不同类型的运算符McCabe复杂性度量(环路度量)McCabe认为程序复杂性很大程度取决于程序控制流的复杂性,以程序图的环路数作为该程序复杂性的度量值对于具有强连通图的环路数:V(G)=e-n+2e:边数n:结点数McCabe复杂性度量示例acbefd123768459R1R2R3R4R5V(G)=9-6+2=5V(G)其它计算方法:(1)计算图中所有有界区域和无界区域数R图中共有5个区域(R1到R5),所以V(G)=5(2)用判定语句总数+1(判定个数=分支数-1)图中可按4个判定计算,V(G)=4+1=58.2.3技术评审软件评审是一个“过滤器”,用于“净化”软件工程各项活动质量控制技术质量控制活动分类开发方法学配置管理验证技术评审正确性验证性能调试组件测试集成测试系统测试原子事务模块冗余性检错质量控制避免错误容错调试测试§8.3软件可靠性硬件系统故障率0tZ(t)软件系统故障率0tZ(t)8.3.1基本概念软件可靠性定义在给定时间间隔内和特定的环境下,软件按规格说明成功运行的概率。软件可靠性定义的要素(1)环境条件规定软件的使用环境(输入数据要求和环境)(2)规定时间时间t是随机变量。(3)规定的功能(4)成功运行软件可靠性的主要指标借用硬件可靠性的定量度量方法来度量软件的可靠性:MTBF:平均故障间隔时间MTTF:平均故障时间t1,t2,.....,tn:失效时间MTTF=ni=1n1∑ti平均无故障时间MeanTimeBetweenFailure是指相邻两次故障之间的平均工作时间,也称为平均故障间隔。meantimetofailure,平均失效前时间设备在规定的环境下,正常生产到发生下一次故障的平均时间§8.4软件容错技术提高软件质量和可靠性的技术:•避开错误技术•容错技术:对无法避开的差错,使其影响减至最小的技术。8.4.1什么是容错软件?定义1:规定功能的软件,在一定程度上对自身错误的作用具有屏蔽能力的软件;定义2:规定功能的软件,在一定程度上能从错误状态自动恢复到正常状态的软件;定义3:规定功能的软件,在因错误而发生错误时,仍能在一定程度上完成预期的功能的软件;8.4.2容错的一般方法实现容错计算的方法:•错误检测算法•错误恢复算法容错资源•软件冗余备份实现容错计算的主要手段是冗余主体:常规软件所需资源附加体:容错资源容错软件8.4.3容错的一般方法冗余技术分类:1.结构冗余2.信息冗余3.时间冗余8.4.3容错的一般方法冗余技术分类:1.结构冗余(1)静态冗余:3模冗余、多模冗余UM1M2M3Vu2u1u3I3模(TMR)表决系统的结构表决器U=(u1∧u2)∨(u2∧u3)∨=(u1∧u3)1.结构冗余(2)动态冗余:多重模块待机储备,相继运行M1M2M3主模块备用I待机储备系统结构开关Mn….备用备用1.结构冗余(3)混合冗余H(N,K)M1M2MkIH(N,K)系统结构开关Mn….Mk+1….V转换开关2.信息冗余以检测或纠正信息在运算或传输中的错误为目的而外加的一部分信息。误差校正码(冗余码):奇偶码、定重码、循环码、……3.时间冗余以重复执行指令(指令复执)或程序(程序复算)来消除瞬时错误带来的影响。常用的程序复算方法:程序滚回技术出错……t0t1t2t3ti-1titi+1i-1i程序滚回示意图123时刻t0,t1,t2,….对应于程序中预先设置好的恢复点软件的容错系统结构1.多版本结构把同一功能的不同版本的程序(多为子系统或模块级)并行联结到系统中,构成冗余并行模型.版本1版本2版本3…...表决同一功能多版本程序示意图2.恢复块结构要求做容错的块(基本块)提供:备份块(独立设计的相应冗余备份)附加的错误检验恢复措施恢复块Ensure接受测试By基本块ElseBy备份块1……ElseBy备份块nElse错误恢复块的工作方式保存现场队空从恢复块的备份块队列中取一个模块激活此模块执行此模块恢复现场接受测试T有问题显示错误及位置继续执行后续工作通过不通过§8.5质量管理、质量认证与质量审核质量管理的类型:(1)质量检验型管理(2)全面质量管理(3)质量认证软件质量保证体系的研究和主要技术目前国际上软件过程质量管理最主要的三个典型代表:•CMM/PSP/TSP•ISO9000系列•ISO/IEC15504过程与软件质量管理随着软件技术和软件应用的发展,以过程为中心的软件开发、生产与质量管理是现代软件产业的时代特征。质量形成于过程,高可信、高质量的软件必须依赖对软件过程的管理。过程与软件质量管理ISO90002000版将过程定义为“一组将输入转化为输出的相互关联或相互作用的活动”软件过程分为:•软件工程过程:软件开发和生产的过程,如:需求分析、设计、编码、测试等过程;•软件管理过程:对软件开发和生产的过程进行管理的过程,如:项目策划过程、跟踪监控过程、质量保证过程•软件支持过程:对软件开发和生产的过程进行支持的过程,如:评审过程、培训过程、质量过程。技术改进与过程改进的关系—技术改进必须与过程改进同时并举低技术高技术过程成熟过程不成熟低风险途径高风险途径原始态理想态可能无结果途径软件工程的五个发展方向方向说明技术组织管理编程方法例如:结构化编程面向对象编程高低低形式化方法例如:Z语言、CSP、…高低低计算机辅助软件工程例如:CASE工具高低低软件开发模型例如:瀑布模型、……高中低软件工程过程探讨软件过程(包括开发过程、软件支持过程或维护过程等)的管理和改进。例如:CMMSPICEBOOTSTRAPSPERM高高高软件过程的管理模式CMM:软件过程管理与改进CMM是软件工程过程学科中的一个管理与改进软件过程的模式,也是一种衡量软件开发能力和成熟度的标准。CMM/PSP/TSP技术流派CMM(软件能力成熟度模型:CapabilityMaturityModelForSoftware)是由美国卡内基梅隆大学的软件工程研究所(SEI:SoftwareEngineeringInstitute)受美国国防部评估软件供应商能力的要求,1986年开始研究制定,并在美国,随后在全世界推广实施的一种软件评估标准,主要用于软件开发过程和软件开发能力的评估和改进。CMM标准共分五个等级,由低到高分别为:初始级、可重复级、已定义级、定量管理级和优化级。1998年SEI启动了CMMI(CMMIntegration)CMMI通过提供统一的过程改进框架,消除了不同模型之间的不一致和重复性,可望成为今后软件过程改进领域比较稳定的一个实用模型。目前SEI正在进行二个方面的扩充:•将质量管理的理念和思想向人力资源管理方面扩展(PSP/TSP/P-CMM);•将过程技术与产品线技术融合;如2000年推出的软件产品线PLP(ProductsLinePractice)和COTS(CommercialOffTheShelf)ISO9000标准系列1987年ISO公布ISO9000质量管理和质量保证标准系列。至1997年底,约100个国家、地区推行ISO9000质量认证活动;ISO9000族列标准现有20个标准,分为五类:(1)质量术语标准:ISO8402-1994(2)质量保证标准(3)质量管理标准(4)质量管理和质量保证标准的选用和实施指南(5)支持性技术标准ISO9000主体可分为两组:•