1.3 软件质量与质量模型
软件的质量是软件的生命,它直接影响软件的使用与维护。软件开发人员和用户都十分重视软件的质量,软件质量问题也是软件工程的核心问题之一。什么是软件质量?软件质量是一个复杂的概念,不同的人从不同的角度来看软件质量问题,会有不同的理解。人们经常说某某软件好用,某某软件功能全、结构合理、层次分明、运行速度快等。这些模糊的语言实在不能算作是软件质量评价,特别不能算作是对软件质量科学的、定量的评价。其实,软件质量,乃至于任何产品质量,都是很复杂的事物性质。随着计算机软硬件技术的发展,人们对软件质量的理解不断深化,软件质量的标准也在不断改变。按照ISO/IEC 9126-1991(GB/T 16260—1996)“信息技术软件产品评价质量特性及其使用指南”标准,对软件质量定义如下。
软件质量是与软件产品满足明确或隐含需求的能力有关的特征和特性的总和。其含义有以下4个方面。
• 能满足给定需求的特性。软件需求是衡量软件质量的基础,不符合需求的软件就不具备好的质量。设计的软件应在功能、性能等方面都符合要求,并可靠地运行。
• 具有所期望的各种属性的组合的程度,即软件结构良好,合理地利用系统资源,易读、易于理解,并易于修改,方便软件的维护。
• 能满足用户综合期望的程度,软件系统具有友好的用户界面,便于用户使用。
• 软件的组合特性。软件生存周期中各阶段文档齐全、规范,便于配置管理。
软件质量是各种因素的复杂组合,软件质量因素也称为软件质量特性。质量特性反映了质量的本质,讨论一个软件的质量问题,最终要归结到定义软件的质量特性。
那么,影响软件质量的因素都有哪些?评价软件质量的标准是怎样的?换句话说,满足哪些标准才能保证软件产品具有好的质量?为了回答这些问题就需要一个易于理解的质量模型,来帮助评估软件的质量和对风险进行识别、管理。目前已有很多质量模型,它们分别定义了不同的软件质量属性,比较常见的3个质量模型是McCall模型、Boehm模型和ISO 9126,它们的共同特点是把软件质量特性定义成分层模型。比较普遍的质量特性模型是两层结构,第一层是按大类划分质量特性,叫做基本质量特性;第二层是每个大类所包含的子类质量特性;最后在各个类别的质量特性中一一列出对应的或相关的标准。
早在1976年,Boehm等人就提出软件质量模型的分层方案。1979年McCall等人改进了Boehm质量模型,又提出了一种软件质量模型,质量模型中的质量概念基于11个特性之上,这11个特性分别面向软件产品的运行、修正、转移,它们与特性的关系如图1.4所示。McCall等人认为,特性是软件质量的反映,软件属性可用作评价准则,量化地度量软件属性可以判别软件质量的优劣。
图1.4 McCall质量模型
对于没有开发经验的人来说,似乎自己开发的软件能够正确运行就可以了。但软件工程的结果是软件产品,一个产品的质量要求则是多方面的。实际的情况是,正确性只是反映软件质量的一个因素而已。软件的质量因素很多,如正确性、可靠性、可使用性、效率、完整性、可维护性、可测试性、灵活性、可移植性、可复用性、互连性等。
ISO从更加普遍的用户角度出发,倡导并推动了关于统一软件质量特性认识的讨论,逐渐形成了比较一致的意见,并且不断改进。在1991年发布的ISO/IEC 9126《软件质量特性与产品评价》中初步体现了这种国际性探讨的成果。ISO/IEC 9126-1991标准规定的软件质量模型由3层组成,如图1.5所示。在这个模型中,第1层称为质量特性(SQRC),第2层称为质量子特性(SQDC),第3层称为度量(SQMC)。这个模型定义了8个质量特性,即正确性、可靠性、可维护性、效率、安全性、灵活性、可使用性、互连性;并推荐了21个子特性,如适合性、准确性等,但不作为标准。用于评价质量子特性的度量没有统一的标准,由各单位视实际情况制定,正如前面所提到的那样,评价软件质量以用户需求为标准,一般都以用户的“满意度”进行衡量。
图1.5 ISO的软件质量评价模型
在1997年以后,ISO从软件生存周期角度考虑,提出了软件质量的度量概念。在这种关于衡量软件质量的概念的支持下,ISO修订了ISO/IEC 9126—1991,提出了一套新的9126系列标准,即ISO/IEC 9126-1、-2、-3和-4。2001年在新的ISO/IEC 9126《产品质量—质量模型》中定义的软件质量包括内部质量、外部质量和使用质量3部分,如图1.6所示。也就是说,“软件满足规定或潜在用户需求的能力”要从软件在内部、外部和使用中的表现来衡量。
图1.6 新的ISO/IEC 9126软件质量模型
所谓的内部质量是从内部观点出发的软件产品特性的总体,是针对内部质量需求被测量和评价的质量。在新的ISO/IEC 9126《产品质量—质量模型》中,内部质量的定义是反映软件产品在规定条件下使用时满足需求的能力的特性,被视为在软件开发过程中(如在需求开发、软件设计、编写代码阶段)软件的质量特性。
内部质量特征主要包括以下几个方面。
• 可维护性,修改一个软件系统,提高其性能或修正其错误的能力。
• 灵活性,修改系统使其能适应于不同的用途或环境的能力,而不必对系统进行特定的设计。
• 可移植性,能修改所设计的某一部分,使其能在其他环境下运行的能力。
• 可重用性,能将系统的一部分用于其他系统的难易程度。
• 可读性,能读懂或理解系统源代码的能力。
• 可测试性,对整个系统进行单元或系统测试以证实其满足所有需求性能的测试难易程度。
• 可理解性,能从整个系统水平或细节上理解整个系统的难易程度。
外部质量的定义是软件产品在规定条件下使用时满足需求的程度。外部质量是从外部观点出发的软件产品特性的总体,它是当软件执行时,更典型的是使用外部度量在模拟环境中,用模拟数据测试时,所被测量和评价的质量,即在预定的系统环境中运行时可能达到的质量水平。
外部质量特征主要包括以下几个方面。
• 正确性,整个系统受说明、设计和实现的错误的影响程度。
• 可用性,用户学会和使用系统的难易程度。
• 效率,对系统资源的最小利用,包括存储时间和执行时间。
• 可靠性,系统在一定条件下执行特定功能的能力。
• 完整性,防止非法或不适当地访问的能力。
• 适应性,系统在应用或其他环境下不作修改就能使用的能力,而不必经过特定的设计。
• 精确性,系统不受错误影响的程度,尤其是在数据输出方面。精确性和正确性是不同的,精确性是对系统完成其工作情况的衡量,而不是它设计得是否正确。
• 坚固性,系统在无效输入或压力环境中能继续执行其功能的能力。
使用质量的定义是,在规定的使用环境下软件产品使特定用户在达到规定目标方面的能力。它是从用户观点出发,来看待软件产品用于特定环境和条件下的质量,反映的是从用户角度看到的软件产品在适当系统环境下满足其需求的程度。
使用质量用有效性、生产率、安全性、满意程度等质量特征表述。
对于一个实际的软件项目而言,想把上面的所有质量特征都做好是一件很难的事情。质量、资源和时间是项目管理的三要素,三者相互影响和制约,提高质量是有成本和时间代价的,提高质量可能带来更多资源的投入或进度的延后。因此,任何一个项目都应根据项目的实际特点来平衡好三要素,制订切实可行的质量目标。
任何形式的产品都是多个过程得到的结果,因此对过程进行管理与控制是提高产品质量的一个重要途径。对于一个软件项目,为了提高软件产品质量、缩短产品开发进度、节约产品开发成本,必须在软件开发过程的每个阶段、每个步骤上都要进行管理和控制。