单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。
单 元 测试 任 务
1. 单 元 测试 任 务 包括:
2. 模 块 接口 测试 ;
3. 模 块 局部数据 结 构 测试 ;
4. 模 块边 界条件 测试 ;
5. 模 块 中所有独立 执 行通路 测试 ;
6. 模 块 的各条 错误处 理通路 测试 。
模 块 接口 测试 是 单 元 测试 的基 础 。只有在数据能正确流入、流出模 块 的前提下,其他 测试 才有意 义 。 测试 接口正确与否 应该 考 虑 下列因素:
1. 输 入的 实际 参数与形式参数的个数是否相同;
2. 输 入的 实际 参数与形式参数的属性是否匹配;
3. 输 入的 实际 参数与形式参数的量 纲 是否一致;
4. 调 用其他模 块时 所 给实际 参数的个数是否与被 调 模 块 的形参个数相同;
5. 调 用其他模 块时 所 给实际 参数的属性是否与被 调 模 块 的形参属性匹配;
6. 调 用其他模 块时 所 给实际 参数的量 纲 是否与被 调 模 块 的形参量 纲 一致;
7. 调 用 预 定 义 函数 时 所用参数的个数、属性和次序是否正确;
8. 是否存在与当前入口点无 关 的参数引用;
9. 是否修改了只 读 型参数;
10. 对 全程 变 量的定 义 各模 块 是否一致;
11. 是否把某些 约 束作 为 参数 传递 。
如果模 块 内包括外部 输 入 输 出, 还应该 考 虑 下列因素:
1. 文件属性是否正确;
2. OPEN/CLOSE 语 句 是否正确;
3. 格式 说 明与 输 入 输 出 语 句是否匹配;
4. 缓 冲区大小与 记录长 度是否匹配;
5. 文件使用前是否已 经 打 开 ;
6. 是否 处 理了文件尾;
7. 是否 处 理了 输 入 / 输 出 错误 ;
8. 输 出信息中是否有文字性 错误 ;
检查 局部数据 结 构是 为 了保 证临时 存 储 在模 块 内的数据在程序 执 行 过 程中完整、正确。局部数据 结 构往往是 错误 的根源, 应 仔 细设计测试 用例,力求 发现 下面几 类错误 :
1. 不合适或不相容的 类 型 说 明;
2. 变 量无初 值 ;
3. 变 量初始化或省缺 值 有 错 ;
4. 不正确的 变 量名(拼 错 或不正确地截断);
5. 出 现 上溢、下溢和地址异常。
除了局部数据 结 构外,如果可能, 单 元 测试时还应该查 清全局数据(例如 FORTRAN 的公用区) 对 模 块 的影响。
在模 块 中 应对每 一条独立 执 行路径 进 行 测试 , 单 元 测试 的基本任 务 是保 证 模 块 中 每 条 语 句至少 执 行一次。此 时设计测试 用例是 为 了 发现 因 错误计 算、不正确的比 较 和不适当的控制流造成的 错误 。此 时 基本路径 测试 和循 环测试 是最常用且最有效的 测试 技 术 。 计 算中常 见 的 错误 包括:
1. 误 解或用 错 了算符 优 先 级 ;
2. 混合 类 型运算;
3. 变 量初 值错 ;
4. 精度不 够 ;
5. 表达式符号 错
比 较 判断与控制流常常 紧 密相 关 , 测试 用例 还应 致力于 发现 下列 错误 :
1. 不同数据 类 型的 对 象之 间进 行比 较 ;
2. 错误 地使用 逻辑 运算符或 优 先 级 ;
3. 因 计 算机表示的局限性,期望理 论 上相等而 实际 上不相等的两个量相等;
4. 比 较 运算或 变 量出 错 ;
5. 循 环终 止条件或不可能出 现 ;
6. 迭代 发 散 时 不能退出;
7. 错误 地修改了循 环变 量。
一个好的 设计应 能 预见 各 种 出 错 条件,并 预设 各 种 出 错处 理通路,出 错处 理通路同 样 需要 认 真 测试 , 测试应 着重 检查 下列 问题 :
1. 输 出的出 错 信息 难 以理解;
2. 记录 的 错误 与 实际 遇到的 错误 不相符;
3. 在程序自定 义 的出 错处 理段运行之前,系 统 已介入;
4. 异常 处 理不当;
5. 错误陈 述中未能提供足 够 的定位出 错 信息。
边 界条件 测试 是 单 元 测试 中最后,也是最重要的一 项 任 务 。众的周知, 软 件 经 常在 边 界上失效,采用 边 界 值 分析技 术 , 针对边 界 值 及其左、右 设计测试 用例,很有可能 发现 新的 错误 。