1 什么是左移测试?
左移测试是一种软件开发方法,涉及在开发过程的早期开始测试活动。该策略旨在尽早发现和修复缺陷,提高整体软件质量并降低成本。
想一想传统的软件开发模型。它们通常将测试放在流水线的最末端或最右侧。左移测试实际上是将测试推到“左侧”,即流水线的早期阶段。左移方法旨在在开发过程中尽早识别和解决错误。这可以提高软件质量并减少在流水线后期解决问题所花费的时间(这些问题通常会随着开发进度而加剧)。
从实际角度来看,这意味着开发人员在将个人代码单元推送到版本控制之前,自己会运行更多测试。每个开发人员都应该运行许多测试,以促进左移测试的成功并推出更好的产品。
2 为什么要采用左移战略?
当测试暂停到开发结束时,出现的任何错误通常都会更难修复。由于所有代码都已创建,因此解决这些问题需要重新编写整个软件。这种方法的后果是:
- 成本增加,因为需要将软件发回并从头开始重新制作
- 由于此类返工需要更长的时间才能完成,因此增加了上市时间
说到修复漏洞,越早修复越便宜。根据NIST 的数据,解决生产缺陷的成本可能高出 30 倍,如果是安全缺陷,则可能高出 60 倍。
左移测试方法实现了一个流程,让开发人员能够尽早发现错误并经常发现。开发人员编写或审查代码时发现的错误最容易修复,因为这些代码单元很小,而且管理起来非常方便。一旦合并到主开发分支中,代码的广度就会扩大,查找其中的异常所需的工作量也会增加。
3 左移测试的类型
左移测试强调早期参与开发过程。以下是左移测试的主要类型:
3.1 1.单元测试
单元测试可验证应用程序中各个模块的功能。每个模块都单独进行测试,并模拟或模仿与外部流程的交互。单元测试通常与测试驱动开发 (TDD) 相关,代表了左移测试的初始阶段。
3.2 2.集成测试
集成测试检查服务或应用程序的组合功能,包括任何副作用。虽然很重要,但这种测试方法有时会成为一种反模式,这将在后面进一步讨论。
3.3 3. API测试和契约测试
API 测试验证服务的外部端点。其范围与集成测试密切相关,但在面向服务架构 (SOA) 或微服务环境中,它们可以被视为新的单元测试,重点关注服务之间的交互。
3.4 4. UI 测试
UI 测试从用户界面角度验证应用程序的完整功能。Selenium 等工具可让您更轻松地实现这些测试的自动化,从而确保流畅的用户体验。
3.5 5.自动化测试
自动化测试在验证和确认中都发挥着重要作用。由行为驱动设计 (BDD) 驱动的 Cucumber 等技术有助于实现部分验证过程的自动化。本文将主要关注用于验证的自动化测试。
4 左移测试的好处
一些好处包括:
- 节省成本:通过自动化单元测试及早发现缺陷比修复进入客户环境的问题更便宜。
- 提高效率:持续测试可更快地解决问题并使开发周期更顺畅。
- 早期错误检测:在开发早期发现错误可最大限度地减少成本和精力。
- 更快的开发:在开发的同时进行测试可以减少最后一刻修复造成的延迟。
- 开发人员福祉:有效的自动化测试和持续集成(CI)使开发人员有信心频繁部署,减少压力并更快地解决错误。
- 弹性架构:优先考虑可测试性可以带来更好的软件设计和更容易的维护。
- 更高的整体质量:通过持续的反馈减少事故并改善软件健康状况,从而增强客户体验。
- 更好的协作:从一开始就鼓励开发人员和测试人员之间的沟通。
5 左移测试的局限性
一些限制包括:
- 增加初始投资:需要大量的前期成本用于工具和培训,这对某些组织来说可能是一个障碍。
- 自动化测试的质量:如果测试设计不完善,过度依赖自动化可能会导致问题,从而产生假阳性或假阴性。
- 范围有限:专注于早期检测,但可能会忽略可用性和可访问性等方面,这些方面需要不同的测试方法。
- 资源密集型:持续测试可能需要大量资源,包括技术人员和基础设施,这可能不适合所有团队。
- 代码审计:在实施左移流程之前,代码审计必不可少。软件开发过程中的定期代码审计有助于确保质量;如果做得不好,可能会妨碍代码测试的顺利执行,并最终影响整体软件质量。
- 管理测试数据的困难:创建和维护相关测试数据可能具有挑战性,会影响测试效果。
6 如何实现左移测试方法?
6.1 让开发人员参与测试活动
如果开发人员在将代码推送到主分支之前对其进行测试,则合并后的代码会更干净,错误更少。单个代码单元更易于测试,因为它们更小且更易于导航。
6.2 向测试人员引入编码活动
敏捷的最佳体现(通常与DevOps同义)要求开发人员进行测试,测试人员进行编码。显然,他们不需要成为其主要领域之外的专家。但开发人员应该能够运行中级测试,而 QA 应该了解足够的编码知识,以便在可能的情况下实施一些快速修复。
基本编码技能可帮助测试人员有效地进行代码审查,并使他们成为冲刺团队中有价值的贡献者。测试人员需要足够熟练才能阅读和修改简单代码(例如自动化测试或重新设计基本方法)。
6.3 尽早纳入测试人员
当 QA 从第一次头脑风暴 1会议开始参与时,敏捷中的左移测试效果最佳。当开发人员提出关于如何构建网站或应用程序的想法时,QA 必须在场。这有助于他们理解基本概念,从而让他们能够为持续测试阶段设计更好的测试。此外,让 QA 在场可以让开发人员清楚地了解可能出现哪些错误以及如何避免这些错误。
成功的 DevOps 取决于自动化。QA 需要了解代码的形成方式以及对最终产品的期望,以便创建相关的测试用例。他们不可能仔细检查每一行代码,找出每个不合适的分号。此外,当开发人员对他们的代码进行测试时,他们可能需要 QA 的输入,以便指导他们检查哪些内容。
6.4 编码时要牢记可测试性
就像敏捷流程和 DevOps中的一切一样,协作是成功的关键。成功的 左移测试也需要团队合作。它不能只由特定的个人(指定的测试人员)在冲刺结束时完成。在编写代码时,开发人员应该问自己:“我如何使它更具可测试性?”
这可能意味着暴露一个钩子或为元素创建一个唯一的 ID。此外,这种思维方式让开发人员意识到可能破坏功能或导致操作问题的问题。当软件在创建时考虑到其是否适合测试时,左移测试就会变得更加轻松。
7 左移还是右移
左移和右移是软件测试中的互补方法,分别侧重于开发生命周期的不同阶段。
左移强调测试和质量保证的早期整合,以便尽早发现错误并促进开发人员和测试人员之间的更好协作。相比之下,右移 涉及在流程的后期(通常是在生产环境中)测试软件,以便在客户之前发现问题。
总之,这些策略通过解决开发和测试的不同阶段来提高软件质量,其中 左移提供快速反馈以帮助解决在 右移 测试期间发现的问题。
方面 | 左移 | 右移 |
---|---|---|
重点 | 开发期间的早期测试 | 生产中的测试和监控 |
目标 | 早期错误检测和预防 | 实时用户反馈和性能 |
测试方法 | 自动化单元和集成测试 | 监控、用户测试和 A/B 测试 |
合作 | 促进开发人员和测试人员之间的协作 | 鼓励开发人员和运营人员之间的合作 |
8 向左转后会发生什么变化?
在您的组织采用左移测试后,您可以期待几项重大变化,这些变化将增强整体开发和测试过程:
- 减少等待时间:整个开发过程持续进行测试,最大限度地减少空闲时间并提高效率。
- 增加客户参与度:客户积极参与编写测试用例和规范,确保软件满足他们的需求。
- 遵守测试金字塔:强调单元测试导致结构化的测试方法,并且在开发周期早期编写更多的单元测试。
- 多元化团队参与:组织中的每个人都参与测试,利用现代工具使非编码人员能够创建强大的测试。
- 增加测试覆盖率:更频繁和更早的测试可以使应用程序的更大部分被测试覆盖。
- 注重测试维护:随着测试数量的增加,组织优先考虑有效的维护策略来管理脆弱的测试并减少故障。
9 敏捷中左移测试的最佳实践
以下是左移测试期间要遵循的一些最佳实践:
9.1 1. 做好计划
以有利于左移测试的方式塑造开发。一旦确定了需求,开发人员和测试人员应该尽早、逐步地构思如何塑造编码和测试。根据产品期望以及团队的限制,可能需要制定特定策略来适应左移方法。在左移测试中,建议尽早进行测试规划并制定测试策略。
9.2 2. 使用静态代码分析
静态代码分析是一种在不执行代码的情况下检查代码的做法。它贯穿基本代码结构并确保代码符合一系列标准和准则。通常,静态分析会查找以下问题:
- 编程错误
- 违反普遍遵循的编码标准
- 语法异常
- 安全问题
静态代码分析最好通过自动化方式进行;否则,它会变得非常繁琐。软件应该在项目进入 QA 之前扫描所有未测试的代码。静态代码分析器会根据一组预定义的标准和规则检查代码,以确定代码是否符合这些标准和规则.
如果分析器确实标记了任何问题,则人类开发人员/测试人员必须检查它们以验证它们不是误报。然后,开发人员可以修复明显的错误并将代码发送给测试人员。
9.3 3. 提供持续反馈
应尽可能在整个软件生命周期内向开发人员和测试人员提供反馈。这样可以立即解决差距,并让所有参与者更好地了解测试期间出现的任何主要趋势。这还可以帮助他们开展未来的项目,尤其是与当前项目类似的项目。
9.4 4. 指定质量标准
请记住,开发人员通常不会从头开始接受测试培训。因此,不能指望他们凭直觉就能搞清楚测试的细节。QA 和 QA 经理应概述代码的质量、性能和操作成功率,以便运行测试的开发人员知道要查找哪些错误。他们需要清楚地知道哪些是不可协商的,哪些问题可以转发给 QA(最好附上几行上下文)。软件质量标准的清晰度也有助于测试人员以正确的严谨态度找出自己代码中的错误。
10 真实设备在左移测试中的作用
所有测试,从开发人员测试开始,都必须在真实设备上进行。软件测试只有在真实用户条件下运行才会有效。在模拟器或仿真器上运行测试无法提供 100% 准确的结果,因此开发人员无法充分评估其代码的质量。在模拟器或仿真器上测试的任何结果都只是部分正确,因此基于这些结果的开发活动无法确保高质量的软件。
无论是手动测试还是自动化 Selenium 测试,真实设备在测试过程中都是必不可少的。
11 末语
左移测试确保每次都能获得准确的结果。从开发级别开始的全面无错误测试可防止错误在后期出现(通常会被放大),从而减少处理它们所需的时间和精力。在发布代码之前修复开发人员发现的错误几乎总是更容易。它还允许软件更快地进入市场,并降低由于完全可以避免的错误而导致收入和信誉损失的可能性。