期末复习

专题(三):敏捷开发

2026 年 06 月 18 日 约 2661 字 · 7 分钟 期末复习

敏捷开发

为什么需要敏捷开发?

在软件工程演进中,现代开发模式正在经历深刻的转变:

  • 传统过程模型(如瀑布模型)的困境:强调严格阶段划分与“计划驱动”。面对快速变化的市场、不确定的用户预期,暴露出响应迟缓、交付周期长、用户参与不足等缺陷。

  • 敏捷开发的诞生:20世纪90年代起,软件工程实践者开始探索轻量、灵活的方式,最终于 2001 年发布《敏捷宣言》

  • 核心定义:敏捷开发并非单一方法,而是一组遵循共同价值观和原则的软件开发方法的总称。其核心在于拥抱变化、快速交付、持续反馈、以人为本

对传统过程的反思

🛑 传统瀑布开发模型的核心痛点

  • 瀑布模型的局限:需求必须在前期完全明确;用户只能在后期看到系统;变更代价高昂。

  • 文档驱动的弊端:大量文档耗费精力,但实际价值有限;团队间沟通效率低。

  • 项目失败率高:Standish Group 报告显示,传统方法下大量项目面临超期、超预算、未达预期等风险。

敏捷宣言

17 位软件工程专家于美国犹他州雪鸟滑雪场共同发布,确立了四大核心价值

\[\text{个体和互动} \quad > \quad \text{过程和工具}\] \[\text{可工作的软件} \quad > \quad \text{详尽的文档}\] \[\text{客户合作} \quad > \quad \text{合同谈判}\] \[\text{响应变化} \quad > \quad \text{遵循计划}\]

📌 核心逻辑:虽然右项也有价值,但敏捷开发更重视左项的价值。

敏捷十二原则

  1. 客户满意:通过尽早、持续交付有价值的软件来满足客户。

  2. 拥抱变化:欢迎不断变化的需求,即使在开发后期。

  3. 频繁交付:频繁交付可工作的软件,周期从几周到几个月不等,倾向更短时间。

  4. 每日协作:业务人员和开发人员在整个项目中每天一起工作。

  5. 以人为本:围绕有动力的个体构建项目,给予支持与信任。

  6. 面对面沟通:传递信息最有效的方法是面对面的交谈。

  7. 软件导向:可工作的软件是衡量进度的主要标准。

  8. 可持续节奏:倡导可持续的开发速度,保持长期稳定的节奏。

  9. 追求卓越:持续关注技术卓越和良好设计,增强敏捷能力。

  10. 保持简单:简单性(最大化未完成工作的艺术)是至关重要的。

  11. 自组织团队:最好的架构、需求和设计出自自组织团队。

  12. 定期反思:团队定期反思如何能更高效,并相应地调整其行为。

主流敏捷方法

Scrum:轻量级迭代框架

强调团队自组织迭代交付

  • 核心角色

    • 产品负责人 (PO):负责管理产品待办列表 (Product Backlog),定义需求优先级,确保做最有价值的工作。

    • Scrum Master (SM):服务型领导。负责消除障碍,促进团队遵循 Scrum 实践。

    • 开发团队 (Dev):自组织的跨职能团队(推荐 3-9 人),负责交付。

  • 核心工件

    • 产品待办列表 (Product Backlog):所有待开发功能的全局列表。

    • 冲刺待办列表 (Sprint Backlog):当前冲刺(1-4周)要完成的任务。

    • 增量 (Increment):冲刺结束时交付的、“完成”的、可工作的软件。

  • 核心事件与工作流

    \[\text{产品待办列表} \rightarrow \text{冲刺计划会议} \rightarrow \text{冲刺 (每日15分钟站会)} \rightarrow \text{冲刺评审会} \rightarrow \text{冲刺回顾会}\]

极限编程 (XP):以技术/工程实践为核心

通过极致的工程实践来确保软件质量和响应变化的能力(推荐开发规模 4-8 人)。

  • 技术实践链条

    • 测试驱动开发 (TDD):先写自动化测试,后写刚好通过测试的代码(确保高覆盖率)。

    • 结对编程 (Pair Programming):两人共用一台电脑,一人“驾驶”写代码,一人“导航”实时审查。

    • 持续集成 (CI):频繁集成到主干,通过“10分钟原则”自动运行测试,发现问题立即停工修复。

    • 重构 & 简单设计:不预测未来需求,只做当前设计;一旦发现代码有“坏味道”立即优化。

    • 小型发布 & 集体代码所有权:周期以周计发布;任何人都可修改任何模块,消除单点知识孤岛。

💬 延伸讨论:AI 编程工具是否可以替代技术中的结对编程?

  • 传统结对:人与人之间攻关复杂问题,互相挑战、互相学习。

  • AI 协作:AI 扮演不知疲倦的“实习生”,快速产出草稿。

  • 结论:AI 不会消除结对编程。未来的理想状态是二者结合:处理模式化任务时通过“人-AI”协作提升效率;处理复杂决策与深度架构时,依赖“人-人”结对做出关键判断。

看板方法 (Kanban):精益流动管理

源于丰田精益生产。在敏捷中,Kanban 不是简单的数据展示板,而是一种拉动式 (Pull) 的生产触发信号,旨在实现连续流。

  • 四大核心要素

    1. 看板板 (Kanban Board):可视化工作流各阶段(如:待办 $\rightarrow$ 开发 $\rightarrow$ 测试 $\rightarrow$ 发布)。

    2. 限制在制品数量 (WIP Limit):为每个阶段设置并发任务上限,防止团队过载,消除瓶颈。

    3. 拉动式流动:不设固定迭代周期,成员完成当前任务后,主动从上游拉取高优先级任务。

    4. 度量优化:通过监控“周期时间”和“吞吐量”持续改进流程。对现有组织流程改动小,支持渐进式引入。

敏捷开发总结

敏捷开发与传统开发模式的对比

维度瀑布模型 (Waterfall)敏捷开发 (Agile)
需求前期完全确定,变更成本极高持续演进,欢迎变化
交付单次交付最终产物频繁交付可工作的软件增量
用户参与集中在前期需求与后期验收贯穿全程,持续提供反馈循环
团队结构严格按职能划分(分析、编码、测试等)跨职能、高度自组织团队
文档详尽完整,依赖文档传递信息轻量文档,强调面对面沟通
计划前期详细计划,刚性强滚动式计划,短周期灵活调整
质量保证研发后期集中测试与修 Bug全程测试驱动 (TDD),持续集成
成功度量完美“按计划完成”交付“客户满意的软件”并创造价值

适用场景与潜在挑战

1. 黄金适用场景

  • 需求极不明确或变化频繁的项目(如互联网产品研发、创业孵化项目)。

  • 需要快速推向市场 (MVP) 验证商业猜想的项目。

  • 客户或业务方愿意并能够深度投入开发全过程。

  • 团队整体素质较高,具备较强的自组织与自我管理能力

2. 面临的局限与挑战

  • 团队成熟度要求过高:极度依赖自律,缺乏经验容易演变为“无组织无纪律的混乱”。

  • 长期维护成本增加:由于“轻文档”导向,若交接不当,后期维护和新成员维护难度较大。

  • 客户参与度瓶颈:若客户无法提供高频、及时的反馈,敏捷迭代环路就会断裂。

  • 规模化扩展难题:分布式团队或大型复杂项目直接实施较为困难(通常需要引入 SAFe、LeSS 等规模化框架进行缓解)。