2.4质量管理
在第1章中已经明确,软件工程的目标是在预期时间内以较低成本完成高质量的软件。要实现这一目标,将涉及软件工程的方方面面,其中软件质量管理是一个非常重要的环节。
如何开发出高质量的软件,是软件质量管理需要回答的首要问题。软件质量是相对于一组事先定义好的功能性和非功能性需求而言的。开发出的软件满足需求的情况比较好,就可以评价这一软件质量高。反之,质量就比较低。具体而言,软件质量是指:软件要符合显式声明的功能和性能要求、显式文档化的开发标准及专业人员开发的软件所应具有的隐含特征。为了加深对软件质量的理解,读者也可以参考ISO8402关于质量的定义:“The Totality of futures and characteristics of an entity that bear on its ability to satisfy stated or implied needs”。
一般的项目质量管理包含3个方面的内容:质量计划(Quality Planning)、质量保证(Quality Assurance)和质量控制(Quality Control)。
软件质量计划主要是对符合项目的各类质量标准的选择,并对如何满足这些质量标准定义的一系列过程与计划。在软件项目的质量管理中,质量计划也是一个必不可少的环节。在软件行业中,有着众多软件质量标准可供选择,如ISO9000,CMM,SPICE,TickIT等,为了有效地实施软件质量管理,必须结合项目及组织的实际情况,对各类标准仔细研究,认真筛选,以选择适合的标准。
软件质量保证是指采取一系列有计划的、系统的行动以确保项目符合一定的质量标准。这些标准应该包括功能性需求规范,非功能性需求规范,当然还可能是一系列标准,如文档编制的标准,代码书写的规范,软件产品与其他子系统之间的接口标准等。软件质量控制是指对特定项目的结果是否符合相关质量标准进行分析,以便找出项目不符合标准的原因。在软件项目的质量管理中并不严格区分二者,一般统称为软件质量保证,它是软件质量管理的核心内容。
在软件开发过程中,发现和修改一个缺陷的相对成本将随着软件过程的不断向后推移而急剧增加。在软件开发过程的每一个步骤中,错误可能因为某种原因而产生,该步骤的评审过程可能没有发现当前步骤中产生的新错误以及来自于此前步骤中的错误,从而导致一定数量的错误通过当前步骤;同时从前面步骤传下来的错误在当前步骤会放大。在该步骤的检测过程中有一个检测的有效性百分比,以表示检测处错误的程度。
软件质量保证活动贯穿于整个软件项目的全过程。如可行性分析阶段的专家讨论会,需求分析阶段的客户对需求的核实与验证(Validation),设计阶段的复查(Review)和复杂性分析(Complexity Analysis),编码阶段的走查(Walk Through),直至测试阶段的各类测试,这些都可以看作是质量保证活动。
在SWEBOK中将这些活动分为以下两大类:静态技术和动态技术两类。
静态技术是指不必动态执行代码的各类软件质量保证活动。静态技术包括走查(Walk Through)、复查(Review)、审查(Inspection)、审核(Audit)、分析技术(Analytic Technique)等。走查主要是由开发者自己对自己的分析、设计或者代码作非正式检查。复查(Review)主要是开发者或者软件质量保证组对软件开发过程中的每一个阶段性结果如软件需求规范、设计文档、测试计划、代码等进行非正式检验。
而审查,通常是由审查小组对开发过程某一阶段的软件配置项做审查,其中审查小组成员可能包括领域专家、设计方法专家和语言专家。审查的目的是发现错误,审查的结果是一份审查报告。可见审查相对于走查和复查来说要正规许多。审核是指独立的审核部门对软件开发过程中各个阶段的阶段形成过程进行审核,以确保软件产品和软件开发过程符合相应的软件质量标准规范。相对开发过程而言,审核是一个相对独立的过程。
分析技术可以由个人或者小组对软件开发过程的某些方面作静态的分析。这些分析可能包括核心算法分析、控制流程分析、复杂性分析等。动态技术是相对于静态技术而言的。其特征体现在它的实现需要动态执行代码。这一类技术的典型就是测试(关于测试的详细内容参见本书第7章)。但动态技术除了典型的测试技术之外还有可能包括模拟(Simulation)、模型检查(ModelCheck)、符号执行(Symbolic Execution)等。
由此可见,软件质量保证是贯穿于整个软件开发过程中的一种庇护性行为,其具体形式根据软件开发当前阶段的不同而形式各异。