白盒测试

  软件测试两大主要方法,一个上次说到的黑盒测试,一个即为现在说明的白盒测试。

  白盒也为比喻,黑盒的意义是由于盒子是黑的,你看不到里面,而与之相对的,白盒则是你可以看到盒子内部的情况怎样。即为你能拿到软件的源代码,从而根据软件的代码,进行针对性的测试。

  如图 

  

  要想使用白盒测试,首先需要进行的是将程序进行抽象,将程序转化为程序流图,当然,这个文档一般在软件工程前期已经存在了,现在使用现成的即可。

  然后就是集中常用的方法,其一叫做语句覆盖。这是最简单也最麻烦的方法,这个方法是需要将所有语句都运行一遍,细枝末节也不能放过,换句话说,所有存在的路径都需要我们走一遍,说它简单是因为你需要做的思考并不多,就照着流程图来一遍即可,说它麻烦是因为,能不麻烦吗,所有的路径都走,很多都是重复作业,花费了时间精力,但是都没必要。

  其二是分支覆盖。这个方法,相对来说,需要动点脑子,因为你需要找找看哪些是分支语句,因为这个方法需要照顾到的只有分支语句,要求所有分支语句需要有一次为真,一次为假,至于如何组合,这个看你心情。这种方法就简单多了,假如有3个分支语句,语句覆盖需要8次测试,这个小于等于8,最少可以有2次(当然这是所有分支串行而且只有一个条件的情况,至于其他复杂的情况就不做讨论了)。

  其三为谓词覆盖。这个也是针对分支条件语句的,不过,这个着重点在于条件语句的判断条件上,谓词即为判断条件。举个例子,if(a<0&&b>0)这句话中,a<0这个属于原子谓词,a<0&&b>0a<0&&b>0合起来即为复合谓词。

  这个和分支覆盖是不一样的,分支覆盖只关注路径,也就是说,每个分支条件,只用关心两点,为真的时候怎末走,为假的时候怎末走。谓词不一样,谓词关心的是条件本身,假如是复合谓词,有可能要测试的情况不止两种。

  谓词测试又分三种,一个是原子谓词覆盖准则,即,所有的原子谓词,都存在一次为真,一次为假。

  分支-谓词覆盖准则,这个要求多一点,所有的原子谓词,都存在一次为真,一次为假,且任意一个复合谓词本身也至少获得真、假值各一次。

  复合谓词覆盖准则,每个复合谓词内的原子谓词的各种可能的组合都至少出现一次。

  由于分为三种情况,有时,谓词测试可能包括分支测试的所有情况,有时只是有交集而已。

  其四为路径覆盖,意为,将所有完整路径(完整路径为从start可以到达end的路径)全部覆盖。

  白盒测试和黑盒测试是两个独立的体系,各有各的效果,黑盒测试,站在用户的角度,可以确保满足用户的需要,但是,也就是一种测试,假如出问题,根本不知道错在哪里,只能用于查找问题。白盒可以知道内部代码,在这基础上测试,可以更精确的定位错误,但是,正因为拥有代码,也就容易忽略用户的体验,从而偏离最初的用户需求,而只测试,软件是否运行。所以,两者皆有,才是最明智的选择。

  

原文地址:https://www.cnblogs.com/tiandaliang/p/4438846.html