第五章单元测试-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、学习目的与要求

本章对单元测试进行了详细的介绍。通过本章的学习应掌握单元测试的概念了解单元测试的误区掌握单元测试的策略、分析方法和用例设计方法。

二、考核知识点与考核目标

一单元测试的概念次重点

  1. 理解单元测试的概念
  1. 定义 是在软件开发过程中要进行的最低价级别的测试活动或者说是针对软件设计的最小单位—程序模块进行正确性检验的测试工作。
  2. 目的发现每个程序模块内部可能存在的差错
  3. 步骤静态检查和动态执行跟踪
  4. 目标验证开发人员所编写的代码是否可以按照其所设想的方式执行并产生符合预期值的结果
  1. 与集成测试的区别
类别单元测试系统测试
对象不同详细设计概要设计
方法不同白盒测试黑盒测试
内容不同模块内程序逻辑、功能测试验证各个接口、模块组合是否达到预期
目的相同发现开发过程的错误
  1. 与系统测试的区别
类别单元测试系统测试
对象不同详细设计需求规格说明书
层次不同早期测试后期测试
性质不同错误容易定位且可并行测试难定位错误
角度不同开发人员用户

二单元测试环境一般

  1. 理解单元测试环境
  1. 驱动模块:相当于被测模块的主程序。它接收测试数据把这些数据传送给被测模块最后输出实测结果。
  2. 桩模块:用以代替被测模块调用的子模块。桩模块可以做少量的数据操作不需要把子模块所有功能都带进来但不允许什么事情也不做。

三单元测试策略重点

  1. 理解自顶向下策略

自顶向下的单元测试策略:

  1. 从顶层调用的单元做成桩模块;
  2. 对第二层测试使用上面已测试的单元做驱动模块;
  3. 依次类推直到全部单元测试结束。
  4. 优点在集成测试之前为系统提供早期的集成途径可以与详细设计和编码工作重叠进行。
  5. 缺点被桩模块控制测试过程会越来越复杂
  1. 理解自底向上策略孤立测试

自底向上的单元测试策略:

  1. 先对模块调用的最底层模块进行测试模拟调用该模块的模块为驱动模块;
  2. 其次对上一层模块进行单元测试用已经被测试过的模块做桩模块依次类推直到全部单元测试结束。
  3. 优点不需要单独设计桩模块
  4. 缺点过程会变复杂周期会延长维护成本会增加顶层覆盖率难以保证不能与编码详设同时进行。

孤立测试的单元测试策略:

  1. 无需考虑每个模块与其他模块之间的关系分别为每个模块单独设计桩模块和驱动模块逐一完成所有单元模块的测试。
  2. 优点简单易操作时间短覆盖率高可以并行。
  3. 缺点成本高需要设计多个桩模块和驱动模块。

四单元测试分析次重点

  1. 理解单元测试分析
  1. 判断得到的结果是否正确
  2. 判断是否满足所有的边界条件
  3. 分析能否使用反向关联检查
  4. 分析能否使用其他手段来交叉检查一下结果
  5. 分析是否可以强制一些错误发生工具EasyMock
  6. 分析模块接口
  7. 分析局部数据结构
  8. 分析独立路径
  9. 分析出错处理是否正确

五单元测试步骤次重点

  1. 理解单元测试步骤
  1. 准备阶段
    1程序员培训
    2测试人员培训
    3准备环境
    4确认详设
    5编写测试用例
  2. 编制阶段
    1程序单元编制并调试检查
    2更正错误修改源码和测试用例
  3. 代码审查阶段
    1静态代码审查
    2检查算法逻辑
    3检查模块接口
    4检查输入参数
    5检查接口调用
    6出错处理
    7检查语句正确
    8检查规范
    9检查风格统一
    10检查特殊字符
    11检查是否可优化、算法效率是否最高
    12检查结构是否清晰
    13检查注释
    14检查文档
  4. 单元测试阶段
    1设计测试用例
    2执行测试用例
    3提交执行结果
  5. 评审、提交阶段
    1进行同级评审
    2给出评审结果
    3提交配置库

六单元测试用例设计重点

  1. 应用单元测试用例设计

白盒测试覆盖要求

  1. 所有独立的执行路径必须覆盖一次
  2. 判定真假情况至少覆盖一次
  3. 循环的边界和运行界限内执行循环体
  4. 测试内部数据结构的有效性

黑盒测试覆盖要求

  1. 功能是否实现
  2. 性能是否满足要求
  3. 是否有可选的其他测试特性

测试用例关键元素

  1. 初始状态声明
  2. 被测单元的输入
  3. 实际测试代码
  4. 期望结果

三、习题

  1. 单元测试中用来模拟被测模块调用者的模块是()。A.父模块
    B.子模块
    C.驱动模块
    D.桩模块
  2. 不属于单元测试内容的是()。
    A. 模块接口测试
    B. 局部数据结构测试
    C. 路径测试
    D. 用户界面测试
  3. 在进行单元测试时常用的方法是______。
    A. 采用白盒测试辅之以黑盒测试
    B. 采用黑盒测试辅之以白盒测试
    C. 只使用白盒测试
    D. 只使用黑盒测试
  4. 单元测试有哪些步骤?各个步骤有哪些实施内容?

单元测试的步骤

  1. 通常单元测试在编码阶段进行。
  2. 在源程序代码编制完成经过评审和验证确认没有语法错误之后就开始进行单元测试的测试用例设计。
  3. 利用设计文档设计可以验证程序功能、找出程序错误的多个测试用例。
  4. 对于每一组输入应有预期的正确结果。
  5. 模块并不是一个独立的程序在考虑测试模块时同时要考虑它和外界的联系用一些辅助模块去模拟与被测模块相联系的其它模块。这些辅助模块分为两种:
    a. 驱动模块:相当于被测模块的主程序。它接收测试数据把这些数据传送给被测模块最后输出实测结果。
    b. 桩模块:用以代替被测模块调用的子模块。桩模块可以做少量的数据操作不需要把子模块所有功能都带进来但不允许什么事情也不做。
  6. 被测模块、与它相关的驱动模块及桩模块共同构成了一个“测试环境”。

单元测试内容

  1. 模块接口测试:对通过被测模块的数据流进行测试。为此对模块接口包括参数表、调用子模块的参数、全程数据、文件输入/输出操作都必须检查。局部数据结构测试:设计测试用例检查数据类型说明、初始化、缺省值等方面的问题还要查清全程数据对模块的影响。
  2. 路径测试:选择适当的测试用例对模块中重要的执行路径进行测试。对基本执行路径和循环进行测试可以发现大量路径错误。
  3. 错误处理测试:检查模块的错误处理功能是否包含有错误或缺陷。例如是否拒绝不合理的输入;出错的描述是否难以理解、是否对错误定位有误、是否出错原因报告有误、是否对错误条件的处理不正确;在对错误处理之前错误条件是否已经引起系统的干预等。
  4. 边界测试:要特别注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例认真加以测试。
    此外如果对模块运行时间有要求的话还要专门进行关键路径测试以确定最坏情况下和平均意义下影响模块运行时间的因素。这类信息对进行性能评价是十分有用的。

单元测试的优点:

  1. 它是一种验证行为。
    程序中的每一项功能都是测试来验证它的正确性。它为以后的开发提供支援。就算是开发后期我们也可以轻松的增加功能或更改程序结构而不用担心这个过程中会破坏重要的东西。而且它为代码的重构提供了保障。这样我们就可以更自由的对程序进行改进。
  2. 它是一种设计行为。
    编写单元测试将使我们从调用者观察、思考。特别是先写测试(test-first)迫使我们把程序设计成易于调用和可测试的即迫使我们解除软件中的耦合。
  3. 它是一种编写文档的行为。
    单元测试是一种无价的文档它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的并且它保持最新永远与代码同步。
  4. 它具有回归性。
    自动化的单元测试避免了代码出现回归编写完成之后可以随时随地的快速运行测试。
  1. 简述单元测试的目的和意义。

目的:是暴漏出失败和错误。失败的可能性是可预期的并且可以使用断言来进行检查。
错误则是不可预期的问题意义:

  1. 提前发现问题并解决可以节约时间
  2. 是测试阶段的基础为后期的集成测试和系统测试做好准备;
  3. 对单元独立测试容易发现问题减少成本。
  1. 单元测试策略主要有哪些?并试描述这些策略?

单元测试策略主要有三种方式:

  1. 自顶向下的单元测试策略:从顶层调用的单元做成桩模块;对第二层测试使用上面已测试的单元做驱动模块;依次类推直到全部单元测试结束。
  2. 自底向上的单元测试策略:先对模块调用的最底层模块进行测试模拟调用该模块的模块为驱动模块;其次对上一层模块进行单元测试用已经被测试过的模块做桩模块依次类推直到全部单元测试结束。
  3. 孤立测试的单元测试策略:无需考虑每个模块与其他模块之间的关系分别为每个模块单独设计桩模块和驱动模块逐一完成所有单元模块的测试。
  1. 什么是驱动模块什么是桩模块

单元本身无法构成一个切实可运行的程序系统所以我们需要为单元测试来开发桩模块和驱动模块从而完成我们的单元测试目的这是桩模块和驱动模块的作用

  1. 驱动模块是用来模拟被测试模块的上一级模块相当于被测模块的主程序。它接收数据将相关数据传送给被测模块启用被测模块并打印出相应的结果。
  2. 桩模块(Stub) 是指模拟被测试的模块所调用的模块而不是软件产品的组成的部分。
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6