单元测试个人总结
1、 单元测试概述
单元测试,即对软件基本组成单元进行的测试,一般由编码者自行测试,若特殊情况(项目要求或其他)可由独立于编码者的测试人员进行。
其测试对象、优缺点、意义以及适用项目如图3-1所示:
2、 工作阶段及任务 2.1 工作阶段: 单元测试位于编码阶段,即根据详细设计说明书完成单元代码编制、审查后便可进行,无需等系统全部集成。
2.2 阶段任务:
获取详细设文件和源码文件后,设计测试用例,编写测试代码,对单元代码进行测试,将测试结论填写到单元测试报告和Bug清单中。把软件Bug清单和测试用例执行结果提交负责人。 对源码文件进行的测试,视程序存在缺陷的情况,可能要重复进行,直至问题解决
3、测试流程 3.1 单元测试计划: 1)测试范围:
单元测试的对象为软件设计的最小单位——模块(组件、单元),作为单元能够实现一个特定的功能,并和其他单元有明确的接口定义。
测试范围的确定由以下几个因素构成,根据因素确定优先级,最后敲定测试范围:
- 使用频率:越高优先级越高;
- 复用性:未被复用过(即全新代码)的代码优先级高,复用代码无需测试;
- 复杂度:复杂度7级(McCabe复杂度)以上的代码。
注:复杂度计算详见白盒用例设计
2)评估标准:
单元测试的评估标准:代码覆盖率、需求覆盖率。
覆盖类型:语句覆盖、分支覆盖、条件覆盖、分支-条件覆盖、组合覆盖和路径覆盖(按照发现错误的能力呈由弱到强的变化排序)。 各种覆盖的优缺点如下表所示: 单元测试评估标准的选择也需根据项目实际情况而定,目前较为常用的路径覆盖率。 3.2 单元测试设计 1)测试策略 测试策略以及各自的优缺点如下图所示: 在实际测试过程中可能包括大量函数,不可能对所有的函数进行单元测试,所以需根据测试范围去敲定合适的测试策略(推荐孤立策略)。 注:桩函数和驱动函数介绍详见后续章节。 2)测试用例设计 测试用例的编制可从两方面进行设计:黑盒用例设计方法、白盒用例用例设计方法。
从该单元功能上确定输入和预期输出,不关注代码本身。一般考虑以下方面的数据输入:正常输入、异常输入和边界输入(边界输入不一定有)
基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
具体步骤如下:
- 将代码转换成流程图;
- 将流程图转换成数据流图;
数据流程图:由边(线)和节点(圆圈)组成;流程图与数据流图的关系以及复杂度计算如下图所示。
- 根据数据流图设计测试用例
根据数据流图计算:基本路径的数量=圈复杂度V(G)=e-n+2(e代表边,n代表节点)。 根据流图找出V(G)条独立路径并进行数据设计。 3.3 案例分析 被测代码(vbs): 转换成流程图:
数据流图: 根据数据流程图计算: V(G)=e-n+2=10-7+2=5,即代码复杂度为5级,实现独立路径覆盖的测试用例数为5个。 独立路径:即和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。上图的独立路径如下: 路径1:1->4->6->7 路径2:1->4->5–>7 路径3:1->2->4->6->7 路径4:1->2->4->5->7 路径5:1->2->3->4->5->6->7 测试用例编写如下:: 覆盖率分析: 以上基本路径法用例设计基本达到了语句覆盖100%,条件覆盖100%,分支覆盖100%,但未考虑不符合程序规范的输入,需辅以黑盒设计方法。 根据参数描述“IntA,IntB,IntX均为非0正整数”黑盒测试用例如下: 综合以上测试用例便为该程序较为完整的测试用例。
3.4测试实现 实现阶段任务主要为:根据项目情况,搭建测试环境、选择测试框架、完成测试代码的编写(要求实现数据与代码分离)。
测试代码类型包含:驱动代码、桩代码和mock代码,三者的关系如下:
- 驱动代码:指调用被测函数的代码。在单元测试过程中,驱动模块包括调用被测函数前的数据准备、调用被测函数以及验证相关结果(即断言)三个步骤。断言的功能是当预期的输出与实际的输出不符时,自动报告错误。
- 桩代码:模拟外部依赖的临时代码,一般模拟函数,仅控制执行路径,不验证测试结果。例如,某个函数A的内部实现中调用了一个尚未实现的函数B,为了对函数A的逻辑进行测试,那么就需要模拟一个函数B,从而保证A函数的按照预期的执行路径执行,这个模拟的函数B的实现就是所谓的桩代码。
案例分析: B函数未知,使用桩函数替代 用例:
驱动代码:
- Mock代码:模拟外部依赖的临时代码,一般模拟接口,需验证测试结果。mock对象用来判断测试是否能通过,也就是用来验证测试中依赖对象间的交互能否达到预期。
案例分析: 利用真实的对象进行测试只能等到下午五点不现实,此时可利用mock对象来进行测试。 Mock对象:增加时间赋值函数并将播放音频状态输出以便进行测试结论分析。 驱动代码: 3.5 单元测试执行: 根据数据文件和测试代码执行测试用例,并记录执行结果,对执行结果进行评估,并输出测试结果文件。 输出: - 源程序文件
- 单元测试用例,格式可参照附件1;
- 单元测试记录;
- 软件Bug清单(如有),格式可参照附件2;
- 单元测试报告。
4.附件 附件1
附件2
|