1.2 定义软件质量

质量总是很难定义,而定义软件质量更是异常困难。原因是不同的人、不同的目标下,对质量的理解各异。

对某个特定应用程序而言,客户、开发人员、用户、管理者、软件质量人员、测试人员、高管和其他利益相关者对软件质量的理解是不同的。质量顾问、相关学者和诉讼律师对质量的理解也不同。多年以来人们已经提出了很多关于质量的定义,但是没有一个能完全让人满意,或者被软件产业完全接受,包括国际标准里的那些定义。

通常所说的质量和具体的软件质量之所以难以捉摸和确定,是因为“质量”这个词有很多细微之处和弦外之音。比如,以下十条都属于质量的属性:

1)看起来应是优雅或美丽的;

2)适用于多种目的;

3)能满足用户的需求,包括明确的需求以及那些隐含的需求;

4)不应有缺陷,可能需要达到六西格玛级别;

5)缺陷清除活动效率高;

6)运行时可靠性高;

7)易于学习和使用;

8)有清晰的用户指南和帮助材料;

9)客户易于获得支持;

10)报告的缺陷可以快速修复。

如果进一步深化软件质量的定义,则质量的好坏往往与软件组件或功能的运行环境有关。软件组件的质量不是固定不变的,同一个组件可能是质量优异的,也可能是高度危险的,这取决于其运行环境和用户的使用目的。

软件质量的这种因语境而异的性质是一个根本性的挑战,这适用于上述10个属性中的每一个。在某种情况下非常好,而另一种情况可能完全不可行;在某些特定条件下高度可靠,而在其他条件下可能很快就发生故障。

一个紧密相关的复杂因素是Brooks指《人月神话》一书的作者Frederick P.Brooks。——编辑注所说的软件“可变性”。“总之,软件产品扎根于文化的母体中,如各种应用、用户、法律法规和硬件设备。所有这些持续不断地变化着,这些变化也强迫着软件产品随之变化。”(Brooks 1995,p185)

这带来测试和软件质量间的区别。软件质量经常被随意地等同于测试活动或者质量保证。然而,语境和Brooks的软件可变性概念是为什么软件质量不能等同于测试或者质量保证的原因。

测试只能解决那些已知的不确定因素。如果你不知道你要测什么,那显然你没办法进行测试。但是对于软件来说,其本质上带有未知的不确定因素。再多的功能或非功能测试也没办法去检测并纠正这些问题。比如,应用程序的行为在以下情况下会发生改变:

●一个或多个应用程序组件被切换为新的组件时;

●技术原因导致的组件更改时(如版本升级);

●业务原因导致的组件更改时(如新功能或者工作流程的变化);

●或者应用程序所处环境(也许是技术架构)改变了。

为这些情形提前设定测试用例是不可能的。不过基于经验我们知道,当环境改变时,有些应用程序比其他的更加健壮、可靠和可信赖。有些应用程序更容易经过修改或者扩展来响应紧迫的业务需求。应用程序的这些属性——健壮性、可靠性、可修改性等——是软件质量的可靠指标,远超过测试中发现的缺陷,或者质量保证中发现的过程无效事例和不一致现象。因此,应用程序的质量可以并且必须以这样一种方式定义,它能够包括这些比测试和质量保证中所能发现的更好的质量指标。第2章将详细介绍如何在定义和度量软件质量中应用语境和可变性的概念。

以下7种标准应该考虑进软件质量的定义中,以便在业务环境中用该定义进行经济学分析:

1)质量的定义应该是在项目开始前可预测的(predictable);

2)质量的定义应该是在项目进行中以及结束后可度量的(measurable);

3)如果发生诉讼,质量的定义应该是可证明的(provable);

4)质量的定义应该是随着时间而可改进的(improvable);

5)质量的定义应该是灵活的(flexible),并且涵盖所有的可交付成果;

6)质量的定义应该是可扩展的(extensible),并且包括所有的阶段和活动;

7)质量的定义应该是可扩充的(expandable),从而适应云计算等新技术。

此外,质量的各种细微差别可以划分为7大重点领域或质量类型:

1)技术型或者结构型质量,包括可靠性、缺陷和缺陷修复;

2)过程质量,包括能提高质量的开发方式;

3)使用质量,包括易于使用和学习;

4)服务质量,包括联系支持人员;

5)美学质量,包括用户满意度和主观主题;

6)标准质量,包括各种国际标准指标;

7)法律质量,包括质量低劣导致的诉讼中的权利要求。

之所以需要质量类型分类方法,是因为所有可能的质量属性全集包含了100多项不同的主题。表1-5总共列出了121项软件质量属性,并且按照重要程度进行了评级。

评级方案里把已经证明极有价值的主题评为+10,把对软件项目极为有害的主题评为-10。

总共121项的质量因子太过繁多以致在日常的质量分析中没法使用。如果只想选择实现质量目标过程中最重要的因子,那么可以看表1-6列出的12项最重要的质量因子,这是基于对几千个应用程序的度量得出的。

截至2011年,这12项质量因子中的11项在技术上是可行的。列表中的第114项——良好的保证——在软件行业还没有相关实践。这种状况需要改变,并且软件行业需要有效的保证覆盖率来支持软件应用程序。

虽然为了研究质量的经济价值,所有这121项质量因子都是重要的,但显然这些因子必须能以定量的方式表述。而且显然这些因子也会影响以下7个主题:

1)开发、维护、增强和支持的成本;

2)开发、维护、增强和支持的进度;

3)应用程序上市后的直接收益;

4)来自服务和相关产品可能的间接收益;

5)应用程序用户的学习曲线;

6)应用程序给用户带来的运营成本的节省;

7)应用程序给用户带来的各种新业务机会。

本书专注于那些对成本和收益有着切实影响的软件质量因子。为研究这些质量因子的经济价值,书中涉及了3个关键主题。

●从成本、进度、收益和其他金融主题的角度来讲,“平均质量”的结果是什么?一旦定义好,平均质量就能提供一个度量经济价值的基线。

●从成本降低、进度缩短、收益更高、新的市场机会和其他金融主题的角度来讲,“高质量”的结果是什么?

●从成本增加、进度延长、收益降低、客户流失和其他金融主题的角度来讲,“低质量”的后果是什么?

通常情况下,和平均值相比,我们能从极端对立值中得出更深刻的见解。因此,本书将集中讲述从高质量得到的经济价值以及由低质量导致的经济损失。

虽然平均质量也重要,但它不是非常有用,对软件来说它从来都不是很有用。因此,重要的是要知道,只有比平均质量好的软件才能产生与之相关的切实的经济价值。

相反,软件质量低会带来一些严重的经济后果,包括集体诉讼威胁、违约诉讼威胁,对医疗设备中的嵌入式软件来讲,甚至有刑事指控的潜在威胁。

[1]指《人月神话》一书的作者Frederick P.Brooks。——编辑注