前言
在进入软件测试的正式讲解之前,我们需要对这个行业有一个整体的了解。
当我们从软件开发转向软件测试的时候,多数公司是欢迎的,而且难度也小。
反之,当我们从软件测试转向软件开发的时候,难度将会变得很大。
关于互联网的工作大概有以下三种:
1、软件开发:进行软件系统的开发,功能实现的工作
像作者我学的是 java,java里面就会有一些框架,数据库,数据结构。。。
这些东西都是属于软件开发中涉及的到知识。
2、软件测试
验证软件功能性的正确性。
具体的验证方式分为以下几种:
1、手工验证
2、自动化验证
3、软件测试与开发
开发测试工具,开发测试脚本,其目的就是为了提高测试效率。
看到开发这两个字,说明是会涉及到编程的。
但是难度会比软件开发低一些,没有数据结构中的编程那么难。
测试开发这里的编程,都是有着指定规则来编写代码。
换句话来说,它有着自己的一套流程,每个部分怎么去写,写什么,都是有这具体的规则。不会涉及到 很复杂的 逻辑 和 数学知识。
另外,软件测试 和 软件测试开发,这两门技能 相对于 软件开发,所涉及 知识深度 要浅一些,但是涉及的知识面比较广。
总的来说:寻找 软件测试 和 软件测试开发 相关的工作,所需要知识面很广,但是对于知识的理解深度,要求要低一些。
而 软件开发 与前面两个是反着来的:它更在意你对于知识理解的深度。对于我们知识面的广度要求并不高。
择业,最好根据自己的兴趣 和 自身技能的积淀 去选择适合自己发展的职业道路
在这篇博客中,我们主要讨论理解以下几个问题:
1、什么是软件测试
2、软件测试和研发的区别
3、一个优秀的测试人员所具体的素质
什么是软件测试?
这个问题在面试 软件测试 工作的时候,被问到的概率高达90%。
他可能会想:既然你找这份工作,肯定对于工作是具有一点了解的。
还有一个经常会问到的问题:你为什么会选择 软件测试开发 的工作?
其实面试官在问你这个问题的时候,是想让你回答 你的竞争力 体现 哪里?
如让他在 众多的人群中 选择你!
这个时候就需要你去讲解自身的优势。
回头来,思考一个问题 什么是 软件测试?
从生活的角度出发,生活中的测试场景都有哪些?
1、考试
测试你有没有将老师们将的内容给掌握了。
2、买游戏机
我们是不是需要先体验一下,看看得不得劲,是否满足我们的需求。
不然买到手之后,马上就会后悔
3、买衣服
我们肯定第一件事,先看看衣服的品相怎么样,是否与自己相匹配。
然后,通过触摸,感受衣服的舒适度、
另外,查看 衣服的牌子上 所记录的制作材料
在上面的条件都满足之后,我们才会去问尺寸和价格。
尺寸 要合适,这样才合身
价格,也是一个条件,需要在我们的预算之内。
在了解软件测试之前,我们需要先知道 软件 是什么?
软件,就是安装在 硬件上的一些应用程序。
比如: web系统(学校的教务系统,供应链系统【货物的供应,订单,厂商,存储仓库…于一体的系统,以网页的形式表现出来】,办公系统),APP(微信 / qq / CSDN / 小程序 / 公众号)
前面也说到过:软件的功能,是开发人员来实现的。
功能被实现了,那么迎接它的就是测试。
测试该功能是否满足用户的需求,是否还存在一些bug。
对于这种针对系统功能的测试,就叫做软件测试。
软件测试具体是做什么的?
所谓的软件测试,就是测试人员验证软件的功能 是否 满足用户的需求。
用户:指的是使用 软件的人。
但是这个人,不一定就是用户,也可能是东家。
更为准确的来说:用户就是购买软件的人,具有软件的拥有权
而我们平常所说的用户,是指那些具有软件使用权的人,【花钱购买的那种】
还有一些流量用户,就是使用一些免费软件【微信 / QQ】的用户。
这三者相加,才是真正的用户。这里大家可能不理解什么是 流量用户。
在我们使用的一些免费软件中,其实里面都有一些广告。
广告都是广告商投资的,是要给软件的东家 钱的!
用户一多,就代表流量变多了, 这些广告就会被更多的人看见。
像这些免费软件平台 QQ 、微信,你可以理解为是一个广告投放平台。
微信赚取的广告商的钱,QQ 是两头拿钱(各种vip服务)。
同样的道理,网红都知道。
网红直播带货,知道吧?
这个性质,就跟上面呢的 QQ 一样。
因为网红有很多粉丝啊,粉丝就是流量,粉丝一多,流量就多。
就会有许多广告商 找她们 代言产品。
既然就是求人做事,自然是要付费的。
而网红一开直播,就肯定会有一些金主发礼物什么的。
也就是说:网红一边拿着广告商的钱,一遍拿着粉丝的礼物(钱)。
这不就是:“真人版QQ”嘛!
软件测试就是验证软件产品特性是否满足用户的需求。
早期,人们更多的将测试看成是对软件产品“检验”,检查软件的每个功能是否运行正常。
1983年,Bill Hetzel将软件测试定义为:软件测试就是一系列活动,这些活动是为了评估一个程序或者软件系统的特性或能力,并确定是否达到了其预期的效果。从这话我们可以看出以下两点:
测试试图验证软件是“工作的”,也就是验证软件功能执行的正确性
测试的活动是以测试人员“预期的结果”为依据,这里的“预期结果”指的是需求定义。软件测试人员:不仅要看出软件符不符合用户的需求。
并且不符合的方法,需要找出来。
这就是 软件测试。
简单来说:软件按照用户提出的需求,而设计了很多的功能。
我们 软件测试人员 需要验证 软件功能 的方方面面:
1、验证功能是否能正常运行 【但是能跑,不代表就能达到预期的效果】
2、验证功能是否满足用户的需求【用户的需求 == 预期的效果】
实战练习
假设我们在测试某软件的登录功能,写出测试要点
简单来说:就是需要测试的功能有哪些?
有的人可能会说:我越想越多。。。难道我要把所有的可能性都尝试一遍?
大家一定要明确: 穷举所有情况是不可能的! ! !
软件测试就只是一个样本实验。
我们软件测试人员要保证 主要功能(用户频繁使用的功能) 和 核心流程 的正确性也就是说:测试是有优先级的! ! !先把重要的测试了,其它的,可以往后放一放。
总之,大家明确一点:
面试官问出:什么是测试开发?
标准回答:测试软件的功能是否用户的需求!
不管是甲方金主爸爸,还是那些流量用户,提出的需求。
我们都需要尽量满足,因为他们都在直接,或者间接为我们创造利益。
软件测试和软件开发的区别
技能 && 难易程度
软件开发:
软件开发,要求技能集中,专业度高(需要学习到一定的深度)
关于软件开发的职位,我们见得最多的是:各种语言的工程师。
拿Java来说:作为一个 Java工程师,就需要我们对底层的实现和原理很清楚,才能写出高质量代码。
比如数据结构:哈希表,链表,顺序表等等。。。
学习这些就是为了在某些场景中,引入合适的数据结构来提高运行效率。
而在面试光知道怎么使用是不行的,还需要我们理解这些数据结构底层实现的逻辑,因为这些都是面试的时候都会被问到的。
而且只有了解底层的逻辑实现,我们才能知道什么场景使用什么数据结构。
就好像我们刷力扣题一样,人家是有限时间与空间复杂度 要求的!!
用错方式,代码是过不了的!
软件测试:
软件测试:要求技能广泛,专业度低。
技能的广泛,主要体现在你要学操作各种 测试工具。
比如:
接口: soupUI,postman,jmeter
自动化测试: java,Python,unittest,testNG,robotFrameWork(RF框架),selenium 工具
性能测试工具:loadrunner,jmeter
抓包:Charles,fiddler(fiddler还可以模拟弱网)
APP测试:appium,Macaca
别看东西多,只要你会使用它来协助工作就行。
不需要太过深入去了解底层是怎么实现的,怎么执行的。
这么说吧:工具对于软件测试人员来说:只是一种手段。
杂项:薪资,工作环境,工作压力
薪资
在大厂里,同一个就别的员工,不管是前端,还是后端,以及测试,工资都相差不大。至于工作环境,中大厂的环境是非常好的。
后端Java竞争的压力还是非常大的。因此,给自己留一条后路。
测开就是一个不错的选择,也涉及到部分编程,以至于我们后端开发的底子不会丢。
而且测开前期学习的东西也是Java的。
因此两者并不冲突!
另外,测开 相比于 软件开发 的压力是要小一点的,
如果作为软件开发的程序员,我们需要无时不刻的学习,挖掘更深层的知识。
发展前景
可以这么跟你说吧:测开的待遇与其它技术岗位差距不大,发展前景也是很不错的!
另外,可以告诉你们的是:没有报过培训班的人,一般是不知道有测试开发这个职位的。
他们可能更多的只是知道 软件开发 和 软件测试,这两个技术岗位。
因此,竞争的压力就会小很多。
这样留一手,我们的就业机会,会更多!
一个经典面试题:软件测试 和 软件开发中的调试 有什么区别
有的面试官可能问的比较深,会问你:软件测试 和 软件开发中的调试 有什么区别?
1、目的不同
大家在敲代码的时候,代码出现了问题,我们是需要进行调试的(debug),对不对?
我们将这种调试,称为 软件调试。
- 软件调试,程序员验证软件是否实现了他想让软件实现的功能。
- 软件测试:测试人员验证软件是否实现了用户的需求
这么说吧:软件开发的程序员,只在乎上头让自己实现的功能是能 正常执行。
而测试开发人员更关注于:这种软件有没有满足用户的需求。也就是用户常用的功能是否没有问题。
有的人可能会有疑问:我感觉 软件测试 和 软件测试之间,没有区别啊。
但是很遗憾!这两种是必然存在区别的。
1、站的角度不一样
就跟我上面说的一样,一个是从自身的角度出发,我只要完成我的任务就行;
一个是用户的角度出发,看看有什么功能还没有满足用户的需求。
2、角色不同
软件调试:纯开发人员来做
软件测试:开发人员 + 开发人员,一起做这件事的!
在软件测试中,开发人员主要是做 白盒测试(与代码相关的 )
3、阶段不一样
软件调试:开发阶段
软件测试:全阶段【从产品的制作到发布】:贯穿了整个软件开发过程,开发过程中,处处都有软件测试。
这么说:代码是能跑,功能也确实实现了,但是不是满足了用户的需求?不一定!!!
软件测试的发展
这里大家只要简单了解一下就可以了。
1、以软件调试为主,发生在20世界50年代。
2.、1957年Charles Baker对调试和测试进行了区分。
这是软件测试史上一个重要的里程碑,标志已经有独立的软件测试了。
3.、1979年,《软件测试的艺术》中给出了软件测试的定义:测试是为发现错误而执行程序的过程。它意味着软件测试不仅要证明软件做了该做的事情,也要保证它没做不该做的事情。
4、1983年,美国国家标准局(National Bureau of Standards)发布了VV&T,VV&T提出了测试界很有名的两个名词:验证(Verification)和确认(Validation)。这些意味着软件测试正作为一门独立的,专业的,具有影响力的工程学发展起来了。
5、预防为主,是当下软件测试的主流思想之一
软件测试已经贯穿到了整个软件开发的生命周期当中了
软件测试岗位
软件测试工程师:工程师的主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪BUG、编写测试报告等;
测试开发工程师:根据项目的特点来开发一些自动化测试的脚本,或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具什么的,从而能够更有效地进行测试,提高软件产品的质量。
测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作;测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。
性能测试工程师:针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本。
安全测试工程师:主要分析产品可能会出现的安全问题,做各个方面的渗透测试,提高产品的安全性
其它:系统测试工程师,嵌入式测试工程师,硬件测试工程师。
软件测试在不同类型公司的定位
1. 无组织性
最简单的软件测试组织形式就是没有任何组织的测试,几个人就把所有软件测试工作做完,这样做没有任何分工、没有任何层次结构。
简单的软件测试组织带来的问题是:软件测试依附在软件开发的组织下,不能真正发挥软件测试的威力。
一两个人的软件测试缺乏交流和思维的碰撞,导致测试人员的进步非常有限。缺乏测试的组织,导致测试无计划进行,测试人员疲于应付各项突如其来的测试任务,测试经验也得不到很好的总结。
2. 专职VS.兼职
按照测试人员的职责明确程度,可以划分成 兼职测试 和 专职测试 两大类。
目前在很多软件企业,尤其是小规模的软件企业,往往没有专职的测试人员。在做测试工作的同时还要兼顾软件开发、配置管理、技术文档编写、用户教育、系统部署实施等工作。
即使是在一些比较大规模的软件企业,拥有专门的质量部门,也会有兼职的情况,最常见的兼职工作是测试+配置管理,或者测试+QA。这种方式的好处是节省成本,可以充分利用资源。但是这样测试人员缺乏专门的独立的发展空间,不利于测试的纵深方向的发展,很难把测试做得精细,也不利于测试经验的积累和测试知识的传播。
当然,由于目前软件企业的现状,很多企业还是使用这种方式。新入行的测试人员来说,可以认为这是对自己很好的锻炼机会。
测试本身的要求就是知识面要广,而这些工作有助于从不同层面、不同角度、不同角色的位置考虑软件的相关问题。
3. 项目性VS.职能性
按测试人员参与项目的形式来划分,可分成 项目型 和 职能型。
项目型的测试组织是指测试人员作为项目组成员之一紧密地结合到项目中,与项目组其他人员紧密协作,一般是从头到尾跟着项目走。当然,也有些项目是到了中后期才考虑把测试人员加入到项目中。
这种类型的测试组织一般不会有测试组长,测试的管理由项目的主管或项目经理负责。当然,在一些大的项目中,会划分出幵发组长、也会划分出测试组长,但是最终报告的对象都是项目经理。因此项目经理是负责测试资源调配和测试计划的主要人员。
而职能型的测试组织是指测试人员参与到项目中是以独立的测试部门委派的方式进入的。
在这种结构中,一个测试人员有可能不仅仅测试一个项目的产品,可能会同时测试多个项目的产品。测试人员也可能不是长期稳定地从头到尾参与一个项目。
测试人员不向项目主管或项目经理报告工作,而是向自己所在的部门经理报告工作。并且这种结构的项目经理也可能是虚拟的,或者由多个部门经理共同担当。
这两种方式各有利弊。
项目型的好处是测试人员参与的力度很强,能深入了解项目方方面面的信息,有利于稳定持续有效地测试出更多细节问题;但是同时也有弊端,就是测试人员受项目负责人的管理,在对待Bug的处理意见上往往受到约束,同时由于过于亲密,很可能出现“网开一面”,不能严格要求的惜况。并且由于缺乏独立的组织,测试人员的知识可能局限在项目组内传播,不利于测试经验在不同项目组之间的传播。
而职能型的好处是能避免项目型的部分问题,并且能节省部分测试资源,充分利用各个项目阶段之间的时间差来合理利用测试资源;但是也不可避免地存在一些问题。例如,深入程度不够,尤其是对项目涉及的领域知识和业务知识理解可能不够深入,导致测试的问题比较表面。
项目性
这张图中,一个项目就是一个系统。
另外这里面实施人员(运维,网管之类的任意,也算在其他人员)
一个项目团队中的测试人员组成(大概十个人左右)。
1、手工测试人员(点点点操作)
2、自动化测试用例开发人员(自动化:让我们说的点点点操作,用脚本来实现)
3、自动化工具开发人员(提高测试效率)
其中 2 和 3,统称为测试开发人员
职能型
4. 综合性
尽管独立的测试部门会有一些不可避免的问题,例如参与项目的深入程度,容易导致“扔过墙”的测试。
但是很多软件企业还是倾向于建立一个相对独立的软件测试组织。一个理想的软件测试组织可以是综合和兼容了几种结构方式的组织。
例如,可以将项目型结构和职能型结构组合并加以改造。测试部门是独立的部门,测试部门经理根据各项目组中项目经理的请求,结合公司对项目的投入和重点方向,决定委派哪些测试人员加入到项目组,
并且长期稳定、持续地跟进项目,在项目的各个阶段都参与并做测试的相关工作内容。测试人员作为一种服务资源供项目组调用,测试的结果和报告作为评估软件产品质量的必要参考信息,为项目经理做出产品发布的决定提供参考价值。
一个优秀的软件测试人员具备的素质
前面也说到过:面试最喜欢问的问题:你为什么要选择软件测试?
其实就是在侧面的告诉,你有什么突出的优势,让我们选择你。
第一个肯定就是能力啊。
1、沟通能力
2、学习能力
3、开发能力
4、文字秒伤能力。
统称为综合能力。
那么,我们为什么需要具备这些能力的呢?
沟通能力
测试工程师的沟通能力会直接影响事务开展的效率。良好清晰的沟通能力,是一个技术优秀的测试工程师是否可以获得更好发展的“敲门砖”。
快速学习的能力
对不同业务需求和功能的快速学习与理解能力。 对于测试新技术和新方法的学习能力。
开发能力(优势)
这个你把javaSE 和 数据结构 的 基础 学扎实!多刷点题!
开发能力,不就具备了嘛!
文字能力
你找到的bug,是要通过 文档来具体描述 BUG 的。
捡来来说:你测试完了之后,要返回一个测试单的,里面详细记录了有哪些bug,这些bug在哪里,什么效果等等…
掌握自动化测试技术
掌握自动化测试技术,可以把你从大量重复性的手工劳动中解放出来,这样可以把更多的精力花在更多类型的测试上。
优秀的测试用例设计能力
测试用例设计能力是指,无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例
如何提高测试用例设计的能力?
1,掌握设计测试用例的方法
2,积累,总结
3,阅读好的测试用例设计案例
探索性思维
探索性思维是指,测试工程师在执行测试的过程中不断学习被测系统,结合自己的经验,知识,直觉,进行系统的错误猜测和逻辑推理,整理和分析出更多有针对性的测试关注点。
简单来说:思维不受条条框框束缚,具有发散性思维,能够结合实际来思考问题。
兴趣 && 有责任感和一定的压力
责任感是任何工作的都需要的,对于测试工作者而言:
测试往往是产品质量的最后个把关者;由于测试工作成效很难衡量,测试用例执行、bug数目的多少都无法说明产品的质量是否合格;所以,责任感是最重要的测试必备素质之一。
压力,测试工作者,特别是属于互联网行业需要能够抗住各种压力。
此时兴趣就尤为重要,兴趣可以支持我们对工作热情,让我们在这条路上走的更远
完结语
后期的学习中将培养大家的以下核心竞争力
本文的重点在于三个问题
1、什么是软件测试
为了验证软件的功能是否满足用户的需求。
因为无论是那种用户都在为我们 直接 / 间接 创造利益。
2、软件测试 和 开发测试的区别。
1、目的不同软件调试,程序员验证软件是否实现了他想让软件实现的功能。
软件测试:测试人员验证软件是否实现了用户的需求2、角色不同
软件调试:纯开发人员来做
软件测试:开发人员 + 开发人员,一起做这件事的!
在软件测试中,开发人员主要是做 白盒测试(与代码相关的 )3、阶段不同
软件调试:开发阶段
软件测试:全阶段【从产品的制作到发布】:贯穿了整个软件开发过程,开发过程中,处处都有软件测试。
这么说:代码是能跑,功能也确实实现了,但是不是满足了用户的需求?不一定!!!
为什么要选择软件测试这个岗位?
从自身能力出发,分析自身的能力优势。
1、综合能力:文字描述,开发,沟通
2、对 自动化测试技术的 掌握程度
3、优秀的测试用例设计能力【就是分析问题的能录】
4、探索性思维【有助于你提升 测试用例的设计能力】