软件测试实验二 白盒测试

2023-11-10

一、实验目的

1.掌握等逻辑覆盖测试法;

2.掌握基本路径测试法;

3.掌握基于Junit的单元测试。

二、实验内容

1. 为以下判断等级的程序段设计一组测试用例要求别满足语句覆盖、判定覆盖、条件覆盖、判断-条件覆盖、条件组合覆盖。

public char function(int x, int y) {
1. char t;
2. if((x>= 90) &&(y>= 90)){
3.    t ='A';
}else {
4.   if((x+ y)>= 165){
5.     t = 'B';
} else{
6.    t = 'C';
7.   }
8. }
9. return t;
}

2.下面的程序代码(Java语言)的功能是将一个正整数分解质因数。例如,输入90,打印出90=2*3*3*5。要求使用基本路径法设计测试用例。

public static void zhiyinshu( int n){
1. int k=2;
1. System.out.print(n + "="); //输出:n=
2. while(k<= n){
3.   if(k == n){
4.     System.out.println(n); // 输出: n
4.     break;
}else {
5.     if(n%k==0){
6.        System.out.print(k +"*");//输出:k*
6.        n=n/k; 
}else {
7.        k++;
8.      }
9. }
}

3. 使用Junit对下面程序进行单元测试。(每个方法各设计任意1组)

public class Calculator {

       public double add(double a,double b){
           return a+b;
       }

       public double sub(double a,double b){
           return a-b;
       }

       public double multiply(double a, double b){
           return a*b;
       }

       public double div(double a, double b){
           return a/b;
       }
}

三、实验步骤

1. 用逻辑覆盖法

1)画出该程序的控制流图(用代码行前的编号或行号表示节点),并用Ti、Fi标记各条件。

程序的控制流图是描述程序控制流的一种图示方法。控制流图是退化的程序流程图,图中每个处理都退化成一个节点,流线变成连接不同节点的有向弧。

其中,圆圈称为控制流图的一个节点,表示一个或多个无分支的语句或源程序语句;箭头称为边或连接,代表控制流。

在将程序流程图简化成控制流图时,应注意:

①在选择或多分支结构中,分支的汇聚处应有一个汇聚节点;

②边和节点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。

2.基本路径法

1)基本路径测试是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。

2)基本路径测试主要包含以下四个方面:

  (1) 绘制出程序的程序控制流图。根据程序流程图,绘制出程序的控制流图。(用代码行前的编号或行号表示节点)

  (2) 计算程序环路复杂度。环路复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本独立路径数目,这是程序中每个可执行语句至少执行一次所必须的最少测试用例数。

计算环路复杂性的方法有三种:

①定义环路复杂性为V(G),E为控制流图的边数,V为控制流图的节点数,则有公式V(G)=E-N+2;

②定义P为控制流图中的判定节点数,则有公式V(G)=P+1;

③控制流图中的区域数为R,则V(G)=R。

  (3) 找出独立路径。通过程序的控制流图导出基本路径集,列出程序的独立路径。

  (4) 设计测试用例。根据程序结构和程序环路复杂性设计用例输入数据和预期结果,确保基本路径集中的每一条路径的执行。

3. 使用Junit对下面程序进行单元测试。(P106)

1)类 Person使用 JUnit 进行测试:

(1)先新建一个类 Person:

(2)创建测试类:

(3) 点击右键,选择[Run As],点击[JUnit Test]

那么,在整个测试步骤中,我们需要注意到什么呢?

 测试方法上必须使用@Test

 测试方法必须使用 public void 进行修饰

 新建一个目录来存放测试代码

 测试类的包应该和被测试类的包一样,如图:

 测试单元中的每个方法一定要能够独立测试,其方法不能有任何依赖

2、使用 Eclipse 创建 JUnit 测试类

案例2:使用工具创建 JUnit 测试类,并进行测试。

步骤如下:

1) 选择要测试的方法,右击 New,选择 other

2) 在[java]下[JUnit]选择[JUnit Test Case],如图:

3) 测试类目录选择 test,如图:

4) 点击[Next],如图:

5) 勾选你要测试的方法,点击[Finish]如图:

6) 在这个步骤中,如果之前没有添加 JUnit 的 jar 包,则会弹出提示:

点选[OK]即可,如果已经添加过 jar 包,则不会弹出此提示。 最后,生成的代码如下

然后,在这个基础上修改你的测试代码即可。

在测试中结果中关于 Failure 和 error 的解释:

 Failure 一般由测试单元使用断言方法判断失败引起的,这个报错,说明测试点发现了问题,即程序输出 的结果和我们预期的不一样

 error 是由代码异常引起的,它可以产生代码本身的错误,也可以是测试代码中的一个隐藏 bug

如果我们勾选上这四个方法后生成的代码又是什么样呢?

勾选后生成代码如图:

同样,右键,选择[Run As],点击[JUnit Test],运行结果:

由此,我们总结如下:

 @BeforeClass

修饰的方法会在所有方法被调用前执行,且该方法时静态的,所以当测试类被加载后就接着运行它,而且在内 存中他只会存在一份实例,他比较适合加载配置文件(针对所有测试,只执行一次 )。

 @AfterClass

所修饰的方法通常用来对资源管理,如关闭数据库连接(针对所有测试,只执行一次 )。

 @Before 和@After

会在每个测试方法前后各执行一次。

 @Test:测试方法,在这里可以测试期望异常和超时时间

四、实验结果

1.逻辑覆盖法

控制流程图:

测试用例:

1)语句覆盖的测试用例:

编号

测试用例

语句

执行路径

1

x=100,y=100

1,3

1,2,3,8,9

2

x=85,y=85

1,5

1,2,4,5,7,8,9

3

x=60,y=60

1,7

1,2,4,6,7,8,9

2)判定覆盖的测试用例:

编号

测试用例

判定

执行路径

1

x=100,y=100

2,4

1,2,3,8,9

2

x=85,y=85

2,4

1,2,4,6,7,8,9

3

x=60,y=60

2,4

1,2,4,6,7,8,9

3)条件覆盖的测试用例:

编号

测试用例

条件

执行路径

1

x=100,y=100

2,4

1,2,3,8,9

2

x=85,y=85

2,4

1,2,4,5,7,8,9

3

x=60,y=60

2,4

1,2,4,6,7,8,9

4)判定-条件覆盖的测试用例

编号

测试用例

条件

执行路径

1

x=100,y=100

2,4

1,2,3,8,9

2

x=85,y=85

2,4

1,2,4,5,7,8,9

3

x=60,y=60

2,4

1,2,4,6,7,8,9

5)条件组合覆盖的测试用例

编号

测试用例

条件

执行路径

1

x=100,y=100

2,4

1,2,3,8,9

2

x=90,y=85

2,4

1,2,4,6,7,8,9

3

x=85,y=90

2,4

1,2,4,5,7,8,9

4

x=60,y=60

2,4

1,2,4,6,7,8,9

2.基本路径法

程序控制流图:

程序环路复杂度: V(G)=P+1=3+1=4

独立路径:

1-2-9

1-2-3-4-9

1-2-3-5-7-8-2-3-4-9

1-2-3-5-6-8-2-3-4-9

测试用例:

编号

输入数据

预期输出

执行路径

1

n=2

2=2

1-2-3-4-9

2

n=3

3=3

1-2-3-5-7-8-2-3-4-9

3

n=4

4=2*2

1-2-3-5-6-8-2-3-4-9

3.单元测试

程序代码:

public class Calculator {

       public double add(double a,double b){
           return a+b;
       }

       public double sub(double a,double b){
           return a-b;
       }

       public double multiply(double a, double b){
           return a*b;
       }

       public double div(double a, double b){
           return a/b;
       }
}

五、实验总结

在实验过程中遇到了各种各样的问题,测试所用方法理解不清晰。通过与同学们相互讨论,所有问题都迎刃而解,并且成功完成了实验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件测试实验二 白盒测试 的相关文章

  • 如何在任何类中的任何测试之前和之后运行一组代码?

    这是我的测试代码 public class Test1 BeforeClass public void setUp EmbeddedTomcat start test methods AfterClass public void tearD
  • 使用TDD在Java中开发文件遍历代码

    我必须实现一些代码来遍历目录结构并返回找到的文件列表 要求非常简单 给定一个基本目录 查找其中的所有文件 不是目录本身 如果找到目录 请重复步骤 1 我想使用 TDD 开发代码 当我开始编写测试时 我意识到我在嘲笑班级File 这样我就可以
  • JUnit:在被测类中启用断言

    我已经被Java咬过好几次了assert由于断言未在 JUnit 的 JVM 实例中启用 因此在 JUnit 测试套件中未失败的语句 需要明确的是 这些是实现内部的 黑盒 断言 检查不变量等 而不是 JUnit 测试本身定义的断言 当然 我
  • 如何模拟 REST 模板交换?

    我有一项服务 我需要通过休息向外部服务器询问一些信息 public class SomeService public List
  • 具有动态测试数量的 JUnit 测试

    在我们的项目中我有几个JUnit http www junit org 测试例如从目录中取出每个文件并对其运行测试 如果我实施一个testEveryFileInDirectory方法中的TestCase这显示为只有一项可能失败或成功的测试
  • 使用Robolectric时如何加载.so?

    W 环境 EXTERNAL STORAGE 未定义 回到默认状态 java lang UnsatisfiedLinkError com autonavi amap mapcore MapCore nativeNewInstance Ljav
  • ArrayList 相等 JUnit 测试

    我想使用assertArrayEquals ArrayList
  • 如何在 Scala 中使用 JUnit ExpectedException?

    我希望能够使用 JUnit 4 7预期异常 Rule http kentbeck github com junit javadoc latest org junit rules ExpectedException html在斯卡拉 然而 它
  • GrantPermissionCallable:权限:无法授予 android.permission.SET_TIME

    我正在尝试使用新的授予权限规则 https developer android com reference android support test rule GrantPermissionRule html这是最新支持库的一部分 在我的清
  • assertThat - hamcrest - 检查列表是否已排序

    好吧 我认为这将是一个简短的问题 我有一个按日期排序的 ArrayList 当然我看到它有效 但我也想为它编写一个测试 我想检查列表中的下一个值 日期 是否低于前一个值 我可以使用一些来做到这一点fors 并添加临时列表 但我想知道是否有更
  • 在 junit 中模拟 System.getenv 调用时遇到问题

    我正在尝试使用 junit 和mockito 对此非常新 为 Spring Boot 应用程序编写单元测试 基本上在我的代码中 我已经为 manifest yml 文件 用于部署 中的特定 URL 指定了一个环境变量 我可以通过它访问Str
  • 使用@Async方法的JUnit回滚事务

    我正在使用编写集成测试SpringJUnit4ClassRunner 我有一个基类 RunWith SpringJUnit4ClassRunner class WebAppConfiguration ContextConfiguration
  • JUnit:如何按照 Spring 的预期访问 Spring 配置?

    有一个教程视频 http www infoq com presentations Mastering Spring MVC 3介绍了 Spring MVC 3 0 在演示项目中 他们使用以下目录结构
  • JUnit 测试时排除 @Component 类的过滤器?

    是否可以排除 Component带注释的类 我想从 JUnit 测试中排除一个特殊的类 我的项目有一个类xEventHandler注释为 Component我不希望 spring 在 junit 测试时使用这个类 我的应用程序 TestCo
  • Spring 测试 DBunit 警告

    我正在使用 spring test dbunit 并且在单元测试中收到一条警告 其中包含以下消息 Code RunWith SpringJUnit4ClassRunner class ContextConfiguration locatio
  • 如何在 JUnit 测试中引导weld-se

    我有一个用于单元测试的 Maven 项目 并且想使用 CDI 我已将weld se 依赖项放入 pom xml 中 如下所示
  • 将 Selenium HTML 测试自动转换为 JUnit 的方法?

    我在 Mac 10 6 6 上使用 Selenium IDE 1 0 10 for Firefox 我们的 QA 部门已经为 Selenium 创建了一些 HTML 测试 我需要将其转换为 Junit 在 IDE 中 我可以通过转到 文件
  • 参数化单元测试套件

    我正在尝试设置一些参数化测试套件 不幸的是到目前为止还没有任何运气 我有两组参数 我想使用所有可能的组合运行多个测试用例 它们位于不同的类中 我尝试使用 JUnit4 来完成此操作 但无法正确设置 这将是我的基本想法 TestSuite1
  • 将 Mockito 模拟注入 Spring bean

    我想将 Mockito 模拟对象注入到 Spring 3 bean 中 以便使用 JUnit 进行单元测试 我的 bean 依赖项当前是通过使用注入的 Autowired私有成员字段上的注释 我考虑过使用ReflectionTestUtil
  • Cobertura 显示覆盖率 0%

    我使用 Cobertura 1 9 3 与 NetBeans 6 8 Ant 1 7 1 和 JDK 1 6 0 21 一起运行 WAR EJB JUnit 4 测试 当我改变线路时pathelement location build cl

随机推荐

  • JavaScript与生俱来的特性---异步与回调

    线程是建立在进程的基础上的一次程序运行单位 一个进程中可以有多个线程 js单线程就意味着 所有任务需要排队 前一个任务结束 才会执行后一个任务 如果前一个任务耗时很长 后一个任务就不得不一直等着 如果是因为计算量大 CPU忙不过来 倒也合乎
  • 使用VLC开源库开发播放器

    使用VLC开发播放器 分为如下几步 1 下载VLC开源库 下载VLC开源库 可在官网上下载 地址如下 http download videolan org pub videolan vlc 可以在该网站下载想要的版本 32位或64位 Rel
  • npm&yarn使用

    一 npm与yarn介绍 NPM Node Package Manager 作为Node js的依赖包管理器便应运而生 而YARN则是针对NPM的一些不太优秀的地方设计开发的 NPM无需单独安装 安装完Node js即自带NPM 若想安装y
  • MFC(VS2010)编程实例之一(Edit Control控件)

    Edit Control是在MFC对话框中最频繁的使用的控件之一 获取Edit Control的值与赋值是常见的操作 Edit Control对应的MFC类为CEdit类 而CEdit是继承自CWnd类的 所以也继承了来自CWnd类的Get
  • elasticsearch中index.highlight.max_analyzed_offset设置

    elasticsearch中设置index highlight max analyzed offset Caused by java lang IllegalArgumentException The length of message f
  • Dynamics CRM2016详细安装教程-3(Dynamics CRM安装)

    1 以具有管理员级别特权的用户身份登录到将安装 Microsoft Dynamics CRM Server 2016 的域 并且该用户是本地计算机上 Administrators 组的成员 不能以受信任域中成员的身份安装此应用程序 2 双击
  • mysql数据库死锁的产生原因及解决办法

    这篇文章主要介绍了mysql数据库锁的产生原因及解决办法 需要的朋友可以参考下 数据库和操作系统一样 是一个多用户使用的共享资源 当多个用户并发地存取数据 时 在数据库中就会产生多个事务同时存取同一数据的情况 若对并发操作不加控制就可能会读
  • Python+Tensorflow学习(二)——初试keras

    Python Tensorflow学习 二 初试keras 学习视频链接 强推 TensorFlow官方入门实操课程 源码如下 coding utf 8 Time 2021 8 9 10 27 Author 西兰花 File tf01 py
  • 大数据中Linux命令使用的相关操作

    一 常见Linux命令使用 1 cd命令 切换目录 切换到目录 usr local 2 去到目前的上层目录 3 回到自己的主文件夹 ls命令 查看文件与目录 4 查看目录 usr下所有的文件 mkdir命令 新建新目录 5 进入 tmp目录
  • 模块和库的区别

    在编程领域 模块 module 和 库 library 是两个相关但不完全相同的概念 模块 Module 模块是一种组织和封装代码的方式 它是一个包含函数 类 变量等定义的文件 一个模块可以看作是一个独立的单元 它将相关的代码组织在一起 方
  • Xshell连接kali&不成功解决方法

    本文为学习笔记 仅限学习交流 不得利用 从事危害国家或人民安全 荣誉和利益等活动 请参阅 中华人民共和国网络安全法 第一部分 连接 Xshell 官网下载地址 http www netsarang com zh xshell 一 开启Xsh
  • python基础编程小实例2——绝对温标

    编程语言 python3 9 题目 绝对温标的单位为开尔文 简称开 符号为K 绝对温标的零度对应我们日常使用的摄氏温度 单位为摄氏度 简称度 符号为 的 273 15 要求编写代码 实现将用户输入的摄氏温度转换为移绝对温标标识的开氏温度的功
  • Java中String与String的相等判断要用equals

    如题 正确语句 i字符串1 equals 字符串2 错误语句 字符串1 字符串2 在Java中用 比对两个字符串比对的是两个数据的地址值 用equals 比较的才是他们的内容值
  • Python 100 天从新手到大师

    早上好 骚年 我是小菜 我的公众号 菜鸟翻身 会推荐 GitHub 上有用的项目 一分钟 get 一个优秀的开源项目 挖掘开源的价值 我的引语 今天推荐是一个 Python 基础教程 按照教程学习 不出意外 100 天从新手到大师 当下 P
  • disable path和false path的作用与区别

    disable path和false path的作用与区别C 欢迎使用Markdown编辑器 链接 disable与false的相同与不同 false path 指定某一条path 工具计算delay 但不报时序 disable path
  • Java环境变量的配置

    最近有朋友问到环境变量的配置 下面以Windows10系统为例进行Java环境变量配置说明 1 右键点击 此电脑 选择 属性 项 2 点击 高级系统设置 在弹出的系统属性框中 选择 高级 选项卡 默认即显示该选项卡 点击 环境变量 3 在弹
  • 回答问题:你认为AGI应该采用什么思路?

    我是研究AGI基础理论的 我认为AGI要突破首先要对智能的原理有突破 需要建立一套体系描述和解释智能 我认为目前的数学体系有很大的不足 限制了人类对智能的理解 所以需要改革 重新理解一些基础的东西 例如 空间的本质 计算的本质 我认为AGI
  • C++Opencv图像对象Mat的创建和赋值

    Mat中元素的类型以及矩阵的通道个数 它是一系列的预定义的常量 其命名规则为CV 位数 数据类型 通道数 因此在学习图像创建之前先了解一下基本的数据类型 S 有符号整型 U 无符号整型 F 浮点型 CV 8U 8位无符号整数 CV 8S 8
  • Windows CE嵌入式导航系统研究(内核相关)

    1 1 嵌入式车载导航系统的软件设计流程 嵌入式车载系统软件主要包括系统内核 驱动程序 应用程序三部分 设计的过程当中 我们采用瀑布模型进行设计 首先制定Windows CE5 0系统内核 再次编写相关设备驱动 最后编写或移植应用程序 制定
  • 软件测试实验二 白盒测试

    一 实验目的 1 掌握等逻辑覆盖测试法 2 掌握基本路径测试法 3 掌握基于Junit的单元测试 二 实验内容 1 为以下判断等级的程序段设计一组测试用例 要求分别满足语句覆盖 判定覆盖 条件覆盖 判断 条件覆盖 条件组合覆盖 public