文章目录
前言
一、什么是需求?
需求定义
在多数软件公司,会有两部分需求,一部分是用户需求,一部分是软件需求
用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。该需求一般比较简略,一个目的。
软件需求:或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。需求规格说明书(prd)。
大多数公司在进行软件开发的时候会把用户需求转化为软件需求,开发人员和测试人员工作的直接依据就是软件需求
为什么要有需求
需求是参考标准
为什么需求对软件测试人员如此重要
从软件功能需求出发,无遗漏的识别出测试需求是至关重要的。这将直接关系到用例的测试覆盖率对于识别出的每个测试需求点,需要采用具体的设计测试用例的方法来进行测试用例的设计
二、软件测试
测试用例定义
测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。
测试用例解决了两大问题:测什么,怎么测。
为什么会有测试用例?
1.提高测试效率
2.简历自动化的基础
软件错误(BUG)的概念:(我们拿到的大多是软件需求)
当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是错误。
当需求规格说明书没有提到的功能,判断标准以最终用户为准:当程序没有实现其最终用户合理预期的功能要求时,就是软件错误。
软件的生命周期
软件生命周期是指从软件产品的设想开始到软件不再使用而结束的时间。
如果把软件看成是有生命的事物,那么软件的生命周期可以分成6个阶段,即需求分析、计划、设计、编码、测试、运行维护。
需求分析:分析需求的可行性
计划:项目时间,项目人员,项目测试人员等等。
设计:开发人员:软件构架
设计人员:UI设计稿。
编码:编写代码
测试:测试人员提交bug等
运行维护:如果项目上线有bug,此时测试人员协助开发人员定位问题解决问题,最终项目重新上线。
开发模型:软件开发的流程
瀑布模型:
优点:线性的
缺点:测试人员介入项目太晚了
适用于较小项目
螺旋模型(Spiral Model)
一般在软件开发初期阶段需求不是很明确时,采用渐进式的开发模式。螺旋模型是渐进式开发模型的代表之一。
这对于那些规模庞大、复杂度高、风险大的项目尤其适合。这种迭代开发的模式给软件测试带来了新的要求,它不允许有一段独立的测试时间和阶段,测试必须跟随开发的迭代而迭代。
特点:软件每进入到下一个阶段的时候,都会进行风险分析
优点:风险分析可以避免一些问题出现在线上
缺点:如果风险分析错误,就会将问题暴露到线上,风险分析需要具备一定的知识
使用项目:适用于大型项目,适用于风险较多的项目
增量模型和迭代模型:
增量: ABCD
先开发A模块,在开发B模块,C模块,D模块
迭代:
ABCD各自开发一部分(框架搭建起来)->再去开发接口->方法
敏捷宣言:
个体与交互重于过程和工具
可用的软件重于完备的文档
客户协作重于合同谈判
响应变化重于遵循计划
在每对比对中,后者并非全无价值,但我们更看重前者。
scrum:
1.Scrum角色
scrum由product owner(产品经理)、scrum master(项目经理)和team(研发团队)组成。
其中product owner负责整理user story(用户故事),定义其商业价值,对其进行排序,制定发布计划,对产品负责。
scrum master负责在开各种会议,协调项目,为研发团队服务。
研发团队则由不同技能的成员组成,通过紧密协同,完成每一次迭代的目标,交付产品。
2.scrum的基本流程:
1.产品负责人负责整理user story,形成product backlog。
2.发布计划会议: product owner负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,sprint backlog.
3.迭代计划会议:项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,每个任务都有明确的负责人,并完成工时的初估计。
4.每日例会:每天scrum master召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题。
5.演示会议:迭代结束之后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由po整理,形成新的story.
6.回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,已达到持续改进的效果。
测试模型:
1.V模型
单元测试:Java单元类,方法
集成测试:将单元组装到一起测试
系统测试:功能测试
验收测试:产品验收
V模型优点:线性执行,将测试分为好多种类型
V模型缺点:测试人员介:入需求较晚,发现问题时机较晚
软件测试W模型
优点:测试人员就可以更早的介入需求
缺点:不能拥抱变化,不能适用于敏捷
特点:第一个V是开发流程,第二个V是测试流程
软件测试生命周期:
测试报告:(在线文档最好)
项目名称,项目代码地址,开发人员,测试人员,测试时间,项目计划(测试计划,开发计划),测试用例,bug…
文档:
以邮件方式周知到项目相关人,整个产品,开发,测试团队
一个合格的bug描述应该包括以下几个部分:
1、发现问题的版本
开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障。并且版本的标识也有利于统计和分析每个版本的质量。
软件的每个版本代码是不一样的
2、问题出现的环境
环境分为硬件环境和软件环境,如果是web项目,需要描述浏览器版本,客户机操作系统等,如果是app项目,需要描述机型、分辨率、操作系统版本等。详细的环境描述有利于故障的定位。
3、错误重现的步骤
描述问题重现的最短步骤,
4、预期行为的描述
要让开发人员指导怎么样才是正确的,尤其要以用户的角度来描述程序的行为是怎样的。如果是依据需求提出的故障,能写明需求的来源是最好的
5、错误行为的描述
描述错误的现象。crash等可以上传log,UI问题可以有截图。
6、其他
某些公司会有一些其他的要求,例如故障的分类:功能故障,界面故障,兼容性故障等。有些有优先级的分类,严重影响测试需要开发人员优先修改的,可以设置优先级为高。
7、不要把多个bug放到一起
在无法确认是同一段代码造成的故障时,不要将bug放在一起提交。
如何定义bug的级别
1、Blocker(崩溃)︰
阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)。
2、Critical (严重):
系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等(该等级问题出现在不影响其他功能测试的情况下可以继续该版本测试)。
3、 Major (一般)︰
功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作时间长、查询时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等(该问题实际测试中存在最多)
4、Minor(次要)∶
界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等(此类问题在测试初期较多,优先程度较低;在测试后期出现较少,应及时处理)
测试实践小方法
如何开始第一次测试
1、确定测试范围
2、测试用例是什么
3、测试时间
4、开发人员、测试人员
5、掌握需求
…
阅读需求文档,阅读技术文档,找产品经理沟通
如何发现更多的bug?
1、软件测试同样存在二八原则,80%的故障集中于20%的模块,如果某部分问题较多,加强其广度和深度!
2、开发人员也存在二八原则,80%的故障集中于20%的开发人员,如果某些开发人员的bug较多,加强他开发模块的测试广度和深度!
3、多进行逆向思维和发散性的思维
4、不要局限于用例和需求文档 (测试用例只是测试人员展开测试依据)
5、尽早介入项目,不要等到开发的差不多了再介入项目。(较早的介入项目的话,就可以深入理解项目)
产生争执怎么办(处理人际关系)
如测试第一个项目,发现了一个BUG,开发人员认为不是BUG,怎么办呢?
1、先检查自身,是否bug描述不清楚
2、站在用户角度考虑问题应该让开发人员了解到Bug对用户可能造成的困扰,这样才能促使开发人员更加积极地、高质量地修改Bug。在争执时,可以问一句:如果你是用户,你可以接受么?
3、BUG定级要有理有据
BUG定级时,不仅要参考BUG级别,还要考虑BUG是否会影响到流程,往往用户的BUG级别和我们的是有区别的,需站在用户的角度定考虑定位级别。
4、提高自身的技术和业务水平.不光要提出问题,最好也能提出解决方案
5、开发人员不接受时,不要争吵。(发起会议)
6、发起会议
在会议上表述清楚你的问题,问题解决方法是什么参会人:项目相关人
会议上一定要有结果: BUG由谁解决,是否解决,什么时候解决完成