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

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

逻辑覆盖测试法是一系列测试过程的总称,是使测试过程逐渐进行越来越完整的通路测试。从覆盖源程序语句的详尽程度,可以将其分为语句覆盖、判定覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖和路径覆盖等。接下来将通过下面程序的逻辑覆盖测试用例一一介绍这些覆盖准则,该程序的流程图如图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),即满足路径覆盖的测试用例并不一定满足条件组合覆盖。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

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

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
逻辑表达式计算的测试用例包括以下内容: 1. 测试用例中只包含0和1两种数字,以及逻辑运算符(&、|、!)和括号(())。 2. 针对不同的逻辑运算符,可以设计测试用例来验证其正确性。比如,对于And(&)运算符,可以设计测试用例,其中两个操作数都为1时,结果为1;其他情况下,结果都为0。对于Or(|)运算符,可以设计测试用例,其中两个操作数都为0时,结果为0;其他情况下,结果都为1。对于Not(!)运算符,可以设计测试用例,其中操作数为1时,结果为0;操作数为0时,结果为1。 3. 可以设计测试用例来验证不同运算符之间的优先级关系。比如,对于表达式“1&0|1”,根据优先级关系,先计算And运算符,结果为0;再计算Or运算符,结果为1。 4. 可以使用等价类来设计测试用例。根据不同的等价类,设计测试用例覆盖各种情况。比如,对于And运算符,可以设计测试用例覆盖两个操作数都为0、两个操作数都为1、一个操作数为0一个操作数为1的情况。对于Or运算符和Not运算符,也可以设计类似的测试用例。 总之,逻辑表达式计算的测试用例需要覆盖各种情况,包括不同运算符的组合、不同运算符之间的优先级关系等。通过设计全面的测试用例,可以验证逻辑表达式计算的正确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [逻辑计算](https://blog.csdn.net/h2498864708/article/details/106355599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [软件测试大牛都是这样写测试用例的,你get到了嘛?](https://blog.csdn.net/weixin_47197994/article/details/106506811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值