单元测试--1

本文详细介绍了测试方法的分类,包括静态测试与动态测试,以及它们各自的特点和应用场景。同时,阐述了黑盒、白盒和灰盒测试的区别与优缺点。重点讲解了单元测试的重要性、适用项目类型、开展步骤和评估标准,如语句覆盖率、分支覆盖率等。此外,还探讨了单元测试的设计策略、实现方法和执行过程。
摘要由CSDN通过智能技术生成

一、测试方法分类

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

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

单元测试计划 版本:V1.3 文 档 编 号 保 密 等 级 作 者 最后修改日期 审 核 人 最后审批日期 批 准 人 最后批准日期 修订记录 日期 版本 修订说明 修订人 目 录 1 导言 2 1.1 目的 2 1.2 背景 2 1.3 范围 2 2 进入条件 2 3 退出条件 2 4 代码级别标准 2 5 代码分级清单 3 6 单元测试风险 3 7 单元测试策略 3 7.1 策略描述 3 7.2 类型 3 7.2.1 代码走查 3 7.2.2 功能测试 4 7.2.3 边界测试 4 7.2.4 覆盖率测试 4 7.2.5 内存使用测试 4 7.2.6 测试方式 4 7.3 测试用例估算 4 8 工具 5 9 进度及分工 5 10 交付物 5 导言 目的 【描述该代码走查及单元测试计划的目的。】 背景 【描述代码走查及单元测试计划的背景,活动目的。如无特殊背景信息,可裁剪。】 范围 【说明该代码走查及单元测试计划在整个项目周期的适用范围】 进入条件 【描述项活动的测试依据和满足该阶段测试进入的条件和约束。】 退出条件 【描述满足该阶段测试退出的条件,编写时特别要根据 《项目量化管理计划》列举一些量化的退出指标,例如 致命和严重级别的缺陷清除率达到 100%】 代码级别标准 【请参考组织级文档《代码分类级别指南》,中规定进行分类,质量经理可根据项目情况,对级别和通过标准做适当调整,将最后确定的通过标准记录在以下表格中】 级别 检查项 通过标准 A 代码编写格式检查 B 代码编写质量检查 C1 代码走查 C2 C3 D1 测试用例代码覆盖率检查 D2 D3 D4 E 内存泄漏检查 代码分级清单 【由架构师根据代码级别标准,划分】 模块 代码 A B C D E C1 C2 C3 D1 D2 D3 D4 √ √ √ √ √             单元测试风险 【此处描述测试任务可能遇到的风险,以及规避的方法】 # 风险描述 可能性 风险影响 责任人 规避方法 【高、中、低】 【高、中、低】 单元测试策略 策略描述 【此处描述根据项目的具体特征所确定的代码走查及单元测试的策略(如:代码走查在本项目重点关注的地方、测试可行性分析,测试方法确定,测试类型选择)】 类型 【此处描述单元测试选择的测试类型,一般建议有如下几种:】 代码走查 目标: 技术: 完成标准: 需考虑的特殊事项: 功能测试 测试目标: 技术: 完成标准: 需考虑的特殊事项: 边界测试 测试目标: 技术: 完成标准: 需考虑的特殊事项: 覆盖率测试 测试目标: 技术: 完成标准: 需考虑的特殊事项: 内存使用测试 测试目标: 技术: 完成标准: 需考虑的特殊事项: 测试方式 【说明手工测试的部分和自动测试的部分】 测试用例估算 【说明对需要开发的测试用例数目的估算】 模块 类数目 测试类型 测试用例数 工具 【本次测试将使用的工具】 用途 工具 厂商/自产 版本 测试管理 测试执行 缺陷报告 进度及分工  【根据测试的模块,分解任务,计划工作量、时间、人员;制订该计划的同时请参考中层计划等相关计划和估算文档;对于代码走查的人员安排一般要求架构师、高级工程师对工程师、助理工程师的代码进行走查,同时高级工程师、工程师 之间进行代码互查】 模块 任务 工作量 开始日期 人员 代码走查 用例设计 用例开发 用例执行 工作量合计 代码走查 用例设计 用例开发 用例执行 交付物 【描述单元测试需要交付的工作产品】 交付物名称 责任人 参与者 交付日期 测试计划 代码走查报告 测试用例 测试报告
子系统名:单元测试实例 模 块 名:单元测试实例模块 计划编号 用例编号 创建日期 测试要点描述 执行状态 数据输入、结果输出 预期结果 测试代码 是否通过 BUG号 覆盖率快照文件 覆盖率% 签名 PL-UT-MyCode-estimate UTC-MyCode-estimate-01 2005-7-31 id正确等价类:65535 未完成 "输入:id=65535 输出:return 1" 1 TestMyCode.testEstimatet1() 通过 / PL-UT-MyCode-estimate.jpc 100.00% 张三 UTC-MyCode-estimate-02 2005-7-31 id边界值:0 未完成 "输入:id=0 输出:return 0" 0 TestMyCode.testEstimatet2() 通过 / 张三 UTC-MyCode-estimate-03 2005-7-31 id边界值:1 未完成 "输入:id=1 输出:return 1" 1 TestMyCode.testEstimatet3() 通过 / 张三 UTC-MyCode-estimate-04 2005-7-31 id错误等价类:a 未完成 "输入:id=""a"" 输出:return 0" 0 TestMyCode.testEstimatet4() 通过 / 张三 UTC-MyCode-estimate-05 2005-7-31 id错误等价类:空 未完成 "输入:id="""" 输出:return 0" 0 TestMyCode.testEstimatet5() 通过 / 张三 PL-UT-MyCode-insertData UTC-MyCode-insertData-01 2005-7-31 增加记录正常 未完成 "输入:""2"",""111"",""m"" 输出:0" flag=0 TestMyCode.testinsertData1() 通过 / PL-UT-MyCode-insertData.jpc 83.10% 张三 UTC-MyCode-insertData-02 2005-7-31 id为空,insert失败 未完成 "输入:"""", ""111"", ""m"" 输出:1" flag=1 TestMyCode.testinsertData2() 通过 / 张三 UTC-MyCode-insertData-03 2005-7-31 id为1,重复,insert失败 未完成 "输入:""1"",""222"",""f"" 输出:2" flag=2 TestMyCode.testinsertData3() 通过 / 张三 UTC-MyCode-insertData-04 2005-7-31 name为空,insert失败 未完成 "输入:""3"", """", ""f"" 输出:3" flag=3 TestMyCode.testinsertData4() 通过 / 张三 UTC-MyCode-insertData-05 2005-7-31 sex不是m或f,insert失败 未完成 "输入:""4"", ""ggg"", ""h"" 输出:4" flag=4 TestMyCode.testinsertData5() 通过 / 张三 "填写说明: 1.该页面由开发人员填写 2.开发人员根据开发组长所填写的第二个sheet的内容设计单元测试用例,即,完成该sheet蓝色区域的填写。 3.开发人员执行测试用例,并执行过程中填写该sheet的紫色区域。"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值