转载声明:文章来源https://blog.csdn.net/qq_53869058/article/details/129921494
一 、答疑
1. 什么是软件测试
最常见的理解是:软件测试就是找BUG,发现缺陷。
刚新买来一部手机,我们要干什么?
一场考试, 做完一遍题目之后, 进行一遍检查, 就是在 "测试"
买一台电视, 安装好之后打开试试看能不能正常使用, 也是在 "测试"
软件测试就是验证软件产品特性是否 满足用户的需求 。
1983年,Bill Hetzel将软件测试定义为:软件测试就是一系列活动,这些活动是为了评估一个程序或者软件系统的特性或能力,并确定是否达到了其预期的效果。
从这话我们可以看出以下两点:
测试试图验证软件是“工作的”,也就是验证软件功能执行的正确性
测试的活动是以测试人员“预期的结果”为依据,这里的“预期结果”指的是需求定义。
软件测试的特点:
软件测试只是一个样本试验, 具有不可穷尽性 。
2. 软件测试和开发的区别
工作内容区别
开发人员通过各种编程语言等专业技能编写代码开发软件,修改BUG
测试人员设计测试用例,编写自动化测试工具
技能要求区别
测试 :技能要求广,专业度低,业务能力,设计和架构分析能力,测试手段和工具使用,用户模型分析和理解,编程能力,UI自动化,接口测试,抓包工具,性能测试等
开发:技能要求深,专业度高,写出更高效的代码
薪水
大厂开发和测试薪资基本一样
中小企业总体比研发低,自动化等专业测试领域和研发基本无差距
发展前景
自动化测试、安全测试等领域发展前景和研发基本一致。
测试:初级测试工程师 ->中级测试工程师 ->高级测试工程师 ->架构师 ->项目经理
开发:初级工程师 ->中级工程师 ->高级工程师 ->架构师 ->CTO
工作环境
基本类似
繁忙程度
一般比研发轻松,但敏捷模式下差距不大,产品发布前压力比较大
3. 调试和测试的区别是什么?
目的不同
调试:确保程序做了程序员想它做的事情(发现问题解决问题)
测试:确保程序解决了它该解决的问题 (发现问题提供解决方案)
参与角色不同 (人员)
测试由测试人员和开发人员来执行,黑盒测试主要由测试人员完成、单元/集成测试主要是由开发人员执行。
调试由开发人员完成。
执行的阶段不同
测试贯穿整个软件开发生命周期(测试在开发之前就已经介入测试,测试在软件需求阶段已经开始了)
调试一般在开发阶段(开发完成之后,或者边开发边测试)
手段区别
调试:idea打断点调试,分析代码逻辑
测试:等价类划分,边界值,判定表,语句覆盖,条件覆盖,条件语句覆盖......
4. 软件测试岗位
软件测试工程师
工程师的主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪BUG、编写测试报告等。
测试开发工程师
根据项目的特点来开发一些自动化测试的脚本,或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具什么的,从而能够更有效地进行测试,提高软件产品的质量。
测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作;测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。
性能测试工程师
针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本。
安全测试工程师
主要分析产品可能会出现的安全问题,做各个方面的渗透测试,提高产品的安全性
其它
系统测试工程师,嵌入式测试工程师,硬件测试工程师。
5. 一个优秀的软件测试人员具备的素质
综合能力
沟通能力
测试工程师的沟通能力会直接影响事务开展的效率。良好清晰的沟通能力,是一个技术优秀的测是工程师是否可以获得更好发展的“敲门砖”。
快速学习的能力
对不同业务需求和功能的快速学习与理解能力。 对于测试新技术和新方法的学习能力。
开发能力,文字表达能力
责任感与压力
责任感:测试往往是产品的最后一个检验者;测试的工作成效很难衡量,测试用例执行、bug数目的多少都无法说明产品是否能够交给用户使用。所以,责任感是最重要的测试必备素质之一。
压力:来自开发人员、用户、上级、自己的压力。测试人员的压力比想象中的要大。
掌握自动化测试技术
优秀的测试用例设计能力
测试用例设计能力是指,无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例。
探索性思维
掌握自动化测试技术,可以把你从大量重复性的手工劳动中解放出来,这样可以把更多的精力花在更多类型的测试上。
逆向思维:开发盖房子,测试拆房子。不走寻常路。
案例:手机中有两条通话记录,进行删除。删除为0后,继续删除。
发散性思维:探求多项答案
案例:测试一台自动售票机。正向,逆向,边界,压力,性能,耗电量,断电,外观,没零钱.....
6. 为什么要做测试
软件测试是为软件产品的质量把关的,目前软件测试的工业化时代还没有来临,自动化软件测试工具还没有能统一起来的模式,大部分还是靠人工测试,所以软件测试有很大的发展空间和前景。软件测试并不比软件开发轻松,也不比软件开发简单,选择软件测试并不是觉得它更容易,而是自己本身对这个行业更有兴趣,做测试也会更投入,所以选择测试而不是开发。
如软件测试贯穿于整个软件开发的生命周期,本人喜欢对个阶段的测试用例进行分析和设计,感觉测试更有趣。
对于任何行业,从业者的水平分布都是成金字塔形的。测试很有前途也很有挑战。
二、概念
1. 衡量软件测试结果的依据—需求
(1) 需求的概念
满足用户期望或正式规定文档(合同、标准、规范)所具有的条件和权能,包含用户需求和软件需求。
IEEE定义:软件需求是
(1)用户解决问题或达到目标所需条件或权能(Capability)。
(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。
一种反映上面(1)或(2)文档说明。它包括功能性需求及非功能性需求,非功能性需求对设计和实现提出了限制,比如性能要求,质量标准,或者设计限制。
在多数软件公司,会有两部分需求,一部分是用户需求,一部分是软件需求。
用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。该需求一般比较简略。
软件需求:或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。
大多数公司在进行软件开发的时候会把用户需求转化为软件需求,开发人员和测试人员工作的直接依据就是软件需求。
软件需求是测试人员进行测试工作的基本依据。
(2) 从软件测试人员角度看需求
需求是测试人员开展软件测试工作的依据。
在具体设计测试用例的时候,首先需要搞清楚每一个业务需求对应的多个软件功能需求点,然后分析出每个软件功能需求点对应的多个测试需求点,然后针对每个测试需求点设计测试用例。
过程如下,
业务需求—>软件功能需求点—>测试需求点—>测试用例
以“用户登陆”为例,来阐述下整个过程:
(3)为什么需求对软件测试人员如此重要
从软件功能需求出发,无遗漏的识别出测试需求是至关重要的,这将直接关系到用例的测试覆盖率
对于识别出的每个测试需求点,需要采用具体的设计测试用例的方法来进行测试用例的设计
(4)如何才可以深入理解被测试软件的需求
测试工程师在需求分析和设计阶段就开始介入,因为这个阶段是理解和掌握软件的原始业务需求的最好时机。
只有真正理解了原始业务需求之后,才有可能从业务需求的角度去设计针对性明确,从终端用户的使用场景到端到端的覆盖率较高的测试用例集。
(5)测试用例的概念
测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含: 测试环境、操作步骤、测试数据、预期结果等要素。
测试用例解决了两大问题:测什么,怎么测。
测试过程中可能会遇到以下问题:
(1)不知道是否较全面的测试了所有功能
(2)测试的覆盖率无法衡量
(3)对新版本的重复测试很难实施
(4)存在大量冗余测试影响测试效率
测试用例的产生就是为了解决上述的问题。
尝试写一个测试用例
测试标题:注册网易邮箱
测试环境:win10,Microsoft Edge版本
测试数据:
邮箱地址:123456@qq.com
密码:123456
手机号:12345678912
测试步骤:1.打开浏览器,输入网易注册地址: 注册网易免费邮箱 - 你的专业电子邮局 (163.com)
2.输入邮箱地址,密码,手机号码,同意服务条款
3. 点击注册
测试预期:展现注册成功结果页,并使用账号可以登录成功
删除微信聊天记录功能是否正常
基本测试点:
(1)单条删除;
(2)全部删除
(3)清空聊天记录
(4)没有网络的情况下删除聊天记录
(5)弱网的情况下删除聊天记录
兼容性:
(1)测试不同的微信版本
(2)测试不同的手机系统(iOS,Android,包括不同安卓机不同品牌的机型)
性能:
删除聊天记录时的速度(单条,全部,清空)
2. 软件错误(BUG)的概念
第一个bug :
1945年9月的某天,在一间老式建筑里,从窗外飞进来一只飞蛾,此时Hopper正埋头工作在一台名为Mark Il的计算机前,并没有注意到这只即将造就历史事件的飞蛾。这台计算机使用了大量的继电器(电子机械装置,那时还没有使用晶体管)。突然,Mark II死机了。Hopper试了很多次还是不能启动,他开始用各种方法查找问题,最后定位到了某个电路板的继电器上。Hopper观察这个继电器,惊奇地发现一只飞蛾已经被继电器打死。Hopper小心地用镊子将飞蛾夹出来,用透明胶布贴到“事件记录本”中,写上“第一个发现虫子的实例”。Hopper的事件记录本,连同那只飞蛾,现在都陈列在美国历史博物馆中。 软件错误的一般定义: 程序与规格说明之前不匹配 。
注意:以上说法是片面的,准确的来说:当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是 错误 。
当需求规格说明书没有提到的功能,判断标准以最终用户为准:当程序没有实现其最终用户合理预期的功能要求时,就是 软件错误 。
3. 开发模型和测试模型
软件工作的范围不仅仅局限在程序编写,而是扩展到了整个软件生命周期,如软件基本概念的形成、需求分析、设计、实现、测试、安装部署、运行维护,直到软件被更新和替换新的版本。软件工程还包括很多技术性的管理工作,例如过程管理、产品管理、资源管理和质量管理。
(1)软件的生命周期
软件生命周期是指从软件产品的设想开始到软件不再使用而结束的时间。 如果把软件看成是有生命的事物,那么软件的生命周期可以分成6个阶段,即需求分析、计划、设计、编码、测试、运行维护。
需求分析:分析需求是否正确,是否完整
计划:项目什么时候上线,项目什么时候时候开发,项目由谁做,项目什么时候测试等等
设计:技术文档,UI设计稿
编码:根据软件需求写代码
测试:测试软件是否有BUG
运行维护:出现线上问题,进行修复
(2)瀑布模型(Waterfall Model)
瀑布模型在软件工程中占有重要地位,是所有其他模型的基础框架。瀑布模型的 每一个阶段都只执行一次, 因此是线性顺序进行的软件开发模式。
优点:
强调开发的阶段性;
强调早期计划及需求调查;
强调产品测试。
缺点:
依赖于早期进行的唯一一次需求调查,不能适应需求的变化;
由于是单一流程,开发中的经验教训不能反馈应用于本产品的过程;
风险往往迟至后期的测试阶段才显露,因而失去及早纠正的机会。
瀑布模型的一个最大缺陷在于,可以运行的产品很迟才能被看到。这会给项目带来很大的风险,尤其是集成的风险。因为如果在需求引入的一个缺陷要到测试阶段甚至更后的阶段才发现,通常会导致前面阶段的工作大面积返工,业界流行的说法是:“集成之日就是爆炸之日”。尽管瀑布模型存在很大的缺陷,例如,在前期阶段未发现的错误会传递并扩散到后面的阶段,而在后面阶段发现这些错误时,可能已经很难回头再修正,从而导致项目的失败。但是目前很多软件企业还是沿用了瀑布模型的线性思想,在这个基础上做出自己的修改。例如细化了各个阶段,在某些重点关注的阶段之间掺入迭代的思想。
在瀑布模型中,测试阶段处于软件实现后,这意味着必须在代码完成后有足够的时间预留给测试活动,否则将导致测试不充分,从而把缺陷直接遗留给用户。
(3)螺旋模型(Spiral Model)
一般在软件开发初期阶段需求不是很明确时,采用渐进式的开发模式。螺旋模型是渐进式开发模型的代表之一。这对于那些 规模庞大、复杂度高、风险大的项目 尤其适合。这种迭代开发的模式给软件测试带来了新的要求,它不允许有一段独立的测试时间和阶段,测试必须跟随开发的迭代而迭代。因此,回归测试的重要性就不言而喻了。
优点:
强调严格的全过程风险管理。
强调各开发阶段的质量。
提供机会检讨项目是否有价值继续下去。
缺点:
引入非常严格的风险识别、风险分析和风险控制,这对风险管理的技能水平提出了很高的要求。这需要人员、资金和时间的投入。
(4)增量、迭代
增量开发能显著降低项目风险,结合软件持续构建机制,构成了当今流行的软件工程最佳实践之一。增量开发模型,鼓励用户反馈,在每个迭代过程中,促使开发小组以一种循环的、可预测的方式驱动产品的开发。因此,在这种开发模式下,每一次的迭代都意味着可能有需求的更改、构建出新的可执行软件版本,意味着测试需要频繁进行,测试人员需要与开发人员更加紧密地协作。
增量通常和迭代混为一谈,但是其实两者是有区别的。增量是逐块建造的概念,例如画一幅人物画,我们可以先画人的头部,再画身体,再画手脚……而迭代是反复求精的概念,同样是画人物画,我们可以采用先画整体轮廓,再勾勒出基本雏形,再细化、着色。
(5)敏捷
《敏捷宣言》: 我们通过身体力行和帮助他人来揭示更好的软件开发方式。经由这项工怍,我们形成了如下价值观。
个体与交互重于过程和工具
可用的软件重于完备的文档
客户协作重于合同谈判
响应变化重于遵循计划
在每对比对中,后者并非全无价值,但我们更看重前者。
由敏捷宣言可以看出,敏捷其实是有关软件开发的社会工程(Social Engineering)的。敏捷的主要贡献在于他更多地思考了如何去激发开发人员的工作热情,这是在软件工程几十年的发展过程中相对被忽略的领域。
敏捷开发有很多种方式,其中scrum是比较流行的一种。
scrum
scrum里面的角色
scrum由product owner(产品经理)、scrum master(项目经理)和team(研发团队)组成。其中
(1)product owner负责整理user story(用户故事),定义其商业价值,对其进行排序,制定发布计划,对产品负责。
(2)scrum master 负责召开各种会议,协调项目,为研发团队服务。
(3)研发团队则由不同技能的成员组成,通过紧密协同,完成每一次迭代的目标,交付产品。
scrum的基本流程:
1. 产品负责人整理user story,形成product backlog。
2. 发布计划会议:制定出这一期迭代要完成的story列表,sprint backlog。
3. 迭代计划会议:项目团队分解story,确定负责人。
4. 每日例会:每天scrum master召集站立会议,总结前一天的工作,阐述今天的计划。
5. 演示会议:迭代结束之后,召开演示会议,演示成果,PO整理反馈记录。
6. 回顾会议:项目团队对本期迭代进行总结。
迭代开发
与瀑布不同,scrum将产品的开发分解为若干个小sprint(迭代),其周期从1周到4周不等,但不会超过4周。参与的团队成员一般是5到9人。每期迭代要完成的user story是固定的。每次迭代会产生一定的交付。
敏捷中的测试
挑战:快速迭代
(1)测试工作的核心内客是没有变的,就是不断地找Bug,只是要调整好自己的心态,一切以敏捷的原则为主。
(2)测试人员不能依赖文档,测试用例作用减弱,更多的采用思维导图、探索性测试(强调自由度,设计和执行同时执行,根据测试结果不断调整测试计划)、自动化测试
(3)敏捷讲求合作,在敏捷项目组中,测试人员应该更主动点,多向开发人员了解需求、讨论设计、一起研究Bug出现的原因。
(6)软件测试v模型
V模型最早是由Paul Rook在20世纪80年代后期提出的,目的是改进软件开发的效率和效果。是瀑布模型的变种
明确的标注了测试过程中存在的不同类型的测试,并且清楚的描述了这些测试阶段和开发过程期间各阶段的对应关系:V模型指出,①单元和集成测试应检测程序的执行是否满足软件设计的要求;②系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标;③验收测试确定软件的实现是否满足用户需要或合同的要求
局限性:仅仅把测试作为在编码之后的一个阶段,未在需求阶段就进入测试
(7)软件测试W模型
W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。
W模型特点:测试的对象不仅是程序,需求、设计等同样要测试,测试与开发是同步进行的
W模型优点:有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需 求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,显著减少总体测试时间,加快项目进度。
局限性:需求、设计、编码等活动被视为串行的;测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。无法支持敏捷开发模式。对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临着困惑。
帖子还没人回复快来抢沙发