大规模组织DevOps实践(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


2.2 从瀑布到敏捷

DevOps思想可以被认为是敏捷开发思想的延伸和扩展,因此我们再回顾一下敏捷开发思想的发展历程,以便更好地理解DevOps和软件工厂的理念。

谈敏捷开发思想就不得不谈瀑布模型,如图2-1所示。

瀑布模型的基本谬误在于:它假设项目只经历一个过程,而且架构是优于使用且易于使用的,对于实现的设计是合理且可靠的,编码实现在测试进行中是可修复的。

图2-1 瀑布模型

换句话说,瀑布模型假设错误全发生在编码实现阶段,因此它们的修复可以很顺畅地穿插在单元测试和系统测试中。

特别是从项目管理的角度来看,瀑布模型将各种工作角色隔绝起来,他们无法看到各角色之间的关联,更侧重将工作扔到“瀑布后面的”下游团队。因此,各团队更像“我们与他们”式的独立团队,由此带来的后果就是,“现在的”工作是“我们的”,“以后的”工作是“他们的”。

2.2.1 传统项目管理问题

传统项目管理的核心领域主要为范围管理、时间管理、成本管理、质量管理和风险管理,如图2-2所示。

图2-2 传统项目管理的核心领域

另外,在传统项目管理的思想下,每个领域会存在以下隐藏的假设。

1.范围管理

❑ 范围可以完整定义。

❑ 范围定义可以在项目开始前完成。

2.时间管理

❑ 软件开发由截然不同的活动组成。

❑ 可以对软件开发活动进行排序。

❑ 总会有一种方式产生有意义的估计。

❑ 项目团队的规模不会影响开发过程。

3.成本管理

❑ 可以单独将活动分配给团队成员。

❑ 一位开发人员的成本与另一位开发人员相同。

❑ 能够获得可接受的准确估计。

4.质量管理

指标足以用于评估软件的质量。

5.风险管理

风险可以接受、转移、避免、缓解。

2.2.2 向互联网企业学习的敏捷

国内传统企业(如银行、运营商等)企图通过导入敏捷项目管理模式来改变软件生产模式,但是目前看来效果不是非常理想。因为国内最先推行敏捷开发思想的互联网企业居多,而国内传统企业是向互联网企业学习的,但是国内传统企业与互联网企业存在比较大的差异。差异体现在很多方面,例如:互联网企业可以使用清一色的X86机器,而国内传统企业背负了很多历史包袱,使用的有X86机器,有小机也有大机等;互联网企业可以快速地推出产品,找终端用户试错,而国内传统企业依赖第三方开发商的合同式开发,流程长、周期长、政策规范、监管严、试错成本高;互联网企业是小规模团队协同,而国内传统企业的部门众多……

这就导致国内传统企业向互联网企业的学习不起作用。

我们认为国内传统企业不能为了敏捷而敏捷,应该从敏捷的本质出发,去学习和掌握敏捷。

2.2.3 敏捷的起源

大部分人认识的敏捷,是2001年17位方法学家在Utah-Snowbird会晤,并进行大量的讨论后形成的“敏捷宣言”发展出来的软件工程方法,如图2-3所示。

图2-3 敏捷宣言

而我认为敏捷的缘起要追溯到20世纪20年代。

20世纪20年代,Frederick Taylor的“科学管理理论”提出,由管理者为每个工人发送指令卡,工人按照指令卡执行,管理者比工人更了解工作状态(这和敏捷没关系,但为后续的“知识工人”做了铺垫)。

20世纪50年代,美国国防部(DOD)和美国航空航天局(NASA)开始采用迭代式增量方法(IID)。

20世纪60年代,随着科技发展,制造业岗位消减,“知识工人”产生,旧模式不再奏效,生产工具在人的头脑里,旧方法被提倡信息共享和劝导的新方法代替。同时,Thomas Gilb提出演化项目管理的概念(EVO方法)。

1970年,Winston Royce发表文章Managing the development of large systems,阐述瀑布方法的概念,并注解说明“是危险的并且可能导致失败”的原因,因为它将测试放在了最后。

1986年,Tankeuchi和Nonaka发表白皮书The New New Product Development Game,讨论了Scrum方法。

由此可见,很多国内传统企业向互联网企业学习敏捷是错误的,正统的敏捷早在互联网企业盛起之前就存在,我们不应该学习互联网式的敏捷,而应该回归正统敏捷。

真正有效的敏捷应该是自企业文化开始的敏捷,只有企业敏捷、组织敏捷,才能项目敏捷。互联网企业能轻易实施敏捷项目管理的根本原因是其自身的敏捷,互联网加速了人与人、企业与企业之间的沟通。为了快速应对市场变化,抢夺市场制高点,需要快速推出产品,抢占先机。在资本的推力下,甚至一个产品原型就可以被推向市场,形成焦点效应。而互联网普遍面向C端的特点导致迭代式开发、边用边改成为可能。

2.2.4 瀑布模型

众所周知,敏捷是针对传统研发过程采用的瀑布模型提出的,那么我们来看一看瀑布模型的起源。

在软件工程领域,Winston Royce对于因采用“先写了再说”的方法而造成的大型软件项目失败深感震惊,于是独立地引介了一种由七个步骤组成的瀑布模型,以使流程更规范。事实上,Winston Royce是将他的瀑布模型当作一个假想的批判对象提出来的,但是很多人引用并追随这个假想的批判对象,他提出的更复杂、精妙的模型反而被大家忽略了。

1.什么是瀑布模型

1970年,Winston Royce提出了著名的“瀑布模型”,直到20世纪80年代早期,它一直是唯一被广泛采用的软件开发模型。

2.瀑布模型的核心思想

瀑布模型的核心思想是按照工序将问题简化,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。瀑布模型将软件生命周期划分为制订计划、需求分析、软件设计、程序编写、软件测试和运行维护六种基本活动,并且规定它们相互衔接的固定次序,如同瀑布流水,逐级下落。

2.2.5 传统企业不可能全盘敏捷化

传统企业的IT形态有以下两类。

1.传统IT(Predictable IT)

特点:

❑ 需求明确。

❑ 相比追求速度,更倾向稳定性、安全性和标准化。

❑ 瀑布开发模式。

❑ 记录型系统(SOR,System Of Record)。

2.数字化IT(Nonlinear IT)

特点:

❑ 追求和探索新业务设计、流程和模式。

❑ 相比追求可靠性,更倾向速度。

❑ 敏捷开发模式。

❑ 参与型系统(SOE,System Of Engagement)。

因此传统企业往往存在双模IT。什么是双模IT?这是Gartner在2014年提出的概念。

一方面,传统企业为了保障业务持续增长,安全生产运行依然是IT部门的首要工作。另一方面,云计算、移动化、社交化的技术浪潮极大地丰富了应用场景,依托于互联网架构的新应用不断出现,应用开发迭代周期从数月缩短为数天,秒杀、红包等突发性高并发应用需要更加弹性的技术架构。

如何同时运维、管理这两种不同的架构,成为传统企业IT部门的一个巨大挑战。

2.2.6 从版本上线过程管理看敏捷与瀑布

从版本上线过程来看,瀑布开发模式的上线周期更长,因为它强调一次上线成功,为了最终上线成功,前面分为若干个阶段严格把控质量,如需求阶段、设计阶段、开发阶段、测试阶段。

而敏捷开发模式的上线周期更短,因为它强调多次、高频率上线,每个上线周期内都或多或少地包含需求分析、设计、开发、测试的内容,如图2-4所示。

图2-4 瀑布开发模式&敏捷开发模式的上线周期

传统企业(如银行)的应用系统,基本都采用传统开发模式。随着银行从产品销售向客户服务转型,并鉴于传统开发模式对推出产品及服务的局限和相关内部管理问题,可以预见,在不久的将来,某些应用系统(特别是服务型系统)将引入敏捷开发模式,而且这种趋势将逐渐加快。因为随着金融行业管制和市场参与主体的开放,尤其是借助电子平台及新技术的非金融企业(如互联网金融)的崛起,行业的格局将发生重大变化,竞争将加剧,各种金融创新将成为市场竞争的有效手段。这一变化反映在科技部门,将是产生大量、迅速变化的新需求、新产品,甚至会出现对部分产品线的反复重构。

2.2.7 敏捷的前提是“不敏捷”

在传统企业中,我们既会碰到RUP(Rational Unified Process,统一软件开发过程)强调的“每个管理过程和工艺过程都需要详尽的书面表达”,也会碰到敏捷强调的“当面沟通”,我们需要一套新的管理方法帮助客户找到平衡。

我们尝试从银行的情况进行分析:敏捷开发模式适用于银行应用的某些系统,由于银行是特殊的风险经营类机构,应用系统有其特殊性,因此需要因地制宜,即并非所有的银行应用系统都适合敏捷开发模式。一般而言,敏捷开发模式的优势需要建立在以下条件之上。

❑ 需求持续变更。

❑ 版本交付迅速。

❑ 系统适当松耦合,适于拆分,以供一群小规模的团队相对独立地协同完成。

在银行内部的应用系统中,如果能够满足上述条件,则是一些打算进入高度竞争市场的新产品,或者是原有产品线中变更和改造比较活跃的成分,再或者就是正在使用传统开发模式但有必要被敏捷的项目。

双模IT模式造成了IT研发管理模式的分裂,导致某些号称采用敏捷方法的研发品质降低、管理结构混乱。因此我们需要在面向敏捷的架构下,采用“冻土层”模型,保持核心架构稳定,如图2-5所示。

图2-5 “冻土层”模型

除此之外,也需要统一采用“工艺化+工作室”的方法,如图2-6所示,帮助客户找到平衡点,实现企业组织级敏捷。

图2-6 双模IT模式的工艺过程