在这里插入图片描述

逻辑覆盖测试法是常用的一类白盒测试方法,其以程序内部逻辑结构为基础,通过对程序逻辑结构的遍历来实现程序测试的覆盖。逻辑覆盖测试法要求测试人员对程序的逻辑结构有清晰的了解。

逻辑覆盖测试法是一系列测试过程的总称,是使测试过程逐渐进行越来越完整的通路测试。从覆盖源程序语句的详尽程度,可以将其分为语句覆盖、判定覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖和路径覆盖等。接下来将通过下面程序的逻辑覆盖测试用例一一介绍这些覆盖准则,该程序的流程图如图4-1所示,其中,a、b、c、d、e是控制流上的若干程序点。

图片

图片

■ 图4-1程序流程图

01 逻辑覆盖测试的综合案例

通过一个案例将相关测试方法进行一次综合应用,即设计以下程序的逻辑覆盖测试用例。

图片

图4-2给出了该例子的流程图,其中a、b、c、d和e是控制流上的若干程序点。

图片

■ 图4-2程序流程图

1. 语句覆盖

要测试DoWork函数,只需设计一个测试用例就可以覆盖程序中所有可执行语句,程序执行的路径是abd,具体测试用例输入如下。

{x=4 y=5 z=5}

分析:语句覆盖可以保证程序中的每个语句都得到执行,但发现不了判定中逻辑运算的错误,即它不是一种充分的检验方法。例如,在第一个判定(x>3)&&(z<10)中把“&&”错误地写成“||”,这时仍使用该测试用例,则程序仍会按照流程图上的路径abd执行,这再次说明语句覆盖是最弱的逻辑覆盖准则。

2. 判定覆盖

要实现DoWork函数的判定覆盖,需要设计两个测试用例,其程序执行的路径分别是abd和ace,对应测试用例的输入为:

{x=4 y=5 z=5}{x=2 y=5 z=5}

分析:上述两个测试用例不仅满足了判定覆盖,同时还做到了语句覆盖。从这点看似乎判定覆盖比语句覆盖更强一些,但其仍然无法确定判定内部条件的错误。例如,把第二个判定中的条件y>5错误写为y<5,然后使用上述测试用例,照样能按原路径执行而不影响结果。因此,需要更强的逻辑覆盖准则去检验判定内的条件。

3. 条件覆盖

一个判定中通常都包含若干条件。条件覆盖的目的是设计若干测试用例,在执行被测程序后,使每个判定中每个条件的可能值至少满足一次。

对DoWork函数各个判定的各种条件取值加以标记。

(1) 对于第一个判定(x>3&&z<10):

条件x>3取真值记为t1,取假值记为-t1;

条件z<10取真值记为t2,取假值记为-t2。

(2) 对于第二个判定(x==4||y>5):

条件x==4取真值记为t3,取假值记为-t3;

条件y>5取真值记为t4,取假值记为-t4。

根据条件覆盖的基本思想,要使上述4个条件可能产生的8种情况至少满足一次,其设计测试用例如表4-6所示。

■ 表4-6条件覆盖测试用例

图片

分析: 表4-6中这组测试用例不但覆盖了4个条件的全部8种情况,而且将两个判定的4个分支b、c、d、e也同时覆盖了,即同时达到了条件覆盖和判定覆盖。

虽然前面的一组测试用例同时达到了条件覆盖和判定覆盖,但是,并不是说满足条件覆盖就一定能满足判定覆盖。如果设计了如表4-7中的这组测试用例,则其虽然满足了条件覆盖,但也只是覆盖了程序中第一个判定的取假分支c和第二个判定的取真分支d,不能满足判定覆盖的要求。

■ 表4-7另一组条件覆盖测试用例

图片

4. 判定/条件覆盖

根据判定/条件覆盖的基本思想,只需设计如表4-8中的两个测试用例便可以覆盖4个条件的8种取值以及4个判定分支。

■ 表4-8判定/条件覆盖测试用例

图片

分析: 从表面上看,判定/条件覆盖了各个判定中的所有条件的取值,但实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其他条件掩盖。例如,对第一判定(x>3)&&(z<10)来说,必须x>3和z<10这两个条件同时满足才能确定该判定为真。如果x>3为假,则编译器将不再会去检查z<10这个条件,那么即使这个条件有错也无法被发现。对第二个判定(x4)||(y>5)来说,若条件x4满足,编译器就会认为该判定为真,这时将不会再去检查y>5,那么同样也无法发现这个条件中的错误。因此,判定/条件覆盖也不一定能够完全检查出逻辑表达式中的错误。

5. 条件组合覆盖

对DoWork函数中的各个判定的条件取值组合加以标记。

(1) x>3,z<10记为t1,t2,即第一个判定的取真分支。

(2) x>3,z≥10记为t1,-t2,即第一个判定的取假分支。

(3) x≤3,z<10记为-t1,t2,即第一个判定的取假分支。

(4) x≤3,z≥10记为-t1,-t2,即第一个判定的取假分支。

(5) x==4,y>5记为t3,t4,即第二个判定的取真分支。

(6) x==4,y≤5记为t3,-t4,即第二个判定的取真分支。

(7) x≠4,y>5记为-t3,t4,即第二个判定的取真分支。

(8) x≠4,y<=5记为-t3,-t4,即第二个判定的取假分支。

根据组合覆盖的基本思想,以上可得设计测试用例如表4-9所示。

■ 表4-9条件组合覆盖测试用例

图片

分析:表4-9中这组测试用例覆盖了所有8种条件取值的组合,也覆盖了所有判定的真假分支,但丢失了一条路径abe。

6. 路径覆盖

根据路径覆盖的基本思想,在满足组合覆盖测的测试用例中修改第三个测试用例,则可以实现路径覆盖,如表4-10所示。

■ 表4-10路径覆盖测试用例

图片

分析: 虽然前面一组测试用例满足了路径覆盖,但并没有覆盖程序中所有的条件组合(丢失了组合3和7),即满足路径覆盖的测试用例并不一定满足条件组合覆盖。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保100%免费】
在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐