单元测试个人总结

单元测试个人总结

1、 单元测试概述

单元测试,即对软件基本组成单元进行的测试,一般由编码者自行测试,若特殊情况(项目要求或其他)可由独立于编码者的测试人员进行。

其测试对象、优缺点、意义以及适用项目如图3-1所示:
单元测试个人总结_第1张图片

2、 工作阶段及任务
2.1 工作阶段:
在这里插入图片描述
单元测试位于编码阶段,即根据详细设计说明书完成单元代码编制、审查后便可进行,无需等系统全部集成。

2.2 阶段任务:
单元测试个人总结_第2张图片

获取详细设文件和源码文件后,设计测试用例,编写测试代码,对单元代码进行测试,将测试结论填写到单元测试报告和Bug清单中。把软件Bug清单和测试用例执行结果提交负责人。
对源码文件进行的测试,视程序存在缺陷的情况,可能要重复进行,直至问题解决

3、测试流程
单元测试个人总结_第3张图片
3.1 单元测试计划:
1)测试范围:

单元测试的对象为软件设计的最小单位——模块(组件、单元),作为单元能够实现一个特定的功能,并和其他单元有明确的接口定义。

测试范围的确定由以下几个因素构成,根据因素确定优先级,最后敲定测试范围:

  • 使用频率:越高优先级越高;
  • 复用性:未被复用过(即全新代码)的代码优先级高,复用代码无需测试;
  • 复杂度:复杂度7级(McCabe复杂度)以上的代码。
    注:复杂度计算详见白盒用例设计

2)评估标准:

单元测试的评估标准:代码覆盖率、需求覆盖率。

覆盖类型:语句覆盖、分支覆盖、条件覆盖、分支-条件覆盖、组合覆盖和路径覆盖(按照发现错误的能力呈由弱到强的变化排序)。单元测试个人总结_第4张图片
各种覆盖的优缺点如下表所示:
单元测试个人总结_第5张图片
单元测试评估标准的选择也需根据项目实际情况而定,目前较为常用的路径覆盖率。
3.2 单元测试设计
1)测试策略
测试策略以及各自的优缺点如下图所示:
单元测试个人总结_第6张图片
在实际测试过程中可能包括大量函数,不可能对所有的函数进行单元测试,所以需根据测试范围去敲定合适的测试策略(推荐孤立策略)。
注:桩函数和驱动函数介绍详见后续章节。
2)测试用例设计
测试用例的编制可从两方面进行设计:黑盒用例设计方法、白盒用例用例设计方法。

  • 黑盒设计

从该单元功能上确定输入和预期输出,不关注代码本身。一般考虑以下方面的数据输入:正常输入、异常输入和边界输入(边界输入不一定有)

  • 白盒设计(基本路径测试法)

基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。

具体步骤如下:

  • 将代码转换成流程图;
  • 将流程图转换成数据流图;
    数据流程图:由边(线)和节点(圆圈)组成;流程图与数据流图的关系以及复杂度计算如下图所示。

单元测试个人总结_第7张图片

  • 根据数据流图设计测试用例
    根据数据流图计算:基本路径的数量=圈复杂度V(G)=e-n+2(e代表边,n代表节点)。
    根据流图找出V(G)条独立路径并进行数据设计。
    3.3 案例分析
    被测代码(vbs):
    单元测试个人总结_第8张图片
    转换成流程图:

单元测试个人总结_第9张图片
数据流图:
单元测试个人总结_第10张图片
根据数据流程图计算:
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
测试用例编写如下::
单元测试个人总结_第11张图片
覆盖率分析:
单元测试个人总结_第12张图片
以上基本路径法用例设计基本达到了语句覆盖100%,条件覆盖100%,分支覆盖100%,但未考虑不符合程序规范的输入,需辅以黑盒设计方法。
根据参数描述“IntA,IntB,IntX均为非0正整数”黑盒测试用例如下:
单元测试个人总结_第13张图片
综合以上测试用例便为该程序较为完整的测试用例。

3.4测试实现
实现阶段任务主要为:根据项目情况,搭建测试环境、选择测试框架、完成测试代码的编写(要求实现数据与代码分离)。

测试代码类型包含:驱动代码、桩代码和mock代码,三者的关系如下:

单元测试个人总结_第14张图片

  • 驱动代码:指调用被测函数的代码。在单元测试过程中,驱动模块包括调用被测函数前的数据准备、调用被测函数以及验证相关结果(即断言)三个步骤。断言的功能是当预期的输出与实际的输出不符时,自动报告错误。
  • 桩代码:模拟外部依赖的临时代码,一般模拟函数,仅控制执行路径,不验证测试结果。例如,某个函数A的内部实现中调用了一个尚未实现的函数B,为了对函数A的逻辑进行测试,那么就需要模拟一个函数B,从而保证A函数的按照预期的执行路径执行,这个模拟的函数B的实现就是所谓的桩代码。
    案例分析:
    单元测试个人总结_第15张图片
    B函数未知,使用桩函数替代
    单元测试个人总结_第16张图片
    用例:
    单元测试个人总结_第17张图片

驱动代码:
单元测试个人总结_第18张图片

  • Mock代码:模拟外部依赖的临时代码,一般模拟接口,需验证测试结果。mock对象用来判断测试是否能通过,也就是用来验证测试中依赖对象间的交互能否达到预期。
    案例分析:
    单元测试个人总结_第19张图片
    利用真实的对象进行测试只能等到下午五点不现实,此时可利用mock对象来进行测试。
    Mock对象:增加时间赋值函数并将播放音频状态输出以便进行测试结论分析。
    单元测试个人总结_第20张图片
    驱动代码:
    单元测试个人总结_第21张图片
    3.5 单元测试执行:
    根据数据文件和测试代码执行测试用例,并记录执行结果,对执行结果进行评估,并输出测试结果文件。
    输出:
  • 源程序文件
  • 单元测试用例,格式可参照附件1;
  • 单元测试记录;
  • 软件Bug清单(如有),格式可参照附件2;
  • 单元测试报告。
    4.附件
    附件1
    单元测试个人总结_第22张图片

附件2
单元测试个人总结_第23张图片

你可能感兴趣的:(测试总结,单元测试,压力测试,测试用例)