软件测试定义:
“测试是为发现错误而执行程序的过程。”(具有破坏性的过程)
为了应对测试经济学的挑战,应该建立某些策略,黑盒测试和白盒测试是两种最普遍的策略。
黑盒测试:
不需要去了解程序的内部结构,是数据驱动的测试或者输入/输出驱动的测试。使用这种测试方法时,将程序视为一个黑盒子。测试目标与程序的内部机制和结构完全无关,而是将重点集中放在发现程序不按其规范正确运行的环境条件。
在黑盒测试中,测试数据完全来源于软件规范。如果想用这种方法来发现程序的所有错误,判定的标准就是“穷举输入测试”,将所有可能的输入条件都作为测试用例。由于程序是个黑盒子,因此能够确定此条语句存在的唯一方法,就是试验所有的输入情况。
然而,穷举输入测试是无法实现的。第一,我们无法测试一个程序以确保它是无错的,第二,需要考虑到软件测试的经济学,也就是说,测试投入的目标在于通过有限的测试用例,最大限度地提高发现的问题的数量,以取得最好的测试效果。
白盒测试:
白盒测试是逻辑驱动的测试策略,允许我们检查程序的内部结构。这种测试策略对程序的逻辑结构进行检查,从中获取测试数据。
我们的目标是针对这种测试策略,建立起与黑盒测试中穷举输入测试相似的测试方法。有一个解决的方法,即将程序中的每条语句至少执行一次,这种方法通常称为穷举路径测试。
所谓穷举路径测试,即如果使用测试用例执行了程序中所有可能的控制流路径,那么程序有可能得到了完全测试。但是穷举路径测试如同穷举输入测试,是不可能的。
穷举路径测试的缺点如下;
1.无法保证程序符合其设计规范;
2.无法发现缺少哪些必须路径;
3.可能不会暴露数据敏感错误。
尽管穷举输入测试要强于穷举路径测试,但是两者都不是有效的方法,因为两者都不可行。应该讲黑盒测试和白盒测试的要素结合起来,形成一个合理的策略。