目录
一、测试方法分类
按照是否执行分为:静态测试,动态测试
静态测试,动态测试
1.静态测试
静态测试(static testing)就是不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。
包括对代码测试、界面测试和文档测试三个方面:
对于代码测试,主要测试代码是否符合相应的标准和规范。
对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。
对于文档测试,主要测试用户手册和需求说明是否符合用户的实际需求。
-
动态测试
动态测试(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