7.2.1 黑盒测试原理

“黑盒法测试,是在不知道软件内部结构、程序流程和处理代码的情况下,从软件声称的功能出发,测试检测每个功能是否都能正常使用。”

“所以黑盒测试也称功能测试,它把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。”

“我们无法证明一个程序是正确的,哪怕是一个很简单的程序。”老师喝了口水后说道。

“唔?什么意思?”古风不解的问。

“因为我们要证明一个程序是正确的,就需要对所有的输入都证明,且得到正确的结果,而这是不可能的!”

“举个例子,比如,两个整数a,b的相加程序,z=a+b,这个简单吧?我们要验证其正确性,就得把a,b所有的取值都输入计算一遍,看输出的结果是否正确。”

“在VC里,整型的范围是32位,大概就是-2×10E9~+2×10E9,所以计算机能表示的整数的个数大概是4×10E9个。对a和b两个整数来说,其取值的组合个数就是4×10E9×4×10E9=16×10E18种!”

“假设我们2秒中验证一个测试数据,那么就需要16×10E18/2=8×10E18秒=25×10E10年!就是200多亿年的时间!”

“啊!不算不知道,一算吓一跳!”玉波瞪大了眼镜。

“是啊!所以如果我们现在写一个z=a+b的程序并开始证明其正确性,那么就要等到200亿年之后才能宣布。200亿年?宇宙可能都不存在了!”

“哈哈!是啊!”大家都笑了起来。

“而且测试不仅要考虑测试合法的输入,还要考虑非法的可能输入。所以理论上,测试情况应该有无穷多个!只用把这无穷多个都测试完毕了,我们才能证明某个软件是正确的!所以,测试不是为了证明软件是正确的,因为我们无法证明,而是为了尽可能的发现迄今为止没有发现的漏洞!”

“哦!”

“所以,测试是很讲究方法和策略的,以满足用尽可能少的用例和时间,发现尽可能多的漏洞。”“

小知识:

黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等。

等价类划分:把所有可能的输入数据划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。

边界值分析:因为大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部,因此,针对各种边界情况设计测试用例,可以查出更多的错误。

因果图方法:考虑输入条件之间的联系、相互组合等。采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例,这就是因果图(逻辑模型)。.

“比如,我们要对CCProxy处理HTTP协议的部分进行黑盒测试,就可以对HTTP协议进行分类。对协议的每一个字段分别测试长度要求的最小值和最大值;或按一定的比例增加测试字符串的长度。这样就争取用最少的测试用例发现漏洞。”

“哦!”

“而对于黑盒测试来说,首选是使用Python语言。”