测试人员进行测试时必须回答如下的问题。

  (1)软件运行时的表现是否符合设计预期?

  (2)用户为了某个功能而购买了软件,可是该软件是否实现了这个功能?

  (3)软件运行时,是否足够快、足够安全、足够稳定,等等?

  测试人员找到这些问题答案的办法是在某个特定操作环境中运行该软件,并且模拟软件预期的使用方式来输入某些值。这时麻烦来了,我们这些善良的测试人员必须面对“测试无穷尽”的情况。可供选择的输入实在是太多了。这么多的输入可能还要被组合到“太多”的运行环境中。事实上,把变量的数目形容为“太多”着实有些令人不安,不过,没办法,测试是一项“不断进行变化”的工作。我们必须在测试时确定所有可能发生变化的因素,在要求我们选择某些变量和去掉其他(也是不必要的)变量时,我们必须做出明智的决定。

  这把测试工作简化为先在所有输入(或运行环境等)的全体集合中选择一个子集,然后在输入时使用选中的子集,后通过推理认定是否这些输入已经足够多了。终软件总要被发布,发布之后,再进行测试已经无法提高已发布代码的质量了。所以对于无限的测试,我们却只有有限的时间可用。很简单,我们的希望寄托在正确决定我们需要变动的输入上。如果我们选择了正确的输入,产品质量会提高。如果我们选择了错误的输入,用户有可能体验到失效,并可能不喜欢我们的软件。测试人员的任务可以说既重要又艰难。

  很明显,随机测试(ad hoc testing)并不是好的测试方法。如果测试人员在测试过程中了解了各种可以进行变化的东西,包括输入、软件运行环境等其他因素,可以更有的放矢地进行应用软件的探索式测试。本文讲述的知识可以帮助我们更好、更巧妙地进行测试,从而大限度地发现软件设计和实现中的重大缺陷。