1、第第8章章 软件质量保证软件质量保证 软件质量,是贯穿软件生存期的一个极为重要的问题。是软件开发过程中所使用的各种开发技术和验证方法的最终体现。8.1 软件质量的概念软件质量的概念8.1.1软件质量的定义 软件质量反映了三方面的问题: (1)软件需求是度量软件质量的基础。不符合需求的软件就不具备质量。 (2)在各种标准中定义了一些开发准则,用来指导软件人员用工程化的方法来开发软件。如果不遵守这些开发准则,软件质量就得不到保证。 (3)往往会有一些隐含的需求没有明确地提出来。例如,软件应具备良好的可维护性。如果软件只满足那些精确定义了的需求而没有满足这些隐含的需求,软件质量也不能保证。8.1.2
2、 软件质量特性软件质量特性 软件质量特性,反映了软件的本质。讨论一个软件的质量,问题最终要归结到定义软件的质量特性。 人们通常用软件质量模型来描述影响软件质量的特性。McCall质量模型质量模型 McCall等人于 1979年提出的软件质量模型。其软件质量概念基于 11个特性之上。而这11个特性分别面向软件产品的运行、修正、转移。 11个特性:正确性 可靠性 效率 完整性 可使用性 可维护性 可测试性 灵活性 可移植性 复用性 互连性 8.1.3 软件质量特性之间的竞争软件质量特性之间的竞争 在软件的质量特性与质量特性之间、质量特性与质量子特性之间存在着有利的影响和不利的影响。例如,由于效率的
3、要求,应尽可能采用汇编语言。但是用汇编语言编制出的程序,可靠性、可移植性以及可维护性都很差。 8.2 软件质量的度量和评价软件质量的度量和评价8.2.1 软件质量的度量 软件质量特性度量有两类:预测型和验收型。 预测度量是利用定量的或定性的方法,对软件质量的评价值进行估计,以得到软件质量的比较精确的估算值。它是用在软件开发过程中的。而验收度量则是在软件开发各阶段的检查点,对软件的要求质量进行确认性检查的具体评价值,它可以看成是对预测度量的一种确认,是对开发过程中的预测进行评价。 8.2.2 软件质量评价软件质量评价 定量地评价软件的质量,目前还不能精确地做到。一般采取由若干(610)位软件专家
4、进行打分来评价。软件质量评价分两步走。 (1)评分 (2)分析结果8.3 软件质量保证软件质量保证8.3.1 质量保证的概念 软件的质量保证就是向用户及社会提供满意的高质量的产品。软件的质量保证活动也和一般的质量保证活动一样,是确保软件产品从诞生到消亡为止的所有阶段的质量的活动。即为了确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。 8.3.2 软件质量保证的主要任务软件质量保证的主要任务 为了提高软件的质量和软件的生产率,软件质量保证的主要任务大致可归结为8点。(1)用户要求定义 (2)力争不重复劳动(3)掌握开发新软件的方法(4)组织外部力量协作(5)排除无效劳动(6)
5、发挥每个开发者的能力(7)提高软件开发的工程能力(8)提高计划和管理质量8.3.3 质量保证与检验质量保证与检验(1)检验在质量保证中的作用 检验的目的有两个。其一是切实搞好开发阶段的管理,检查各开发阶段的质量保证活动开展得如何;其二是预先防止软件差错给用户造成损失。(2)各个开发阶段中的检验 为了切实做好质量保证,要在软件开发工程的各个阶段实施检验。检验的实施有两种形式:实际运行检验(即白盒测试和黑盒测试)和鉴定。可在各开发阶段中结合起来使用 。8.4 软件质量保证体系软件质量保证体系 软件的质量保证活动,是涉及各个部门的部门间的活动。8.5 质量保证的实施质量保证的实施 软件质量保证的实施
6、需要从纵向和横向两个方面展开。一方面要求所有与软件生存期有关的人员都要参加,另一方面要求对产品形成的全过程进行质量管理,这要求整个软件部门齐心协力,不断完善软件的开发环境。此外还需要与用户共同合作。8.6 软件的质量设计软件的质量设计 在软件系统定义阶段,必须定义对软件的质量需求。即确定软件的质量特性及必需的评价准则,并定量地设定其必须达到的质量水平。在以后软件开发的每一阶段结束时,要算出评价的分数,然后与目标值加以对照,以评估在这一阶段开发的软件质量是否达到要求。8.7 技术评审技术评审 人的认识不可能100符合客观实际,因此在软件生存期每个阶段的工作中都可能引入人为的错误。所以必须在开发时
7、期的每个阶段,特别是设计阶段结束时都要进行严格的技术评审,尽量不让错误传播到下一个阶段。8.8 软件可靠性软件可靠性 软件可靠性是最重要的软件特性。通常用它衡量在规定的条件和时间内,软件完成规定功能的能力。一般地,评价可靠性要用到概率统计方法。因此,必须通过不断的测试取得实测数据,才能根据测试结果构造可靠性模型,评价实际达到的可靠性。8.9 测试中的可靠性分析测试中的可靠性分析 在软件开发的过程中,利用测试的统计数据,估算软件的可靠性,以控制软件的质量是至关重要的。8.10 软件容错技术软件容错技术 提高软件质量和可靠性的技术大致可分为两类,一类是避开错误技术,即在开发的过程中不让差错潜入软件
8、的技术;另一类是容错技术,即对某些无法避开的差错,使其影响减至最小的技术。避开错误技术是进行质量管理,实现产品应有质量所必不可少的技术,也就是软件工程中所讨论的先进的软件分析和开发技术和管理技术。但是,无论使用多么高明的避开错误技术,也无法做到完美无缺和绝无错误,这就需要采用容错技术以使错误发生时不影响系统的特性,或使错误发生时对用户的影响限制在某些容许的范围内。8.11 软件维护软件维护 在软件开发完成交付用户使用后,就进入软件运行维护阶段。此后的工作就是要保证软件在一个相当长的时期能够正常运行,这样对软件的维护就成为必不少的了。8.11.1 软件维护的概念软件维护的概念1 软件维护的定义
9、在软件运行维护阶段对软件产品所进行的修改就是维护。 维护活动可以归为以下几类: (1)改正性维护 (2)适应性维护 (3)完善性维护 (4)预防性维护2 影响维护工作量的因素影响维护工作量的因素 影响维护工作量的程序特性有以下6种。(1)系统大小(2)程序设计语言(3)系统年龄(4)数据库技术的应用(5)先进的软件开发技术(6)其他:例如,应用的类型、数学模型、任务的难度、开关与标记、IF嵌套深度、索引或下标数等,对维护工作量都有影响。8.11.2 软件维护活动软件维护活动 为了有效地进行软件维护,应事先就开始做组织工作。首先需要建立维护的机构,申明提出维护申请报告的过程及评价的过程;为每一个
10、维护申请规定标准的处理步骤;建立维护活动的登记制度以及规定评价和评审的标准。8.11.3 程序修改的步骤程序修改的步骤及修改的副作用及修改的副作用 在软件维护时,必然会对源程序进行修改。通常对源程序的修改不能无计划地仓促上阵,为了正确、有效地修改,需要经历三个步骤。 1. 分析和理解程序 2. 修改程序 3. 重新验证程序 在将修改后的程序提交用户之前,需要用以下的方法进行充分的确认和测试,以保证整个修改后的程序的正确性。 (1)静态确认 (2)计算机确认 (3)维护后的验收8.11.4 软件可维护性软件可维护性 为了使得软件能够易于维护,必须考虑使软件具有可维护性。8.11.5 提高可维护性
11、的方法提高可维护性的方法 1.建立明确的软件质量目标和优先级 2.使用提高软件质量的技术和工具 3.进行明确的质量保证审查 4.选择可维护的程序设计语言 5.改进程序的文档8.11.6 维护维护“老化代码老化代码” 几乎所有有较长历史的软件开发组织都有一些在15年以前开发的程序,这些程序通常称为“老化代码”,因为开发这些程序的技术人员一般不是现在的成员,而且没有使用现代的开发方法。因此得到的数据结构和程序的体系结构都很差,文挡不完全,并且对曾经做过的修改没有完整的记录。对于这样没有完全软件配置和良好设计的“老化代码”,要采用特殊的维护方法。 8.11.7 逆向工程和再工程逆向工程和再工程术语“
12、逆向工程”来自硬件。软件公司对竞争对手的硬件产品进行分解,了解竞争对手在设计和制造上的“隐秘”。如果竞争对手的设计与制造的规格说明能够得到,要掌握这些隐秘并不难。然而,这些文档是保密的,软件公司做逆向工程时是不能利用的。成功的逆向工程应当通过考察产品的实际样品)导出该产品的一个或多个设计与制造的规格说明。8.11.8 软件配置管理软件配置管理 在软件建立时变更是不可避免的,而变更更加剧了项目中软件工程师间的混乱。因为在进行变更前没有仔细分析,或没有进行变更控制。协调软件开发使得混乱减到最小的技术叫做配置管理。配置管理是一种标识、组织和控制修改的技术,目的是使错误达到最小并最有效地提高生产率。
13、软件配置管理,简称SCM,是一种“保护伞”活动,它应用于整个软件工程过程。因为变更在任何时刻都可能发生,因此SCM活动的目标就是为了(l)标识变更;(2)控制变更;(3)确保变更正确地实现;(4)向其他有关的人报告变更。8.12 软件工程标准化与软件文档软件工程标准化与软件文档1什么是软件工程标准 软件工程标准的类型是多方面的。它可能包括过程标准(如方法、技术、度量等)、产品标准(如需求、设计、部件、描述、计划、报告等)、专业标准(如职别、道德准则、认证、特许、课程等),以及记法标准(如术语、表示法、语言等)。2 软件工程标准化的意义软件工程标准化的意义 软件的管理工作渗透到了软件生存期的每一
14、个环节。所有这些都要求提供统一的行动规范和衡量准则,使得各种工作都能有章可循。3 软件工程标准的制定与推行软件工程标准的制定与推行 软件工程标准的制定与推行通常要经历一个环状的生命周期,最初,制定一项标准仅仅是初步设想,经发起后沿着环状生命期,顺时针进行要经历多个步骤。 4 软件工程标准的层次软件工程标准的层次 根据软件工程标准制定的机构和标准运用的范围不同,可分为五个级别,即国际标准、国家标准、行业标准、企业(机构)标准及项目(课题)标准。 5 中国的软件工程标准化工作中国的软件工程标准化工作 从1983年起到现在,中国已陆续制定和发布了20项国家标准。这些标准可分为4类: 基础标准;开发标
15、准;文档标准;管理标准。6 ISO 9000-3 标准标准及软件质量认证及软件质量认证 近年来,国际上影响最为深远的质量管理标准当属国际标准化组织于1987年公布的ISO 9000系列标准。 ISO 90003的核心思想是“将质量制作入产品之中”。7 在开发机构中推行在开发机构中推行软件工程标准化软件工程标准化 组织开发和制定软件工程标准固然重要,在软件企业或其他软件开发机构中实施软件工 程标准更为重要。特别是当前中国许多软件项目忽视工程化的情况下,尤其需要研究如何在软件企业中推行软件工程标准化的问题。 8 文档的作用文档的作用 软件文档的作用 (1)什么是文档 (2)软件文档的作用 高质量的文档应当体现在以下几个方:(1)针对性; (2)精确性; (3)清晰性; (4)完整性; (5)灵活性。 文档的管理和维护文档的管理和维护 在整个软件生存期中,各种文档作为半成品或是最终成品,会不断生成、修改或补充。为了最终得到高质量的产品,必须加强对文档的管理。