单元测试知识总结

我们希望每段代码都是自测试的,每次改动之后,都能自动发现对现有功能的影响。

1 测试要求

在对软件单元进行动态测试之前,应对软件单元的源代码进行静态测试;

应建立测试软件单元的环境,如数据准备、桩模块、模拟器。

对软件设计文档规定的软件单元的功能、性能、接口等应逐项进行测试。

每个软件特性应至少被一个正常测试用例和一个被认可的异常测试用例覆盖

测试用例的输入应至少包括 有效等价类值、无效等价类值 和 边界数据值;

语句覆盖率要达到要求(如70%);

分支覆盖率要达到要求(如70%);

对输出数据正确与否 及 其格式进行测试。

2 单元测试任务

模块接口测试;

模块局部数据结构测试;

模块边界条件测试;

模块中独立执行路径测试;

模块的错误处理路径测试。

3 静态分析

控制流分析:根据设计文档定义的控制流程,分析被测试程序是否按要求运行。

数据流分析:用控制流程图来分析数据发生的异常情况,这些异常包括被初始化、被赋值或被引用过程中行为序列的异常。数据流分析也作为数据流测试的预处理过程

推荐使用“TDD测试驱动开发”的方式,开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么代码产品,之后再开始真正的业务需求开发。

4 动态测试

4.1 功能测试

功能测试是对软件设计中的软件单元逐项进行的测试,以验证其功能是否满足要求。

功能测试一般需进行:

用正常值的等价类输入数据值测试;

用非正常值的等价类输入数据值测试;

进行每个功能的合法边界值和非法边界值输入的测试;

用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果

4.2 接口测试

接口测试是对软件设计文档中的外部/内部接口逐项进行的测试。

接口测试一般需进行:

测试所有外部/内部接口,检查接口信息的格式和内容;
对每一个外部/内部输入/输出接口必须进行正常和异常情况的测试

4.3 边界测试

边界测试是对软件处在边界或端点情况下运行状态的测试。

边界测试一般需进行:

软件的输入域或输出域的边界或端点的测试;
状态转换的边界或端点的测试;
功能界限的边界或端点的测试;
性能界限的边界或端点的测试;
容量界限的边界或端点的测试。

4.4 逻辑测试

逻辑测试是测试程序逻辑结构的合理性、实现的正确性。逻辑测试应由测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。

逻辑测试应满足覆盖率的要求,一般需进行:

  • 语句覆盖;
  • 分支覆盖;
  • 条件覆盖;
  • 条件组合覆盖;
  • 路径覆盖。

5 单元测试用例设计方法

等价类划分、边界值分析、逻辑覆盖法、基本路径测试法

5.1 等价类划分

等价类划分的方法是把程序的输入划分成若干等价类部分,然后从每个部分中选取少数代表性数据当作测试用例。

确定等价类原则:

  • 如果输入变量定义了一个取值范围(例如正常取值为[1,999]),那么就应确定一个有效等价类(1≤输入≤999),以及两个无效等价类(输入<1,输入>999);
  • 如果输入变量为枚举类型,或对于规定的有限输入值集合分别进行不同的处理,那么应对每一个输入确定一个有效等价类,并确定一个无效等价类;
  • 如果对输入变量进行逻辑判断,那么应对逻辑条件满足与否分别确定一个有效等价类和一个无效等价类;
  • 如果输入变量作为数组下标或指针使用,那么应根据规定的数组元素个数,分别确定有效等价类和无效等价类。

5.2 边界值分析

  • 如果规定了变量的输入范围,那么应该对范围的边界设计测试用例;对于未具体规定取值范围的输入变量,应考虑对变量数据类型所能达到的最大范围的上下限设计测试用例;
  • 如果规定了数组、循环逻辑次数等数量,应针对最小、最大数量值的边界设计测试用例;
  • 如果规定了输出变量的范围,还应考虑针对输出变量范围边界所对应的输入变量数值设计测试用例;
    在这里插入图片描述
  • 对各边界条件的上点和离点作为测试输入数据
  • 如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据
  • 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例

5.3 逻辑覆盖法

逻辑覆盖法是根据程序内部逻辑覆盖满足性设计测试用例的白盒测试方法。

(1)语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。

(2)分支覆盖:(判定覆盖)使设计的测试用例保证程序中每个判断的每个取值分支至少经历一次。但若程序中的判定是有几个条件联合构成时,它未必能发现每个条件的错误;

(3)条件覆盖:条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支;

(4)分支 / 条件覆盖:分支/条件覆盖是使判定中每个条件的所有可能结果至少出现一次,并且每个分支本身的所有可能结果也至少出现一次;
(5)条件组合覆盖:条件组合覆盖是使每个分支中条件结果的所有可能组合至少出现一次,因此分支本身的所有可能结果也至少出现一次

(6)路径覆盖:是每条可能执行到的路径至少执行一次。

补充:
(1)语句覆盖在所有的测试方法中是一种最弱的覆盖。
(2)判定覆盖和条件覆盖比语句覆盖强,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖和语句覆盖
(3)路径覆盖也是一种比较强的覆盖,但未必考虑判定条件结果的组合,并不能代替条件覆盖和条件组合覆盖。

举个例子吧:

if A and B then Action1
if C or D then Action2

语句覆盖最弱,只需要让程序中的语句都执行一遍即可 。上例中只需设计测试用例使得A=true B=true C=true 即可。

分支覆盖又称判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。上例需要设计测试用例使其分别满足下列条件即可

(1)A=true,B=true,C=true,D=false

(2)A=true,B=false,C=false,D=false。

条件覆盖:要使得每个判断中的每个条件的可能取值至少满足一次。上例中第一个判断应考虑到A=true,A=false,B=true,B=false第二个判断应考虑到C=true,C=false,D=true,D=false,所以上例中可以设计测试用例满足下列条件

(1)A=true,B=true,C=true,D=true

(2)A=fal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiegwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值