前言
软件测试是为了评估软件应用程序的功能,以确定开发的软件是否满足指定的要求,并确定缺陷,以确保产品无缺陷,从而生产出高质量的产品。而软件测试分为手工测试和自动化测试两大类。手工测试和自动化测试都有各自的优点和缺点,而且我们知道项目都有很关键的要素:质量、成本和时间,任何项目的目标都是获得高质量的产出,同时控制完成项目所需的成本和时间,所以了解手工测试和自动化测试以及何时使用手工测试和何时使用自动化测试之间的区别是非常必要的。
手动测试
对软件进行手工测试以发现缺陷的过程。测试人员是站在用户的视角,并确保所有功能都按照需求文档中那样工作。在这个过程中,测试人员执行测试用例并在不使用任何自动化工具的情况下手动生成报告。
手动测试类型
- 黑盒测试:黑盒测试是一种软件测试方法,测试人员在测试中测试被测软件的功能,而不查看内部代码结构。这可以应用于软件测试的各个层次,如单元、集成、系统和验收测试。
- 白盒测试:它是基于应用程序内部的代码结构的测试。在白盒测试中,系统的内部视角以及编程技巧被用来设计测试用例。这种测试通常在单元级别进行。
- 单元测试:也称模块测试或组件测试。这样做是为了检查源代码的单个单元或模块是否正常工作。通常它是由开发人员在开发人员的环境中完成的。
- 系统测试:测试完整的应用程序,以评估系统是否符合其客户的需求,我们称之为系统测试,也称为端到端测试。目标是已完成的系统,以确保软件是否按预期工作。
- 集成测试:集成测试是测试两个软件单元之间接口的过程。集成测试有三种方式。大爆炸法,自上而下法,自下而上法。
- 验收测试:通常它由最终用户和测试人员一起完成的,以验证软件的功能是否按照用户需求来实现。进行测试后,客户可以接受或拒绝所提供的软件功能。验收测试的类型有Alpha、Beta和Gamma测试。
当然还有许多的手动测试种类,请查考《软件测试笔记(三)多种多样的测试类型》。
何时适用手动测试
- 探索性测试:由行业专家进行探索性测试。他们通过探索应用程序的功能来执行测试,而不了解详细的需求。
- 可用性测试:验证软件是否用户友好,是否被最终用户舒适地使用。主要重点是检查最终用户是否能够轻松理解和操作软件。一个好的软件应该是自我探索的,具有引导性的,并且不需要太多的培训来操作它。
- 随机测试:测试人员在不遵循任何文档和测试设计技术的情况下随机测试软件。如果试人员的知识非常丰富,则主要执行此类测试,测试人员在没有任何测试用例或业务需求文档的情况下随机测试应用程序。
何时使用手动测试,而非自动化测试
- 当项目处于初始开发阶段时,测试框架搭建完成前。
- 当测试用户界面。
- 当需要进行探索性或随机性测试。
- 如果项目是短期的,与手动测试相比,编写脚本和搭建测试框架非常耗时的时候。
- 如果测试用例不能自动执行验证码示例。
手动测试的优劣
优:
- 适用范围广,可以在各种软件上进行手动测试。
- 对于短生命周期产品更可取。
- 新设计的测试用例应该手动执行,以确保用例的正确性。
- 应用程序在自动化之前必须手动测试。
- 在需求频繁变化的项目和GUI不断变化的产品。
- 与自动化测试相比,它的初始投资更便宜。
- 开始手动测试所需的时间和费用更少。
- 它允许测试人员执行随机测试。
- 测试人员没有必要了解自动化工具和框架。
劣:
- 手工测试主要是在做回归测试时耗时,而且重复性很大。
- 与自动化测试相比,手动测试不太可靠,因为有人的影响。所以总会有人为因素导致的一些错误。
- 从长远来看,相比于自动化测试代价更高。
- 无法重用,因为无法记录整个测试过程。
自动化测试
自动化测试是使用自动化工具来发现软件缺陷的测试过程。在这个过程中,自动化工具会自动执行测试脚本并生成结果。一些最流行的自动化测试工具是QTP、Selenium Webdriver,Jmeter, TC等。
常用的自动化工具:
- HP QTP
- Selenium
- LoadRunner
- SilkTest
- TestComplete
- WinRunner
- Jmeter
何时适用自动化测试
- 回归测试:对一个已经测试过的缺陷,在修改后进行的重复测试,目的是用于发现由于软件或其他相关或不相关的软件组件的变化而引入的任何缺陷。回归测试非常适合做自动化测试,因为软件经常更改代码,而且需要进行及时的测试。
- 性能测试:测试软件的速度、可伸缩性和稳定性。性能是指实现满足项目或产品性能目标的响应时间、吞吐量和资源利用率级别。它非常适合自动化测试。
可以同时进行手动和自动化测试的测试类型:
- 系统测试:测试软件是否符合其指定的要求实现,也称端到端测试。目标是验证已完成的系统,以确保应用程序是否按预期工作。
- 单元测试:单元测试也称为模块测试或组件测试。为了检查代码的单元或模块是否正常工作。通常由开发人员在开发人员的环境中完成的。
- 验收测试:通常它由最终用户和测试人员一起完成的,以验证软件的功能是否按照用户需求来实现。进行测试后,客户可以接受或拒绝所提供的软件功能。验收测试的类型有Alpha、Beta和Gamma测试。
哪些场景不适合自动化测试
- 探索性测试
- 用户界面测试
- 随机测试
何时使用自动化测试,而非手动测试
- 处理重复和耗时的任务
- 并发测试
- 非功能性测试,如负载、性能、压力测试
- 避免人为错误
自动化测试的优劣
优:
- 自动化测试的执行速度更快。
- 从长远来看,它比手工测试便宜。
- 自动化测试更可靠。
- 自动化测试可扩展性好和更通用。
- 用于回归测试。
- 可重用,因为自动化过程可以被记录。
- 它不需要人为干预。测试脚本可以在无人参与的情况下运行。
- 它有助于提高测试覆盖率。
劣:
- 仅推荐用于大型,稳定的产品。
- 自动化测试最初费用很昂贵。
- 大多数自动化工具都很昂贵,当然除开源软件外。
- 它会有有一些限制,例如处理验证码,获取ui的视觉方面的信息。
- 需求反复变化时。
- 不是所有的工具都支持各种测试如windows、web、移动性、性能/负载测试。
总结
自动化测试 | 手动测试 |
---|---|
自动化测试更可靠。每次执行相同的操作。它消除了人为犯错误的风险。 | 手动测试相对不太可靠由于可能会出现人为失误,人工检测也有可能不准确。 |
自动化测试初期投资较高。测试工具需要投资从长远来看,它比手动的便宜。与手工测试相比,从长远来看,性价比更高。 | 手工测试的初始投资小于自动化。人力资源需要投资。从长远来看,与自动化测试相比,性价比更低。 |
当我们进行回归测试时,自动化测试则是非常有意义的。 | 如果测试只需要运行一次或两次,那么手动测试是实用的选择,在这种情况下,测试用例不会重复运行。 |
执行是通过软件工具完成的,因此它比手动测试更快,并且与手动测试相比需要更少的人力资源。 | 测试用例的执行非常耗时,需要更多的人力资源 |
不可能进行探索性测试 | 可以进行探索性测试 |
性能测试如负载测试、压力测试等是自动化测试的选择。 | 手动化的性能测试不是一个好的选择 |
自动化测试可以并行完成,减少测试执行时间。 | 在手动测试中并行执行测试用例不是一件容易的事情。我们需要更多的人力资源来做到这一点,并且变得更加昂贵。 |
它可以并行完成,减少测试执行时间。 | 在手动测试中并行执行测试用例不是一件容易的事情。我们需要更多的人力资源来做到这一点,并且变得更加昂贵。 |
需要一些脚本方面的知识 | 通常不需要脚本知识 |
集成到CI/CD(持续部署/发布)很方便 | 无法集成到CI/CD(持续部署/发布) |
人工干预不多,所以做用户界面测试效果不好 | 它涉及到人工干预,所以进行用户界面测试是非常有效的 |
不管黑猫白猫,抓到老鼠的就是好猫。在测试中也是同样,不管自动化测试和手动测试,能发现缺陷,最合适的就是好的测试方法。希望上面手动测试和自动化测试的区别和适用范围可以帮助大家找到合适的测试方法。如果大家有感兴趣的话题和相关感受,也请回复到评论中和大家一起分享。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。