一、认识测试
1、什么是测试
测试在生活中随处可见,比如买衣服时就要对衣服进行测试(外观测试、试穿测试、材质测试、价格测试)后再决定是否购买。而在开发程序软件的过程中也需要测试来发现和解决问题。
2、为什么要软件测试
软件测试就是检验软件产品特性是否满足用户的需求
企业的最终目的是“盈利”,互联网企业借助软件/系统来跟用户交互从而获得盈利,也就是说企业的受众群体主要是广大的使用用户,而用户的使用感受会直接影响企业的盈利,若产品质量太差将会导致大量用户的流失,所以企业非常重视测试。
3、测试的岗位
测试的岗位主要分为软件测试开发工程师(简称测开)和测试工程师,不管是哪种,都统称为测试人员,都对产品质量负责,保障产品质量。这两种岗位的区别在于软件测试开发工程师的工作重点是业务测试,开发测试效率工具(自动化、性能测试、覆盖率等),而测试工程师的工作重点就是业务测试。绝大多数的中大厂的测试岗位基本都为软件测试开发性质,若无法确定时可以先拿下offer,询问hr或者面试官内是否有技术事务。
效率工具是测试人员开发出来的,测试人员也需要进行后期的工具管理,因此效率工具不能代替测试人员。对于测试人员来说,没有权限开发业务代码,效率工具不仅可以提高测试效率,还可以提高测试质量。
在测试岗位的实习过程中的一般流程为:(1)熟悉工作和测试流程(2)通过业务测试熟练个人的测试能力(3)掌握各种各样的工具提高测试的质量和效率(4)开始逐步学习开发工作效率工具
4、软件测试和开发的区别
在工作内容上:开发岗做的是业务开发,而测试岗做的是业务测试
在难易程度上:开发岗应届生要求掌握语言基础、开发框架、数据库、数据结构、Linux等课程,在职人员还需要掌握更多中间件如:Redis、rabbitMQ、ES等,要求掌握以上技术并能运用在代码开发中;测试岗除了要求掌握以上开发岗的技能以外还需要掌握测试技能:测试概念、设计测试用例、执行测试等。总的来说,开发广度小、专业度高。测试广度大,专业度相对较低,但大型互联网企业对测试人员的专业要求可能跟开发差不多,这是因为大厂对产品的质量要求更高,所以对测试人员的要求也更多。
在工作环境上:很多公司,由于测试人员和开发人员的沟通会比较频繁,因此测试人员和开发人员都是坐在一个办公楼层的不同区域,同一个业务线的测试人员和开发人员通常坐在一起,所以他们的工作环境、设备基本都是一样的。
在薪水上:中小企业总体比研发低,自动化等专业测试和研发基本无差距。大厂研发和测试薪资基本无差别,最终都要以个人能力来评估
在其他方面:测试人员会进行测试,而开发人员会进行调试,调试的任务是定位并解决程序中的问题,主要由开发人员在开发阶段完成,测试的任务是发现程序中的缺陷,主要是由测试人员和开发人员来执行,黑盒测试主要由测试人员完成、单元/集成测试主要是由开发人员执行,测试贯穿于整个软件开发生命周期
高频面试题:走测试岗位为什么要学习开发知识呢?
回答:测试人员也需要编写代码,如自动化测试、性能测试、开发测试效率工具等。测试人员需要能够看懂代码、了解开发框架。同时,学好开发知识能够提高软件测试质量。通过查看代码中数据走向能够更好的从代码层面去发现问题。但测试人员没有权限开发业务代码,因此当发现错误后不可以直接随意改动代码。
5、优秀的软件测试人员具备的素质
综合能力: 沟通能力、快速学习能力、开发能力、文字能力
掌握自动化技术:自动化测试是中大厂必不可少的技术事务,但自动化只是一个统称,分类有很多,如接口自动化、UI自动化等。那么自动化技术有什么作用呢?许多软件每隔一段时间就要更新,而每次更新迭代后对历史功能和新功能都要进行测试,如果手动测试就会耗时耗力,但如果用自动化技术来测试历史功能就会极大地提升效率。
测试用例的设计能力:测试用例的设计能力是指无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例。提高测试用例的设计能力:(1)掌握设计测试用例的方法(2)阅读好的测试用例设计案例(3)多写多练,积累总结
探索性思维:在执行测试的过程中不断学习被测系统,结合自己的经验、知识、直觉,进行系统的错误猜测和逻辑推理,整理和分析出更多有针对性的测试关注点。因此,探索性思维的质量取决于测试人员的经验
兴趣:兴趣是就业择岗的重要因素之一,只有选择自己喜欢的岗位才能越走越远,越做越好。
6、开发和测试出现冲突如何解决
(1)首先反思自己是否是bug描述的不清楚或者是自己的疏忽导致的
(2)站在用户的角度反问开发人员:如果你是用户你能接受这样的情况吗
(3)不仅能提出问题,最好也能给出解决方案
二、测试的概念
1、需求的概念
需求分为用户需求和软件需求,其中用户需求是指没有经过合理的评估的需求,通常就是一句话;而软件需求是开发人员和测试人员执行工作的依据。用户需求不能直接作为开发和测试的依据,针对用户的需求,产品经理需要进行需求分析(技术可行性、市场可行性、成本投入和收益占比等)后才可以转变成为软件需求。
2、开发模型
规范的流程是在时代的演变下逐渐成型的,并不是一开始就是规范的流程。软件的生命周期实际就是软件的开发模型。软件的生命周期:需求分析——计划——设计——编码——测试——运行维护,这是软件的通用流程(基础流程)
常见的开发模型有:瀑布模型、螺旋模型、增量模型、迭代模型
瀑布模型:start→需求分析→计划→设计→编码→测试→end(同软件的生命周期基础流程),特点:每个流程只执行一次,是线性的开发流程。瀑布模型的缺点也比较明显,1)在瀑布模型中将测试后置,前面各阶段遗留的风险推迟到测试阶段才被发现,导致项目大面积返工,失去了及早修复的机会,2)必须留有足够的时间给测试活动,否则会导致测试不充分,将缺陷直接暴露给用户3)周期太长,产品很迟才能被看到和使用,可能会导致功能/需求过时。瀑布模型适用场景是需求固定的小项目
螺旋模型:
特点:螺旋模型中各个阶段都引入风险分析+原型,引入的目的是减少各阶段遗留的风险问题,避免把问题留到后面的阶段。螺旋模型的优点在于 1)强调严格的全过程风险管理 2)强调各开发阶段的质量 3)增加风险分析和原型,而缺点在于 1)项目中可能存在的风险性与风险管理人员的技术水平有直接关系 2)需求人员、、资金、时间的增加和投入,可能会导致项目的成本太高。螺旋模型适合规模庞大、复杂度高、风险大的项目
增量模型和迭代模型
增量模型是将大需求拆分成小需求,每个小需求独立开发上线,与此类似的有一个迭代模型,迭代模型会上线一个基础版本,但是基础版本所有的功能都有只不过功能比较简陋,后期再继续迭代优化上线。增量模型是逐块建造的概念,迭代是反复求精的概念,适用于需求不明确的大型项目。随着互联网的发展,许多企业会将这两个模型配合起来一起使用。
敏捷模型:
在早期,迭代瀑布模型非常流行来完成一个项目。但是由于现在使用时面临着各种各样的问题。主要困难包括在项目开发期间处理来自客户的变更请求以及合并这些变更所需的高成本和时间。为了克服瀑布模型的这些缺点,在1990年代中期提出了敏捷软件开发模型。
在实际的工作中,产品的功能需求是在不断变化中的。敏捷模型中有一个非常重要的宣言:个体与交互重于过程和工具(强调高效的沟通);可用的软件重于完备的文档(强调轻文档,文档不应该作为工作验收的标准);客户协作重于合同谈判(主动及时了解当下的需求);响应变化重于遵循计划(能够主动迎接变化)。因此总结出敏捷模型的四个特点:轻文档、轻流程、重目标、重产出。
Scrum是敏捷模型中的一种,又称为迭代式增量软件开发模型。在Scrum模型中,主要有三个角色和五个重要会议。
三个角色:产品经理、项目经理、研发团队
产品经理:负责整理用户需求,定义其商业价值,对其进行排序,判定发布计划,对产品负责
项目经理:负责召开各种会议,协调项目,为研发团队服务
研发团队:由不同技能的成员组成,通过紧密协同,完成每一次迭代的目标,交付产品
五个重要会议:发布计划会议、迭代计划会议、每日例会、演示会议、回顾会议
发布计划会议:产品经理负责讲解用户需求,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的用户需求列表
迭代计划会议:项目团队对每一个用户需求进行任务分解,分解的标准是完成该用户需求的所有任务,每个任务都有明确的负责人,并完成工时的初估计。
每日例会:每天项目经理召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题
演示会议:迭代结束以后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来由产品负责人整理,形成新的用户需求。
回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,以达到持续改进的效果。
3、测试模型
V模型:
V模型明确地标注了测试过程中存在的不同类型的测试,缺点是仅仅把测试作为在编码之后的一个阶段,未在需求阶段就介入测试
W模型(双V模型)
V模型中未将测试前置的问题在W模型中得以解决。
特点:测试的对象不仅是程序,需求、设计等同样要测试,测试与开发是同步进行的
缺点:(1)需求、设计、编码等活动被视为串行的;(2)测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作;(3)重流程,无法支持敏捷开发模式。对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临着的困惑