1.4 敏捷软件项目管理
1.4.1 关于敏捷
软件项目是一类特殊项目,是脑力成果,而且依赖于用户需求,具有不断变化的特征。软件开发具有唯一性,是一次性的,这些都决定了软件项目的工程化有一定的难度。
从系统角度看软件项目,传统软件开发面临很多挑战,例如质量问题、测试问题、用户问题、进度问题、成本问题、团队的沟通问题等。快速变化的环境要求快速的开发和快速的提交,这促成了敏捷模型的产生。敏捷开发(agile development)是一种灵活的开发方法,用于在动态环境中向干系人快速交付产品。其主要特点是关注持续的交付价值,通过迭代和快速的用户反馈管理不确定性和应对变更。
由于高新技术的出现,技术更迭速度越来越快,产品的生命周期日益缩短,企业要面对新的竞争环境,抓住市场机遇,迅速开发出用户所需要的产品,就必须实现敏捷反应。与此同时,业界不断探寻适合软件项目的开发模式,其中,敏捷软件开发模式得到大家越来越多的关注。
高度不确定的项目变化速度快,复杂性和风险也较高。这些特点可能会给传统预测法带来问题,传统预测法旨在预先确定大部分需求,并通过变更请求过程控制变更。而敏捷方法的出现是为了在短时间内探讨可行性,根据评估和反馈快速调整。
2001年年初,许多公司的软件团队都陷入了不断增长的过程的泥潭,一批业界专家聚集在一起概括出一些可以让软件开发团队具有快速工作、响应变化能力的价值观和原则,他们称自己为敏捷联盟。在随后的几个月中,他们发表了一份价值观声明,即“敏捷宣言”,正式宣告敏捷开发运动的开始。
1.4.2 敏捷项目管理
“敏捷宣言”代表了敏捷的核心价值,其内容如下。
• 个体和交互胜过过程和工具(individuals and interactions over processes and tools)。
• 可以工作的软件胜过面面俱到的文档(working software over comprehensive documentation)。
• 客户合作胜过合同谈判(customer collaboration over contract negotiation)。
• 响应变化胜过遵循计划(responding to change over following a plan)。
上述4个核心价值对应以下12个原则。
• 我们最先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。
• 即使到了开发的后期,也欢迎改变需求。敏捷过程利用适应变化来为客户创造竞争优势。
• 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
• 在整个项目开发期间,业务人员和开发人员应尽可能在一起工作。
• 围绕被激励起来的个体组成团队来构建项目。给他们提供所需的环境与支持,并且信任他们能够完成工作。
• 在团队内部以及团队之间,最有效果并且最有效率的传递信息的方式就是面对面的交流。
• 可以工作的软件是首要的进度度量标准。
• 敏捷过程提倡平稳的开发。发起人、开发者和用户应该能够保持长期的、恒定的开发速度。
• 不断地关注优秀的技能和好的设计会增强敏捷的能力。
• 简单—使未完成的工作最大化的艺术—是根本的。
• 最好的架构、需求和设计出自自组织的团队。
• 每隔一定的时间,团队会在如何才能更有效地工作方面进行反思,然后相应地调整自己的行为。
尽管这些原则源自软件行业,但已经扩展到许多其他行业。这种思维模式、价值观和原则定义了敏捷方法的组成部分。今天所使用的各种敏捷方法都植根于敏捷思维模式、价值观和原则,它们之间的关系如图1-23所示。
图1-23 敏捷思维模式、价值观和原则之间的关系
图1-24是在艾哈迈德·西德基(Ahmed Sidky)启发下提出的模式,它将敏捷明确表述为一种思维模式,由“敏捷宣言”的价值观所界定,受“敏捷宣言”原则的指导,并通过各种实践实现。总之,敏捷方法是一个囊括各种框架和方法的涵盖性术语,它指的是符合“敏捷宣言”价值观和原则的任何方法、技术、框架、手段或实践。敏捷开发是一种灵活、快速的开发方法,可以应对迅速变化的需求,是一种迭代、循序渐进的开发方法。
敏捷思维主要体现为快速交付成果并获得早期反馈,同时强调以一种透明的方式工作,从图1-25可以看到,第一种方式是比较模糊的项目管理方式,而第二种方式更加透明和具体。
图1-24 敏捷是许多方法的总称
图1-25 模糊和透明方式的比较
敏捷软件开发是一种面临迅速变化的需求快速开发软件的能力,是对传统生存期模型的挑战,也是对复杂过程管理的挑战,是一种以人为核心、迭代、循序渐进的开发方法,是一种轻量级的软件开发方法。传统软件项目管理更倾向于不考虑项目后续需求的变化,在项目开始时预测用户需求,然后冻结需求,制订相应的开发计划,再按照计划执行。与之形成鲜明对比的是,敏捷软件项目管理通过不断的用户反馈动态调整需求,最终达成目标。这种自适应的特性使敏捷开发的产品更符合实际需求,如图1-26所示。
图1-26 敏捷软件项目管理与传统软件项目管理的比较过程
随着云技术和敏捷思路的发展,云原生(cloud native)产生了。云原生是Matt Stine提出的一个概念,它是一个思想的集合,包括DevOps、持续交付(continuous delivery)、微服务(micro service)、敏捷基础设施(agile infrastructure)、康威定律(conway's law)等。云原生包含一组应用的模式,用于帮助企业快速、持续、可靠、规模化地交付业务软件。云原生由微服务架构、DevOps和以容器为代表的敏捷基础架构组成。因此,技术的发展也推动了敏捷软件项目管理的发展,如图1-27所示。
敏捷软件项目管理是应对快速变化环境的开发模型,以多迭代为代表,每个迭代在短期内完成一个有价值的、可用的结果。敏捷起源于软件,但是已经应用于很多行业。特斯拉采用了敏捷开发的原则,并建立了自己的工厂来模仿这一方法论的基本原则。一个由机器人和灵活、适应性强的工厂组成的系统本质上是一种简单的编程语言,可以随着用户需求的变化进行动态调整。例如,如果特斯拉的工程师设计出一种更好的车门—更轻、更安全、更便宜—特斯拉就可以重新规划工厂来制造新的车门,并将其整合到现有的工厂流程中。这家工厂可以随着新需求的添加和设计而进行调整。
图1-27 技术与管理相互促进