目录
1. 什么是软件测试
1.1 什么是软件测试
对于软件测试, 我们最常见的理解就是找bug(缺陷, 漏洞), 发现软件的缺陷.
生活中的测试场景
在生活我们可以接触到许多的测试场景, 比如购买一台手机, 购买一台电脑, 或者购买一件衣服等等. 那么在购买的过程中我们会考虑所要购买的东西的各种方面, 就以手机为例, 那么会考虑它的CPU处理器的运行速度, 是否会发烫严重, 充电速度, 使用的流畅度, 能否正常使用主流的软件...... 这些都是我们可能会考虑到的不同方面, 而从测试的角度来说, 这些考虑都是一种对这台手机所要做的不同方面的测试.
那么软件测试就是在验证软件产品的特性是否能够满足用户的需求.
在软件测试的早期发展中, 人们认为:
1. 测试是试图验证软件是"工作的", 也就是验证软件功能 执行的正确性.
2. 测试的活动是以测试人员" 预期的结果"为依据, 这里的"预期结果"指的是 需求定义.
1.2 为什么要有测试 (测试的重要性)
测试能够保证软件中的缺陷和错误, 并能提高软件的质量, 还能够节约软件开发的成本等作用, 可见测试是非常重要的, 测试就是保障软件质量的, 有许多公司会把测试部门叫做"质量保障部"
假设有一个电子商务网站,用户可以在网站上浏览和购买商品。我们将关注以下两个方面的测试:
1. 功能测试:
假设网站有一个“加入购物车”功能。测试人员要验证这个功能是否按照预期工作,以及是否没有潜在的缺陷。在功能测试中,测试人员可能执行以下步骤:
- 打开网站,并登录用户账号。
- 在商品页面找到一个商品,并点击“加入购物车”按钮。
- 检查是否正确地将该商品添加到用户的购物车中。
- 检查购物车中的商品数量是否正确更新。
- 尝试添加一个缺货的商品,检查是否有适当的错误提示。
如果测试发现了问题,比如无法添加商品到购物车,或者数量计算错误,测试团队将把这些问题报告给开发人员进行修复。如果这些问题在发布之前没有被发现并修复,那么用户可能无法顺利购买商品,影响用户体验和销售。
2. 性能测试:
假设在某个特定的促销活动期间,该网站预计会有大量用户同时访问和购买商品。性能测试旨在验证网站在这种高负载情况下的表现,并确保它可以承受预期的流量和交易量。在性能测试中,测试团队可能执行以下任务:
- 模拟多个同时登录的用户,并进行实际的购物流程。
- 观察网站响应时间和加载速度,确保它在高负载时仍能保持较好的性能。
- 检查是否有资源瓶颈,比如服务器响应慢、数据库连接问题等。
如果性能测试发现网站在高负载情况下出现响应延迟或崩溃,测试团队可以向开发团队提供数据和性能优化建议,帮助他们改进网站的性能,以确保用户在繁忙时期仍能获得良好的体验。
通过具体例子,我们可以看到软件测试在确保功能正确性和性能稳定性方面的重要性。功能测试可以帮助发现和修复潜在的缺陷,确保软件按照预期工作;而性能测试则确保网站在高负载时依然能够提供良好的用户体验,防止性能问题影响用户满意度和企业形象。
1.3 软件测试的特点
软件测试的特点: 软件测试只是一个样本试验, 具有不可穷尽性.
以最常见的软件系统登录功能为例, 我们可以进行最简单的一种测试就是用户和密码不同组合.
如果账号,密码都正确, 则登录成功; 如果账号正确, 密码错误, 就登录失败. 这是其中一种情况.
那么测试点可以是在网络正常或者异常情况下进行测试, 亦或者在各种场景下使用软件, 测试能否登录成功. 那么就可能会做: 安全性验证, 跨平台和设备兼容性, 登录状态处理.....
从上例中可以看出, 测试点是非常多的, 所以测试具有不可穷尽性.
2. 软件测试和软件开发的区别
2.1 工作内容
软件测试: 根据用户需求 写测试用例, 发送测试报告. 还有编写自动化测试用例, 开发相关的测试工具等.
软件开发: 通过不同的编程语言, 最终做出软件.
2.2 技能区别
软件测试: 广度大, 专业度低, 因为测试人员需要对软件产品进行全方面的测试, 比如外观是否好看, WEB的UI自动化测试, APP的UI自动化, 后端的接口进行测试, 软件性能, 软件安全性......
软件开发: 广度小, 专业度高.
2.3 发展路线
软件测试: 初级测试工程师 ->中级测试工程师 -> 高级测试工程师 ->架构师> 项目经理
软件开发: 初级开发工程师 ->中级开发工程师 -> 高级开发工程师 -> 架构师 -> CTO
3. 软件测试和软件调试的区别
3.1 参与角色不同
调试: 开发人员自己调试
测试: 测试人员和开发人员一起进行(通常情况下, 黑盒测试由测试人员执行, 部分白盒测试, 系统测试是由开发人员执行)
3.2 执行阶段不同
调试: 开发的时候才调试
测试: 测试是伴随着软件的整个生命周期的(测试介入时间比调试早)
3.3 目的不同
调试: 发现问题并解决问题
测试: 发现问题
3.4 技术手段不同
调试: debug, 分析代码逻辑
测试: 等价类划分法, 边界值法......
4. 软件测试的岗位
软件测试工程师: 工程师的主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪BUG、编写测试报告等;
测试开发工程师:根据项目的特点来开发一些自动化测试的脚本,或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具什么的,从而能够更有效地进行测试,提高软件产品的质量。
测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作;测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。
性能测试工程师: 针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本
安全测试工程师: 主要分析产品可能会出现的安全问题,做各个方面的渗透测试,提高产品的安全性
其它:系统测试工程师,嵌入式测试工程师,硬件测试工程师。
5. 优秀的测试人员所具备的素质
技能方面
- 测试用例设计能力
- 编程能力(编写测试工具, 自动化测试用例)
- 技术快速学习能力(C语言, Python, Java...)
- 业务快速学习能力
非技能方面
- 团队沟通合作能力
- 文字表达能力(测试用例是用文字写出来的, 编写测试文档, 发现BUG)
- 抗压能力(能够短时间内完成较多紧急工作)
- 责任感