白盒测试之语句分支条件覆盖

本文预览

语句覆盖

基本概念:这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。不包括注释、空行。

  public static void main(String[] args) {1 Scanner scanner = new Scanner(System.in);2 while (scanner.hasNextInt()){3 int i = scanner.nextInt();4 if(i>=0){5 i+=1;}else{6 i-=1;}7 System.out.println(i);}}

在遇到复杂的结构时,先画出程序流程图,再画出数据流图,进行分析。

测试用例:

注意,这里我分别用红色和黑色对覆盖语句进行了标注,红色是我原先的理解,相信很多人都认为既然是语句覆盖,那每一行都是一条语句,所以不应该是我用红色去标注的形式吗?但其实,根据网上查找的并且结合老师给出的答案,我原先的理解是错误的。
相对正确的理解应该是:if-else语句算作一整条语句,所以我们可以忽略if-else所在行,另外,怎样才能算作覆盖了if-else语句呢,在语句覆盖这个范畴,只需覆盖一个分支内的语句就算覆盖了if-else语句。

分支覆盖

基本概念:分支覆盖,又称判定覆盖,是指使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。
继续用上个小程序进行分析。

注意,覆盖的分支率一定不可以约分。1/2怎么的来的呢?1代表当前覆盖了一条语句,2代表这个程序一共有两个分支。

条件覆盖

条件覆盖是指设计足够多的测试用例,运行被测程序,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。
条件覆盖率=被评价到的条件取值的数量/条件取值的总数*100%

 public static void main(String[] args) {1 System.out.println("请输入你的用户名");2 Scanner scanner = new Scanner(System.in);3 String username = scanner.nextLine();4 System.out.println("请输入你的密码");5 String password = scanner.nextLine();6 if(username.equals("Dennis")&&password.equals("1")){7     System.out.println("登陆成功");8 }else{9     System.out.println("登录失败");10 }}

分析这个程序,其实不像计算语句覆盖那样复杂,条件覆盖只需要找到条件语句即可,然后分析一共会产生几个条件,比如if语句应该能产生四个条件,username为Dennis,username不为Dennis,password为1,password不为1时这四个条件,所以设计条件覆盖测试用例也应该从这四个出发。

这里注意第3条测试用例的条件覆盖率,发现出什么不同?

这条数据的特点在于由于是&&所以如果第一个判断条件值为false那么之后无论输入什么都是没有意义的,直接输出登录失败,因此,这条数据只覆盖了username不为Dennis这一个条件,总条件数为4,因此,条件覆盖率为1/4。懂了吗?这也是我上课不明白的地方。另外4不是语句数,而是总条件数。

练习:

public static void main(String[] args) {1 System.out.println("请输入第一个整数");2 Scanner scanner = new Scanner(System.in);3 int first = scanner.nextInt();4 System.out.println("请输入第二个整数");5 int second = scanner.nextInt();6 if((first>5)&&(second<5)){7     System.out.println("first>5 and second<5");8 }else if((first==5)||(second<10)){9     System.out.println("first=5 or second<10");10 }else{11     System.out.println("first!=5 and second >= 10");12 }}

语句覆盖

这个是结合了语句的正确理解做出的语句覆盖的测试用例。大家一定注意到了我标注灰色的部分,这个如果加上之后就成为了冗余数据,因为它和2的效果是一样的。它虽然覆盖了第9条语句,但是不是会发现第2条测试用例和灰色的测试用例原因是不同的呢?(虽然结果一样)

我想,这就是语句覆盖的局限性。你的测试用例并没有涵盖各种情况,只是在表面上覆盖了整个语句。另外一个局限性在于你只要覆盖了if-else的其中一种情况,就算覆盖了整个if-else语句,如下图也是一个语句覆盖用例。

想问为什么?因为语句覆盖了if-else啊,所以明白了它的局限性了吧?

分支覆盖

其实,我们已经做完了分支覆盖的工作,在哪儿呢,不就是语句覆盖的第一个图吗,只不过,我真的搞混了,语句覆盖和分支覆盖,其实他俩的唯一区别在于,分支覆盖在语句覆盖的基础上把每个分支的可能性都算上了,上图,你就会理解了。

条件覆盖

这个程序中,一共有8个条件,因此我们在设计测试用例的时候,要完全考虑这些条件。

这个左边是将所有的语句进行分类,右边是对重复的条件进行简化,我们使用右边的这些条件。

覆盖条件是为了方便读者看的,实际可以不加,这是我想到的所有的条件覆盖测试用例,可能不全。我也在思考怎样想能够全一些,所以这可能是条件覆盖的一个缺点,测试用例不像语句 分支那样好写,但任何条件情况都覆盖到了。

条件分支覆盖

用登录的程序进行演示:
条件分支覆盖率的计算方法:分支覆盖与条件覆盖的分母分子分别相加,得到的分数不约分。

引用
https://www.cnblogs.com/ITGirl00/p/3858357.html

https://blog.csdn.net/zzzmmmkkk/article/details/4288980

白盒测试之语句分支条件覆盖相关推荐

  1. 白盒测试之语句覆盖案例

    @白盒测试之语句覆盖 一.定义: > 程序中每一个语句至少能被执行一次: 二.特点: > 1.程序中每一个语句执行一次: > 2.对程序执行逻辑的覆盖率低,属于最弱的覆盖方式在这里插 ...

  2. 软件测试语句覆盖代码,白盒测试:语句覆盖率测试

    语句覆盖率是广泛使用的软件测试之一.它经过白盒测试. 语句覆盖技术用于设计白盒测试用例.该技术涉及至少一次执行源代码的所有语句.它用于计算源代码中存在的全部语句中源代码中已执行的语句总数. 语句覆盖率 ...

  3. python分支条件语句格式_Python基础-06 if语句——分支结构(选择结构)

    六.if语句--分支结构(选择结构) 1. 概述 - 选择结构 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hp6aPdOh-1609592903906)(Media ...

  4. 白盒测试之语句覆盖、判定覆盖、条件覆盖等

    1.定义说明 (1)白盒测试:白盒测试是一种测试用例设计方法:白盒测试的方法总体上分为静态分析方法和动态分析方法两大类.主要用于单元测试阶段,代码和逻辑的测试,重点复杂的测试,是一种测试用例设计方法. ...

  5. 白盒测试:语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖

    1语句覆盖 使所有的判断语句都能执行一次的条件案例,例如当判断语句事组合语句的时候,并且用or连接,只满足一个案例即可 2判定覆盖(分支覆盖) 针对判断语句,在设定案例的时候,要设定True和Fals ...

  6. 白盒测试:语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖...

    1语句覆盖 使所有的判断语句都能执行一次的条件案例,例如当判断语句事组合语句的时候,并且用or连接,只满足一个案例即可 2判定覆盖(分支覆盖) 针对判断语句,在设定案例的时候,要设定True和Fals ...

  7. 软件测试培训之:白盒测试的语句覆盖法和判定覆盖法

    白盒测试是相对于黑盒测试而言的,黑盒测试不关注程序内部的实现结构,仅仅是通过向程序进行输入来观察程序的输出对不对;白盒测试就需要关注程序内部的实现结构,对程序的逻辑结构实施相关的测试;那么下面来谈谈语 ...

  8. 白盒测试:语句/条件/判定/判定条件/条件组合/路径覆盖

    白盒测试方法详解 测试流程 语句覆盖 判定覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖 测试流程 测试计划:根据需求说明书,制定测试的计划.进度 测试设计:按照软件的需求.规格,按照规范的方法 ...

  9. sql查询语句分支语句

    一.先上sql语句 select t.Id,(CASE WHEN t.MaintainPeriodDescription = '每年维护2次' THEN '一年二次' ELSE '无' END ) f ...

最新文章

  1. C#温故而知新学习系列之面向对象编程—构造函数(七)
  2. java基础_数组常用算法
  3. Windows10下搭建Java环境(最新教程)
  4. XTU -1231 人生成就 (dp + 记录最优解的个数)
  5. submodule切换分支_git子模块分支会随主项目的分支切换吗?
  6. 采购杀毒软件,你说话能算数么?
  7. Java Eclipse插件
  8. golang mysql封装_使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
  9. (10)<label>标签的用途
  10. 计算机主板的1117标识,AMS1117封装尺寸图_AMS1117引脚图及功能 - 全文
  11. How to read MANIFEST.MF file from JAR using Bash
  12. sybase_isql命令
  13. 【PL/SQL】触发器示例:记录加薪
  14. restapi(3)- MongoDBEngine : MongoDB Scala编程工具库
  15. linux下高可用性群集和负载均衡群集的实现
  16. frame边框阴影html,CSS阴影效果的比较之drop-Shadow与box-Shadow
  17. 超硬核Java工程师秋招回忆录+面经汇总,为了拿BAT的研发offer我都做了那些准备?
  18. nmap扫描端口 python
  19. AD快捷键设置(自定义)
  20. 光纤与光通信-基础知识

热门文章

  1. 系统升级到10.13之后cocoapods安装失败问题解决办法
  2. 设计模式-建造者模式(05)
  3. 3-unit10 iptables
  4. linux-centos7-yum安装mcrypt**
  5. 模仿android谷歌地图功能开发记录
  6. ARM指令集 VS Thumb指令集
  7. POJ-1664 放苹果
  8. 详解C#委托,事件与回调函数
  9. 2010.2--netscreen ssg 140 恢复出厂设置的方法
  10. java fx alert_javaFx:使用弹出对话框 Alert