质量的定义
从常规、非技术层面来讲,质量可定义为“事物、产品或工作的优劣程度”。游 客因为不了解哥伦布时代以前的纺织品,因此会说:“这是一件质量上乘的披风!”然而,从技术层面来讲,质量通常与需求互联。美国电气与电子工程师学会(IEEE) 对质量的定义是“系统、元件或过程满足具体要求的程度”。国际标准化组织(ISO)对软件质量的定义是“在特定的使用条件下,软件产品满足明确或隐含需求的程度”。这种技术性与非技术性的区分对理解本书所涉及的质量至关重要,因为如果不了解软 件的功能性和性能意图,我们就无法对软件质量进行评估,不能凭空判断质量的优劣。
软件质量的一个重要方面是它涉及功能性和性能需求。功能性需求规定了软件预期的行为和目标,或它要做什么 ;而性能需求(以前称为非功能性需求)规定了软件操作的特征或属性,如预期行为完成到什么程度。例如,如果 SAS分析软件的目标是生成一份 HTML 报表,那么功能性需求中会详细指出该报表的内容、准确性、完整性及格式,以及数据清理操作、数据转换或其他过程。而软件有效使用大数据(可扩展性)的能力和在Windows及 UNIX环境中运行的能力(可移植性)则属于性能方面的要求。
为了有效地开发软件,SAS 从业人员需要了解软件所需的质量维度,质量维度通常可从隐含的需求中推断出来,也可由正式的需求文档指定。质量从软件规划和设计过程开始,这两个阶段会确定软件的需求和技术性要求。没有了要求,开发人员便无法知道自己开发的产品是可靠耐用、经得起反复使用,还是只是一个转瞬即逝的解决方案,只能由一个用户在某个无关重要的系统中运行一次。而且,若缺少一个公认的软件质量模型来界定质量维度和各个维度之间的相互关系,便很难确定软件的开发何时完成,以及软件是否实现了最终目标。
避开质量陷阱
质量在日常交流中出现的频率较高,因此,我们需要区分质量的具体定义和它在 软件开发中的含义。通常来讲,当单独提到质量时,如“这是一件质量上乘的毛呢大衣”,我们所表达的是产品或服务的优劣。而且同样的,当我们发现一家“高档的”泰国菜馆时,由于那里的泰式炒宽粉非常好吃,所以我们经常光顾那里!从这个角度 来看,质量表示的是对食物的独立评价,或者说它代表的是这家高档泰国菜馆与其他 一些食材一般的泰式餐厅之间的对比。因此,在评估或描述质量时,本质上就有对比,但对比并不是直接表达出来的,而是暗含的。
作为软件的使用者,我发现对比质量是比较普遍的。例如,我之所以使用 Gmail,是因为它的功能性和性能要优于其他的电子邮件应用程序。谈到功能性,我比较喜欢线程化邮件、整体一贯的布局及充分进行环境自定义的功能 ;谈到性能,高可用性的服务是非常可靠的,我相信Gmail服务器和基础架构的安全性。但在说到 Gmail质量较高时,我内心将这个电子邮件应用程序与之前用过的一些应用程序做了比较,之前的那些程序的功能性和性能都差一点。因此,软件使用者通常会根据自己的需求和要求确定软件的质量,同时也可能会比较某个软件程序与其他程序对自己需求的满足程度,在相互比较的基础上确定软件质量的高低。
但作为软件开发人员,我认为软件的质量是由ISO和 IEEE等组织决定的,这些组织规定,质量的评估必须参照需求或要求,而不是孤立地进行评价,或同其他软件 进行比较。这些定义与产品和项目管理文献中提到的一致 :质量表示“一组固有特性满足要求的程度”。如果不了解软件创建的目的,虽可以描述软件的功能性和性能, 但无法确定软件的质量——这就是我们经常遭遇的质量陷阱,而这主要是由质量的通用定义和行业具体定义之间的分歧导致的。
那么,质量这么复杂,我们该如何评估或讨论软件质量呢?如何告知某个同事, 他的软件一塌糊涂呢?软件质量模型被看作是一个行业标准,因为它是一个系统的、 标准化术语,能全面地描述软件性能。本书的主要目的是解释 ISO软件产品质量模型、它的优点和缺点及在 SAS 数据分析开发中的有效应用,以及它在介绍软件和软件需求词汇中的使用。