快速发布最佳基础架构,精细型 VS 扩展型,如何强强联手?

Blog
Author:
Dori ExtermanDori Exterman
Published On:
4月 8, 2021
Estimated reading time:
1 minute

软件开发争分夺秒已不是什么秘密了。软件公司的兴衰取决于他们能否快速发布有价值的性能。敏捷的发布周期缩短了产品上市的时间,产品更新速度远超竞争对手,质量提升,进一步巩固企业市场份额。这种竞争也驱使着发行周期不断加速,让行业陷入一个无休止的竞速循环。

高质量的代码也需要耗费时间成本。“速度和质量不可兼得”这个铁律同样适用于软件行业。相比于质量好但上市晚的产品,低质量上市早的产品获得的市场份额较少,如果发布周期中途不幸出现故障,还要花费高昂的成本进行修复。

为了解决速度和质量的矛盾,DevOps 用户通常依赖于精细型基础架构(构建、工作流或管道),或扩展型基础架构。这些是什么意思?在本文中,我将深入研究每种方法如何应用于测试,以及两种方法如何取长补短,加速测试和整个管道流程。

什么是精细型测试?

精准化测试方法就是 “精细型”的一个典型例子。

为了降低左移情况下的总体测试负担,通常需要手动检查正在运行的所有测试,并找出哪些测试经常失败。针对这些频繁失败的测试,专门构建一个测试的子集,供开发人员在提交代码之前运行。这样做的目的在于,开发人员可以在提交代码之前发现测试失败,将错误 “定位在特定区域中”,而不用等到 CI/CD 构建才知道测试失败。这个方法也大大降低了 CI/CD 构建的失败率,等待时间减少,发布经理也有更多时间揪出“是谁破坏了构建”。

这种精细化的方式创建了一个人工反馈的循环,但问题在于它的局限性。由于门类细分,它只能盯准某种类型的测试,从而忽视了其他的测试。测试范围有限,可能只涵盖了 20% 的失败构建。

另外,这种精细化需要大量的劳动力,且效率不高。要选择测试的子集,我们必须检查并了解所有的测试,挑选出那些经常失败的测试,然后随着软件的发展不断修改这些测试集。测试门类可以不断细分,永远没有尽头,因此成本只增不减,也没有折中的选择。因为归根结底,单靠精细化,我们只能专注于测试的一个子集,而忽略了很多未被触及、未经检验的区域。

什么是测试中的扩展型基础架构?

另一种方法是 “扩展型基础架构”。这包括云端扩展、硬件扩展、分布式系统、规避和缓存技术、自动化等等。

当我们扩展基础架构时,对精细分类的需求就不那么迫切了。无论是通过硬件升级、扩展还是分布式计算,都能为开发人员提供数百个额外的内核,确保在提交代码之前运行完整的测试套件,而不用在特定的子集上妥协。

当然,这种方式所检测的错误更多,反馈更快,上下文也能及时得到维护。扩展型基础架构适用于任何类型的测试——单元测试、集成测试、API 测试、回归测试、浸泡测试、负载测试等等。这类的测试自动化能加速发布周期,提升竞争力、质量、生产效率,以及最终的胜利——加速上市。

扩展基础架构是一项战略性举措。然而,每一种战略都包含具体战术——这就是精细化的价值所在。不过,即使考虑扩展型基础架构和测试自动化,我们也从专业细分中可以学到一些经验。

最佳方案:强强联合加速发布

当我们从整体的角度来看待开发优化时,混合使用两种方法意义不凡。对于测试,扩展型基础架构是一种更方便的解决方案,可以快速完善测试方法,进行更多更好的测试。这是战略性的变化,目标在于提升测试效率,增加测试类型,这也将成为未来的标准。

首先扩展基础架构,让测试人员能够更有效地集中精力。这也是一次性的投资,扩展效果清晰明了。一旦我们扩展了基础架构,我们就用我们所取得的成果和学到的知识,来更好地专注于精细化的工作。

例如,基础架构扩展后,我们可能会发现测试的一个子集由于依赖关系而不得不按顺序运行,因此也不能利用额外扩展的计算能力优化进程。对于这个子集,我们可以对症下药,删除不必要的依赖项,以便从弹性的基础架构中获益。

重中之重

当发布高价值功能时,速度才是出奇制胜的绝招!开发团队需要寻找新的方法来缩短发布周期,加快产品上市。有时,新方法可能是常用方法的混合,要知道解决方案并不总是非黑即白。取长补短,完美联合精细型和扩展型基础架构,是战略创新和战术敏锐的一个最佳例子。

banner-CI_CD