本文共 2176 字,大约阅读时间需要 7 分钟。
静态测试,动态测试
1.静态测试静态测试(static testing)就是不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。
包括对代码测试、界面测试和文档测试三个方面:
对于代码测试,主要测试代码是否符合相应的标准和规范。对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。对于文档测试,主要测试用户手册和需求说明是否符合用户的实际需求。
动态测试
动态测试(dynamic testing),指的是实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程,所以判断一个测试属于动态测试还是静态的,唯一的标准就是看是否运行程序。
测试对象:系统功能测试
优点:简单 缺点:介入时间比较晚,发现重大bug时难以修复 评估标准:系统功能覆盖100%测试对象:模块之间的接口
优点:介入时间早于黑盒测试 缺点:需要相应的代码能力 评估标准:接口覆盖率测试对象:代码,函数(也就一般常说的单元测试)
优点:介入时间早 缺点:需要相应的代码能力 评估标准:逻辑覆盖率为什么要做单元测试?
提前介入项目,提前发现代码级别的bug 单元测试适合什么样的项目? 1) 大型的,项目周期长 2)新团队 新系统 3)涉及生命和财产的单元测试计划:
单元测试设计: 单元测试实现: 单元测试执行:1)二八原则:20%的代码隐藏了80%的bug
2)如果确定20%的代码? 使用率:高 代码的复用性:全新的(需要测试重点关注的),部分复用, 全部复用 复杂度:复杂度在7级以上的 开发人员的能力:技术能力和业务能力 比如登录功能(使用率较高)逻辑覆盖率:包括语句覆盖率,分支覆盖率,条件覆盖率,路径覆盖率,分支-条件覆盖率
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)自顶向下:从最上层函数逐层开始测试
测试每一个函数的时候,需要对函数中调用的函数进行打桩,模拟被测试的函数(所以一般不选择这种) 如果函数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/