【知乎⾼赞】作为⼀名软件测试⼯程师,需要具备哪些能⼒?
软件测试⼯程师的技能树
软件测试⼯程师是⼀个历史很悠久的职位,可以说从有软件开发这个⾏业以来,就开始有了软件测试⼯程师的⾓⾊。随着时代的发展,软件测试⼯程师的⾓⾊和职责也在悄然发⽣着变化,从⼀开始单纯的在
瀑布式开发流程中担任测试阶段的执⾏者,到敏捷开发流程中QA(Quality Assurance)⾓⾊,为整个团队和产品的质量负责,测试⼯程师的职责和边界不断的扩⼤。近年来互联⽹⾏业的很多测试⼯程师被称为是测试开发⼯程师,也就是要具备⾃动化测试和测试⼯具开发能⼒的测试⼯程师,可以说是对测试⼯程师的能⼒要求达到了⼀个新的⾼度。
相信有过测试⼯作经验的同学都会深有体会,不管是瀑布式还是agile模式,测试⼈员的⼯作总是被压在产品发布的最后阶段,整个团队的压⼒似乎都压在测试⼯程师⾝上,没有⼈会理会开发过程中产⽣的延误,因为那已经过去,可以在retro meeting的时候diss,但是⽬前最重要的问题是完成产品的发布上线。所以在寻测试⼯程师需要什么技能之前,测试⼯程师的核⼼问题是什么,这是我们要搞清楚的。
测试⼯程师⾯临的核⼼问题
如何以最⼩的投⼊,最⼤程度保证产品的质量
这个问题相信⼤家都有所体会,商业社会追求的就是效率,甚⾄是极致的效率。测试⼯程师也不能例外,不管是叫测试⼯程师,QA,或者是听着⾼⼤上的测试开发⼯程师,其实⽼板们的⽬标是⼀致的,就是在尽可能少的投⼊,最⼤程度保证产品的质量。说得现实⼀点,你的薪资⽔平就取决于你能解决这个核⼼问题的能⼒。
明确了我们的⽬标,我们所需要的能⼒,也是围绕着这⼀个⽬标来设定的。
概述
按照笔者的经验和理解,⼀个软件测试⼯程师需要具备以下的技能:
测试设计能⼒
代码能⼒
⾃动化测试技术
质量流程管理
⾏业技术知识
数据库
业务知识
测试设计
作为⼀名测试⼯程师,最基础的能⼒应该就是根据产品来设计测试⽤例的能⼒。最基础的能⼒往往也是最难做到精通的能⼒。要设计好的测试⽤例,需要对产品的特性和业务⾮常的熟悉,对⽤户的使⽤场景有着系统化的思考。除此之外,还有⼀些科学的测试⽤例设计⽅法可以帮助我们设计规范化的⽤例,⽽不是仅仅根据经验或者天马⾏空的想法来设计⽤例。
业界有⼀些经典的测试⽤例设计⽅法需要测试⼯程师掌握:
边界值分析
等价类划分游戏源代码网站有哪些免费的
因果图
判定表
正交实验设计
上述的这些⽅法并不是教条,⽽是帮助我们理清测试⽤例设计的思路和提⾼效率的⼯具。
代码能⼒
在传统的思维中,对测试⼈员的代码能⼒要求似乎不是很⾼,在业界确实也是这样的。很多测试⼯程师基本上不具备代码的能⼒,更多是测试的执⾏者。
但是在当今这个时代下,要想突破传统功能测试⼈员的天花板,代码能⼒是必须的。
具备代码能⼒的测试⼯程师有这样两个优势:
阅读开发代码
如果能够具备阅读开发代码的能⼒,对于提⾼测试⼈员的效率是很有帮助的,它可以帮助我们做到这些⼀些事情
通过开发修改的代码预估影响的范围,即测试的范围
参加技术评审,预估测试的风险,难点,重点
通过代码的逻辑设计测试⽤例,强化测试⽤例的覆盖程度
对缺陷进⾏初步的定位
其实可以做到的事情还有很多,体现在测试过程的很多细节当中
⾃动化测试的开发
⾃动化测试是测试发展的⽅向,也是提⾼效率的有效⽅法。具备了代码能⼒,你可以轻松的驾驭各种流⾏的⾃动化测试框架和⽤例开发。
⾃动化测试
接着上⾯关于⾃动化测试的讨论。在⽬前的热门公司的招聘中,⾃动化能⼒已经是必备的能⼒,也是⼤家很关注的⼀个领域。
⽬前可以粗略的把⾃动化测试分为这么⼏类:
UI⾃动化
UI⾃动化实现的⽬标是模拟⼈在产品UI界⾯上的操作,从⽽观察结果来完成测试的执⾏。UI⾃动化也可以从客户端的形态上分为PC端和移动端的⾃动化测试,有这样⼀些著名的⾃动化⼯具需要我们掌握:
Selenium
Selenium是⼀个很经典的WEB端产品的UI⾃动化⼯具,针对不同的开发语⾔都有很好的⽀持。它的原理简单来说就是通过WebDriver把脚本产⽣的操作指令传递到浏览器,执⾏我们需要的操作并且获取相应的反馈,在脚本中完成校验。
Appium
从这个名字就可以看出这个⼯具和Selenium的相似之处。其实Appium可以理解为就是移动端的Selenium。同样也是在移动端模拟⼈的操作来实现执⾏测试⽤例的⽬的。
随着移动互联⽹时代的到来,更多的业务已经从PC的WEB端转移到了移动端,移动端的⾃动化测试越来越重要。
其实UI的⾃动化实现的原理都是很类似的,基本的逻辑都是:
rescue mode什么意思定位元素
操作元素
mysql面试题 知乎获取反馈
最后通过某种测试⽤例框架来管理测试⽤例,例如python的unittest,JAVA的TestNG,Ruby的respec等等。
所以说了解了某⼀种UI⾃动化的框架和⼯具,很容易的就能触类旁通的学习新的框架和⼯具。
接⼝⾃动化
在⽬前SaaS成为主流的情况下,API,即接⼝,成为了⽀撑业务的核⼼部分。前端页⾯和App⾥⾯的业务数据都是通过各种API与服务器进⾏通信,从⽽实现业务功能。
⽬前⼤多数的接⼝都是基于HTTP协议的,其中Restful的接⼝⼜占⼤多数。⽽很多语⾔,例如Python和Ruby都有很好的库来⽀持HTTP协议的请求,这就为我们设计接⼝⾃动化提供了很好的基础。
回到我们的核⼼问题,投⼊产出⽐的衡量。UI的⾃动化⽆论是从实现的成本还是维护的成本来说都是巨⼤的,所以业界越来越把重⼼放到了接⼝层的⾃动化实现上。
接⼝的⾃动化具备这样的优势:
运⾏效率⾼
开发成本低
维护成本低
可以与开发代码同步开发
接⼝⾃动化的实现思路也是简单明了的,那就是模拟浏览器,发送HTTP请求来实现对接⼝的调⽤,然后⽐较返回与期望值,达到验证结果的⽬
的。
当然,要设计⼀套真正⾼效的接⼝⾃动化框架也是不容易的。这⾥⾯涉及到如何提⾼⽤例的开发效率,降低开发维护成本等关键问题。同时还可以把接⼝测试与性能测试结合起来,丰富接⼝⾃动化测试的内涵。
质量管理流程
在敏捷开发的流程中,测试⼯程师有了⼀个新的定义:Quality Assurance Engineer。⽽测试的执⾏仅仅是职责中的⼀部分,更为重要的是要为整个团队的产品质量负责。
从整个sprint的周期来看,QA⼯程师都要始终如⼀的贯彻质量保证的意识,与开发的关系也从早期的发现bug,转变为如何帮助开发团队⼀起提⾼产品的质量。同时还要和产品团队密切的合作,在需求的分析阶段就介⼊,分析质量保证⼯作如何规划和设计,⽽不是在产品发布前的测试执⾏阶段才介⼊。
这个⾥⾯还包含很多Soft skill的要求,包括如何与团队合作,沟通等等,这也是敏捷开发模式的关键之⼀。
⾏业技术知识
这⼀部分内容其实涵盖的内容是⾮常丰富的,就以互联⽹⾏业举例吧。
对于⼀个互联⽹产品,测试⼯程师需要了解的甚⾄是精通的知识是很多的,从前端页⾯的技术栈,API的设计,后端服务器的设计,后⾯会专门提到的数据库,还有整个服务的架构等等,测试⼯程师都需要有所了解。
针对这个问题,其实有⼀个⾮常好的问题可以帮助⼤家去梳理涉及到的知识,这就是:
从在浏览器的输⼊框输⼊⼀个⽹址,到看到⽹页的内容,这个过程中发⽣了什么?
回答这个问题的深度和⼴度,基本就能反映⼀个测试⼯程师对于互联⽹产品技术的掌握情况。
在这⾥呢,我简单的罗列⼀些涉及到的技术和概念,这些内容对于我们测试产品,都是⾮常有帮助的。
DNS
TCP/IP
HTTP
SSL
Restful
HTML
DOM
CSS
Render
Xpath
服务器
nginx简述相对路径和绝对路径
SQL
Cookie&Session
XSS,CSRF
这⾥仅仅是涉及到⼀部分内容,具体的内容可以根据⼯作中遇到的场景去深⼊学习和了解。
数据库
之所以把数据库单独列出来,是因为数据库的知识对于当今的很多产品都是⾮常核⼼的内容。
不管是在⼿动测试还是⾃动化测试中,都有需要到数据库进⾏数据校验的时候。
⽬前主要使⽤的数据库可以分为两类:
关系型数据库
⾮关系型数据库
关系型数据库
关系型数据库是最常见的数据库类型,这类数据库通过RDBMS数据库程序来进⾏管理和使⽤,常见的有SQL Server, MySQL等等。
关系型数据库中强调⼀个事务(Transaction)的概念。所谓事务是⽤户定义的⼀个数据库操作系列,这些操作要么全部执⾏,要么全部不执⾏,是⼀个不可分割的⼯作单位。例如在关系数据库中,⼀个事务可以是⼀条SQL语句、⼀组SQL语句或整个程序。
事务应该具有4个属性:原⼦性、⼀致性、隔离性、持久性。这四个属性通常称为ACID特性。
原⼦性(Atomicity):事务作为⼀个整体被执⾏,包含在其中的对数据库的操作要么全部被执⾏,要么都不执⾏。
⼀致性(Consistency):事务应确保数据库的状态从⼀个⼀致状态转变为另⼀个⼀致状态。⼀致状态的含义是数据库中的数据应满⾜完整性约束。
隔离性(Isolation):多个事务并发执⾏时,⼀个事务的执⾏不应影响其他事务的执⾏。
持久性(Durability):⼀个事务⼀旦提交,他对数据库的修改应该永久保存在数据库中。
对于实际的应⽤来说,SQL语⾔是必须要掌握的。能够通过SQL语句在数据库中到需要的数据,是
测试⼯程师必备的技能。SQL语句的语法⼤体上⽐较类似,在⼀些细节上不同的RDBMS会有些许的差别。
virtualbox 共享文件夹对于⾃动化实现来说,在⾃动化测试中通过访问数据库来获得期望值也是很常见的场景。不同的语⾔都有访问数据库的库,整体来说应⽤也很简单。
⾮关系型数据库
随着互联⽹中⼤量的⾮结构化数据的产⽣,例如社交⽹络等等应⽤,⽤户的个⼈信息,社交⽹络,地理位置,⽤户⽣成的数据和⽤户操作⽇志已经正在以⼏何级数的速率增加,同时还⾯临⼤量的数据挖掘⼯作,传统的关系型数据库已经⽆法满⾜。所以NoSQL渐渐的发展了起来。
NoSQL最突出的特点就是数据的⾮结构化,通俗的讲,就是数据不再是以列和⾏这样的形式存储的。
NoSQL存储数据的⽅式很多:值对存储,列存储,⽂档存储。
例如⽐较常见的MongoDB就是将数据存储为⼀个⽂档,数据结构由键值(key=>value)对组成。MongoDB ⽂档类似于 JSON 对象。字段值可以包含其他⽂档,数组及⽂档数组。
RDBMS vs NoSQL
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论