试影响分析使开发人员可以轻松地进行更智能的测试,而不是更困难。这里全面介绍了测试影响分析的好处以及为什么开发人员应该将其纳入他们的软件测试例程中。
测试影响分析意味着将测试专门集中在每次迭代期间所做的更改,并自动准确地测试需要测试的内容。利用这项技术的团队可以通过有关需要做什么的即时反馈来优化他们的开发测试工作。
行业调查和报告经常证实,即使在实施敏捷、DevOps 和持续集成/部署等现代开发流程之后,软件测试仍然是一个瓶颈。在某些情况下,软件团队的测试不够充分,必须在开发周期的后期阶段处理错误和安全漏洞,这会产生一个错误的假设,即这些新流程无法兑现其承诺。解决某些类别问题的一种解决方案是右移测试,它依赖于在生产环境中监视应用程序,但它需要坚如磐石的基础设施,以便在出现严重缺陷时回滚新的更改。
结果,组织仍然错过了最后期限,并且质量和安全性受到影响。但还有更好的方法!为了更智能地进行测试,组织正在使用称为 测试影响分析的 技术来准确了解要测试的内容。这种数据驱动的方法支持左移测试和右移测试。
Parasoft 产品免费试用https://www.evget.com/consult/parasoft/#Aps_contact
敏捷和 DevOps 以及测试瓶颈
任何迭代过程中的测试都是在有限的周期时间内可以完成多少测试的折衷。在大多数项目中,不可能在每次迭代中进行完全回归。相反,执行一组有限的测试,并且确切地测试什么是基于最佳猜测。由于通常没有足够的已完成新功能可供测试,因此测试也会在周期中进行回载。生成的工作量与时间图最终像锯齿一样,如图 1 所示。在每个周期中,仅执行一组有限的测试,直到执行完整回归测试的最后一个周期。
不幸的是,没有一个项目在达到最终周期时具有零错误和零安全漏洞。在此阶段发现缺陷会增加延迟,因为错误会被修复并重新测试。即使 存在 这些延迟,许多错误仍然会进入已部署的产品中,如下所示。
这种情况导致了所谓的“右移测试”的采用,即组织在部署阶段继续测试其应用程序。右移测试的目的是增强和扩展测试工作,测试最适合部署阶段,例如 API 监控、切换生产中的功能以及从现实操作中检索反馈。
什么是右移测试?
重现真实测试环境以及在测试中使用真实数据和流量的困难导致团队使用生产环境来监视和测试其应用程序。这样做有很多 好处 ,例如,能够使用支持容错和性能改进的实时生产流量来测试应用程序。一个常见的用例是所谓的 金丝雀发布,其中软件的新版本首先发布给一小部分客户,然后随着错误的报告和修复而推广到越来越大的群体。例如,Roku 就是这样做来更新其设备固件的。
右移测试依赖于开发基础设施,该基础设施可以在出现严重缺陷时回滚版本。例如,金丝雀版本中的严重安全漏洞意味着回滚该版本,直到新的更新版本准备就绪,如下图所示:
但使用生产环境来监控和测试软件是有风险的,当然, 右移测试的目的从来不是取代部署前的单元、API 和 UI 测试实践! 右移测试是一种 补充 实践,它将持续测试的理念扩展到生产中。尽管如此,组织很容易滥用这个概念来证明在开发过程中进行更少的单元和 API 测试是合理的。为了防止这种情况发生,我们需要使开发阶段的测试变得更容易、更高效,并生产出质量更高的软件。
通过集中测试来更智能地测试,而不是更困难
大多数软件都没有经过充分测试,测试内容的决定基本上基于开发人员对关键功能的最佳猜测。在 SCRUM 冲刺或其他流程的迭代期间,很难确定要测试什么,因为“测试所有内容”当然不是一种选择。由于时间很短,只能测试由最新功能更新的软件部分,但具体哪些代码受到影响通常是未知的。测试自动化有所帮助,但如果不准确了解测试地点和测试内容,测试覆盖率就会不足。
测试影响分析
这些缺点可以通过使用测试影响分析来克服 ,测试影响分析是对测试覆盖率、代码更改和依赖性的多变量分析,可以准确指出需要测试的代码。此外,这些精确的测试可以安排并自动执行。
测试影响分析在 IDE 内的开发人员级别进行,收集有关哪些测试执行哪些代码的信息,并在开发人员更改代码时在开发人员的 IDE 中应用该信息,使开发人员能够轻松识别和执行需要执行的特定测试。需要运行以验证更改的代码不会破坏任何测试。此外,跟踪哪些受影响的测试已运行、哪些已通过、哪些已失败,可以使开发人员轻松确定哪些测试仍需要运行,或者哪些测试已失败并需要解决。一旦所有测试都已运行并通过,开发人员就知道可以安全地提交代码并继续前进。
测试影响分析在 CI/CD 流程中工作,通过无缝集成到项目的构建系统(例如 Maven 或 Gradle)中,以获得有关更改的即时反馈。测试影响分析确定自基线构建(即最后一次夜间构建)以来哪些代码发生了更改,确定需要运行哪些测试来执行该代码,然后仅运行该测试子集。此工作流程使团队能够设置仅根据最近的代码更改运行测试的 CI 作业,将运行 CI 作业所需的时间从几小时缩短到几分钟。
测试影响分析具有以下主要优点:
- 了解每个测试涵盖的内容。 通过自动将测试执行数据与测试覆盖率数据关联起来,测试影响分析提供了一种机制,可以根据当前正在开发的代码来识别需要运行哪些测试。用户无需运行不必要的测试即可节省时间,并且团队可以从开发期间和代码签入后的即时反馈中受益。
- 了解发生了什么变化。开发人员通常不知道要运行哪些测试来验证代码更改,因此他们要么(a)在不运行任何测试的情况下签入代码(这是一种非常糟糕的做法),(b)只运行他们知道的一两个测试(这很容易错过一些),或(c)运行所有测试(这浪费时间)。测试影响分析通过立即识别哪些测试与哪些代码更改相关来解决这个问题,并通过自动执行它们来更进一步。签入的代码变得更加稳定,因为它在签入之前已经过彻底的测试。
- 重点关注验证更改和受影响的依赖项的测试。识别并运行验证自上次基线构建(通常是夜间构建)以来所有代码更改和受影响的依赖项所需的一组测试,可以显着减少运行 CI 所需的时间。这使得团队能够从真正的 CI 流程中受益。
- 即时且持续的反馈。 测试影响分析不仅可以识别测试和代码之间的直接依赖关系,还可以识别间接依赖关系,可以帮助团队在检查代码后尽快了解代码是否破坏了任何测试。
概括
为了大大减少开发中的测试瓶颈,并提高测试人员在每次迭代中投入的“锯齿”工作的效率,开发团队可以受益于测试影响分析技术。具有测试影响分析的测试自动化意味着将测试专门集中在每次迭代期间所做的更改,并自动准确地测试需要测试的内容。这些团队通过即时反馈来优化他们的开发中测试工作,包括需要做什么、哪些代码未通过测试以及哪些其他代码受到新更改的影响。