软件的缺陷难以根除,但软件的质量是可以改进的。加强软件测试是控制和提高软件质量的一个行之有效办法。目前软件的质量问题几乎都可以归咎为测试阶段没有发现该问题。当然,事实上我们难以想象测试阶段可以发现所有的质量问题。这实际上是一个悖论,委屈了软件测试工程师和软件产商。众所周知,在别的行业,质量检验没有这样复杂,如灯泡质量的检验。如果检验员按照规定的抽样办法去检验灯泡,并判定该批次产品合格,那么消费者、市场就会认可这一检验结果。单个消费者碰巧遇到一个不合格产品,那只是小概率事件或仍处于公认的可接受的范围。没有人去责怪检验员或检验方法。如果商家判为合格的产品超过了公认的可接受范围,那么只有这两种可能:
(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)。最著名的事件是美国火星探测器失踪归因于度量衡的不统一。软件缺陷还使软件制造商蒙受信誉和经济损失。最近,归咎于软件测试不充分的法律诉讼也在增加。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/