在设计软件的过程中,对于软件的测试环节是必不可少的,没有测试的软件不能称得上完全。而对代码的测试又分为两类,分别是白盒测试和黑盒测试。两种测试方法侧重点不同,白盒测试侧重于代码逻辑,是站在编程者角度对自己所写的代码是否正确的一种检测,而黑盒测试侧重于实现功能,更大程度是站在用户的角度进行的。黑盒测试提供输入与期望输出,重在判断代码能否按照期望的情况执行对应功能。
黑盒测试由于测试目的是站在用户角度看程序是否能正确执行实现所需要的功能,因此不考虑内部实现方法,而是从需求角度进行测试。黑盒测试可以测试代码功能完整性,正确性,是否能正确执行正确终止。黑盒测试想要测试完全,应当对输入划分等价类,在测试代码中包含所有可能的情况。同时选取数据选取在容易出错的边界可以增加测试的可靠性。
白盒测试主要面向代码逻辑,是在能看到全部代码的前提下进行的测试。白盒测试分为静态测试和动态测试,静态测试是看代码不运行,对代码本身进行分析,在基础上确定代码的正确性以及完整性。而动态测需要运行代码,这种测试除了结果外,另一个需要注意的就是覆盖情况,覆盖情况越好说明程序测试越完全。常见的覆盖情况如下。
1、语句覆盖:对于程序中的每个语句都进行了执行,没有没执行过的代码。
2、判定覆盖:对于每一个条件分支,都进行过哦执行。
3、条件覆盖:对于条件分支的每个不同条件都进行了覆盖。
4、判定/条件覆盖:同时满足上面两条。
5、条件组合覆盖:每一个分支的每个条件组合都进行过。
6、路径覆盖:对于程序多个条件分支的每一个路径都进行过覆盖。
以上的几种覆盖方式,越向下,覆盖越完全,同时所需要的成本就越高。白盒测试本身为了准确性就需要对路径的完全覆盖,因此白盒测试是高成本的测试方法。
白盒测试因为可以看到代码,因此和黑盒测试相比可以更好更完全的寻找到代码的错误和漏洞,但是由于白盒测试面向代码设计测试用例,如果代码不完全或者有细微的错误在特定数据,白盒测试还是不能发现问题。而黑盒测试由于侧重于功能,在面对功能不完全的问题上比白盒测试效果更好,而且白盒测试相对成本高,实际两种测试方法还是按照需要进行选择。