#翻译:Wand,校对:姚冬
*本文节选及翻译自2018年硅谷畅销书《Accelerate》by Nicole Forsgren, Jez Humble and Gene Kim,仅供个人学习及交流用途。
前言
我们的研究揭示了24个关键能力,它们驱动着软件交付效能的改进,并经由统计证明其重要性。我们把这些能力归为5个类别:
• 持续交付
• 架构
• 产品与流程
• 精益管理与监控
• 文化
在每个类别中,陈述的能力项之间没有特别的先后顺序。
持续交付能力
1. 对所有生产工件进行版本控制
版本控制使用GitHub或者Subversion之类的版本控制系统,管理包括应用代码、应用配置、系统配置、自动化构建与环境配置脚本在内的所有生产工件。
2. 自动化部署流程
部署自动化是部署能够实现完全自动化且不需要人工干预的程度。
3. 实施持续集成
持续集成(CI)是实现持续交付的第一步。这是一个开发实践,代码经常性地签入,每次签入触发一个快速测试集以发现严重的回归问题——开发人员马上修复它们。CI流程创造了规范的构建和包,并最终部署和发布。
4. 使用基于主干的开发方法
主干开发已经被用来预测高效能软件开发与交付。它的特征是一个代码仓库拥有少于3个活跃的代码分支;分支和分叉在被归并到主干之前的生命周期非常短暂(例如少于一天);同时,应用团队很少或从不存在“代码锁”时期,即由于合并冲突、代码冻结或者稳定期缘故,导致没有人能签入代码或者发起pullrequests。
5. 实施测试自动化
测试自动化是在开发全过程中,软件测试持续自动化(而非手工方式)运行的实践。有效的测试套件是可靠的——即测试能够发现真正的缺陷,并且只让可发布的代码通过。注意,自动化测试套件的创建和维护应当主要由开发人员来负责。
6. 支持测试数据管理
测试数据需要仔细地维护,测试数据管理正在成为自动化测试越来越重要的组成部分。有效的实践包括:拥有足够的数据来运行您的自动化套件、按需获取必要数据的能力、在部署流水线中调适您的测试数据的能力、并且数据不会限制您所能运行测试的数量。但需要提醒的是,在任何可能情况下,团队应该最小化其运行自动化测试所需测试数据的数量。
7. 将安全左移
把安全集成到软件开发过程的设计与测试环节之中,对驱动IT效能来说至关重要。这包括组织应用安全评审、请信息安全团队参加应用的设计和演示过程、对安全类库和包进行预授权、以及将测试特性的安全性作为自动化测试套件的一部分。
8. 实施持续交付(CD)
持续交付是一个开发实践,即软件在整个生命周期中一直处于可部署状态,同时团队视保持软件的可发布状态,优先于开发新的特性。对系统质量与可部署性的快速反馈,对所有团队成员都是可见的,并且当团队获知系统不可部署时,快速地进行修复。最后,系统可以在任何时间按需被部署到生产环境或交付到最终用户手中。
架构能力
9. 使用松耦合架构
这影响到团队能够在多大程度上测试与部署他们的应用,而不需要与其他服务进行编排。拥有松耦合的架构将允许您的团队能够独立工作,而不用依赖其他团队的支持和服务,从而使得他们能够快速地向组织开发并交付价值。
10. 构建一个赋能团队的架构
我们的研究表明,能够选择使用什么工具的团队,在持续交付上做的更好,从而驱动了更好的软件开发与交付效能。没有人能比实践者自身更清楚的知道他们需要些什么来做得更有效。
产品与流程能力
11. 收集并实施客户反馈
我们的研究发现,组织是否积极与频繁的获取客户反馈、并将这些反馈融入它们的产品设计,对于软件交付效能来说非常重要。
12. 可视化整个价值流的流动
对于从业务一直到客户的整体工作流动,包括产品与特性的状态,团队应该有良好的理解并构建可见性。我们的研究发现,这对IT绩效有着积极的影响。
13. 以小批量工作
团队应该把工作切分成能够在一个星期或更短时间内完成的小片。关键是把工作分解成小的特性以便能够快速开发,取代在分支上开发复杂特性并且不频繁发布的做法。这个想法可以被应用在特性层面以及产品层面。(MVP是一个拥有刚好足够的特性的产品原型,能够对产品及它的商业模式获得验证式学习。)以小批量工作,提供了短的前置时间,以及快速的反馈环。
14. 促进并使能团队实验
团队实验是开发人员的一种能力,他们在开发过程中尝试新的想法、创建并更新规格说明,而不需要经过来自团队外部的审批,这允许他们能够快速地创新并创造价值。尤其是当它与小批量工作、融合客户反馈及可视化工作流动等能力相结合时,影响巨大。
精益管理与监控能力
15. 拥有轻量的变更审批流程
我们的研究展示,基于同行评审的轻量级变更审批流程(结对编程或团队内代码评审),相对于使用外部变更审批委员会(CAB),能产生卓越的IT效能。
16. 跨应用与基础设施的监控以为业务决策提供信息
使用从应用与基础设施监控工具产生的数据,采取行动并进行业务决策。这超越了在事情不对劲的时候只能传呼人员的状况。
17. 主动检查系统健康状况
使用阈值和变动率告警来监控系统健康度,使得团队能够先发地侦测并化解问题。
18. 约束在制品(WIP)以改善过程及管理工作
使用在制品约束来管理工作流动,在精益社区中很流行。当有效使用时,它驱动了过程改进与吞吐率提升,并把系统中的约束可视化。
19. 可视化工作以监控质量并促进团队沟通
使用仪表盘或内部网站等可视化的陈列,来监控质量和在制品,这个做法对软件交付效能的贡献已经被证明。
文化能力
20. 支持生机型文化(由Westrum博士提出)
这个衡量组织文化的方式基于一个由Ron Westrum开发的拓扑模型。Westrum是一个社会学家,研究在航空与医疗等领域中安全攸关的复杂系统。我们的研究发现,这种文化衡量,是IT效能、组织效能及降低过载的预测性因素。它的典型特征包含良好的信息流动、高度合作与信息、团队之间的连接以及有意识的探寻。
21. 鼓励并支持学习
在您的文化中,学习被视为必不可少的持续过程吗?学习被视为成本还是投资?这是对一个组织的学习型文化的衡量。
22. 支持并引导跨团队协作
这映射出开发、运维与信息安全等团队之间能够多好地进行交互,在传统模式中,它们被视为各个孤岛。
23. 提供让工作有意义的资源和工具
这个对工作满意度的特别的衡量,是关于从事有挑战性、有意义的工作,并赋能员工实践他们的技能和专业判断。提供做好工作所需的工具与资源,也与此休戚相关。
24. 支持或展现转型领导力
转型领导力支持并增强DevOps所必需的技术与过程举措。它包含5个要素:愿景、智力激发、启发式沟通、支持型领导风格与个体觉察。
图: DevOps关键能力的总体研究
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/dev/295346.html