博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单元测试--1
阅读量:4281 次
发布时间:2019-05-27

本文共 2176 字,大约阅读时间需要 7 分钟。

目录

一、测试方法分类

按照是否执行分为:静态测试,动态测试

静态测试,动态测试

1.静态测试

静态测试(static testing)就是不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。

包括对代码测试、界面测试和文档测试三个方面:

对于代码测试,主要测试代码是否符合相应的标准和规范。对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。对于文档测试,主要测试用户手册和需求说明是否符合用户的实际需求。
  1. 动态测试

    动态测试(dynamic testing),指的是实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程,所以判断一个测试属于动态测试还是静态的,唯一的标准就是看是否运行程序。

按照测试手段分为:手工测试,自动化测试

按照测试对象来分:黑盒,白盒,灰盒

黑盒测试:

测试对象:系统功能测试

优点:简单
缺点:介入时间比较晚,发现重大bug时难以修复
评估标准:系统功能覆盖100%

灰盒测试

测试对象:模块之间的接口

优点:介入时间早于黑盒测试
缺点:需要相应的代码能力
评估标准:接口覆盖率

白盒测试

测试对象:代码,函数(也就一般常说的单元测试)

优点:介入时间早
缺点:需要相应的代码能力
评估标准:逻辑覆盖率

二 单元测试

为什么要做单元测试?

提前介入项目,提前发现代码级别的bug
单元测试适合什么样的项目?
1) 大型的,项目周期长 2)新团队 新系统 3)涉及生命和财产的

单元测试的开展:

单元测试计划:

单元测试设计:
单元测试实现:
单元测试执行:

一、单元测试计划:

1.确定测试范围

1)二八原则:20%的代码隐藏了80%的bug

2)如果确定20%的代码?
使用率:高
代码的复用性:全新的(需要测试重点关注的),部分复用, 全部复用
复杂度:复杂度在7级以上的
开发人员的能力:技术能力和业务能力
比如登录功能(使用率较高)

2.确定评估标准

逻辑覆盖率:包括语句覆盖率,分支覆盖率,条件覆盖率,路径覆盖率,分支-条件覆盖率

语句覆盖率

1)什么是语句:非分支判断

举例:判断一个数是否大于0,大于0就加一,小于0就减一
该问题的流程图就是:开始–输入一个数据–判断是否大于0 如果大于0:执行+1
如果小于0:执行-1 结束
这里面语句总共有三个:输入一个数据,执行+1,执行-1
语句是非判断分支

那么输入一个数据:从开始到结束 至少会执行两个语句,所以语句覆盖率为2/3

2)语句覆盖率:被测试的语句/ 语句总数

分支覆盖率

什么是分支:if语句的两个分支

举例:判断一个数是否大于0,大于0就加一,小于0就减一
一个判断对应两个分支,所以分支总数==判断个数*2

那么输入一个数据:只能走一个分支,分支覆盖率为1/2

分支覆盖率:被测试分支分数/全部分支个数

条件覆盖率

什么是条件:结果为ture或是false都输入条件

举例:判断一个数是否大于0,大于0就加一,小于0就减一

这里判断语句中就有a>0 是结果为ture或是false的

条件覆盖率总数=条件个数*2

那么输入一个数据:只能判断一次,条件覆盖率为1/2

举例:输入用户名和密码,if(name==“admin” and password==“123456”) 就登录成功,否则失败

条件覆盖率总数=条件个数2==22=4

那么输入admin 123456 条件覆盖率为 2/4(这里不能写成1/2 代表的含义不同)
那么输入zhangsan 123456 条件覆盖率为 1/4(因为name判断失败之后就不再进行第二次判断了)

路径覆盖率

什么是路径:从开始到结束的状态

覆盖率:被测试的路径/路径总数
路径覆盖率的分子:总是1

条件分支覆盖率

什么是路径:从开始到结束的状态

覆盖率:被测试的条件个数+被测试的分支个数/条件的总数+分支的总数

二、单元测试设计

1.测试策略:

1)自顶向下:从最上层函数逐层开始测试

测试每一个函数的时候,需要对函数中调用的函数进行打桩,模拟被测试的函数(所以一般不选择这种)
如果函数sum中调用了其他函数,那么需要先将其中的其他函数进行打桩
def sum(a,b):
c=add(a,b)
2)自底向上:从最下层的函数开始逐层向上开始测试
缺点:需要代码完成之后才能进行测试,测试周期比较长
3)孤立策略:
只选择需要测试的函数

三、单元测试实现:

1、先将测试的代码转化为流程图

2、将流程图转化为流图—流图主要是圈和线
圈:对应的是判断条件的语句和一条或是多条语句
线:带有箭头指向的链接

通过流图描述的是程序的复杂度(圈复杂度)—路径的个数就是复杂度的级别,路径的个数等于用例的个数

def fun():

if(条件1 and 条件2):
print1
print2
else:
print3

在这里插入图片描述

路径数:3
路径:条件1–条件2–print1,print2–结束
条件1—print3–结束
条件1–条件2—print2—结束

总结:路径的个数===条件的个数+1

如果测试代码是while循环:
复杂度===2 即条件个数+1
3)确定测试路径
4)写测试用例

四、单元测试执行:

借助于单元测试的框架unnitest

转载地址:http://fbfgi.baihongyu.com/

你可能感兴趣的文章
I2C (三) linux I2C
查看>>
I2C (四) linux I2C 驱动代码
查看>>
I2C (五) linux I2C 与 sysfs
查看>>
SPI (一) 协议
查看>>
SPI (二) 硬件操作
查看>>
SPI (三) linux SPI
查看>>
网卡 (一) 1 LAN简介
查看>>
网卡 (五) LWIP ip模块
查看>>
网卡 (六) LWIP udp模块
查看>>
网卡 (十四) LWIP 应用层 dhcp
查看>>
查看进程的相关信息
查看>>
ps命令
查看>>
硬件上电时序
查看>>
网卡 (一) 3 无线LAN 硬件 802.11 Wi-Fi芯片
查看>>
驱动 (5) 并发与同步
查看>>
总线设备驱动模型之platform
查看>>
总线设备驱动模型之i2c
查看>>
驱动中私有数据的存放
查看>>
sysfs_create_group 如何创建sys节点
查看>>
驱动 (3.1) 在kernel中申请内存
查看>>