3.3单元测试策略 单元测试涉及到的测试技术通常有:针对被测 单元需求的功能测试、用于代码评审和代码走读的 静态测试、白盒测试、状态转换测试和非功能测试。 为了提高单元测试的质量,只了解这些单元测 试技术还远远不够,还要选择合适的测试策略。在 选择测试策略时,主要考虑如下3种方式:自顶向 下( Top Down Unit Testing)的单元测试策略 自底向上的单元测试策略( Bottom up Unit Testi ng)和孤立的单元测试策略
3.3单元测试策略 单元测试涉及到的测试技术通常有:针对被测 单元需求的功能测试、用于代码评审和代码走读的 静态测试、白盒测试、状态转换测试和非功能测试。 为了提高单元测试的质量,只了解这些单元测 试技术还远远不够,还要选择合适的测试策略。在 选择测试策略时,主要考虑如下3种方式:自顶向 下(Top Down Unit Testing)的单元测试策略、 自底向上的单元测试策略(Bottom up Unit Testi ng)和孤立的单元测试策略
3.31自顶向下的单元测试策略 步骤 1.从最顶层开始,把顶层调用的单元做成桩模块。 2.对第二层测试,使用上面已测试的单元做驱动 模块 3.依次类推,直到全部单元测试结束。 二)优点:可以在集成测试之前为系统提供早期的 集成途径。 )缺点:单元测试被桩模块控制,随着单元测试 的不断进行,测试过程也会变得越来越复杂,测试 难度以及开发和维护的成本都不断增加;
3.3.1自顶向下的单元测试策略 一)步骤: 1. 从最顶层开始,把顶层调用的单元做成桩模块。 2. 对第二层测试,使用上面已测试的单元做驱动 模块。 3. 依次类推,直到全部单元测试结束。 二)优点:可以在集成测试之前为系统提供早期的 集成途径。 三)缺点:单元测试被桩模块控制,随着单元测试 的不断进行,测试过程也会变得越来越复杂,测试 难度以及开发和维护的成本都不断增加;
要求的低层次的结构覆盖率也难以得到保证 由于需求变更或其他原因而必须更改任何一个单 元时,就必须重新测试该单元下层调用的所有单 元;低层单元测试依赖顶层测试,无法进行并彳 测试,使测试进度受到不同程度的影响,延长测 试周期 四)总结:从上述分析中,不难看出该测试策略 的成本要高于孤立的单元测试成本,因此从测试 成本方面来考虑,并不是最佳的单元测试策略。 332自底向上的单元测试 )步骤: 1、先对模块调用图上的最底层模块开始测试, 模拟调用该模块的模块为驱动模块
要求的低层次的结构覆盖率也难以得到保证; 由于需求变更或其他原因而必须更改任何一个单 元时,就必须重新测试该单元下层调用的所有单 元;低层单元测试依赖顶层测试,无法进行并行 测试,使测试进度受到不同程度的影响,延长测 试周期。 四)总结:从上述分析中,不难看出该测试策略 的成本要高于孤立的单元测试成本,因此从测试 成本方面来考虑,并不是最佳的单元测试策略。 3.3.2自底向上的单元测试 一)步骤: 1、先对模块调用图上的最底层模块开始测试, 模拟调用该模块的模块为驱动模块
2、其次,对上一层模块进行单元测试,用已经 被测试过的模块做桩模块。 3、依次类推,直到全部单元测试结束 二)优点:不需要单独设计桩模块。 三)缺点:随着单元测试的不断进行,测试过程 会变得越来越复杂,测试周期延长,测试和维护 的成本增加;随着各个基本单元逐步加入,系统 会变得异常庞大,因此测试人员不容易控制;越 接近顶层的模块的测试其结构覆盖率就越难以保 证 另外,顶层测试易受底层模块变更的影响, 任何一个模块修改之后,直接或间接调用该模块 的所有单元都要重新测试
2、其次,对上一层模块进行单元测试,用已经 被测试过的模块做桩模块。 3、依次类推,直到全部单元测试结束。 二)优点:不需要单独设计桩模块。 三)缺点:随着单元测试的不断进行,测试过程 会变得越来越复杂,测试周期延长,测试和维护 的成本增加;随着各个基本单元逐步加入,系统 会变得异常庞大,因此测试人员不容易控制;越 接近顶层的模块的测试其结构覆盖率就越难以保 证; 另外,顶层测试易受底层模块变更的影响, 任何一个模块修改之后,直接或间接调用该模块 的所有单元都要重新测试
由于只有在底层单元测试完毕之后才能够进行 顶层单元的测试,所以并行性不好。另外,自底向 上的单元测试也不能和详细设计、编码同步进彳 四)总结:相对其它测试策略而言,该测试策略比 较合理,尤其是需要考虑对象或复用时。它属于面 向功能的测试,而非面向结构的测试。对那些以高 覆盖率为目标或者软件开发时间紧张的软件项目来 说,这种测试方法不适用。 3.3.3孤立测试 步骤:无需考虑每个模块与其他模块之间的 关系,分别为每个模块单独设计桩模块和驱动模块, 逐一完成所有单元模块的测试
由于只有在底层单元测试完毕之后才能够进行 顶层单元的测试,所以并行性不好。另外,自底向 上的单元测试也不能和详细设计、编码同步进行。 四)总结:相对其它测试策略而言,该测试策略比 较合理,尤其是需要考虑对象或复用时。它属于面 向功能的测试,而非面向结构的测试。对那些以高 覆盖率为目标或者软件开发时间紧张的软件项目来 说,这种测试方法不适用。 3.3.3孤立测试 一)步骤:无需考虑每个模块与其他模块之间的 关系,分别为每个模块单独设计桩模块和驱动模块, 逐一完成所有单元模块的测试