为什么说“同时做好黑盒与白盒测试,软件测试才是有效、充分的呢?”举个例子来说明。
有这样一段代码,输出0~99共100位数字:
int x;
for(x=0; x<100; x++);
cout<<x;
结果由于程序员粗心,多加了一个分号,导致实际输出的只是100而已。这种错误是比较常见的,如果把这一小段代码呈现在我们面前,我们用代码review的方式很容易就能找出这个bug。但是现在试想一下,把这段代码放到一个有几百万行代码甚至更大的一个系统中,通过代码review找出这个bug,无异于大海捞针!
况且,增加一个多余的分号并没有违反什么语法规则,编译器也只是会认为这是一个循环体为空的循环语句而已,并不会有错误提示。
您可能会说,这简单,用黑盒测试的方法运行一遍基本功能,很容易就发现了。但是,谁又能保证黑盒测试可以覆盖所有的bug呢?毕竟,测试是无穷无尽的,永远也执行不完,而漏测是必然的。
可见,单单用白盒或者黑盒的方法都不是绝对保险的,并且黑盒测试和白盒测试由于他们的视角不一样、所处的抽象层次不一样,能够发现的缺陷类型、发现缺陷的难易程度、发现缺陷的成本多少、对测试人员的技能要求等都不一样,有效地将二者结合起来使用、互为补充,才能使测试效果最优。
结论
不必太在意“黑盒测试”与“白盒测试”具体的定义,他们只是辅助我们做好实际测试工作的一些概念而已(您甚至可以有自己的一套定义、一套术语);
“黑盒”与“白盒”体现的是测试人员思考问题的一种方式,“黑盒”将被测对象当作一个黑匣子,考虑其整体表现;“白盒”将一个个黑匣子打开,深入内部探索细节。
大体上,“黑盒测试”与“白盒测试”分属于不同的抽象层次,黑盒更偏重于概括一些,白盒更偏重于具体一些;
“黑盒”与“白盒”的抽象层次是相对的,一个系统可能有多层的抽象;
“黑盒测试”与“白盒测试”二者结合起来使用,互为补充,测试才更充分。