《软件工程与项目管理》第8章软件质量保证.ppt
第8章 软件质量保证掌握:掌握:软件质量的定义、软件质量的特性与度量、软件质量保证、软件质量模型、软件复杂性的度量方法、软件可靠性、软件评审、容错软件。8.1 软件质量概述8.1.1 软件质量的定义 清华大学的郑人杰教授认为,软件质量主要反映了以下3方面的问题:(1)软件需求是度量软件质量的基础,不符合需求的软件就不具备质量。(2)在各种标准中定义了一些开发准则,用来指导软件人员用工程化的方法来开发软件。如果不遵守这些开发准则,软件质量就得不到保证。(3)往往会有一些隐含的需求没有明确地提出来,例如,软件应具备良好的可维护性。如果软件只满足那些精确定义了的需求,而没有满足这些隐含的需求,软件质量也不能保证。8.1.2 软件质量的特性与度量 软件测试的目的就是为了发现错误并纠正错误,可以将其总结为以下几点:(1)测试是一个程序的执行过程,它的目的在于发现错误。(2)一个好的测试用例极可能发现至今未发现的错误。(3)一个成功的测试是发现了至今末发现的错误的测试。1功能性 由功能及与其指定的性质有关的一组属性组成,包括:(1)适合性 (2)准确性 (3)互用性 (4)依从性 (5)安全性 2可靠性 由与在规定的一段时间和条件下,软件维持其性能水平的能力有关的一组属性组成,包括:(1)成熟性 (2)容错性 (3)易恢复性 3易用性 由与一组规定或潜在的用户为使用软件所需作的努力和对这样的使用所作的评价有关的一组属性组成,包括:(1)易理解性 (2)易学性 (3)易操作性 4效率 在规定的条件下,软件的性能水平与所使用资源之间存在一定的关系,与这个关系有关的一组属性,是衡量效率的标准,这些属性包括:(1)时间特性 (2)资源特性 5可维护性 由与为进行指定的修改而所需的努力有关的一组属性组成,包括:(1)易分析性 (2)易改变性 (3)稳定性 (4)易测试性 6可移植性 由与软件可从某一环境转移到另一环境的能力有关的一组属性组成,包括:(1)适应性 (2)易安装性 (3)遵循性 (4)易替换性 8.1.3 软件质量保证 所谓软件质量保证,就是建立一套有计划、有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的主要手段,是对软件产品和活动进行评审和审计,以此来验证软件是合乎标准的。在软件开发的各个阶段实施的软件质量保证检验项目如下:1需求分析阶段 主要检测开发目的、目标值、开发量(程序、文档)、所需资源、各阶段的产品和作业内容、开发体制等的合理性。2设计阶段 检验项目包括产品的量(计划量、实际量)、评审量、差错数、检出差错的内容、评审方法和覆盖性、出错原因、处理情况及对该阶段的影响、评审结束和阶段结束的判断标准等。3实现阶段 检验项目包括设计阶段的所有检验项目,另外还包括:计算机使用时间、测试环境、测试项目设定种类、测试用例的设计方法等。4验收阶段 检验项目主要是说明书检查(检查与被检查程序有关的用户文档等)和程序检查(为了评价和保证程序质量,采用各种黑盒测试或白盒测试手段进行检查)。5运行维护阶段 主要是掌握用户使用产品的质量情况,并反馈给开发部门。8.2 软件质量模型8.2.1 McCall质量度量模型图8-1 McCall模型的3个层次与11个特性8.2.2 ISO软件质量评价模型 国际标准化组织ISO制定的ISO质量度量模型由3层组成,分别是:(1)高层,称为“软件质量需求评价准则”。(2)中层,称为“软件质量设计评价准则”。(3)低层,称为“软件质量度量评价准则”。ISO认为,应对高层和中层建立国际标准,而低层可由各使用单位视实际情况制定相关标准。同时,按照ISOIEC9126质量特性国际标准,第一层(即ISO质量度量模型中的“高层”)称为质量特性,第二层(即ISO质量度量模型中的“中层”)称为质量子特性,第三层(即ISO质量度量模型中的“低层”)称为度量。该标准定义了6个质量特性,即功能性、可靠性、可维护性、效率、可使用性、可移植性,并推荐了21个子特性,如适合性、准确性、互用性、依从性、安全性、成熟性、容错性、可恢复性、可理解性、易学习性、操作性、时间特性、资源特性、可分析性、可变更性、稳定性、可测试性、适应性、可安装性、一致性、可替换性,但不作为标准。8.3 软件复杂性8.3.1 软件复杂性的基本概念软件复杂性是指软件的复杂程度。(1)规模:即总共的指令或源程序行数。(2)难度:通常由程序中出现的操作数的数量来表示。(3)结构:通常用与程序结构有关的度量来表示。(4)智能度:即算法的难易程度。8.3.2 软件复杂性的度量方法软件复杂性度量是对软件复杂性的定量描述,是软件复杂性分析和控制的基础,它针对不同对象,从不同角度选用不同方法来描述软件的复杂性。软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性,它直接关系到软件开发费用、开发周期和软件内部潜伏错误的多少,同时也可用于度量软件的可理解性。要求复杂性度量满足以下假设:(1)软件复杂性度量可以用来计算任何一个程序的复杂性。(2)对于不合理的程序,如长度动态增长的程序,或者对于原则上无法排错的程序,则不应当使用软件复杂性度量进行复杂性计算。(3)程序中指令条数、附加存储量、计算时间增多不会减少程序的复杂性。1长度度量 度量程序的复杂性,最简单的方法就是统计程序的源代码行数。此方法的基本考虑是统计一个程序的源代码行数,并以源代码行数作为程序复杂性的质量。2Halstead度量 Halstead度量法通过计算程序中的运算符和操作数的数量对程序的复杂性加以度量。设n1表示程序中不同运算符的个数,n2表示程序中不同操作数的个数,N1表示程序中实际运算符的总数,N2表示程序中实际操作数的总数。令H表示程序的预测长度,Halstead给出H的计算公式为:H=n1log2n1+n2log2n2;令N表示实际的程序长度,其定义为:N=N1+N2。3McCabe度量 该度量方法由McCabe提出,又称为环路复杂性度量方法,其步骤是:(1)将程序流程图中的每个处理符号看作一个节点,流程图中的流程线看作有向弧,从而将流程图转换为一个有向图。(2)从图的入口点到出口点加一条用虚线表示的有向边,使图成为强连通图。(3)定义环路复杂性的计算公式为:V(G)=m n+p 其中,V(G)是有向图G中的环路数;m是图G中的弧数;n是图G中的节点数;P是图G中的强连通分量。也可简单地将环路复杂性看作有向图中有向弧所封闭的区域个数。例如,如图8-2(a)所示的程序流程图对应的有向图如图8-2(b)所示。因为节点数n=11,弧数m=13,强连通分量p=1,因此,环路复杂性V(G)=3。图8-2 McCabe复杂性度量的例子8.3.3 软件复杂性控制(1)控制结构和数据结构复杂的程序较复杂。(2)转向语句使用不当的程序较复杂。(3)非局部量较多的程序较复杂。(4)按地址调用参数比按值调用参数复杂。(5)模块及过程之间联系密切的程序较复杂。(6)嵌套深度越大,程序越复杂。(7)循环结构复杂性大于选择结构和顺序结构的复杂性。(8)宽度是软件复杂性的主要形成原因。8.4 软件可靠性8.4.1 软件可靠性的定义 1软件故障及其特征 常用以下3个术语来描述软件未正常运行的情况:(1)缺陷:是指软件的内在缺陷。(2)错误:缺陷在一定环境条件下暴露,导致系统运行中出现可感知的不正常、不正确和不按规范执行的状态。(3)故障:由于对错误未作任何纠正,而导致系统的输出不满足预定的要求。2软件可靠性 软件可靠性的定义是:“软件可靠性是软件系统在规定的时间内及规定的环境条件下,完成规定功能的能力”。(1)规定的时间 (2)规定的环境条件 (3)规定的功能 8.4.2 软件可靠性的指标(1)平均失效间隔时间MTTF:即两次失效之间的平均操作时间。(2)平均修复时间MTTR:即修复一个故障平均需用的时间。(3)有效性:A=(MTTF/(MTTF+MTTR)。(4)初期故障率:一般以软件交付使用方后的3个月内为初期故障期,初期故障率指软件在初期故障期内单位时间的故障数,一般以每100h 的故障数为单位,可以用来评价交付使用的软件的质量,并预测软件可靠性何时基本稳定。(5)偶然故障率:一般以软件交付给使用方后的4个月后为偶然故障期。偶然故障率指软件在偶然故障期内单位时间的故障数,一般以每千小时的故障数为单位,它反映了软件处于稳定状态时的质量。(6)使用方误用率:使用方不按照软件规范及说明等文件来使用软件而造成的错误叫“使用方误用”。在总使用次数中,使用方误用次数占的百分率叫“使用方误用率”。造成使用方误用的原因之一是使用方对说明理解不深,操作不熟练,但也可能是说明没有讲得非常清楚,引起误解等。(7)用户提出补充要求数:由于软件在开发过程中未能充分满足用户需要,或者用户在软件开发时所提要求不全面,软件开始使用后用户又提出补充要求,需要生产方对软件进行修改、完善。8.4.3 软件可靠性模型(1)随机性分类法:根据随机过程的假设(如过程的确定性或非确定性、马氏过程、泊松过程等)进行分类。(2)按软件出现的故障数进行分类:主要有错误计数模型和非计数模型,可数性或不可数性模型。(3)按模型参数的估计方法进行分类:主要有贝叶斯方法或非贝叶斯方法,最大似然估计法或最小二乘法,另外还有线性模型等。(4)按模型使用的时间方式分类:主要有日历时间和执行时间模型。(5)按修复过程分类:主要指强调对软件系统修复过程的一类模型,如:完全修复型的和不完全修复型的模型,完全排错型和不完全排错型的模型。(6)按对软件的内部结构是否了解进行分类:可分为黑箱模型和白箱模型。主要根据对软件内部结构的了解程度,以及对它们的结构能加以利用的程度来进行分类。8.5 软件评审8.5.1 软件评审的概念 对软件工程来说,软件评审是一个“过滤器”。在软件开发的各个阶段都要采用评审的方法,以发现软件中的缺陷,然后加以改正。8.5.2 软件评审的阶段和内容1设计质量的评审设计质量的评审包括:(1)评价软件的规格说明是否合乎用户的要求,即总体设计思想和设计方针是否明确;需求规格说明是否得到了用户或单位上级机关的批准;需求规格说明与软件的概要设计规格说明是否一致等。(2)评审可靠性,即是否能避免输入异常(错误或超载等)、硬件失效及软件失效。一旦发生异常,应能及时采取代替或恢复手段。(3)评审保密措施实施情况,即是否提供对使用系统资格进行检查的功能;在检查出有违反对特定数据、特殊功能的使用资格的情况后,能否向系统管理人员报告有关信息;是否提供对系统内重要数据加密的功能等。(4)评审操作特性实施情况,即操作命令和操作信息的恰当性;输入数据与输入控制语句的恰当性;输出数据的恰当性;应答时间的恰当性等。(5)评审性能实现情况,即是否达到所规定性能的的目标值。(6)评审软件是否具有可修改性、可扩充性、可互换性和可移植性。(7)评审软件是否具有可测试性。(8)评审软件是否具有复用性。2程序质量的评审 程序质量评审通常是从开发者的角度进行评审,它直接与开发技术有关。程序质量评审着眼于对软件本身的结构、与运行环境的接口、变更带来的影响等进行的评审活动。1)软件的结构 软件的结构包括功能结构、功能的通用性、模块的层次、模块结构、处理过程的结构等。其中,在功能结构方面需要检查的项目有:(1)数据结构:包括数据名和定义;构成该数据的数据项;数据与数据间的关系。(2)功能结构:包括功能名和定义;构成该功能的子功能;功能与子功能之间的关系。(3)数据结构和功能结构之间的对应关系:包括数据元素与功能元素之间的对应关系;数据结构与功能结构的一致性。在模块结构方面需要检查的项目有:(1)控制流结构:规定了处理模块与处理模块之间的流程关系,检查处理模块之间的控制转移关系与控制转移形式(调用方式)。(2)数据流结构:规定了数据模块是如何被处理模块进行加工的流程关系,检查处理模块与数据模块之间的对应关系,处理模块与数据模块之间的存取关系,如建立、删除、查询、修改等。(3)模块结构与功能结构之间的对应关系:包括功能结构与控制流结构的对应关系;功能结构与数据流结构的对应关系;每个模块的定义(包括功能、输入与输出数据)。2)与运行环境的接口 与运行环境的接口包括与硬件的接口及与用户的接口。随着软件运行环境的变更,软件的规格也在随着不断地变更。运行环境变更时的影响范围,需要从以下3个方面来分析:(1)与运行环境的接口。(2)在每项设计工程规格内的影响。(3)设计工程相互间的影响。8.5.3 软件评审的原则和作用1.评审的原则评审的原则包括:(1)某阶段未通过阶段评审不得进入下一个软件研制阶段。(2)评审时对事不对人,评审的是产品,而不是评审生产者。(3)评审就要挑刺,找问题、缺陷和隐患。(4)评审组的人员面越广越好,如包括用户、设计人员、测试人员等。(5)评审组不做无休止的争论和辩驳,而是将争论点记录下来,供以后甄别。(6)评审只是提出问题,没有解决问题的任务。(7)使用“评审检查单”,以提高评审的效果。2.评审的作用评审的作用在于:(1)技术把关,避免软件人员的想当然。(2)概念沟通,吸收用户和总体设计人员参加,审查软件人员理解的正确性。(3)集思广益,吸收有关的分系统人员参加,从不同侧面确认软件的协调性。(4)总结汇报,使实时控制系统总指挥、总设计师了解软件生产的进度、问题和要求,以做出新的部署。8.6 容错软件8.6.1 容错软件的定义 容错软件的定义为:规定功能的软件,在一定程度上对自身错误的作用(软件错误)具有屏蔽能力,或在一定程度上能从错误状态自动恢复到正常状态,或在因错误而发生错误时,仍然能在一定程度上完成预期的功能,或在一定程度上具有容错能力,则称之为容错软件。8.6.2 容错的一般方法1结构冗余(1)静态冗余。常用的有三模冗余(Triple Moduler Redundancy,TMR)和多模冗余(Multiple Modular Redundancy,MMR)。(2)动态冗余。动态冗余的主要方式是多重模块待机储备,即当系统检测到某工作模块出现错误时,就用一个备用的模块来顶替它,并重新运行。(3)混合冗余。它兼有静态冗余和动态冗余的长处。2信息冗余为检测或纠正信息在运算或传输中的错误需外加一部分信息,这种现象称为信息冗余。3时间冗余时间冗余是指以重复执行指令(指令复执)或程序(程序复算)来消除瞬时错误带来的影响。4冗余附加技术冗余附加技术是指实现上述冗余技术所需的资源和技术。8.6.3 容错软件的设计过程容错系统的设计过程包括以下步骤:(1)按设计任务要求进行常规设计,尽量保证设计的正确。(2)对可能出现的错误分类,确定实现容错的范围。(3)按照“成本效率”最优原则,选用某种冗余手段(结构、信息、时间)来实现对各类错误的屏蔽。(4)分析或验证上述冗余结构的容错效果。第第8章章 结束结束 谢谢!