图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,那么同样也无法发现这个条件中的错误。因此,判定/条件覆盖也不一定能够完全检查出逻辑表达式中的错误。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
g-1712799119225)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!