欢迎光临散文网 会员登陆 & 注册

软件测试用例经典方法 | 逻辑覆盖测试法及案例

2023-08-24 20:47 作者:华测教育  | 我要投稿


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

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


■ 图4-1程序流程图

逻辑覆盖测试的综合案例

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


图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%免费】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

包括,测试人技术进阶路径图,50多天的视频教程、16个项目实例,30多个测试工具,37份测试文档,70个软件测试相关问题,40篇测试经验级文章分享,还有软件测试面试小程序,求职简历的优化模板。

加油吧,如果你需要提升技术储备,那就行动,在路上总比在起点观望的要好。一切的迷茫都是因为想得太多而做的太少!

你可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

现在我邀请你进入我们的软件测试学习交流群:【746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。 


软件测试用例经典方法 | 逻辑覆盖测试法及案例的评论 (共 条)

分享到微博请遵守国家法律