目录

一、测试方法分类按照是否执行分为:静态测试,动态测试按照测试手段分为:手工测试,自动化测试按照测试对象来分:黑盒,白盒,灰盒黑盒测试:灰盒测试白盒测试

二 单元测试单元测试的开展:一、单元测试计划:1.确定测试范围2.确定评估标准语句覆盖率分支覆盖率条件覆盖率路径覆盖率条件分支覆盖率

二、单元测试设计1.测试策略:

三、单元测试实现:四、单元测试执行:

一、测试方法分类

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

静态测试,动态测试 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