白盒测试之语句分支条件覆盖
白盒测试之语句分支条件覆盖
本文预览
语句覆盖
基本概念:这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。不包括注释、空行。
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.程序中每一个语句执行一次: > 2.对程序执行逻辑的覆盖率低,属于最弱的覆盖方式在这里插 ...
- 软件测试语句覆盖代码,白盒测试:语句覆盖率测试
语句覆盖率是广泛使用的软件测试之一.它经过白盒测试. 语句覆盖技术用于设计白盒测试用例.该技术涉及至少一次执行源代码的所有语句.它用于计算源代码中存在的全部语句中源代码中已执行的语句总数. 语句覆盖率 ...
- python分支条件语句格式_Python基础-06 if语句——分支结构(选择结构)
六.if语句--分支结构(选择结构) 1. 概述 - 选择结构 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hp6aPdOh-1609592903906)(Media ...
- 白盒测试之语句覆盖、判定覆盖、条件覆盖等
1.定义说明 (1)白盒测试:白盒测试是一种测试用例设计方法:白盒测试的方法总体上分为静态分析方法和动态分析方法两大类.主要用于单元测试阶段,代码和逻辑的测试,重点复杂的测试,是一种测试用例设计方法. ...
- 白盒测试:语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖
1语句覆盖 使所有的判断语句都能执行一次的条件案例,例如当判断语句事组合语句的时候,并且用or连接,只满足一个案例即可 2判定覆盖(分支覆盖) 针对判断语句,在设定案例的时候,要设定True和Fals ...
- 白盒测试:语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖...
1语句覆盖 使所有的判断语句都能执行一次的条件案例,例如当判断语句事组合语句的时候,并且用or连接,只满足一个案例即可 2判定覆盖(分支覆盖) 针对判断语句,在设定案例的时候,要设定True和Fals ...
- 软件测试培训之:白盒测试的语句覆盖法和判定覆盖法
白盒测试是相对于黑盒测试而言的,黑盒测试不关注程序内部的实现结构,仅仅是通过向程序进行输入来观察程序的输出对不对;白盒测试就需要关注程序内部的实现结构,对程序的逻辑结构实施相关的测试;那么下面来谈谈语 ...
- 白盒测试:语句/条件/判定/判定条件/条件组合/路径覆盖
白盒测试方法详解 测试流程 语句覆盖 判定覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖 测试流程 测试计划:根据需求说明书,制定测试的计划.进度 测试设计:按照软件的需求.规格,按照规范的方法 ...
- sql查询语句分支语句
一.先上sql语句 select t.Id,(CASE WHEN t.MaintainPeriodDescription = '每年维护2次' THEN '一年二次' ELSE '无' END ) f ...
最新文章
- C#温故而知新学习系列之面向对象编程—构造函数(七)
- java基础_数组常用算法
- Windows10下搭建Java环境(最新教程)
- XTU -1231 人生成就 (dp + 记录最优解的个数)
- submodule切换分支_git子模块分支会随主项目的分支切换吗?
- 采购杀毒软件,你说话能算数么?
- Java Eclipse插件
- golang mysql封装_使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
- (10)<label>标签的用途
- 计算机主板的1117标识,AMS1117封装尺寸图_AMS1117引脚图及功能 - 全文
- How to read MANIFEST.MF file from JAR using Bash
- sybase_isql命令
- 【PL/SQL】触发器示例:记录加薪
- restapi(3)- MongoDBEngine : MongoDB Scala编程工具库
- linux下高可用性群集和负载均衡群集的实现
- frame边框阴影html,CSS阴影效果的比较之drop-Shadow与box-Shadow
- 超硬核Java工程师秋招回忆录+面经汇总,为了拿BAT的研发offer我都做了那些准备?
- nmap扫描端口 python
- AD快捷键设置(自定义)
- 光纤与光通信-基础知识