清华软件工程(三):

一、单元测试概述:

1. 现实开发问题:

在这里插入图片描述

2. 单元测试:

单元是构造软件系统的基础, 只有使每个单元得到足够的测试, 系统的质量才能有可靠的保证, 即单元测试是构筑产品质量的基石;
单元测试是对软件中的最小可测试单元进行检查和验证;
验证代码设计更好文档化行为具有回归性
程序员必须对自己的代码质量负责, 单元测试是对自己的代码质量的基本承诺.

3. 单元测试内容:

  • 模块接口: 对通过所有被测模块的数据流进行测试;
  • 局部数据结构: 检查模块中的数据结构是否正确的定义和使用;
  • 边界条件: 检查数据流或控制流中条件或数据处于边界时的出错可能性;
  • 独立路径: 检查由于计算错误, 判断错误, 控制流错误呆滞的程序错误;
  • 出错处理: 检车可能引发错误处理的路径以及进行错误处理的路径;

4. 单元测试原则:

  • 快速的: 单元测试应能快速运行, 如果运行缓慢, 就不会愿意频繁的运行;
  • 独立的: 单元测试应相互独立, 某个测试不应为下一个测试设定条件. 当测试相互依赖时, 一个没有通过就会导致一连串的失败, 难以定位问题.
  • 可重复性: 单元测试应该可以重复执行, 并且结果是可以重现的;
  • 自我验证性: 单元测试应该有布尔输出, 无论是通过或失败, 不应该查看日志文件或手工对比不同的文本文件来确认是否通过;
  • 及时的: 及时编写单元测试代码, 应恰好在开发实际的单源代码之前;

5. 单元测试过程:

在这里插入图片描述

6. 单元测试质量:

6.1 测试通过率:

测试通过率是指在测试过程中执行通过的测试用例所占的比例,
单元测试通常要求测试用例通过率达到100%;

6.2 测试覆盖率:

测试覆盖率是用来度量测试完整性的一个手段, 通过覆盖率数据, 可以了解测试是否充分以及弱点在哪里. 代码覆盖率测试是单元测试的一个衡量标准, 但也不能一味的追求覆盖率;
主要包括:

  • 语句覆盖;
  • 判定覆盖;
  • 条件覆盖;
  • 判定条件覆盖;
  • 条件组合覆盖;
  • 路径覆盖;

7. 单元测试方法:

7.1 静态测试:

通过人工分析或程序正确定证明的方法来确认正确性;

7.2 动态测试:

通过动态分析和程序测试等的方法来检查和确认程序是否有问题;

7.3 黑盒测试:

黑河测试又称功能测试, 它将测试对象看作一个黑盒子, 完全不考虑长须内部的逻辑结构和内部特性, 只依据程序的需求规格书名数, 检查程序的功能是否符合他的功能说明;
在这里插入图片描述

7.4 白盒测试:

百合测试, 也称结构测试, 它把测试对象看做一个透明的盒子, 允许测试人员利用程序内部的逻辑及有关信息, 设计或选择测试用例, 对程序所有逻辑路径进行测试;

7.5 模块测试:

需要开发"驱动模块"用来调用"被测模块", 产生测试结果; 开发"桩模块", 用来替代支持模块, 被"被测模块"调用;
在这里插入图片描述

8. 单元测试之xUnit

在这里插入图片描述

8.1 xUnit通常适用于以下场景:

  • 单个函数, 一个类后者几个功能相关类的测试;
  • 尤其适用于纯函数测试或者接口级别的测试;

8.2 xUnit无法适用于复杂场景的测试:

  • 被测对象依赖关系复杂, 甚至无法简单创建出这个对象;
  • 对于一些失败场景的测试;
  • 被测对象中涉及多线程合作;
  • 被测对象通过消息与外界交互的场景;

9. 单元测试之Mock:

Mock测试是在测试过程中对于某些不容易构造或者不容易获取的对象, 用一个虚拟的对象(Mock对象)来创建以便测试的方法;

  • 真实对象具有不确定的行为(产生补课预测的结果);
  • 真实对象很难被创建(如具体的web容器);
  • 真实对象的某些行为很难被触发(如网络错误);
  • 真实情况令程序的运行速度很慢;
  • 真实对象有用户界面;
  • 测试需要询问真实对象, 它是如何被调用的;
  • 真实对象实际上并不存在;

关键:
需要应用针对接口的编程技术, 即被测试的代码通过接口来引用对象, 在使用Mock对象模拟所引用的对象及其行为, 因此被测试模块并不知道它所引用的究竟是真是的对象还是Mock对象;

二、黑盒测试方法:

1. 测试用例的重要性:

设计良好的测试用例是关键;

  • 降低软件测试成本;
  • 保证测试工作质量;
  • 评估和检验测试效果;

2. 测试用例的概念:

  • 测试用例值: 完成被测试软件的某个执行所需要的输入值;
  • 期望结果: 当且仅当程序满足期望行为, 执行测试时产生的结果;
  • 前缀值: 将软件置于合适的状态来接受测试用例值的任何必要的输入;
  • 后缀值: 测试用例值被发送以后, 需要被发送到软件的任何输入;(验证值, 结束命令)

3. 测试用例设计的要求:

  • 具有代表性和典型性;
  • 寻求系统设计和功能设计的弱点;
  • 既有正确输入也有错误或异常输入;
  • 考虑用户实际的诸多使用场景;

4. 黑盒测试技术:

黑盒测试是将测试对象看做一个黑盒子, 完全不考虑程序内部的逻辑结构和内部特性,指依据程序的需求规格说明书, 检查程序的功能是否符合他的功能说明.
黑盒测试技术:

  • 等价类划分;
  • 边界值分析;
  • 因果图决策表;
  • 场景法;
  • 组合设计法;
  • 状态转换测试;

5. 等价类划分:

5.1 等价类划分:

等价类划分是将输入与划分尽可能少的若干子域, 在划分中要求每个子域两两互不相交, 每个子域称为一个等价类;

  • 同一输入域的等价类划分可能不唯一;
  • 只需要从每一个等价类中选取一个输入作为测试用例;
  • 对于相同的等价类划分, 不同测试人员选取的测试用例集可能是不同的;

5.2 等价类分类

等价类可以分为有效等价类无效等价类:

  • 有效等价类是对规格说明有意义, 合理的输入数据构成的集合, 能够检验程序是否实现了规格说明中预先规定的功能和性能;
  • 无效等价类是对规格说明无意义, 不合理的输入数据构成的集合, 已检查程序是否具有一定的容错性;

5.3 变量等价类:

  • 取值范围: 在输入条件规定了取值范围的情况下, 可以确定一个有效等价类和两个无效等价类;
  • 字符串: 在规定了输入数据必须遵守的规则情况下, 可以确定有一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
  • 枚举: 若规定输入数据是一组值(假定N个), 并且程序要对每一个输入值分别处理, 可确定N个有效等价类和一个无效等价类;
  • 数组: 数组十一组具有相同类型的元素的集合, 数组的长度及其类型都可以作为等价类划分的依据;
  • 复合数据类型: 符合数类型是包含两个或两个以上相互独立的属性的输入数据, 在进行等价类划分时需要考虑输入数据的每个属性的合法和非法值; 对符合数据类型中的每个元素进行等价类划分, 再将这些等价类进行组合, 最中形成对软件整个输入域的划分;

5.4 等价类组合:

测试用例生成: 测试对象通常有多个参数, 如何对这些参数等价类进行组合测试, 来保证等价类的覆盖率, 是测试用例设计首先需要考虑的问题;

所有有效等价类的代表值都集成到测试用例中, 即覆盖有效等价类的所有组合. 任何一个组合都将设计成一个有效的测试用例, 也称正面测试用例;

无效等价类的代表值只能和其他有效等价类的代表值(随意)进行组合; 因此, 每个无效等价类将产生一个额外的吴小测试用例, 也称负面测试用例;

6.边界值分析:

6.1 边界值分析:

边界值分析是对输入或输出的边界值进行测试的一种方法, 它通常作为等价类划分法的补充, 这种情况下的测试用例来自等价类的边界;

  • 先确定边界: 通常输入或输出等价类的边界就是应该着重测试的边界情况;
  • 选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据, 而不是选取等价类中的典型值或任意值。
    实践表明: 大多数故障往往发生在输入定义域或输出定义域的边界上, 而不是内部;

6.2 基本思想:

基本思想: 故障往往发生在输入变量的边界值附近;

  • 边界值分析法是基于可靠性理论中称为"单故障"的假设, 既有两个或两个以上故障同事出现而导致失效的情况很少;
  • 对程序中的每个变量重复;

7. 健壮性测试:

在这里插入图片描述

8.错误推测法:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅弋、璃鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值