UML软件工程组织

软件不当测试的经济学影响
谭朝晖(转载自计算机世界报)    2002年08月05日

软件和药品是少有的两种无法根除自身缺陷且允许公开合法出售的产品。人们明知软件肯定存在缺陷,药品肯定存在副作用,但权衡利弊之后仍然购买之,甚至法律对此也网开一面。如软件厂商对其产品通常会做如下公示:“对本软件的任何修改恕不一一通知”,当然负责任的软件厂商会定期/不定期的发放软件补丁。药品厂商也会在药品说明书中描述该药品可能引起的副作用。这种警示方法不仅为法律和普遍的道德观所接受,而且正是法律所要求的做法。而在其它行业,如果产品存在明显的不可确定的缺陷,市场、用户和法律都将作出适度的和更强烈的反映。所以有人说,如果微软公司生产汽车而不是软件,恐怕早已出局了。

软件的缺陷难以根除,但软件的质量是可以改进的。加强软件测试是控制和提高软件质量的一个行之有效办法。目前软件的质量问题几乎都可以归咎为测试阶段没有发现该问题。当然,事实上我们难以想象测试阶段可以发现所有的质量问题。这实际上是一个悖论,委屈了软件测试工程师和软件产商。众所周知,在别的行业,质量检验没有这样复杂,如灯泡质量的检验。如果检验员按照规定的抽样办法去检验灯泡,并判定该批次产品合格,那么消费者、市场就会认可这一检验结果。单个消费者碰巧遇到一个不合格产品,那只是小概率事件或仍处于公认的可接受的范围。没有人去责怪检验员或检验方法。如果商家判为合格的产品超过了公认的可接受范围,那么只有这两种可能:

(1)商家采用了非标准的测试程序,商家将负法律责任;

(2)测试程序本身需要改进,一般情况下,这时肯定不是一个商家的产品有问题而是很多商家的产品会有问题。针对软件产品,目前还没有一种公认的标准测试程序。针对同一类型的产品,不同的人可能会采用大相径庭的测试方法,即使采用同样的测试方法,不同的人还可能得出不同的测试结论,同一人前后两次测试结果也可能不一致。

软件市场呼唤一种公认的标准测试程序和方法用于测试软件质量。一旦有了这样的程序,人们的注意力将集中到如何改进这个程序而不会怪罪具体的测试工程师或软件厂商。如果没有这个程序,一旦软件出现故障,我们就理直气壮的认为测试不当,而软件厂商将首当其冲,测试程序的责任反而微乎其微了。

本文将讨论当前普遍采用的不恰当的测试方法所带来的危害,尤其是经济学意义上的危害。

一、不当测试的表现和后果

软件测试存在缺陷是指软件开发者和用户在测试时花费的成本比更有效的测试方法更高。由此看来,几乎所有的测试都存在缺陷。在本文中,软件测试存在缺陷又称之为不当测试。

1.1 不当测试的表现

测试的不当性体现在如下四个方面:

(1) 集成和互操作性测试

各种应用需集成在一块,以免产生信息孤岛。应用的集成是一个复杂和不确定的过程。集成工作有可能占到系统实现的1/3的成本(Booker,1999)。企业应用集成(EAI)的费用一般占到企业信息技术预算的30%,这个比例将上升到56%(Booker,1999)。据估计,1998年全球信息技术费用约为2700亿美圆,则EAI的费用按30%估算约为810亿美圆。

在集成测试阶段,软件开发者严重依赖互操作性测试。互操作性测试同样非常困难。举例来说,A应用和B应用可以互操作,B应用和C应用也能互操作,但并不能保证A应用和C应用也能互操作(NIST,1997),即互操作性不能相互传递,也不是完全等价的关系。

(2) 测试代码的自动生成

开发合适的测试代码比开发受测产品需要花费更多的时间和精力。该研究领域已成为IT前沿的焦点。我们相信,格式化语言将在测试代码的自动生成中发挥巨大的作用。

(3) 缺乏一种精确的办法以判定产品软件产品的质量等级:合格、不合格、优良、优秀。

软件行业里一个棘手的问题是决定测试何时可以结束、决定测试是否已经足够了。这需要对软件质量的确定性作出更精确的定义。由于对“足够”的定义存在分歧,这个问题越来越严重了。一些数学方法有望在这一领域得到更广泛的应用。

商业软件开发者一般使用下述方法来判定软件元素是否足够完善:

◆ 足够百分比的测试用例成功通过测试;
 ◆ 需执行代码覆盖测试;
 ◆ 软件缺陷被划分成不同类别,从而能分析每个类别里软件缺陷的数目和缺陷的发展趋势。
 ◆ 完成Beta测试后,允许产品上线运行。软件开发者可以分析上线运行的问题的严重性和发展趋势。
 ◆ 在给定的时间段,如果软件缺陷数目稳定并低于约定的“阀值”,则认为该软件已经足够完善了。

(4) 缺乏可行的性能和质量度量标准

开发性能测试程序同样耗资巨大。硬件厂商测试时通常会选择流行的软件环境或大型软件系统。对于软件厂商来说,反之亦然。这样,小而新或不够流行的软件被软件厂商或硬件厂商选择做性能测试的机会就较少。

1.2 不当测试的后果

大家知道,如果测试的方法、工具不科学、不合理,那么测试的结果就不可信,从而会引起严重的后果,如把合格的产品判为不合格,或者把不合格的产品判定为合格。软件测试也一样。不当测试的后果包括四个方面:

◆ 由于质量差导致软件某项或全部功能/性能失败;
 ◆ 增加了软件开发成本;
 ◆ 使软件产品推向市场的时间滞后;
 ◆ 增加了市场交易成本。

1.2.1 软件失败

美国商业部国家标准技术研究所(NIST)的研究表明,近几年来,美国航空业饱受软件缺陷的影响,损失达数十亿美圆(见表1)。最著名的事件是美国火星探测器失踪归因于度量衡的不统一。软件缺陷还使软件制造商蒙受信誉和经济损失。最近,归咎于软件测试不充分的法律诉讼也在增加。

1.2.2 增加软件开发成本

传统上,识别和纠正软件缺陷会花费开发过程一半以上的成本,测试会占到开发人力成本的30%到90%(Beizer, 1990)。越早发现软件缺陷,越能更多的降低成本。表2显示软件缺陷在不同阶段发现时修复该缺陷所需的成本。

1.2.3 市场推广滞后

软件产品投放市场滞后的直接影响是丧失了机会。众所周知,软件产品的利润率通常遵守暴利----高额利润----一般利润----微利----亏损这样的曲线变化。投放时间晚,不仅丧失了赚“大钱”的机会,而且对原有的类似的产品线也会构成威胁。这种损失难以估量。

1.2.4 交易成本增加

由于缺乏标准的测试程序,用户无从比较和评价软件产品质量的好坏,从而导致市场交易成本增加。在这种情况下,软件生产厂商经常警告最终用户应慎重使用各厂商发布的产品性能数据。

二、软件缺陷的经济学影响实证分析

2.1 案例1——汽车和航空业

本案例研究针对美国汽车和航空业的CAD/CAM/CAE(计算机辅助工程)和PDM(产品数据管理)软件。调查和研究工作是由美国商业部国家标准技术研究所(NIST)委托 RTI(Research Triangle Institute)完成的。调研过程中, RTI和10个软件开发商、179位最终用户进行了面谈。调查结果如表3所示。

2.2 案例2——金融服务业

本案例研究针对美国金融服务业的EDI(电子数据交换)和clearinghouse软件。调查和研究工作同样是由美国商业部国家标准技术研究所(NIST)委托 RTL完成的。调研过程中, RTL和4个软件开发商、98位最终用户进行了面谈。调查结果如表4所示。


2.3 软件测试缺陷对国民经济的影响

从上述2个案例可以计算出制造业和服务业每个雇员所承担的软件测试缺陷的成本责任,从而计算出软件测试缺陷对美国经济的成本影响(如表5所示)。

其中软件开发商约承受40%的成本,最终用户承受约60%的成本。总成本约占美国GDP的0.6%。而采用合适的测试方法,可以节约成本占GDP的0.2%。



版权所有:UML软件工程组织