单元测试和集成测试。 安全测试。 可扩展性和性能测试。 API 测试。 GUI 测试。
在 CI/CD 管道的早期阶段进行测试。通过尽早测试和检测问题,团队可以防止功能更新在 CI/CD 工作流程中累积错误。这种方法可以让开发人员更轻松地修复错误,因为他们不必对即将进入准备阶段或生产阶段的代码进行大量修改。 在发布之前进行更频繁的测试。与早期测试一样,更频繁的测试使团队能够尽早发现和解决问题。不仅如此,自动化还可以连续执行数百次测试,从而减少运行全面测试管道所需的时间。 跨不同的环境、平台和设备进行测试。自动化测试可以与平台无关,也就是说,它们可以在任何设备或操作系统上运行。这使团队能够在设计的环境范围内更全面地测试其应用程序的质量。
缩短上市时间。CI/CD 管道的速度决定于最慢的组件,木桶能装多少水决定于最短的那个木板。自动化可以显著缩短上市时间,因为手动测试可能是软件交付的一大瓶颈。QA 工程师可能需要花几天时间才能通过手动测试完成测试例程。自动化可以将测试时间缩短到几分钟。 增加测试覆盖率。测试覆盖率是手动或自动测试覆盖的代码或应用程序组件的百分比。通过自动化测试,软件交付团队可以覆盖更多领域并确保没有遗漏任何代码。此外,通过释放 QA 工程师的时间,测试自动化可以让他们探索提高工作质量的新途径。 提高软件质量。测试自动化通过多种方式提高了软件质量。首先,随着测试覆盖率的提高,测试自动化在应用程序中几乎没有盲点,并且可以确保覆盖所有关键领域。其次,正确实施的测试自动化消除了人为错误的风险,并实现了对新代码的一致、可靠的测试。最后,测试自动化让人们对频繁变化的产品充满信心,并允许团队始终如一地为其应用程序提供完善的高质量更新。
25% 的受访团队报告称已实现全面测试自动化,是上一年的两倍多; 28% 的团队报告称他们至少已实现测试自动化的一半; 25% 的团队尚未实现测试自动化或刚刚开始考虑。
节省了 450 万美元的时间并提高了开发人员的产出, 通过修复错误节省了 376,000 美元的成本, 通过测试自动化节省了 290 万美元, 通过减少主要大型机缺陷节省了 260 万美元。
84% 的开发人员可以比以前更快地发布代码, 57% 的开发人员报告代码发布速度提高了一倍(而 2020 年这一比例为 35%), 19% 的开发人员设法将代码交付到生产的速度提高了 10 倍。
21.02% 的团队还实施了源代码管理, 17.74% 的团队实施了持续集成, 13.59% 的团队实施了持续交付, 11.65% 的团队采用了 DevOps 平台。
节省时间和资金 提高准确性, 增加测试覆盖率, 通过自动化实现手动测试无法实现的成就, 为 QA 测试开发人员和测试人员提供自动化支持,以及 提高团队士气。
分发测试数据, 配置测试环境, 执行测试, 分析测试结果。
静态和动态测试、 盒式方法(白盒、灰盒和黑盒测试)以及 手动和自动化测试。
单元测试。单元测试检查应用程序中的单个代码或组件。QA 工程师可以自动化单元测试来检查函数、类或 API 端点的行为。单元测试非常细粒度,可以帮助工程师检查其产品的低级功能。 集成测试。集成测试在更大的组件组上运行,旨在确保应用程序单元独立工作,并相互结合。本质上,集成测试结合了几个相关的单元测试并检查它们的操作。可以使用集成测试测试的功能示例包括支付处理、用户注册或消息传递。 系统测试。系统测试检查整个系统的运行情况,所有通过单元测试和集成测试的组件都可以协同工作。 QA 工程师可以自动化系统测试,例如,确保他们的应用程序允许用户无缝地将产品添加到购物车、选择送货方式,然后付款以完成订单。 验收测试。验收测试旨在确定应用程序是否符合最终用户的规格和要求。与前三种检查产品技术是否有效的测试不同,验收测试旨在确保产品满足最终用户的期望。验收测试可以是功能性的,也可以是非功能性的。功能测试检查产品的行为是否符合用户的预期,例如,用户提交的数据是否传递给正确的 API。相比之下,非功能测试检查应用程序的安全性、可扩展性和性能。
可重复。如果特定测试需要在不同的功能更新或不同的应用程序中频繁运行,那么它就是自动化的绝佳候选者。一遍又一遍地重复手动测试可能会浪费大量时间,因此自动化测试可以帮助提高软件交付团队的工作效率。 决定因素。软件交付团队应该能够清楚地概述哪些测试通过,哪些测试失败。否则,当代码通过或未通过测试时,自动化测试管道将无法采取适当的措施。 乏味。重复的测试让人不满意,很无聊,而且很容易导致 QA 工程师分心。自动化单调的测试是让测试更有成就感的好方法。自动化还可以让 QA 工程师腾出时间来完成更重要的任务。 业务关键。对测试自动化的投资应该具有商业意义。如果某些测试的自动化将产生比交付价值更多的成本,团队应该保持手动。
只运行一次的测试。从业务角度来看,自动化一次性测试可能没有意义,因为成本可能会超过收益。话虽如此,如果测试很复杂并且需要很长时间,自动化测试可能是值得的。 探索性测试。由于探索性测试是在不太了解的组件上进行的,因此它们通常不可能实现自动化——至少是完全不可能。此外,探索性测试可能具有一定的随机性,因为 QA 工程师可能需要探索现有测试未涵盖的应用程序的新方面。 正在开发的新功能的测试。正在进行的功能和代码可能会频繁更改,因此自动化测试不切实际。团队可能能够成功地为正在开发的功能开发自动化测试套件,但如果该功能由于不符合性能或安全要求而突然更改,则可能需要完全重写自动化测试。在编写新代码和功能时,应尽可能同时考虑手动和自动测试,但自动化测试本身应在功能最终确定和部署后进行。 UX 测试。UX 测试可能很难实现自动化,因为它们严重依赖最终用户的反馈。量化用户体验是 UX 测试自动化的主要挑战之一。应用程序或网站上线后,衡量用户体验会很容易,因为团队可以使用跳出率、转化率或平均订单价值等指标来衡量客户满意度。但在应用程序开发过程中,预测用户体验的好坏可能非常困难。但是,机器学习等预测方法可以根据真实用户的过去数据有效地对用户体验进行评分,从而使用户体验测试自动化更加容易实现。
References:
Bossert, O., Ip, C., & Starikova, I. (2015). Beyond agile: Reorganizing IT for faster software delivery. McKinsey & Company.
Brown, A. W. (2012). Enterprise software delivery: bringing agility and efficiency to the global software supply chain. Addison-Wesley.
Forsgren, N., & Humble, J. (2016). The role of continuous delivery in IT and organizational performance. In the Proceedings of the Western Decision Sciences Institute (WDSI).
Google Cloud. (2021). Accelerate State of DevOps 2021.
Motingoe, M., & Langerman, J. J. (2019, July). New Organisational Models That Break Silos in Organisations to Enable Software Delivery Flow. In 2019 International Conference on System Science and Engineering (ICSSE) (pp. 341-348). IEEE.