软件质量的定义
CMM对软件质量的定义包括:
- 一个系统、组件或过程符合特定需求的程度;
- 一个系统、组件或过程符合客户或用户的要求期望。
概括地说,软件质量就是“软件与明确、隐含定义的需求相一致的程度”。具体来说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准,以及所有专业开发的软件都应具有的特征。
我们通常通过考察软件质量属性来评价软件的质量,并给出提高软件质量的方法。
1976年,Boehm等提出软件质量分层模型。1979年,McCall等人在此基础之上提出一种改进的质量模型。如图1所示
- 正确性:在预定环境下,软件满足设计规格说明及用户预期目标的程度。要求软件本身没有错误
- 可靠性:软件按照设计要求,在规定时间和条件下不出故障,持续运行的程度
- 效率:为了完成预定功能,软件系统所需的计算机资源的多少
- 完整性:为某一目的而保护数据,避免它受到偶然或有意的破坏、改动或遗失的能力
- 可用性:对于一个软件系统,用户学习、使用软件及为程序准备输入和解释输出的所需工作量的大小
- 可维护性:为满足用户新的需求,或当环境发生了变化,或程序运行中发现了新的错误时,对一个已投入运行的软件进行响应诊断和修改
所需工作量的大小 - 可测试性:修改或改进一个已投入运行的软件所需的工作量的大小
- 可移植性:将一个软件系统从一个计算机系统或环境移植到另一个计算机系统或环境中运行时所需的工作量的大小
- 可复用性:一个软件(或软件部件)能再次用于其他应用的程度
- 可互联性:又称互操作性。连接一个软件和其他软件系统所需工作量的大小。
作者提出,从实际角度出发,有十大质量属性,分为
- 功能性质量属性:正确性,健壮性、可靠性
- 非功能性质量属性::性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性。
软件测试的定义
正向思维:程序能够按照预期的设想进行。即,验证软件是工作的,针对软件系统的所有功能点,逐个验证其正确性。
逆向思维:测试是为发现一个错误而执行的一个程序或者系统的过程。
测试相关的三个观点:
1. 测试是为了证明程序有错,而不是证明程序无错;
2. 一个好的测试用例是在于它能发现至今未发现的错误;
3. 一个成功的测试是发现了至今未发现的错误的测试。
在《软件测试完全指南》(Complete Guide Of Software Testing)一书中,Bill Hetzel指出:“测试是以评价一个程序或系统属性为目标的任何一种活动。测试是对软件质量的度量”。1983年,IEEE提出的软件工程术语中对软件测试的定义是:“使用人工或自动的手段来运行或测试某个软件软件系统的过程,其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别。”