《持续交付 发布可靠软件的系统方法》读书笔记
实现持续交付不仅仅是买些工具,做一些自动化的工作。它依赖于交付过程中所涉及的每个人的协作,来自行政管理层的支持,以及基层人员的改进意愿。
持续交付不仅仅是一种新的交付方法论。对依赖于软件的业务来说,它是一个全新的范例。要想知道为什么,需要研究公司治理核心中一种根本的张力(tension)。
CIMA
把企业治理(enterprise governance)定义为“由董事会(board)和执行管理层行使的一系列职责和实践,其目的是提供战略方向,以确保达成业务目标,风险被合理地管理起来,并验证组织的资源被可靠地使用了。”企业治理更关注于符合度(conformance),即遵从性、保障、监管、责任和透明管理,而业务治理(business governance)更关注业务和价值创造的执行度(performance)。
通过确保交付团队能得到应用程序在类生产环境上的不断反馈,是部署流水线达成“执行度”这个目标的方法和手段。部署流水线使交付流程更加透明,来帮助团队达成符合度。
使用本书中提到的实践后,即使开发复杂软件的大型组织也可以快速且可靠地交付新版本了。也就是说,不仅业务部门可以从投资中得到快速回报,而且还能减少风险,消除因较长的开发周期(甚至更糟,最终交付的软件无法满足其业务目标)所产生的机会成本。像精益制造业一样,没有频繁交付的软件就是仓库中的库存。它已经花钱制造完了,却还没有为你赚钱,实际上保管它也是花钱的。
这个模型的最终目标是组织改进,想得到的结果如下:
我们相信,这个成熟度模型可以作为一个指南,帮助你收获所有这些产出。
每个软件开发项目都是不同的,但不难从中抽取出共同元素。尤其是,我们可以抽象出一个软件交付的生命周期。
与每个团队一样,每个应用程序都有自己的叙事弧线。团队组建与磨合常常会经历五个阶段:
同样,软件也会经过几个阶段。初步可包含以下阶段:
风险管理是一个过程,它确保:
风险管理过程应该有如下几个关键特征:
风险管理过程应该在启动阶段结束之前就开始了,并在初始阶段结束时进行重新审视,然后在整个开发和部署阶段中定期进行审视。
分析任何项目,可以从下面这些问题出发:
这些问题并不是一种规范,这一点非常重要,因为每个团队都要有一定的灵活性根据他们的具体需求来选择合适的流程。
花很长时间部署某个构建版本,而且部署过程很脆弱。
交付团队无法实施有效的测试策略。
不适当的构建过程管理。
环境不是专属的,应用程序无法用自动化过程可靠安装。
许多大公司都必须遵守其所在行业的法规。
很多公司坚信,文档是审计的关键。我们的想法有些不同。让你按照某种方法做事的那张纸无法保证你真的是那么做的。
自动化脚本就是一份必须遵守的部署流程文档。强制使用这些脚本,你就要确保它们是时时更新的,并且部署流程是完全按照你指定的方式执行的。
我们通常需要能够跟踪变更的历史,从生产环境中部署过哪些版本,到这些版本在源代码库中的版本号。
大型组织常常会按职能不同被划分成多个部门。很多组织会有独立团队负责部署、测试、运营、配置管理、数据管理和架构。在规范的环境中,许多重要活动都要受到审查,审计人员和安全团队的任务就是确保该组织不会受到法律风险或任何形式的安全漏洞的危胁。
在一个规范的环境中,对于构建、部署、测试和发布过程中的某些环境需要审批,这常常是必要的。尤其是,手工测试环境、试运行环境和生产环境总是在严格的访问控制之下,以便确保只能通过组织制定的变更管理流程对它们进行修改。
这看上去像是不必要的官僚作风,但是实际研究表明,使用这种做法的组织中,其 MTBF
(Mean Time Between Failures,平均失败时间)和 MTTR
(mean time to repair,平均修复时间)更短。
对于每个项目的成功来说,管理都是至关重要的。良好的管理所创建的流程令软件更高效地交付,同时确保风险被适当地管理,规章制定被严格遵守。
我们的构建和发布成熟度模型的目标是改进组织的执行度。它让你可以识别交付实践效率是什么状态,并且为如何改进提供了建议。