1第十章软件质量保证10.1软件的质量保证10.2软件可靠性10.3软件配置管理10.4软件标准化与软件文档10.5软件过程10.6ISO9000-3标准及软件质量认证210.1软件的质量保证10.1.1质量保证的概念10.1.2软件质量保证的主要任务10.1.3质量保证活动10.1.4质量保证与检验10.1.5软件质量保证体系10.1.6软件质量保证规程和技术准则10.1.7质量保证的实施10.1.8软件的质量设计310.1.1质量保证的概念什么是质量保证,它是为了提供足够的信任证据,证明组织有关的各类实体有能力满足质量要求所进行的有计划、有组织的活动。质量保证的目的是内部质量保证:在组织内部向管理者提供信任保证;外部质量保证:向顾客或第三方认证提供信任保证;4软件的质量保证活动也和一般的质量保证活动一样,是确保软件产品从诞生到消亡为止的所有阶段的质量的活动。即为确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。510.1.2软件质量保证的主要任务为了提高软件的质量和软件的生产率,软件质量保证的主要任务可归结为8点。用户要求定义熟练掌握正确定义用户要求的技术。熟练使用和指导他人使用定义软件需求的支持工具。重视领导全体开发人员收集和积累有关用户业务领域的各种业务的资料和技术技能。6力争不重复劳动考虑哪些既有软件可以复用。在开发过程中,随时考虑所生产软件的复用性。掌握开发新软件的方法在开发新软件的过程中大力使用和推行软件工程中所介绍的开发方法和工具。使用先进的开发技术:如结构化技术、面向对象技术。使用数据库技术或网络化技术。7应用开发工具或环境。改进开发过程。组织外部力量协作的方法一个软件自始至终由同一个软件开发单位来开发,也许是最理想的。但在现实中常常难以做到。改善对外部协作部门的开发管理。必须明确规定进度管理、质量管理、交接检查、维护体制等各方面的要求,建立跟踪检查的体制。8排除无效劳动一种无效劳动是因需求规格说明有误、设计有误而造成的返工。定量记录返工工作量,收集和分析返工劳动花费数据,采取措施减少返工。另一种无效劳动是重复劳动,即相似的软件在几个地方同时开发。建立互相交流、信息往来通畅、具横向交流特征的信息流通网。9发挥每个开发者的能力软件生产是人的智能生产活动,它依赖于人的能力和开发组织团队的能力。开发者必须有学习各专业业务知识、生产技术和管理技术的能动性。管理者或产品服务者要制定技术培训计划、技术水平标准,以及适用于将来需要的中长期技术培训计划。10提高软件开发的工程能力要想生产出高质量的软件产品必须有高水平的软件工程能力。在软件开发环境或软件工具箱的支持下,运用先进的开发技术、工具和管理方法开发软件的能力。提高计划和管理质量能力项目开发初期计划阶段的项目计划评价。11计划执行过程中对计划完成报告的评价。将评价、评审工作在工程实施之前就列入整个开发工程的工程计划中。提高软件开发项目管理的精确度。1210.1.3软件质量保证活动(SQA)美国SEI推荐了一组活动:为项目制定SQA计划该计划规定了软件开发小组和质量保证小组需要执行的质量保证活动。SQA计划的要点包括:需要进行哪些评价?需要进行哪些审计和评审?项目采用的标准;13错误报告的要求和跟踪过程;SQA小组应产生哪些文档?为软件项目组提供的反馈数量等。参与开发该软件项目的软件过程描述软件开发小组为开发活动选择软件过程,SQA小组评审过程说明,确保该过程与组织政策、内部、外界标准及软件项目计划其他部分相符。14评审各项软件工程活动评审各项软件工程活动,核实其是否符合已定义的软件过程。为此,SQA小组必须识别、记录和跟踪所有偏离过程的偏差,核实其是否已经改正。审核指定的软件工作产品审核指定的软件工作产品,核实其是否符合已定义的软件过程中的相应部分。15记录软件工作及软件工作产品的偏差确保软件工作及工作产品中的偏差已被记录在案,并根据预定规程进行处理。跟踪问题的解决记录所有不符合部分,向管理部门报告。跟踪不符合的部分直到问题得到解决。协调变更的控制与管理。帮助收集和分析软件度量的信息。1610.1.4质量保证与检验其一是切实搞好开发阶段的管理,检查各开发阶段的质量保证活动开展得如何;其二是预先防止软件差错给用户造成损失。为了确保每个开发过程的质量,防止把软件差错传递到下一个过程,必须进行质量检验。17质量检验的原则用户要求的是产品所具有的功能,这是“真质量”。靠质量检验,一般检查的是“真质量”的质量特性。能靠质量检验的质量特性,即使全数检验,也只是代表产品的部分质量特性。必须在各开发阶段对影响产品质量的因素进行切实的管理,认真检查实施落实情况。18当开发阶段出现异常时,要从质量特性方面进行检验,看是否会给后续阶段带来影响。虽然各开发阶段进展稳定,但由于工程能力不足,软件产品不能满足用户要求的质量。这时可通过检验对该产品做出评价,判断是否能向用户提供该产品。要以一定的标准检验产品,根据产品的质量特性,检查各个过程的管理状态。1910.1.5软件质量保证体系软件的质量保证活动,是涉及各个部门的部门间的活动。例如,如果在用户处发现了软件故障,产品服务部门就应听取用户的意见,再由检查部门调查该产品的检验结果,进而还要调查软件实现过程的状况,并根据情况检查设计是否有误,不当之处加以改进,防止再次发生问题。20为了顺利开展以上活动,事先明确部门间的质量保证业务,确立部门间的联合与协作的机构十分重要,这个机构就是质量保证体系。必须明确反馈途径。必须明确各部门的职责。必须确定保证系统运行的方法、工具、有关文档资料,以及系统管理的规程和标准。21必须明确决定是否可向下一阶段进展的评价项目和评价准则。必须不断地总结系统管理的经验教训,能够修改系统。制定质量保证计划,在计划中确定质量目标确定在每个阶段为达到总目标所应达到的要求确定进度安排确定所需人力、资源和成本等。2210.1.6软件质量保证规程和技术准则规定在项目的哪个阶段进行评审及如何评审;规定在项目的哪个阶段应当产生哪些报告和计划;规定产品各方面测试应达到的水平;规定在每次评审和测试中发现的错误如何修正;描述希望得到的质量度量;23说明各种软件人员的职责,规定为了达到质量目标他们必须进行哪些活动。建立在各阶段中执行质量评价的质量评价和质量检查系统有效运用质量信息的质量信息系统,并使其运行。2410.1.7质量保证的实施软件质量保证的实施需要从纵向和横向两个方面展开。要求所有与软件生存期有关的人员都要参加要求对产品形成的全过程进行质量管理这要求整个软件部门齐心协力,不断完善软件的开发环境。此外还需要与用户共同合作。25质量目标与度量为了开发高质量的软件,需要明确软件的功能,明确软件应达到什么样的质量标准,即质量目标。为了达到这个目标,在开发过程中的各个阶段进行检查和评价。在做质量评价时,需要有对质量进行度量的准则和方法;在软件生存期中如何使用这些准则和方法的质量保证步骤;26提高该项作业效率的工具。软件质量度量和保证的要求适应性:适应各种用户、软件类型易学性:不需要特殊技术,易掌握可靠性:同个软件的评价结果一致针对性:设计阶段就确立质量目标,在各个阶段实施落实。客观性:经济性:27质量保证活动的实施步骤Target:以用户要求和开发方针为依据,对质量需求准则、质量设计准则的各质量特性设定质量目标。Plan:设定适合于被开发软件的评测检查项目(质量评价准则)。研讨实现质量目标的方法或手段。Do:制作高质量的规格说明和程序。在接受质量检查前先做自我检查。28Check:以Plan阶段设定的质量评价准则进行评价。计算结果用质量图的形式表示出来。比较评价结果的质量得分和质量目标,看其是否合格。Action:对评价发现的问题进行改进活动,如果实现并达到了质量目标就转入下一个工程阶段。这样重复“Plan”到“Action”的过程,直到整个开发项目完成。29用户要求指导方针设定质量特性及质量子特性的评价尺度研讨质量度量准则及质量目标的实现方法各阶段度量的对象开发活动质量评价1.质量度量2.质量得分及图示3.判断目标达到否改进活动管理信息评测得分表质量图示TargetPlanDoCheckAction30313210.1.8软件的质量设计目标是将质量特性转换为软件内部结构。在软件定义阶段,必须定义对软件的质量需求。即确定软件的质量特性及必需的评价准则,并定量地设定其必须达到的质量水平。在以后软件开发的每一阶段结束时,要算出评价的分数,然后与目标值加以对照,以评估在这一阶段开发的软件质量是否达到要求。33为了实现规定的质量特性,就需要把这些质量特性转换为软件内部结构的特性。例如,软件质量需求中的“性能”,可以转换成软件内部结构中的构成元素,即每一个程序模块和物理数据各自应具有的性能特性。这些性能特性的累积就形成外部规格中的性能特性。34软件的结构特性与评价标准结构特性逻辑数据层次评价标准完成全部数据元素的定义完成所有层次的操作的定义结构特性功能层次评价标准完成全部功能元素的定义完成所有层次的操作的定义35结构特性逻辑数据与功能的对应评价准则所有数据都与功能对应所有功能元素都与数据对应逻辑数据与功能间的关系个数(局部)结构特性物理数据层次评价准则完成全部数据元素的定义完成物理数据之间所有指针的定义上述指针都具有层次性36结构特性模块层次评价准则完成所有模块的定义完成模块之间所有控制关系的定义上述关系都是标准过程调用形式各层次上的模块大小适当结构特性功能与模块的对应关系评价准则所有功能都与模块对应对应模块的功能个数(以一对一为好)37结构特性物理数据与模块的对应评价准则所有物理数据都与模块对应所有模块都与物理数据对应对应于一个物理数据的模块数(以一对一为好)结构特性逻辑数据与物理数据的对应评价准则所有逻辑数据都与物理数据对应对应于一个物理数据的逻辑数据数(以一对一为好)3810.2软件可靠性10.2.1软件生存期与软件寿命的关系10.2.2在软件工程中常用的术语10.2.3软件可靠性定义10.2.4测试中的可靠性分析10.2.5测试精确度和测试覆盖度的评价3910.2.1软件生存期与软件寿命的关系一切有生命的东西都有一个“寿命”这个概念也可以延伸到对非生命产品的质量评价上来。例如一个电子产品的寿命就是指该产品从出厂直到丧失使用价值的持续时间。从软件工程的角度来说,软件产品的寿命是指软件的整个生存期。从软件用户的角度来看,更关心的是软件在交付使用后的情况如何。40用一个指标平均失效间隔时间MTBF(MeanTimeBetweenFailure)来表明,在规定的要求和条件下,能在多大的程度上依赖这个软件来完成任务。我们把在使用期间软件能够正常工作的持续时间叫做软件的使用寿命。软件的使用寿命与输入环境有关。如一个存在缺陷的编译程序,当学生做简单练习时,MTBF可能很长。而做一个大课题时,MTBF会变得很短。41MTBF可以看做是对软件可靠性做估计的样本数据,但不能看做是依据。“错误”这一术语。在没有特别加以说明的情况下,这是一个泛用的、模糊的概念。它指的可能是bug(设计中的差错)、fault(故障)、error(错误)、failure(失效)、crash(重大事故)、problem(疑问)等。在汉译中,这些术语的使用更加混乱。4210.2.2在软件工程中常用的术语故障(fault):软件的内在缺陷。这些缺陷可在生存期各个阶段被引入。错误(error):故障在一定的环境条件下的暴露,导致系统在运行中出现了不正常、不正确、不按规范执行的状态,称为软件出错。失效(failure):对错误不做任何修正和恢复,导致系统的输出不满足用户要求