一、软件测试的生命周期
测试贯穿软件的整个生命周期
软件测试的生命周期:++需求分析++ ++→测试计划→ 测试设计、测试开发→ 测试执行→ 测试评估->上线->运行维护++
需求分析:判断用户的需求是否合理,是否可实现
测试计划:计划项目由谁做,什么时候测试开始,什么时候测试结束,什么时候上线
测试设计:设计测试用例
测试开发:开发可以支持测试,提高测试效率的工具(web、应用等)
开发人员需要有主观能动性,发现bug是本职,还需要发掘工作中的痛点。
测试执行:执行测试用例,目的是为了发现BUG,验收BUG
测试评估:产出测试报告
测试报告可以理解为一个邮件
抄送人:项目相关人(测试领导、研发领导、产品领导)
收件人:项目直接相关人(开发,产品)
内容: 测试项目名称
仓库地址
项目直接人员
测试用例链接
BUG
产品规格说明书
技术文档 ...
上线:项目测试结束后,将项目发布到线上环境,测试人员需求跟踪上线并测试线上环境下软件运行是否正确
上线分为多个步骤:沙盒、小流量、全流量、全线上
沙盒:企业内部的线上环境,可以供内部人员进行测试
小流量:部分线上真实用户可以使用到,测试人员要线上手动测试,还要观察有没有错误日志。
全流量:所有真实用户都可以使用到。
全线上:将真实代码发布到所有服务器上。
二、描述一个BUG
bug的概念:
首先我们要明白 软件测试就是验证软件产品的特性是否符合用户的需求。
一切要以需求出发,在产品前期,产品经理就已经写好了需求文档,我们就要以需求文档为依据。
1.当且仅当规格说明(需求文档)是存在的并且正确,程序与规格说明之间的不匹配才是错误。
2.当需求规格说明书没有提及到的功能,判断标准以最终用户为准:当程序没有实现其最终用户合理预期的功能要求时,就是软件错误
2.1 为什么要写测试报告?
写报告,会留有一个记录,一些bug很难复现,这个可以在以后做参考,并且报告可以互相学习。
2.2 提交的BUG应该包含以下的内容:
1 、发现问题的版本
网页或者app等代码(软件产品)的版本
开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障。并且版本的标识也有利于 统计和分析每个版本的质量。
2、问题出现的环境(产品运行环境)
电脑操作系统、浏览器等
环境分为硬件环境和软件环境,如果是web 项目,需要描述浏览器版本,客户机操作系统等,如果是 app项目,需要描述机型、分辨率、操作系统版本等。详细的环境描述有利于故障的定位。
3 、错误重现的步骤
描述问题重现的最短步骤。
4 、预期结果的描述
要让开发人员指导怎么样才是正确的,尤其要以用户的角度来描述程序的行为是怎样的。如果是依据需 求提出的故障,能写明需求的来源是最好的。 要相信:测试人员是最懂需求的。
5 、实际结果的描述
描述错误的现象。crash 等可以上传 log , UI 问题可以有截图。
6 、其他
某些公司会有一些其他的要求,例如故障的分类:功能故障,界面故障,兼容性故障等。有些有优先级 的分类,严重影响测试需要开发人员优先修改的,可以设置优先级为高。
7 、不要把多个 bug 放到一起
在无法确认是同一段代码造成的故障时,不要将bug放在一起提交
例如 :
提交了如下 bug :
1 、在短信列表,选择一条短信,进行删除,删除失败
2 、在短信列表,选择一条短信,进行查看,在查看页面,进行删除,删除失败
故障发现版本: VPS20180226_01
故障类别:兼容性
故障优先级:中
故障标题 :ie 下界面显示异常,界面文字有重叠
故障描述:
测试环境: win7+IE8
测试步骤: 1 、打开 vps 首页,点击 " 通知 " 链接,进入通知页面
预期结果:通知页面显示正确,一页显示 10 条通知,按时间顺序倒序排列
实际结果:页面显示 10 条通知,通知顺序正确,但是页面文字有重叠
附件:上传截图
2.3 如何定义 bug 的级别
2.3.1 bug的优先级
有多个bug时,有些bug会直接影响到接下来的测试工作,急于处理,这类bug就属于优先级较高的bug,得优先修复。而有的bug,可能并不直接影响,可以排在后面。
例如一个网站:
登录密码展示位置错位
背景图颜色不对
登录功能有问题
...
从这几个bug中,优先级最高的就是 3 了,因为登录功能有问题的话,登都登不了,根本没办法继续测试网页里面的其他内容了。
2.3.2 bug 的级别
为什么要给bug定义级别?
1)评估程序员的开发能力(经常写出严重的bug,代表着开发能力欠缺)
2)年终奖(经常写出严重的bug,影响评估,影响年终奖)
3)bug修复顺序排序(优先级高的bug,优先修复,其他bug可以不急)
bug 的定义每个公司都不一致,在定义级别之前需要查看公司规范。
以下为样例:
1、Blocker (崩溃):
++阻碍开发或测试工作的问题++;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。
2、Critical (严重):
系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。
3、Major (一般):
功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作时间长、查询 时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等( 该问题实际测试中存在最多)
4、Minor (次要):
++界面、性能缺陷++ ,建议类问题,++不影响操作功能的执行++,可以优化性能的方案等。如:错别字、界面格 式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置 不正确,用户体验感受不好,可以优化性能的方案等(此类问题在测试初期较多,优先程度较低;
要注意 :
bug的提交一定要有理有据
如果项目需要按时交付,还有很多bug没有及时处理,周知项目相关人员,将次要的bug,放到下一个版本迭代。
开发在修复 BUG的时候,优先级高的先修改,优先级低的后修复。
2.3.2 bug 的生命周期
(new阶段)测试人员创建了一个 bug
(open阶段)开发人员确认是否为有效 bug,判断bug优先级是否要立即修改
如果是有效bug:
(delay阶段) 如果优先级很低,时间很紧,可以推迟修改
(fixed阶段)如果优先级很高,时间充足,立即修复,并且把 bug 的状态改为 已修复
如果是无效bug:(rejected)
则bug状态流转为 rejected,也就是拒绝掉
测试人员,验收 bug
(closed阶段)如果验收通过,没问题了,确认bug已修复
(reopen阶段)如果验收不通过,重新打开bug ,回到open阶段
三、如果和开发人员产生争执了怎么办?
bug的数量和级别都会影响到程序员的年终奖,所以很多时候测试人员和开发人员都会因为bug出现争论(甚至争吵)
开发说:这不是bug / 这个bug级别太高了,不应该是这样 / bug影响不大,我不改了
诸如此类..
为避免产生争执,需要有效沟通。
1)先检查自身提出的bug,是否描述不清楚?
能用文字描述bug,就尽量描述精准,这样就能减少沟通成本
但有时,bug的确很难用文字表达,词不达意。那么在提交bug的时候,就找到对应的开发人员对bug进行解释,确保程序员明白bug的描述
不要等到开发人员找自己,而是主动沟通。
2)站在用户角度考虑问题
应该让开发人员了解到Bug对用户可能造成的困扰,这样才能促使开发人员 更加积极地、高质量地修改Bug。在争执时,可以问一句:如果你是用户,你可以接受么?
案例: 例如:需求要求可以上传图片作为头像,但是没有定义格式。开发人员在上传时限制为只能传png格式的。 站在用户角度考虑一下:png,jpg那种格式更多?是否要用户自己进行格式转换再上传?
3)bug级别的定义要有理有据
bug定级描述文档拿出来,然后将bug的表现和bug定级描述文档进行匹配,说服程序员
4)提高自身技术和业务水平,做到不能提出问题,最好也能给出解决方案
(说话预期要委婉,不要以命令式的口吻来要求别人按照自己的逻辑来修改)
测试小白:更多的是提出问题(bug)
测试大牛:除了提出问题也能定位到问题,给出解决方案
5)开发人员比较犟,怎么说都不听的情况下,就需要进行bug评审
多轮沟通,但是开发人员仍然拒不接受。此时可以发起Bug评审。
Bug评审要注意的问题 缺陷的评审应该包括以下两个层面
● 决定如何处理Bug。
● 分析缺陷产生的原 因,找出预防的对策。
(1)决定如何处理Bug。 这一方面评审需要项目组各个方面的代表参加,通常不可缺少的是++测试代表、开发代表、产品代表++。
测试代表:(测试领导、一起测试的同事)
主要从Bug的具体表现、严重程度等方面提供信息,并提出自己对Bug的处理意见。需要注意 的是,测试人员不应该一味地要求对Bug进行修改,因为修改可能带来回归的风险,同时带来的是回归 测试的工作量,如果时间比较紧迫,修改后剩余的时间若不足以做一次有效的回归测试,可能不修改是 个明智的选择。
开发代表:(开发领导、开发人员)
主要从修改缺陷的难度和风险出发,考虑缺陷修改需要付出的代价,以及可能影响的范围、可 能引发的风险等,如果决定要修改,还要讨论出修改的初步方案。
产品代表:(产品经理)
主要从产品的整体计划、用户的要求等方面对缺陷的修改必要性、缺陷修改的时间和版本提出 自己的意见。 这在微软的做法叫"Bug三方讨论会",参加者一般是测试人员、开发人员和项目经理。 案例: 某网站经常隔几天访问时会出现500错误,但是之后就不会复现。 测试人员会提出问题:网站偶发性出现500错误。 开发人员回答:不常见,不影响使用,暂不修改 资深测试人员提出问题:网站偶发性500错误,查看日志,是由于mysql数据库8小时超时问题造成。需要修改 连接池配置定期校验连接 开发人员处理:修改xml,增加校验配置项 比特就业课
(2)分析缺陷产生的原因,找出预防的对策。 缺陷评审还应该包括原因分析,找出Bug出现的原因,尤其 是那些重复出现的Bug。应该找出出现错误的根源,并且制定出相应的预防措施,确保同类型的Bug不 再出现。 例如:有些Bug出现的原因不是简单的"引用为空"之类,而是开发人员的编码不规范或者编程 习惯不好而导致,所以必须建立起正确的编程方式才能预防这些错误的出现,否则只是在玩无聊地重复 发现相同的Bug的游戏。