测试人员的启蒙指南

本篇中介绍测试人员是干什么的, 起到启蒙和了解的作用, 重点是以下几个问题:

  1. 什么是软件测试
  2. 软件测试和软件开发的区别
  3. 软件测试和软件调试的区别
  4. 一个优秀的测试人员所具备的素质

一. 了解测试

1. 生活中的测试场景

思考一下, 生活中的测试场景都有哪些?

  1. 考试

考试也是一种测试, 测试你有没有将老师所讲的的内容给掌握了.

  1. 逛街买衣服

买衣服时, 肯定不能把货架上的衣服都试一遍吧, 首先你要选一件大体上自己看的顺眼的. (外观测试)

然后, 看这件衣服是否与自己相匹配, 衣服是否衬托肤色, 衬托气质. (款式, 颜色测试)

还会, 通过触摸, 感受衣服的舒适度. (舒适度测试)

另外, 你还会查看 衣服的牌子上 所记录的制作材料. (材质测试)

在上面的条件都满足之后, 我们才会去问尺寸和价格, 尺寸合适才能合身, 价格需要在我们的预算之内. (尺寸, 价格测试)

2. 什么是软件测试

在了解软件测试之前,我们首先需要知道软件是什么?

软件, 就是安装在硬件上的一些应用程序, 比如: web系统 (学校的教务系统, 办公系统等); APP (qq, vx, csdn).

软件的功能是由是开发人员来实现的, 功能被实现了, 之后要进行的工作就是测试了, 测试该功能是否满足用户的需求, 是否还存在一些bug, 对于这种针对系统功能的测试,就叫做软件测试。

最常见的理解是: 软件测试就是找BUG, 发现缺陷.

其实软件测试就是验证软件产品特性是否满足用户的需求, 这里的用户: 指的是使用软件的人, 但是这个人, 不一定就是用户, 也可能是东家; 更为准确的来说: 用户就是购买软件的人, 具有软件的拥有权, 而我们平常所说的用户, 是指那些具有软件使用权的人(花钱购买的那种), 还有一些流量用户, 就是使用一些免费软件(微信 / QQ)的用户; 这三者相加, 才是真正的用户.

最早,人们更多的将测试看成对软件产品的"检验",检查软件的每个功能是否运行正常。

1983年,Bill Hetze将软件测试定义为:软件测试就是一系列活动,这些活动是为了评估一个程序或者软件系统的特性或能力,并确定是否达到了预期的效果,从这话我们可以看出以下两点:

  1. 测试试图验证软件是"工作的",也就是验证软件功能执行的正确性.
  2. 测试的活动是以测试人员"预期的结果"为依据,这里的’预期结果"指的是需求定义.

通俗点讲, 软件按照用户提出的需求而设计了很多的功能, 软件测试人员就需要验证软件功能的方方面面:

  1. 验证功能是否能正常运行 (代码能跑, 不代表就能达到预期的效果).
  2. 验证功能是否满足用户的需求 (用户的需求 == 预期的效果).

软件测试的特点:软件测试只是一个样本试验,具有不可穷尽性.

3. 实战练习

假设我们在测试某软件的登录功能, 写出测试要点.

要注意的是, 题目要测试某软件的登录功能, 并没有明确是一个怎样的系统, 给出范围很模糊; 所以, 我们不能进行 “一锅端” 的操作, 我们需要通过 “分类” 的方式, 来分析这个问题.

img

img

img

还需要注意的是这里不可能把所有的可能性都尝试一遍, 一定要明确的是, 穷举所有情况是不可能的!

软件测试只是一个样本实验, 软件测试人员要保证主要功能 (用户频繁使用的功能) 和核心流程的正确性, 也就是说:测试是有优先级的, 先把重要的测试了, 其它的, 可以往后放一放.

二. 软件测试和软件开发的区别

关于互联网的工作岗位大概有以下三种:

软件开发: 进行软件系统的开发, 功能实现的工作, 像我是学 Java 的, Java里面就会有一些框架, 数据库, 数据结构等, 这些内燃内容都是属于软件开发中需要涉及到的知识.

软件测试: 验证软件功能性的正确性, 具体的验证方式主要有手工验证和自动化验证.

测试开发: 开发测试工具,开发测试脚本,其目的就是为了提高测试效率.

要注意在实际工作中测试工作可能既包含了软件测试, 也包含了测试开发, 实际上不做细致区分.

关于软件测试和软件开发主要有如下区别:

  1. 工作内容和技能

软件开发最常见的工作就是通过不同的编程语言, 最终做出软件(coding), 这就要求开发人员技能集中, 专业度高(需要学习到一定的深度), 关于软件开发的职位, 我们见得最多的就是各种语言的工程师, 就拿Java来说:

作为一个 Java工程师, 就需要我们对底层的实现和原理很清楚, 才能写出高效的代码; 比如数据结构:哈希表,链表,顺序表等, 学习这些就是为了在某些场景中, 引入合适的数据结构来提高运行效率, 开发人员只有将技能掌握的足够深入, 了解底层的逻辑实现, 才能知道什么场景使用什么数据结构, 就好比刷力扣题一样, 是有限时间与空间复杂度要求的, 达不到要求就不能通过.

软件测试的工作就是写测试用例, 执行测试用例, 发送测试报告, 编写自动化测试用例, 开发相关的测试工具, 测试人员就要求技能广度的掌握, 因为测试人员要对产品进行全方面的测试, 外观是否好看, WEB的UI自动化, 后端的接口进行测试, 性能, 安全等等, 如果你不对这些方面涉及的技术有一定的了解, 测试工作可能就无从下手了, 测试人员技能的广泛, 主要体现在你要学操作各种测试工具, 比如:

  • 接口: soupUI, postman, jmeter
  • 自动化测试: java, Python, unittest, testNG, robotFrameWork(RF框架), selenium 工具
  • 性能测试工具: loadrunner, jmeter
  • 抓包: Charles, fiddler (fiddler还可以模拟弱网)
  • APP测试: appium, Macaca

别看这里写的很多, 但其实你只要会使用它们来协助工作就行, 不需要太过深入去了解底层是怎么样的.

  1. 发展前景

测开的待遇其实与其它技术岗位差距不大, 发展前景也是很不错的, 尤其自动化测试, 安全测试等领域发展前景和研发基本一致; 看如下路线:

  • 开发: 初级开发工程师 -> 中级开发工程师 -> 高级开发工程师 -> 架构师 -> CTO
  • 测试: 初级测试工程师 -> 中级测试工程师 -> 高级测试工程师 -> 架构师 -> 项目经理

而且很多校招生在找工作时是不知道有测试开发这个职位的, 他们可能更多的只是知道软件开发和软件测试这两个技术岗位, 竞争的压力会小很多.

  1. 薪资及工作环境

通常情况下, 大厂同一个级别的员工, 不管是前端, 还是后端, 以及测试, 工资都相差不大; 中小厂的测试薪资比开发略低, 至于工作环境, 大厂的环境是非常好的, 中小场就碰运气喽!

三. 软件测试和软件调试的区别

  1. 角色不同

软件调试: 纯开发人员来做, 也就是开发自己去调试.

软件测试: 测试+开发一起执行(通常情况下, 黑盒测试由测试人员执行, 部分白盒测试, 系统测试是由开发人员执行).

  1. 阶段不同

软件调试: 开发阶段才会进行调试.

软件测试: 测试是伴着整个软件的生命周期的(测试介入的时间比调试早的), 是从产品的制作到发布全阶段的, 贯穿了整个软件开发过程, 开发过程中, 处处都有软件测试.

  1. 目的和手段不同

软件调试:要确保程序做了程序员想它做的事情, 我们在敲代码的时候, 代码出现了问题, 我们是需要进行调试的(通过debug来观察), 将这种调试, 称为软件调试.

软件测试: 要确保程序解决了它该解决的问题, 测试人员验证软件是否实现了用户的需求, 通过等价类划分法, 边界值法, 黑白盒测试等进行分析测试.

其实软件测试和软件调试是从不同的角度去发现问题和解决问题的, 调试是从自身的角度出发, 我只要完成领导让自己实现的功能就行, 只在乎自己实现的功能是能正常执行的;而调试是用户的角度出发, 看看有什么功能还没有满足用户的需求.

四. 软件测试的发展

  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. 掌握自动化测试技术; 掌握自动化测试技术,可以把你从大量重复的手工劳动中解放出来,这样就可以把更多的精力花在更多类型的测试上.
  3. 探索性思维; 测试工程师在执行测试的过程中不断学习被测系统,结合自己的经验进行系统的错误猜测和逻辑推理,整理和分析出更多针对性的测试关注点, 简单来说就是测试人员的思维不受条条框框束缚,要具有发散性思维,能够结合实际来思考问题.

综合能力

  1. 沟通能力; 测试工程师的沟通能力会直接影响事务开展的效率, 良好清晰的沟通能力是一个技术优秀的测试工程师是否能够获得更好发展的"敲门砖".
  2. 快速学习的能力; 不同业务需求和功能的快速学习与理解能力, 对于测试新技术和新方法的学习能力.
  3. 文字表达能力; 测试用例是用文字写出来的, 你找到的bug, 也是要通过文档来具体描述 BUG 的, 也就是说, 你测试完了之后, 是要总结出一个测试文档的, 里面详细记录了有哪些bug, 这些bug在哪里,什么效果等等…
  4. 开发能力: 掌握一定的开发技术, 这对于测试人员来说是优势.
  5. 抗压能力; 测试工作者,特别是属于互联网行业需要能够抗住各种压力, 比如: 工期进度紧张的话, 测试时间会由5天变成1天…
  6. 责任感; 责任感是任何工作的都需要的, 对于测试工作者而言: 测试往往是产品质量的最后个把关者;由于测试工作成效很难衡量,测试用例执行、bug数目的多少都 无法说明产品的质量是否合格;所以,责任感是最重要的测试必备素质之一; 也就是说, 发现BUG一定要及时改掉, 不能放任推拖.

实战练习, 培养探索性思维:

  • 假设我们现在要测试一个自动售票机的功能

img

imgimg

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>