将左移应用到发布管理的其他领域

在这里插入图片描述最近,我发现我们经常提到左移。诚然,左移已是一大趋势,帮助发布经理面对挑战。我认为左移也正是发布经理真正需要的,帮助提高发布管理质量和速度。毕竟,如果不能保障产品及时、高质量发布,那发布管理也就无从可说了。

也许有读者正挠头困惑什么是左移。简单来说,左移就是尽量在开发早期多做一些准备工作(主要是测试,但不止局限于测试,我会稍后解释),以便在开发过程中尽早发现缺陷,然后将它们左移。

例如针对测试,可以将测试向左移动,在开发人员提交代码之前执行,而不用等到后续的持续集成构建才运行。开发人员在提交之前测试代码,快速找到错误(如果测试失败),并及时修复。而不用苦等 CI/CD 进程通知失败,才又从头开始。除了更快地找到错误,并锁定在上下文中,这种方法还将 CI/CD 中失败的几率最小化,从而使开发过程更加高效和灵活。

左移还与“敏捷”相关,还有一些其他大家经常提到但并不总是执行的流行词汇有关。但,理解和执行是两码事。虽然 “左移”和“敏捷”都已经出现在很多人的梦呓里,但当具体采取左移措施以实现敏捷开发时,往往心有余而力不足。

看看《2020 年测试自动化报告》就知道了。该报告发现,只有 19% 的受访公司依赖开发团队进行测试。除了测试之外,他们不了解其他可以进行左移的方式。

从最常见的开始:测试左移

在这里插入图片描述左移通常被解读为早期测试,把问题留给开发团队,而不是 QA 团队。“通常”,意味着这种误解到现在也是广泛存在。

我要说的是,在发布管理中,左移不仅仅是测试左移。当然,测试左移的方式很好,尤其是涉及到版本管理和 CI/CD 管道时,测试左移是救命稻草。这意味着在周期的早期就解决了测试问题(例如集成测试、功能测试和单元测试)。如果进行测试驱动开发并尽早修复这些问题,或者说失败得越早,节省的时间也就越多,因为我们可以迅速“锁定”出现问题的区域并及时修复。否则就要等 CI/CD 进程失败,问题才暴露,已经太晚了。很明显,这也大大节省了发布经理的时间,因为测试失败而导致构建中断的情况减少了。另外,反馈循环更频繁紧密,所以产品质量也相应提升(可以想象 QA 团队和发布经理脸上的笑容了)。

唯一的问题是这个过程需要时间,尤其是在构建时间很长的情况下。代码、构建、测试的恶性循环(夸张一点来说),受害者是开发人员,他们需要经历漫长的等待过程,这也是让人沮丧的。由于开发团队有严格的截止日期,所以许多开发团队选择测试左移,反正早晚都要进行测试。但是,如果你编译速度很快,测试也很快,那么你就真正具备了在测试左移中取得成功的条件。

所以,你已经将测试转移到了开发阶段,并确保快速测试和编译,保证在截止日期前完成测试,然后呢?你能喘口气,然后放松一下吗?很难。左移不仅仅是测试左移。要高效实现发布管理,你不能只满足于测试左移,否则,就会被同行超越。

要实现真正的敏捷开发,你需要扩展左移区域,将通常位于发布自动化过程右侧的其他区域也向左移动,并将它们包括在发布自动化进程中。

将“安全(Sec)”移入 DevOps

除了测试,还有另一个与左移相关的高频词:DevSecOps!

DevSecOps 也是个热词,但也是敏捷的一部分。安全漏洞本应该在发布之前检测出来。在许多组织中,安全性曾经属于发布自动化或 DevOps 流程的部分(通常是在部署之前的最后一个周期),现在是发布自动化的一部分。

诚然,有些人认为安全测试是测试的一部分,因此是测试左移的一部分。但其他人认为这是一种新的左移,一种自力更生的左移,突出了曾经在发布自动化过程中靠右的进程,现在融入发布自动化(与测试左移相反,测试左移从发布自动化过程转移给开发人员)。这种转变能有效节省大量的工作量和资金,正如 IBM 的这份报告所显示:平均 80 美元用于修复开发早期发现的缺陷和漏洞,7600 美元用于修复生产中发现的漏洞,成本翻了 95 倍多。
在这里插入图片描述
图片来源: IBM

“过渡”优先

另一个左移到发布自动化内部的例子是过渡环境自动化。这意味着,作为发布自动化的一部分,你可以在生产之前自动检查生产代码,而不是在最后手动检查。

将每个阶段左移

在这里插入图片描述还有另一种类型的左移:及时左移。例如,代码分析之类的进程再也不用拖到周末运行,而是可以经常、每天甚至每次提交前进行。一旦加快了这些耗时的进程,一切都有可能。代码分析可以从 36 小时(是的,很长)缩短到 8 小时,而且你可以每晚运行代码分析进程。时间缩短,进一步帮助白天运行测试,并及时修复缺陷。

我们可以向左自由移动到“任何时间”,而不用限定在在开发周期中的特定阶段。你看,左移不仅仅是将流程从发布自动化转移到开发团队,或者从发布自动化之外转移到发布自动化,还包括在开发周期的早期以更强的节奏运行进程。

每夜构建左移成每次构建

还记得我前面提到的每次构建吗?从每夜构建到每次提交构建是发布自动化中左移的另一个例子。想想这种转变的含义。你可以加快编译时间,并在每次提交时运行构建,而不是因为运行构建耗时太长(即使只需要几分钟),不断地在时间上妥协。每一次提交。这意味着可以比以前更早地修正构建。

游戏规则已改变。

游戏规则的原因,并不是因为左移提升了速度、避免了内容切换、在周期的早期发现错误并快速反馈,而是因为它明确指出了到底是谁破坏了构建。对于发布经理来说,这一点至关重要。这意味着他们不必花太多时间去讨论构建失败的原因,找出谁应该对此负责。此外,他们可以自动生成通知,以便向破坏构建的开发人员发出通知。甚至更进一步,创建一个封闭签入,这样一旦构建失败,“有问题的”提交就不会污染存储库。因此,存储库对错误提交保持“距离”。发布经理也能始终保持一个“无污染”的正确版本,以便发布给客户或最终用户。

你能随心所欲进行全量重建吗?

作为一个发布经理,如果每个开发人员都能在提交更改之前,在最需要时候进行全量重建,像增量构建一样,这不是很好吗?

在开发阶段更早地运行全量重建,在进程中发现缺陷且及时修复,避免了CI/CD 构建失败,这与在 CI/CD 进程中妥协而不得不全量重建不同。同样,想要经常运行全量重建,前提是大幅缩短构建时间,否则也不可行。

我相信我们都会喜欢在代码提交之前运行测试,但是我们会妥协,因为这需要很多时间。我们当然希望每天都运行代码分析进程,但是这也需要时间。你明白了么?这些“但是”大多是由于缺乏计算能力而导致的耗时进程,不过,很多人甚至不知道可以打破计算能力的限制,从而不用妥协!

Incredibuild 能做什么?

我很高兴能在一家像 Incredibuild 这样的公司工作,因为它是左移的重要推动者,也是整个敏捷方法的践行者。

测试左移,安全左移,每夜构建左移,全量重建左移,我们都能做到!通过全马力加速开发,为每个开发人员主机和构建服务器提供成百上千个 CPU,Incredibuild 极大地减少了编译、测试和其他进程的时间,使构建在开发周期中运行更频繁、更早!

具体案例,可以参考 Retalix,看看他们是如何使用 Incredibuild 将测试左移,将每个开发人员的单元测试执行时间从 2 小时减少到 12 分钟。

你也希望有这样的“惊喜”吗?
在这里插入图片描述“左移”可能是一个相对较新的趋势,但这种转变已经持续一段时间了。二十年来,我们一直在为客户左移测试和构建,并将矢志不渝地左移所有测试和构建。

点击了解 Incredibuild 加速 CI 构建的解决方案,并获取试用 License!

相关推荐

CI/CD Pipeline:完整指南

CI/CD Pipeline 是一系列自动化步骤,允许开发人员快速交付更好的代码。CI/CD Pipeline已成为新软件开发流程的核心。从代码集成到部署的所有作都自动化,并在整个过程中嵌入安全性本指南深入探讨了这个概念以及它支持开发人员急需的演进的方式。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1362

如何检测和预防偶发性测试?

如果您曾经有过一次测试,前一刻通过,下一刻不及格,即使没有任何变化,这些不可预测的测试可能会使 CI/CD pipelines 脱轨并减慢发布速度。但偶发性测试不一定是一个永久性的问题。事实上,你可以永久摆脱这些片状的东西,以下是对这个概念和对抗它的武器的仔细研究。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 837

DevSecOps 集成 CI/CD Pipeline:实用指南

随着软件开发几乎每天都在攀升,组织不断尝试以前所未有的速度交付新功能和应用程序。虽然持续集成和持续交付 (CI/CD) Pipeline 彻底改变了软件部署,但它们也引入了新的安全注意事项,这就是 DevSecOps 的用武之地。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 842

当 C++ 用于嵌入式开发:优点和缺点

从小型微控制器到大型工业自动化系统, 嵌入式开发是我们每天使用的设备和产品的核心。在众多可用选项中,C++ 既是一个有前途又有点争议的候选者。在本文中,我们将探讨 C++ 如何适应嵌入式开发领域,以帮助你对项目做出明智的决策。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1522

Incredibuild 新增 Unity 支持:击破构建时间过长的痛点

任何开发过复杂 Unity 项目的团队都会告诉你:构建速度已成为生产流程中的核心痛点。Unity 灵活且强大,但随着项目规模扩大(尤其是包含 3D 资源、复杂着色器和庞大内容管线的项目),构建过程会逐渐变成一项隐性成本。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1518

如何构建成功的测试自动化框架

手动测试是有效的,但速度慢且通常很麻烦。解决方案?自动化测试。自动化带来了其自身的复杂性和挑战;再加上紧迫的发布期限、不断变化的项目要求以及交付完美结果的压力。在本文中,我们将引导您了解测试自动化框架的世界,并向您展示如何构建成功的自动化测试策略以缩短开发周期。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 908

使用 Incredibuild 的 Build Monitor 优化 Build Cache 性能

在现代软件开发中,缓慢的构建会浪费时间和资源。这会影响团队的生产力并延迟项目时间表。构建缓存是一种强大的方法,它通过重用先前构建的输出并避免冗余任务执行来加快构建时间。然而,实现最佳缓存性能并不总是那么简单。缓存命中率通过计算所有可缓存构建任务中的缓存使用或命中部分来衡量构建缓存的有效性。高命中率表示缓存成功重用以前执行的任务,从而加快构建速度。另一方面,低命中率可能表明效率低下,例如冗余任务执行。提高缓存命中率可能具有挑战性,但优化这些可以显著加快构建速度并减少资源消耗。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1112

Docker 101:面向初学者的综合教程

掌握 Docker 已成为软件开发中的一项关键技能。本教程探讨了容器化的世界,包括其核心概念、优缺点,以及开始使用容器化的分步指南。无论是 Docker 的新手,还是希望复习基础知识的更有经验的开发人员,本指南都能满足需求。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1246

使用 GitHub 可重用工作流和 GitHub Actions 简化 DevOps

这篇博文将探讨 GitHub 可重用工作流、它们的优势,以及如何构建它们并将其集成到开发流程中。无论是管理少量存储库还是监督大量项目,学习在 GitHub Actions 中创建可重用的工作流程都可以改变团队的生产力和代码质量。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1350

构建 DevOps 最佳实践:面向 DevOps 和平台工程师的操作指南

DevOps 无疑是当下最流行的软件开发方法,且仍在持续发展。其需求不断增长的原因在于,一旦得到恰当的采用,它能够带来效率提升、速度加快、可扩展性增强以及成本节约等诸多实实在在的好处,绝非空洞的承诺。在本文中,我们将讨论工程师可以遵循的最佳实践,以确保 DevOps 的成功实施。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 871

成本效率在平台工程中的重要意义

本文探讨了创建强大的开发人员平台与保持成本之间的微妙平衡,提供了有关平台工程优化的实用见解。通过可操作的建议,你将学习如何实施平台工程计划,在不破坏资金的情况下提供最大价值,最终创建一个更可持续、更高效的开发生态系统。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1001

如何在保持安全/合规的同时更快地构建应用程序:DevOps 指南

当今 DevOps 工作流程的主要挑战之一是“速度与安全性的困境”。在本指南中,我们将探讨 DevOps 团队面临的一些最紧迫的挑战。我们还将讨论 Incredibuild 如何帮助您在不牺牲 DevOps 合规性的情况下更快地交付高质量和安全的应用程序。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1067

什么是 GitOps?平台工程师入门指南

随着我们的系统变得越来越复杂,GitOps 作为下一个进化步骤出现的地方。这篇博文将探讨 GitOps 的基本原则、基本组件以及它为平台工程提供的优势。我们还将讨论采用 GitOps 的挑战,以及 Incredibuild 等工具如何支持 GitOps 工作流。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1035

更快的应用程序开发:确保安全与合规

快速软件开发是所有应用程序开发人员的首要任务。不幸的是,速度的代价通常是安全。在本文中,我们将解释为什么安全性和合规性至关重要,以及 DevSecOps 如何为快速、安全和合规的开发铺平道路。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 894

平台工程:易用性与灵活性

平台工程已成为不断发展的软件开发领域的一门关键学科,它围绕设计和维护可简化软件交付流程的内部开发平台展开。在这篇博文中,我们将探讨易用性和灵活性在平台工程中的重要性,我们在实现这种平衡时面临的挑战,以及类似 Incredibuild 这样的解决方案如何帮助我们找到最佳平衡点。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1106

如何在 CMake 上设置新项目以获得成功

从处理依赖项到确保正确编译和链接代码,正确的构建系统可以节省 你时间并避免潜在的麻烦。本教程介绍了 CMake 的受欢迎程度、基本设置和最佳实践,以及使用它时的常见陷阱。我们还探讨了代码生成器和自定义目标等高级主题。最后,你将会更加有效地利用 CMake,助力项目取得长期成功。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1370

深入了解 DevOps 基础架构:可追溯性的关键作用

在当今竞争激烈的软件环境中,快速交付强大的应用程序至关重要。尽管如此,在不影响质量的情况下保持速度可能是一项艰巨的任务,这就是 DevOps 中的可追溯性发挥作用的地方。通过提供软件开发生命周期 (SDLC) 的透明视图,可追溯性可以提高代码质量、确保合规性并提高效率。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1325

在 C++23 中使用智能指针进行现代内存管理 — 第 2 部分:共享指针

在本系列的第 1 部分中,我们探讨了托管内存语言以及 C 和旧式 C++ 中的内存模型。我们看到了智能指针可以提供的价值,并探索了标准智能指针之一:unique_ptr。本文(第 2 部分)将介绍另一个标准的智能指针,即共享指针 (shared_ptr),并探讨它的一些用途。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1241

在 C++23 中使用智能指针进行现代内存管理 – 第 1 部分

C++ 以具有难以处理的内存模型而闻名。在这个由两部分组成的系列的第 1 部分中,我们将解释托管内存语言和传统 C 和 C++ 中的内存管理原则,解释每种方法的问题,然后建议智能指针如何提供帮助。最后,我们将深入探讨一个重要的内置智能指针,即唯一指针 (unique_ptr)。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 968

基础设施在平台工程中的作用

平台工程侧重于设计和构建自助服务工具和环境,以简化软件开发和部署。作为开发人员,我们的任务是快速高效地交付高质量的软件,这需要一个强大、敏捷并无缝集成到我们的工作流程中的基础设施。本指南探讨了现代基础设施如何支持平台工程,使我们能够直面这些挑战。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1100

Incredibuild 收购 Garden.io,加速端到端软件开发

多年来,备受信任的 Incredibuild 以极大加快构建、测试和其他计算密集型开发任务。现在,通过整合 Garden 的尖端流水线优化能力,我们可以为您整个 CI 工作流注入强大动力,从代码提交到部署的每一个环节。Garden 的创新技术通过智能缓存和优化资源分配,消除了 CI 流水线中的冗余工作。这使得反馈周期变得快速流畅,更新可以无缝流动从开发到预发布再到生产环境。再也不用等待构建或部署——Garden 的图形感知引擎确保只有更改过的代码会被重建和重新部署。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 402

隐式编程与显式编程:概念与区别解析

众所周知,软件开发充满了行话和复杂的概念,其中之一就是隐式编程和显式编概念与两者的区别,了解这些区别将直接影响代码运行方式以及维护的顺畅程度。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1239

量化交易策略:定义及其重要性

量化交易是华尔街和硅谷的秘密结合点,在这里数学和算法与金钱和市场相遇。虽然它曾经是金融巨头的专属领域,但现在它比以往任何时候都更易于接触。但不要被愚弄,量化交易仍然是一种高速、高压的游戏,在毫秒间可以赚到或失去财富。你需要一种独特的技能组合,包括技术技能、金融知识和合适的工具来支持你。加入我们,探索量化交易的美妙世界。我们将解释它是什么,如何运作,并揭示提升你的策略的顶级技术。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1614

8大趋势,重塑金融服务行业

谈论“金融服务行业”就像谈论“亚洲大陆”。这是因为,通用行业概念但它掩盖了许多细分领域的细微差别和多样性,以及人们思考、工作和感受方式的巨大差异。银行应用程序和一个量化交易公司都是金融服务公司,但它们的运营方式可能天壤之别。因此当我们看到真正的金融服务行业趋势,涵盖行业大部分的趋势时,说明事情已经变得值得我们深入关注了。让我们来看看目前大家都在关注的金融服务行业的新趋势。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1016

如何正确使用 include-what-you-use

简单地说,由 Google 开发的 include-what-you-use(IWYU)让源代码文件包含代码里用到的所有头文件。这种方法确保在改动了一些接口之后,代码依然最有可能编译成功。之前我写了一篇关于 include-what-you-use 工具的文章,它会建议使用提前声明来加速编译时间,并且检测可能导致可移植性问题的对间接包含的意外依赖。但是,你也可能注意到该工具引起的一些负面问题。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1189

上下文切换给开发团队带来的隐形成本

开发工作的大部分是深度工作,需要全神贯注。进入和退出这种状态都需要时间,这就是为什么大多数开发人员不喜欢被打扰。但对许多开发人员来说,工作中被打扰是常态。会议、紧急支持工单、电子邮件、同事的随意提问,开发者的一天充满了干扰。每一次干扰都会付出代价,削弱开发者的生产力、工作质量和心理能量。我们称这种从一个任务跳到另一个任务的现象被称为“上下文切换”,即使这个概念不被熟知,但它可能正在破坏开发团队的输出质量。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1333

Major European 银行 X Incredibuild

Major European 银行利用 Incredibuild 优化其开发流程,特别是针对其 C++ 编译和 Ninja 构建系统。该实施包括在 EMEA 地区部署了10,500个浮动 helper core 和500多个 initiators,在北美地区部署了4,500个 helper core 和200多个 initiators。这一广泛的支持涵盖了 Major European 银行的300多个产品、2,000个构建配置和每月50,000次构建。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 497

Incredibuild for Mac 来了!

今天,我们很高兴地宣布,Mac 开发者(以及将应用程序移植到 Mac 和 iOS 的 Windows 开发者)不再需要花费数小时等待构建了!Incredibuild 正式支持 Mac 和 iOS 的开发,并带来更快的构建和成本优化。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1239

C++ 头文件优化

C++ 是一种灵活的语言,所以需要一种积极的方法来分析和减少编译时依赖。一种常见的达到这个目的的方法是,将依赖从头文件里转移到源代码文件里。实现这个目的的方法叫做提前声明。简而言之,这些声明告诉编译器某个函数接受和返回哪些参数,而具体的定义则规定了具体的行为。让我们根据下面两种规则来改进编译时长并减少可移植性问题,并且使用 include-what-you-use 这种自动应用这些规则到你的代码库的工具。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1510

开发者为什么需要“不良代码”

在当下,软件开发领域存在着一种错误的观念,是什么呢?与弗莱明的屡次失败而发现青霉素的方式类似,在实际开发中,粗糙的代码可以带来意想不到的结果。在这篇博客文章中,我们将分析“好代码”与“不良代码”的概念,以及为什么开发者们不应该一开始就害怕“不良代码”。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1243
上一篇: Docker vs VM
下一篇: CMake、OpenCV 和单元测试
Incredibuild 官方账号
Incredibuild 官方账号 Incredibuild 企业官方账号 Incredibuild 企业官方账号
博客等级 码龄6年 1001粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值