单元测试模板
软件测试技术
在知道程序内部结构的 情况下采用的测试技术 或策略。
在测试过程中, 选择足够的测 试用例,使得 每一个可执行 语句至少 码 走 查
技 术 评 审
代 码 审 查
黑盒测 试
功能 性能 攻击 回归 测试 测试 测试 测试 在测试过程中, 语句 覆盖
白盒测 试
分支 覆盖 路径 覆盖
五、模块内部错误处理测试
• 检查出错处理措施是否有效 • Checklist:
– 是否检查错误出现 – 出现错误,是否进行错误处理
抛出错误、通知用户、进行记录
– 错误处理是否有效
北京亚思晟 科技有限公司
19
6.4 单元测试策略
• 自顶向下的单元测试 • 自底向上的单元测试 • 孤立单元测试
北京亚思晟 科技有限公司
21
6.4 单元测试策略
自顶向下的单元测试(续)
• 优点:在集成测试前提供早期的集成途径。在执行 上和详细设计的顺序一致。不需要开发驱动模块。 • 缺点:随着测试的进行,测试过程越来越复杂,开 发和维护成本增加。 • 总结:比孤立单元测试的成本高很多,不是单元测 试的一个好的选择。
北京亚思晟 科技有限公司
– 驱动模块(driver) – 桩模块(stub) ──存根模块
北京亚思晟 科技有限公司
7
6.2单元测试环建立
• 驱动模块 (Driver)
– 被测基本单元的主程序,它接收测试数据,并把数 据传送给被测单元,最后输出实测结果。
• 桩模块 (Stub)
– 又称存根模块,它用来代替被测单元的子模块。设 计桩模块的目的是模拟实现被测单元的接口。桩模 块不需要包括子模块的全部功能,但应做少量的数 据操作,并打印接口处的信息。
北京亚思晟 科技有限公司
8
6.2单元测试环建立
单元测试环境
测试用例
驱动模块
测试结果
被测模块
桩模块1
桩模块2
桩模块3
北京亚思晟 科技有限公司
9
6.2单元测试环建立
举例:
A
D
待测试模块
B
E
C
北京亚思晟 科技有限公司
10
6.2单元测试环建立
举例:
测试用例
驱动模块 (模拟模块A) 被测模块B 桩模块 (模拟模块E)
北京亚思晟 科技有限公司
23
6.4 单元测试策略
自底向上的单元测试(续)
• 优点:在集成测试前提供系统早期的集成途径。不 需要开发桩模块。 • 缺点:随着测试的进行,测试过程越来越复杂。 • 总结:比较合理的单元测试策略,但测试周期较长。
北京亚思晟 科技有限公司
24
6.4 单元测试策略
孤立单元测试
• 方法:不考虑每个单元与其它单元之间的关系,为每 个单元设计桩模块或驱动模块。每个模块进行独立的 单元测试。 • 优点:简单、容易操作,可达到高的结构覆盖率。 • 缺点:不提供一种系统早期的集成途径。 • 总结:最好的单元测试策略。
北京亚思晟 科技有限公司
25
6.4 单元测试策略
主要测试方法
人工静态分析:通过人工阅读代码的方式来查找代码中
• 对模块中重要的执行路径进行测试。检查由于计算 错误、判定错误、控制流错误导致的程序错误。 • Checklist:
– – – – – – 死代码 不同数据类型的比较 错误的计算优先级 精度错误(比较运算错误、赋值错误) 表达式的不正确符号 循环变量的使用错误
北京亚思晟 科技有限公司
18
6.3 单元测试内容
那么先是高层代码中使用了底层代码;然后这些高层代 码又被更高层的代码所使用,如此往复。当基本的底层 代码不再可靠时,那么必需的改动就无法只局限在底层。 虽然可以修正底层的问题,但是这些对底层代码的修改 必然会影响到高层代码。于是,一个对底层代码的修正, 可能会导致对几乎所有代码的一连串改动,从而使修改 越来越多,也越来越复杂。从而使整个项目也以失败告 终。
北京亚思晟 科技有限公司
15
6.3 单元测试内容
二、模块局部数据结构测试
• 检查局部数据结构能否保持完整性 • Checklist :
– – – – – – 不正确或不一致的数据类型说明 变量没有初始化 变量名拼写错或书写错 数组越界 非法指针 全局数据对模块的影响
北京亚思晟 科技有限公司
16
6.3 单元测试内容
测试结果
北京亚思晟 科技有限公司
11
6.2单元测试环建立
讨论
• 通常,在单元测试中需要必要的桩模块和驱动模 块。桩模块和驱动模块的设计都需要一定的研发 成本。 • 你认为驱动模块、桩模块中哪一种类型模块开发 较为容易些,并给出理由?
北京亚思晟 科技有限公司
12
6.3 单元测试内容 模块接口 错误处理 重要的 执行路径 局部数 据结构
北京亚思晟 科技有限公司
29
6.4 单元测试策略
单元测试重点内容 • 静态测试
– 代码检查 – 静态结构分析 – 代码质量度量
• 白盒测试
– – – – – – 语句覆盖测试 判定覆盖测试 条件覆盖测试 判定—条件覆盖测试 条件组合测试 路径覆盖测试
• 黑盒测试
– 等价类划分方法 – 边界值分析方法 – 错误推测方法
北京亚思晟 科技有限公司
5
6.1单元测试的概念
• 5.测试对象:“单元”
结构化编程语言
• 单元测试对象是函数或者子过程。
面向对象语言
• 单元测试对象是类或者类的方法。 • 如一个菜单、屏幕显示界面或对话框等
北京亚思晟 科技有限公司
6
6.2单元测试环建立
• 基本单元本身不是一个独立的程序,自己不能运 行,要靠其它部分来调用和驱动。
22
6.4 单元测试策略
自底向上的单元测试
• 方法:先对最底层的基本单元(不调用其它模块的终 端模块)进行测试,然后再对上面一层进行测试,下 面已被测试过的单元做桩模块,依此类推,直到测试 完所有单元。选择下一个模块进行测试的原则是:该 模块调用的所有的模块都已经实现经过了测试。 • 为了测试低层模块,需要为它们设计驱动模块:即包 含着有效的测试输入,调用被测模块切显示输出的模 块。
三、模块边界条件测试
• 检查临界数据是否正确处理 • Checklist:
– – – – 普通合法数据是否正确处理 普通非法数据是否正确处理 边界内最接近边界的(合法)数据是否正确处理 边界外最接近边界的(非法)数据是否正确处理
北京亚思晟 科技有限公司
17
6.3 单元测试内容
四、模块独立执行路径测试
软件测试 技术案例教程
第六章 单元测试
CONFIDENTIAL
主要内容
1. 单元测试的概念 2. 单元测试环境建立 3. 单元测试的内容 4. 单元测试策略 5. 类测试 6. 单元测试框架XUnit
北京亚思晟 科技有限公司
2
6.1单元测试的概念
• 1.单元测试的定义
20
6.4 单元测试策略
自顶向下的单元测试
• 方法:先对最顶层的基本单元进行测试,把所有调 用的单元做成桩模块。然后再对第二层的基本单元 进行测试,使用上面已测试的单元做驱动模块。依 此类推直到测试完所有基本单元。选择后续模块进 行测试的原则是:至少一个调用该模块的模块实现 经过了测试。
北京亚思晟 科技有限公司
北京亚思晟 科技有限公司
30
6.4 单元测试策略
不实际运行程序,而是通过检查和阅读等手 段来发现错误并评估代码质量的软件测试技 术。也称为静态分析技术。 测试技术 在不知道程序内部结构,只知 道程序规格的情况下采用的测 试技术或策略。 实际运行程序,并通过观察程 序运行的实际结果来发现错误 的软件测试技术。
北京亚思晟 科技有限公司
27
6.4 单元测试策略
单元测试输入
• • • • • •
《软件需求规格说明书》 《软件详细设计说明书》 《软件编码与单元测试工作任务书》 《软件集成测试计划》 《软件集成测试方案》 用户文档
北京亚思晟 科技有限公司
28
6.4 单元测试策略
单元测试的输出
• • • • • • • • • • 《单元测试计划》 《单元测试方案》 《需求跟踪说明书》或需求跟踪记录 代码静态检查记录 《正规检视报告》 问题记录 问题跟踪和解决记录 软件代码开发版本 《单元测试报告》 《软件编码与单元测试任务总结报告》
模块
边界条件
单元测试主要对模块的五个基本特性进行评价
北京亚思晟 科技有限公司
13
6.3 单元测试内容
一、模块接口测试
• 对通过被测模块的数据流进行测试,检查进出模 块的数据是否正确。
• Checklist
:
– 调用本模块的输入参数是否正确; – 本模块调用子模块时输入给子模块的参数是否正确; – 全局量的定义在各模块中是否一致;
3
6.1单元测试的概念
• 2.一般单元的选择依据几个条件:
单元必须是可测试的。 单元的行为或输出是可观测的。 有一个明确的可定义的边界或接口。
北京亚思晟 科技有限公司
4
6.1单元测试的概念
• 4.目标
(1)检查代码实现是否符合设计
• 测试依据是详细设计描述
(2)尽早发现错误
当编写项目的时刻,如果假设底层的代码是正确无误的,
单元测试是开发者编写的一小段代码,用于检验被
测代码的一个很小的、很明确的功能是否正确 通常而言,一个单元测试是用于判断某个特定条件 (或者场景)下某个特定函数的行为 单元测试主要需要测试者非常清楚代码内部结构, 单元测试是软件开发人员的职责,测试人员一般不 参与单元测试。