单元测试的定义
- 定义
单元测试(又称为模块测试, Unit Testing)是针对程序,模块(软件设计的最小单位(例如类或者函数))来进行正确性检验的测试工作。
- 时机
单元测试和编码是同步进行,但在Test- Driven Development(TDD)中,强调测试在先,编码在后。单元测试一般由开发人员完成,QA人员辅助。
- 概念
模块、组件、单元
单元测试的目标
目标:
单元模块被正确编码- 信息能否正确地
流入和流出
单元(输入和输出
) - 在单元工作过程中,其
内部数据
能否保持其完整性包括内部数据的形式、内容及相互关系不发生错误,全局变量在单元中的处理和影响 - 为限制数据加工而设置的
边界
处,能否正确工作 - 单元的运行能否做到满足特定的逻辑
覆盖
- 各层判定处理正确
- 函数无措
- 功能逻辑正确
单元测试的必要性
- 尽早介入越好
越往后,费用越高
调式和测试
- 调试:解决错误
- 测试:发现错误
流程
-
没有单元测试的流程
将错误解决集中在功能测试
阶段
-
有单元测试的流程
将较多的错误解决,在编码阶段
解决。
评价标准
- 代码覆盖率
代码覆盖的步骤:
-
第一步:源代码转换为流程图。流程图可以比较直观而详细地描述需要覆盖的语句
-
第二步:分析流程图,根据测试对象的要求选择需要覆盖的代码第三步:根据第二步结果确定测试数据,生成测试用例口测试用例:一组测试输入、执行条件以及预期结果
白盒测试/结构化测试方法(基于代码的测试技术)
- 语句覆盖
- 分支/判定覆盖
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 基本路径覆盖
语句覆盖
(被执行的语句数量/总的语句数量)×100%
。
- 不可达代码
- 处理错误代码(处理异常)
- 小概率事件
分支/判定覆盖
(被执行的分支数量/总的分支数量)×100%
。
要确保每个判定得到了TRUE和 FALSE的结果,即保证每个判定条件取TRUE和取 ALSE各至少一次
所有路径都会被执行一次,100%的判定覆盖能保证100%的语句覆盖
。
缺点:条件错误的情况,无法被发现。所以要进行条件覆盖
条件覆盖
要确保每个条件
取TRUE
和 FALSE
取各至少一次,可检查每个原子条件,不能保证所有判断分支都覆盖
条件覆盖<语句覆盖<判定覆盖
。
判定判定/条件覆盖
判定条件中的所有条件
可能至少执行一次取值,同时,所有判定的可能结果
至少执行一次,判定覆盖与条件覆盖
的结合。
条件组合覆盖
使得每个判定的所有可能的条件取值组合
至少执行一次。可满足分支覆盖
,也同时满足语句覆盖
口覆盖率使用的基本准则
覆盖率使用的基本准则
- 覆盖率不是目的,只是一种手段
- 不可能针对所有的覆盖率去测试
- 只考虑一种覆盖标准不恰当
- 不要追求绝对100%的覆盖率
其他准则
- 使用最少测试来达到最大覆盖
- 要考虑测试质量,兼顾效/成本分析
- 软件规格变化则需要新相应的覆盖
习题部分
1.简述语句覆盖的基本思想
答:
- 语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次。
如果是顺序结构,就是让测试从头执行到尾如果有分支、条件和循环,需要利用下面的方法,执行足够的测试覆盖全部语句
2.简述判定覆盖的基本思想
答:
- 判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。
一个判定代表着程序的一个分支,所以判定覆盖也被称为分支覆盖。
3.简述条件覆盖的基本思想
答:
- 条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
4.判断/条件覆盖的基本思想
答:
- 判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。
5.简述条件组合覆盖的基本思想
答:
- 条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。
6.简述基本路径覆盖的基本思想
答:
- 顾名思义,路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。