本篇中介绍测试人员是干什么的, 起到启蒙和了解的作用, 重点是以下几个问题:
- 什么是软件测试
- 软件测试和软件开发的区别
- 软件测试和软件调试的区别
- 一个优秀的测试人员所具备的素质
一. 什么是软件测试
1. 生活中的测试场景
- 医学检测:医院和诊所中进行各种测试,如血液检查、尿液检测、X射线、超声波等,用于诊断疾病或评估患者的健康状况。
- 环境检测:对空气、水和土壤中的污染物进行测试,以确定环境质量和安全性。
- 食品检验:针对食品质量和卫生标准进行测试,包括食品成分分析、微生物测试、残留物检测等。
- 材料测试:对材料的物理、化学和机械性能进行测试,以确保其符合特定标准和要求。
- 心理测验:用于评估个人的心理特征和能力,如智力测验、人格测验、心理健康评估等。
等等…
2. 什么是软件测试
软件测试是指在开发软件的过程中,针对软件系统或应用程序进行各种测试,以确定其符合特定要求和标准,并能够正确地执行预期的功能和任务。 通俗的说,软件测试就是找bug,发现缺陷.验证软件产品特性是否满足用户的需求. 软件按照用户提出的需求而设计了很多的功能, 软件测试人员就需要验证软件功能的方方面面:
- 验证功能是否能正常运行 (代码能跑, 不代表就能达到预期的效果).
- 验证功能是否满足用户的需求 (用户的需求 == 预期的效果).
软件测试的特点:软件测试只是一个样本试验,具有不可穷尽性.
3. 为什么有软件测试
软件测试是为了确保软件系统或应用程序的质量和可靠性。
软件测试不仅可以提高软件系统的质量和可靠性,还可以增加用户满意度,降低风险,节约成本和时间。它是软件开发过程中必不可少的环节。
4. 小练习
比如我们现在需要实现一个软件系统登录功能,那么我们应该如何书写测试要点呢?
- 验证正确的用户名和密码是否能够成功登录。 测试输入正确的用户名和正确的密码,验证是否成功登录。 测试输入正确的用户名和错误的密码,验证是否登录失败并给出相应提示。 测试输入不存在的用户名和正确的密码,验证是否登录失败并给出相应提示。
- 验证错误的用户名和密码是否被正确拒绝。 测试输入错误的用户名和正确的密码,验证是否登录失败并给出相应提示。 测试输入正确的用户名和错误的密码,验证是否登录失败并给出相应提示。 测试输入不存在的用户名和不存在的密码,验证是否登录失败并给出相应提示。
- 验证密码输入框的安全性。 测试输入过短的密码,验证是否拒绝并给出相应提示。 测试输入过长的密码,验证是否拒绝并给出相应提示。 测试输入包含特殊字符的密码,验证是否接受并正确处理。
- 验证记住密码和自动登录功能是否正常。 测试勾选记住密码后,再次打开登录页面是否保留了上次的登录信息。 测试勾选自动登录后,再次打开登录页面是否自动登录成功。
- 验证登录界面的界面和用户体验。 测试登录界面的布局和样式是否符合设计要求。 测试登录界面是否显示必要的标签、提示信息和帮助文本。 测试登录界面的输入框是否正常工作,如聚焦、清空等。
- 验证登录过程中的错误处理和异常情况。 测试网络连接异常时是否能够给出正确的错误提示。 测试服务器异常时是否能够给出正确的错误提示。 测试登录过程中是否能够正确处理超时和其他异常情况。
还需要注意的是这里不可能把所有的可能性都尝试一遍, 一定要明确的是, 穷举所有情况是不可能的! 软件测试只是一个样本实验, 软件测试人员要保证主要功能 (用户频繁使用的功能) 和核心流程的正确性, 也就是说:测试是有优先级的, 先把重要的测试了, 其它的, 可以往后放一放.
二. 软件测试和软件开发的区别
1. 工作内容及技能区别
软件开发: 软件开发最常见的工作就是通过不同的编程语言, 最终做出软件(coding), 这就要求开发人员技能集中, 专业度高(需要学习到一定的深度), 关于软件开发的职位, 我们见得最多的就是各种语言的工程师. 就拿Java来说: 作为一个 Java工程师, 就需要我们对底层的实现和原理很清楚, 才能写出高效的代码; 比如数据结构:哈希表,链表,顺序表等, 学习这些就是为了在某些场景中, 引入合适的数据结构来提高运行效率, 开发人员只有将技能掌握的足够深入, 了解底层的逻辑实现, 才能知道什么场景使用什么数据结构, 就好比刷力扣题一样, 是有限时间与空间复杂度要求的, 达不到要求就不能通过.
软件测试: 软件测试的工作就是写测试用例, 执行测试用例, 发送测试报告, 编写自动化测试用例, 开发相关的测试工具, 测试人员就要求技能广度的掌握, 因为测试人员要对产品进行全方面的测试, 外观是否好看, WEB的UI自动化, 后端的接口进行测试, 性能, 安全等等, 如果你不对这些方面涉及的技术有一定的了解, 测试工作可能就无从下手了, 测试人员技能的广泛, 主要体现在你要学操作各种测试工具, 比如:
- 接口: soupUI, postman, jmeter
- 自动化测试: java, Python, unittest, testNG, robotFrameWork(RF框架), selenium工具
- 性能测试工具: loadrunner, jmeter
- 抓包: Charles, fiddler (fiddler还可以模拟弱网)
- APP测试: appium, Macaca
别看这里写的很多, 但其实你只要会使用它们来协助工作就行, 不需要太过深入去了解底层是怎么样的.
2. 发展前景
测开的待遇其实与其它技术岗位差距不大, 发展前景也是很不错的, 尤其自动化测试, 安全测试等领域发展前景和研发基本一致; 看如下路线:
开发:
- 初级开发工程师 -> 中级开发工程师 -> 高级开发工程师 -> 架构师 -> CTO
测试:
- 初级测试工程师 -> 中级测试工程师 -> 高级测试工程师 -> 架构师 -> 项目经理
三. 软件测试和软件调试之间的区别
1. 角色不同
软件调试: 纯开发人员来做, 也就是开发自己去调试.
软件测试: 测试 开发一起执行(通常情况下, 黑盒测试由测试人员执行, 部分白盒测试, 系统测试是由开发人员执行).
2. 阶段不同
软件调试: 开发阶段才会进行调试.
软件测试: 测试是伴着整个软件的生命周期的(测试介入的时间比调试早的), 是从产品的制作到发布全阶段的, 贯穿了整个软件开发过程, 开发过程中, 处处都有软件测试.
3. 目的和手段不同
软件调试:要确保程序做了程序员想它做的事情, 我们在敲代码的时候, 代码出现了问题, 我们是需要进行调试的(通过debug来观察), 将这种调试, 称为软件调试.
软件测试: 要确保程序解决了它该解决的问题, 测试人员验证软件是否实现了用户的需求, 通过等价类划分法, 边界值法, 黑白盒测试等进行分析测试.
总之,软件测试和软件调试是从不同的角度去发现问题和解决问题的.
四. 软件测试的发展
- 以软件调试为主,发生在20世界50年代。
- 1957年Charles Baker对调试和测试进行了区分。这是软件测试史上一个重要的里程碑,标志已经有独立的软件测试了。
- 1979年,《软件测试的艺术》 中给出了软件测试的定义:测试是为发现错误而执行程序的过程。它意味着软件测试不仅要证明软件做了该做的事情,也要保证它没做不该做的事情。
- 1983年,美国国家标准局(National Bureau of Standards)发布了VV&T,VV&T提出了测试界很有名的两个名词:验证(Verification)和确认(Validation)。这些意味着软件测试正作为一门独立的,专业的,具有影响力的工程学发展起来了。
- 预防为主,是当下软件测试的主流思想之一, 软件测试已经贯穿到了整个软件开发的生命周期当中了。
五. 软件测试的岗位
- 软件测试工程师: 工程师的主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪BUG、编写测试报告等;功能测试比较多,涉及到的开发工作内容较少。
- 测试开发工程师:根据项目的特点来开发一些自动化测试的脚本,或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具什么的,从而能够更有效地进行测试,提高软件产品的质量;测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作;测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。
- 自动化测试工程师: 设计自动化测试用例,开发自动化测试框架。
- 性能测试工程师: 针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本。
- 安全测试工程师: 主要分析产品可能会出现的安全问题,做各个方面的渗透测试,提高产品的安全性。
- 其它:系统测试工程师,嵌入式测试工程师,硬件测试工程师。
六. 一个优秀的软件测试人员具备的素质
技能相关:
- 优秀的测试用例设计能力: 测试用例设计能力是指,无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例; 那么提高测试用例设计的能力就很重要了, 我们要掌握设计测试用例的方法, 多去积累, 总结, 多去阅读好的测试用例设计案例以进一步提高自己设计测试用例的能力.
- 掌握自动化测试技术; 掌握自动化测试技术,可以把你从大量重复的手工劳动中解放出来,这样就可以把更多的精力花在更多类型的测试上.
- 探索性思维; 测试工程师在执行测试的过程中不断学习被测系统,结合自己的经验进行系统的错误猜测和逻辑推理,整理和分析出更多针对性的测试关注点, 简单来说就是测试人员的思维不受条条框框束缚,要具有发散性思维,能够结合实际来思考问题.
综合能力:
- 沟通能力; 测试工程师的沟通能力会直接影响事务开展的效率, 良好清晰的沟通能力是一个技术优秀的测试工程师是否能够获得更好发展的"敲门砖".
- 快速学习的能力; 不同业务需求和功能的快速学习与理解能力, 对于测试新技术和新方法的学习能力.
- 文字表达能力; 测试用例是用文字写出来的, 你找到的bug, 也是要通过文档来具体描述 BUG 的, 也就是说, 你测试完了之后, 是要总结出一个测试文档的, 里面详细记录了有哪些bug, 这些bug在哪里,什么效果等等…
- 开发能力: 掌握一定的开发技术, 这对于测试人员来说是优势.
- 抗压能力; 测试工作者,特别是属于互联网行业需要能够抗住各种压力, 比如: 工期进度紧张的话, 测试时间会由5天变成1天…
- 责任感; 责任感是任何工作的都需要的, 对于测试工作者而言: 测试往往是产品质量的最后个把关者;由于测试工作成效很难衡量,测试用例执行、bug数目的多少都 无法说明产品的质量是否合格;所以,责任感是最重要的测试必备素质之一; 也就是说, 发现BUG一定要及时改掉, 不能放任推拖.