这样说有些耸人听闻,又不能全部测试,不测试又会漏掉软件缺陷。软件终归要分布的,此时测试要停止,但是如果这么快停止下来,还有测试没做。怎么办?

  如上图所示,纵轴是表示缺陷的数量,横轴表示测试工作量。缺陷的数量随着测试工作的进展在不段减少;但测试有费用也随着工作量在不段提高。

  也是说要想发现更多的缺陷必须投入更多费用(这个费用包括时间、人才,物力), 对一个新项目,我们前提可能1天发现10个缺陷。到后面可能10天发现1个缺陷,或者发现一个缺陷所需要的时间更长,我们有必要是去为发现一个缺陷而继续增加费用么?本来不存在完美的产品,我们的目标是找到合适的测试量,使投入(测试费用)与回报(修复缺陷数)达到优。

  测试无法显示潜在的软件缺陷

  仔细理解一下这个标题。当测试人员对一个软件进行测试时,他发现了很多缺陷,功能的,界面的,兼容性能。然后,测试人员可以好不忧郁的说,这个软件存在缺陷。

  当又测试人员又对另一个软件进行测试时,他用尽各种测试方法,测遍所有功能(当然,这是不可能,上面已经说了无法完全测试),他投入了大量的时间和精力却终没有发现一个缺陷。那么测试人员不能保证这个软件是没缺陷的,当然,他更无法去报告这些潜伏的缺陷。也是说测试人员只能报告已经发现的缺陷,对于未知的谁也不能肯定。

  (这也是测试人员遭受质疑的地方,你既然不能保证软件的质量,要你何用。测试人员可以提高软件的质量,至于能提高多少,全凭测试人员的能力决定了。不像开发人员对于一个功能的实现,能或不能是很明确的两个答案。)

  找到的软件缺陷越多,说明软件的缺陷越多

  我们先来体会下面两句话。

  “找到的软件缺陷越多,说明软件遗留的缺陷越少”

  “找到的软件缺陷越少,说明软件遗留的缺陷越少”

  不管是开发还是测试,我们期望软件遗留的缺陷少。但是上面的两句话都不成产。我们发现缺陷的多少和终软件遗留的缺陷多少毫无关系。那么为什么会有上面两种推断呢?

  “找到的软件缺陷越多,说明软件遗留的缺陷越少”这种情况,假设缺陷在一定数量的情况下,测试人员业务非常精通,测试极其认真,发现越多的缺陷 ,说明还遗留的缺陷越少。那么,我也可以假设随便这么一测,发现这么多缺陷,那这个软件应该还有很多。

  “找到的软件缺陷越少,说明软件遗留的缺陷越少”这种情况,假设经验非常丰富,而且工作非常认少,测试人员花费了很大的时间和精力都不能找到缺陷,说明软件本身的质量很少,也是说其本身遗留的缺陷越少。那么,我也可以假设为,是不是我对业务不够熟悉,经验不够丰富,为什么发现不了缺陷。那么可能软件遗留的缺陷还有很多,只是我没有发现。

  更严谨说法,或者更准确的说法是“找到的软件缺陷越多,说明软件的缺陷越多。”我们发现有缺陷越多,只能说明软件的缺陷多。并无法正明软件还遗留的缺陷的多少。

  当然,也并不是无法评估软件遗留缺陷的多少,我们可以根据开人员的工作经验与技术能力,测试人员的工作经验,测试技能,对业务的熟悉程度以及后以往完的成项目质量进行评估。