首页 > 其他分享 >【单元测试】Junit 4(一)--白盒测试方法

【单元测试】Junit 4(一)--白盒测试方法

时间:2022-11-01 16:23:13浏览次数:59  
标签:覆盖 取假 -- 单元测试 用例 判定 条件 Junit 取真

1.0 流程图标识

img

1.1 语句覆盖法(C0标准)

① 目标

​ 程序中的每个可执行语句至少被执行一次

后面如未说明那就是还是用的这个样例

程序源代码:

import java.util.Scanner;

public class Demo {
	public static void main(String[] args) {
		int a, b;
		double c;
		Scanner scanner = new Scanner(System.in);
		a = scanner.nextInt();
		b = scanner.nextInt();
		c = scanner.nextDouble();
		if (a > 0 && b > 0) {
			c = c / a;
		} else if (a > 1 || c > 1) {
			c = c + 1;
		}
		c = b + c;
		System.out.println("a=" + a);
		System.out.println("b=" + b);
		System.out.println("c=" + c);
		scanner.close();
	}
} 

画出流程图:

img

② 用例

输入 输出
a = 2 b = 1 c = 6 a = 2 b = 1 c = 7

③ 优缺点

  • 语句覆盖发现语句错误
  • 语句覆盖不能发现逻辑错误

1.2 判定/分支覆盖法(C1标准)

① 目标

​ 程序中每个判定的取真分支和取假分支至少执行一次

② 用例

输入 输出
a = 2 b = 1 c = 6 a = 2 b = 1 c = 5
a = -1 b = 1 c = 1 a = -1 b = 1 c = 7

③ 优缺点

  • 判定/分支覆盖发现逻辑错误
  • 判定/分支覆盖不能发现组合判断中的条件错误

1.3 条件覆盖法(C2标准)

① 目标

​ 程序中每个判定每个条件的可能取值至少满足一次

② 用例

​ 判定3:(a > 0 && b > 0)

​ 判定6:(a > 1 || c > 1)

​ 原子条件集:

​ a > 0

​ b > 0

​ a > 1

​ c > 1

要求:各原子条件集真假各取一次

输入 原子条件 判定条件
a = -1 b = 2 c = 3 a>0取假,b>0取真,a>1取假,c>1取真 判定3取假,判定6取真
a = 2 b = -1 c = -2 a>0取真,b>0取假,a>1取真,c>1取假 判定3取假,判定6取真

③ 优缺点

  • 未必比判定/分支覆盖更全面
  • 不能发现逻辑错误

1.4 判定条件覆盖法(C1+C2标准)

① 目标

每个条件中的所有可能取值至少执行一次,同时,每个判定的可能结果至少执行一次

② 用例

输入 原子条件 判定条件
a = 2 b = 1 c = 4 a>0取真,b>0取真,a>1取真,c>1取真 判定3取真,判定6取真
a = -1 b = -2 c = -3 a>0取假,b>0取假,a>1取假,c>1取假 判定3取假,判定6取假

③ 优缺点

  • 可能会导致某些条件掩盖了另一些条件

1.5 条件组合覆盖法(C3标准)

① 目标

​ 每个判定中的所有的条件取值组合至少执行一次

② 用例

​ 判定3:(a > 0 && b > 0)

​ 判定6:(a > 1 || c > 1)

​ 原子条件集:

​ a > 0 b > 0 a > 1 c > 1

要求:

​ a>0时,b>0真假各一次

​ a<=0时,b>0真假各一次

​ a>1时,c>1真假各一次

​ a<=1时,c>1真假各一次

输入 原子条件 判定条件
a = 2 b = 1 c = 6 a>0取真,b>0取真,a>1取真,c>1取真 判定3取真,判定6取真
a = 2 b = -1 c = -2 a>0取真,b>0取假,a>1取真,c>1取假 判定3取假,判定6取真
a = -1 b = 2 c = 3 a>0取假,b>0取真,a>1取假,c>1取真 判定3取假,判定6取真
a = -1 b = -2 c = -3 a>0取假,b>0取假,a>1取假,c>1取假 判定3取假,判定6取假

③ 优缺点

  • 比条件覆盖法更全面

1.6 路径覆盖

① 目标

​ 用例覆盖程序中的所有可能执行路径

② 用例

输入 原子条件 判定条件
a = 2 b = 1 c = 6 a>0取真,b>0取真,a>1取真,c>1取真 判定3取真,判定6取真
a = 1 b = 1 c = -3 a>0取真,b>0取真,a>1取假,c>1取假 判定3取真,判定6取假
a = -1 b = 2 c = 3 a>0取假,b>0取真,a>1取假,c>1取真 判定3取假,判定6取真
a = -1 b = -2 c = -3 a>0取假,b>0取假,a>1取假,c>1取假 判定3取假,判定6取假

③ 优缺点

  • 不切实际
    • 因为涉及到相关长和几乎无穷尽的路径数
    • 任何可能的循环在程序段中都被视为是可能的路径

1.7 基本路径覆盖法

1)McCabe的基路径方法

img

2)从源节点到汇节点的线性独立路径数(根据圈复杂度计算)

  1. V(G) = e - n + 2p = 10 - 7 + 2 = 5
  2. 当规模很小时,我们可以直观地标识独立路径

3)以下给出的是用节点/边序列表示的路径:

  1. p1:A,B,C,G/1,4,9
  2. p2:A,B,C,B,C,G/1,4,3,4,9
  3. p3:A,B,E,F,G/1,5,8,10
  4. p4:A,D,E,F,G/2,6,8,10
  5. p5:A,D,F,G/2,7,10

标签:覆盖,取假,--,单元测试,用例,判定,条件,Junit,取真
From: https://www.cnblogs.com/hmy71/p/junit_1.html

相关文章

  • react项目因为代码复杂度问题无法打包
    项目中碰到个问题,后台返回数据为null,但是之前代码没有做null的判断,导致使用该数据里属性值时报错  很快,在代码中定位到报错字段,加上可选链操作符( ?.)时,代码编译运......
  • Web响应式(二)
    内容:媒体查询媒体查询语法组合媒体查询一、媒体查询媒体查询,可以根据设备的能力应用特定的CSS样式。比如,可以根据视口宽度、屏幕宽高比和朝向(水平还是垂直)等,只用几......
  • 理解vim工作的几个关键字
    理解vim工作的几个关键字下面我们再来认识一下vim,理清下面的vim的几个名词,这样方便我们以后更好的去使用和进阶vim:缓冲区(Buffer),窗口(Window),标签(Tab),标记......
  • 再谈 vbo 和 ebo 的关系
    vbo就是一个一维数组、一般是GLfloat类型的数组数组的内容怎么去解释?用glVertexAttribPointerebo也是一个一维数组、不过是GLuint的数组(显然索引一般没有负数的)......
  • Anderson-Darling 统计检验
    功能:对于特定数据集和分布,分布与数据拟合越好,此统计量越小。可以用Anderson-Darling统计量确定数据是否符合t检验的正态假设。  help: ......
  • Matlab Simulink仿真工具的应用
     招募大量matlab技术人员,有大量matlab需求订单,均为个人短期可以完成,有时间的朋友可以加我微信:nn505203,有需求也可以联系此微信。加好友备注博客园matlab技术即可。S......
  • NineData多云数据管理平台正式上线
    11月1日,NineData多云数据管理平台正式上线,构建全球领先的多云数据管理平台。NineData提供数据备份、复制、对比和企业级SQL开发服务,让您的数据管理更安全更高效。本次发布......
  • 《推翻相对论!-致民科吧吧友的一封信》 回复
    《推翻相对论!-致民科吧吧友的一封信》    https://tieba.baidu.com/p/8116333892     15楼推翻微分几何这个要先了解一下现在的微分几何,但重建一个微分......
  • for循环
    For循环虽然所有循环结构都可以用while或者do...while表示,但java提供了另一种语句——for循环,使一些循环结构变得更加简单。for循环语句是支持迭代的一种通用结构,是......
  • AMBA
      什么是AMBA?ARM官方给出的应用定义如下:ARMAMBA(AdvancedMicrocontrollerBusArchitecture)协议是一种公开标准,主要用于片上系统(SoC)中功能模块连接和管理的......