本文大纲

《我的敏捷软件项目管理实践》

敏捷思维

第二章 软件开发生命周期模型 / 敏捷方法论

敏捷项目管理

软件项目面临的挑战

软件项目不同于其他类型的项目,它主要依赖于用户需求和脑力劳动,具有高度的不确定性和变化性。每个软件项目都是独一无二的,这使得它们难以完全按照传统工程化方法进行管理。从系统的角度来看,传统软件开发面临着诸多挑战,包括但不限于:

  • 质量问题:确保软件质量始终是一个难题。
  • 测试问题:如何有效地测试软件以保证其稳定性和可靠性。
  • 用户问题:理解并满足用户不断变化的需求。
  • 进度问题:按时完成项目的压力很大。
  • 成本问题:控制开发成本,避免超支。
  • 沟通问题:团队成员之间的有效沟通至关重要。

面对这些挑战,软件项目需要一种更快速、灵活的开发方式。在快速变化的环境中,传统的开发模式显得不够敏捷,无法迅速响应市场需求和技术变革。因此,敏捷软件开发应运而生。

敏捷软件开发的特点

敏捷软件开发是一种灵活的方法,旨在动态环境中快速向相关方交付有价值的软件产品。它的核心特点包括:

  • 持续交付价值:通过迭代开发,确保每个阶段都能为用户提供实际的价值。
  • 快速反馈:通过频繁获取用户的反馈,及时调整开发方向,应对不确定性。

随着技术的飞速发展,产品的生命周期变得越来越短。企业必须快速适应新的竞争环境,抓住市场机遇,迅速推出符合用户需求的产品。为了实现这一目标,企业需要具备敏捷反应的能力。敏捷开发模式因此受到了越来越多的关注和采用。

高度不确定性的项目

对于那些变化迅速、复杂且风险高的项目,传统预测法可能会遇到困难。传统方法通常试图在项目开始时就确定大部分需求,并通过严格的变更请求流程来控制任何变动。然而,这种方法在面对快速变化的需求时显得笨拙。

相反,敏捷方法鼓励在短时间内评估可行性,并根据反馈快速调整。它允许团队在开发过程中不断学习和改进,从而更好地应对不确定性和变化。

总之,敏捷开发不仅提高了软件项目的灵活性和响应速度,还帮助企业更快地抓住市场机会,提升竞争力。

敏捷开发的定义

小步快跑、快速迭代、拥抱变化;不追求一开始就尽善尽美,而是把最核心的东西先交付;

敏捷开发就是将项目拆分为多个子项目,独立开发、分别实现,尽快的产出交付给用户,收集用户反馈后立即调整优化,一直迭代到用户满意,最后集成为一个完整的极具用户价值的产品,且在此过程中产品一直处于可用状态。

根据市场反馈来对需求进行验证和矫正,以灵活敏捷的改变调整去适应变化,在一次次持续迭代中达到最终目标。

敏捷思维

敏捷宣言的诞生及核心价值观

在2001年初,许多软件团队陷入了繁琐流程的困境。为了改变这一现状,一群业界专家聚集在一起,总结出了一套能让软件开发团队快速响应变化的价值观和原则。这群专家自称为“敏捷联盟”,并在几个月后发布了《敏捷宣言》(The Agile Manifesto),明确了敏捷开发的核心价值观:

  1. 个体和互动优先于过程和工具:重视人与人之间的沟通和协作,而不是单纯依赖流程和工具。
  2. 可工作的软件优先于详尽的文档:更注重实际可用的软件,而非过度关注文档的完整性。
  3. 客户合作优先于合同谈判:强调与客户的紧密合作,而不是仅仅依赖合同条款。
  4. 响应变化优先于遵循计划:灵活应对需求的变化,而不是严格遵循既定计划。

《敏捷宣言》不仅是敏捷开发的核心理念,也引导了后续一系列敏捷方法的发展。敏捷开发是一种迭代、循序渐进的过程,能够灵活应对不断变化的需求,帮助团队逐步改进开发流程。

点评4个价值观

敏捷宣言 点评
① 个体和互动高于流程和工具: 重视面对面交流,不能异地办公,成员清晰了解全局(安置一块显示屏,上面投放项目进度、代办清单、参与成员及情况、里程碑任务、燃尽图等等) 适合:**10人以下的小型团队,**小型团队灵活性高,沟通成本低,采用Scrum可以快速适应变化,高效完成任务。
② 工作的软件高于详尽的文档: 降低了文档的重要程度。 文档尽可能的精简,可以在复盘回顾时进行维护修补(骗鬼呢,没一个补文档的,所以软件质量一般)。 反思:文档流传性追溯性更强,规范的文档能帮助我们低成本的跨部门沟通;面对团队成员的更新换代,文档也能更好的帮助新人清晰地了解产品历程及全貌。 适合:**内部工具类软件,**内部工具类软件对流程的要求相对宽松,可以采用更灵活的敏捷开发方法,提高开发效率。
③ 客户合作高于合同谈判: 适用于接自己公司的内部项目。 要是外包软件公司接了甲方的项目,由于开发费用是固定的需求范围还需要明确的约定在合同中。
④ 响应变化高于遵循计划: 重点,敏捷开发本身就是为了快速地响应市场变化,随时关注变化,以实际交付质量、真实的反馈去做衡量、决策,而不是遵循计划。 适合变化快的项目(如互联网应用、电商APP、SaaS平台)这些项目的需求经常变化,业务方向也可能随时调整。敏捷开发强调快速迭代和持续交付,能够及时响应用户反馈并迅速改进产品。

需要注意的是这敏捷4大价值观中,我们更重视左侧的价值,这并不代表可以忽略右侧的价值。

敏捷宣言

图 x.x 敏捷宣言

敏捷的十二项原则

基于这四个核心价值观,敏捷开发还提出了十二条具体原则,指导团队如何更好地实践敏捷方法:

  1. 尽早并持续交付有价值的软件:通过尽早交付可用的产品来满足客户需求。
  2. 欢迎需求变更:即使在开发后期,也能灵活应对需求变化,为客户创造竞争优势。
  3. 频繁交付可工作的软件:交付周期可以是几周到几个月,越短越好。
  4. 业务人员和开发人员密切合作:确保在整个项目周期中双方保持紧密沟通。
  5. 围绕被激励的个体组建团队:提供支持和信任,让他们能够高效完成工作。
  6. 面对面交流最有效:在团队内部及团队之间,面对面沟通是最直接有效的方式。
  7. 可工作的软件是衡量进度的主要标准:以实际可用的软件作为进度的衡量标准。
  8. 提倡平稳开发:保持长期稳定的开发速度,避免过度加班或赶工。
  9. 关注优秀技能和设计:优秀的技能和设计能提升敏捷能力。
  10. 简化未完成的工作:减少未完成的任务,提高效率。
  11. 最好的架构来自自组织团队:鼓励团队自主决策,创造出最佳的设计。
  12. 定期反思和调整:团队应定期评估工作方式,并根据反馈进行改进。

这些原则不仅适用于软件行业,也逐渐扩展到了其他领域。它们定义了敏捷方法的核心组成部分,帮助团队更快地交付成果,并获得早期反馈,同时保持透明的工作方式。

image2025-2-26_23-58-37.png

图 x.x 敏捷价值观与十二的原则的关系

敏捷与传统开发的区别

与传统的开发模式相比,敏捷开发更加灵活和适应性强。传统开发通常在项目开始时就预测用户需求,并冻结这些需求,然后严格按照计划执行。而敏捷开发则通过不断的用户反馈动态调整需求,确保最终产品更符合实际需求。这种自适应特性使得敏捷开发的产品更能满足用户的真实需求。

image2025-2-27_0-25-37.png

图 x.x  敏捷与传统开发的区别

敏捷思维的应用和发展

随着云技术和敏捷思路的发展,云原生(cloud native)的概念应运而生。云原生结合了DevOps、持续交付、微服务等思想,帮助企业快速、持续、可靠地交付业务软件。云原生主要由微服务架构、DevOps和容器化基础设施组成,旨在提高软件开发和部署的效率。

总之,敏捷方法不仅仅是技术上的创新,更是一种思维方式的转变,它强调快速交付、早期反馈和透明的工作方式,帮助团队更高效地实现目标。

敏捷开发模型

敏捷开发模型遵循《敏捷宣言》的原则,通过早期和持续交付有价值的产品来不断提升客户满意度。它强调通过提供功能性、有价值的增量可交付成果来衡量项目进展。为了更好地应对频繁的需求变更,敏捷模型结合了迭代和增量方法,使团队能够更灵活地调整并更快地交付价值。

在敏捷环境中,团队预期需求会发生变化,并利用迭代和增量方法来获取反馈,从而改进后续的计划。不过,在敏捷项目中,通过增量交付也会发现一些之前隐藏或误解的需求。

敏捷是方法论

敏捷并不是单一的方法,而是多种实践方法的总称,其中包括:

  • Scrum:一种框架,通过短周期的Sprint(冲刺)交付增量。
  • XP(极限编程):强调代码质量和客户反馈的开发方法。
  • 看板方法:通过可视化工作流来优化任务管理和交付。
  • Scrumban:结合了Scrum和看板的优点。
  • 精益模型:关注消除浪费,提高效率。
  • 持续交付:确保软件可以随时发布。
  • DevOps:促进开发和运维团队之间的协作。

这些方法共同的目标是快速响应变化,确保高效交付高质量的产品,满足客户的实际需求。