这几天需要跟dev结对编写一些单元测试,来验证我们系统中一些复杂的逻辑是否正确。回家的路上跟几个同事聊起单元测试和白盒测试,没有人能清晰解释它们的区别,自己也很模糊,所以回来就查了一些资料,作以下记录。(资料来自网络)
单元,集成,确认,系统测试这些是依开发阶段划分的;白和黑,灰盒是以对测试技术划分的。单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。单元测试通常由开发人员写测试脚本,白盒测试的方法常常用于单元测试。
这里所说的白盒测试,是指针对程序的逻辑结构来设计测试用例进行测试。白盒测试用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句覆盖就是覆盖所有的语句,其他类推。另外还有一种判定条件覆盖,其实是分支覆盖与条件覆盖的组合,在此不作讨论。跟条件有关的覆盖就有三种,容易混淆,解释一下:条件覆盖是指覆盖所有的条件表达式,即所有的条件表达式都至少计算一次,不考虑计算结果;条件值覆盖是指覆盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合覆盖是指覆盖所有条件取值的所有可能组合。循环结构一般不考虑循环的次数,而只考虑至少执行循环体一次和不进入循环体两种情况,即把循环结构看作具有进入循环和不进入循环两个会支的分支结构。由于不同的覆盖率具有不同的侧重点,为了保证充分的测试,最好是完成几种覆盖率的组合。VU选择了四种覆盖的组合作为白盒测试指标:语句覆盖、条件覆盖、分支覆盖、路径覆盖。如果这四种覆盖都达到了100%,那么,测试的完整性是非常高的,读者可以比较一下,在使用VU之前,您的项目要求达到什么样的白盒覆盖?实际上又能完成到什么程度?
白盒测试与功能测试有什么关系呢?可以说,如果功能测试是足够充分的,那么白盒测试就没有必要,从等价类的角度来看,足够充分是指,等价类的划分是完全正确的,并且所有的等价类都测试到了。如何衡量功能测试的完整性呢?人工审核是一个方法,不过这种方式代价较高,并且仍然不能保证结果的准确性。难于衡量测试的完整性是功能测试的主要缺陷,而白盒测试恰恰具有易于衡量测试完整性的优点,两者之间具有极好的互补性。