33、软件项目管理方法:Scrum、传统方法与敏捷方法的对比分析

软件项目管理方法:Scrum、传统方法与敏捷方法的对比分析

1. 软件项目管理方法概述

在软件项目管理领域,存在多种方法,这些方法各有特点和适用场景。下面将详细介绍 Scrum、传统方法中的 Function Points 和 UDP,以及敏捷方法的相关内容。

1.1 Scrum 方法

Scrum 是一种敏捷项目管理框架,以 30 天的 Sprint 周期为单位,在每个 Sprint 结束时能提供确定的测量结果。在 Sprint 期间,通过每日 Scrum 会议能在一定程度上保证客观性,但报告本质上是主观的,基于开发者的意见。

Sprint 的目标是完成产品待办事项列表中商定的一组任务。Scrum 中的任务描述与 FDD 中的特性类似,但没有明确的文档化方法来定义和衡量任务。由于任务不是基于正式的分析形成的,所以可能不如 FDD 中的特性那样细粒度,重复性较差,更容易出现可变性。

对于一个为期 3 个月的 Web 项目,10 名开发者可能从产品待办事项列表中完成数百个任务。在 Sprint 中,使用燃尽图来衡量任务完成情况,燃尽图通常以小时为单位衡量任务的工作量。对于 10 名开发者的团队,每天大约记录 80 小时的工作,这种测量非常细粒度。

当项目因软件开发过程中的噪声、不确定性和可变性而处于混沌边缘状态时,Scrum 提供了一种基于反馈进行经验性项目管理的可靠方法。由于缺乏可用于前馈控制的可预测指标,不鼓励进行预测和规划。

1.2 传统方法

1.2.1 Function Points

结构化方法的控制单位是功能点(Function Points)。功能点代表了客户价值输出的衍生度量,可以作为库存的适当度量。功能点非常小,与 FDD 中的特性非常相似,但其最初的动机是结构化分析和设计,而 FDD 的特性是由面向对象的分析和设计驱动的。

使用 FP 指标和跟踪彻底运行的 SDLC 项目应能提供与 FDD 项目类似的控制程度,处于阈值状态并接近理想状态。

1.2.2 UDP

Jacobson 的面向对象软件工程(OOSE)为统一过程(Unified Process,UDP)这一传统方法的最常用实例提供了基础,但 UDP 似乎不太容易控制。

在衡量 UDP 项目的客户价值输出时,需要检查需求。UDP 以用例(Use Cases)的形式进行需求分析,但编写用例的方法缺乏一致性,众多作者提出了不同的方法和细化程度。与 FDD 中的特性或结构化方法中的功能点相比,用例的这种缺乏一致性引入了噪声、不确定性和可变性,几乎会立即将 UDP 项目置于混沌状态。

在特定的软件开发组织中,遵循一位用例作者的特定建议,用例可能更具可预测性,但由于编写用例的分析师背景和教育不同,很难实现这一点。

对于一个 10 名开发者、为期 3 个月的 Web 开发项目,可能有 35 个用例。需求用例很难映射到特定的类和功能编程工作,因此难以精确声明一个用例是否已设计完成,或映射特定的中间步骤,如设计评审。一些项目以这种方式运行,但往往会导致次优的过程代码。因此,用例通常通过多个中间工件进行映射,包括系统级用例和其他设计文档,跟踪客户价值输出的精确状态变得更加困难。

在示例中,为 35 个用例编写代码需要 65 个日历周工作日。如果用例的唯一跟踪信息是“开始”和“完成”,那么每 2 天最多只有一两个数据点。用例驱动的生产量化方法产生的数据比使用特性或功能点的细粒度方法少两个数量级,对项目控制状态的估计也必须少两个数量级的确定性,即存在更大的不确定性。

1.3 方法对比总结

方法 测量粒度 控制程度 适用场景
Scrum 细粒度 较好,能应对混沌边缘状态 需求不确定、变化频繁的项目
Function Points 细粒度 较好,接近理想状态 需求相对稳定、适合结构化分析的项目
UDP 粗粒度 较差,易陷入混沌状态 需求难以精确界定、用例编写缺乏一致性的项目

软件生产系统依赖反馈进行管理和控制,反馈的粒度很重要。粒度越细,控制应该越好。一般来说,敏捷方法注重细粒度的频繁测量,是良好的反应式控制机制。使用低可变性测量的方法,如 FDD,也是良好的前馈预测控制机制。

2. 敏捷方法的适用性及特性

2.1 敏捷方法的适用场景分析

不能简单地认为敏捷方法一定更好,也不能随意选择敏捷方法就能取得正确的结果。需要考虑敏捷方法在哪些情况下可能不适用。

通过将项目空间划分为一个 2 x 2 的网格,可以更清晰地分析不同方法的适用性。

2.1.1 项目划分维度
  • 可分割性 :行将软件项目分为可以轻松分割成小块并增量交付的项目,以及必须作为一个整体交付才有价值的项目。后者如波音 777、航天飞机或塔科马海峡大桥等物理项目,在软件世界中包括空中交通控制、救护车调度、大型操作系统、算法软件、政府系统以及与物理对象相关的系统等。
  • 领域成熟度 :列将空间分为成熟且理解的领域和不成熟且不理解的领域。例如,空中交通控制是一个成熟且理解的领域,项目开始前需求应该明确;而无线电话互联网数据服务的操作系统目前不是一个成熟且理解的问题,需求可能经常变化。
2.1.2 四个象限的适用方法
  • 右上象限(成熟、整体) :只有大规模严格软件方法(RSM)才能取得成功,这是 CMM 3 到 5 级的典型象限。在这个领域,领域不确定性低,但必须完整交付范围,传统的范围 - 预算 - 进度项目管理模型最为合适,虽然迭代增量开发可能有助于降低风险,但不需要敏捷方法中常见的增量或迭代交付。
  • 左上象限(整体、不成熟) :只能使用敏捷方法。这类项目必须寻求构建广度而不是深度,以覆盖整个问题领域。为了避免因需求变化而进行持续返工,项目必须具有敏捷性,表现出短前置时间和低库存水平。
  • 左下象限(可分割、不成熟) :使用 RSM 可能导致失败。因为已知需求是不稳定的,存在过高的风险和不确定性,追求固定范围和可变进度的项目管理模型是不明智的。必须用短前置时间和低库存水平来解决这类问题,最好使用极轻量级的敏捷方法,如极限编程(Extreme Programming)或 XP/Scrum 混合方法 XBreed。
  • 右下象限(可分割、成熟) :可以采用 RSM 或敏捷方法,但一般来说,敏捷方法在这个象限会优于 RSM,因为它们能成功交付结果,并且在实现相同输出时成本和投资更低。对于可分割且能增量交付的问题,涵盖了大多数软件开发领域,敏捷方法将产生最佳的业务结果。

以下是一个简单的 mermaid 流程图,展示项目类型与适用方法的关系:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([项目开始]):::startend --> B{项目是否可分割?}:::decision
    B -->|是| C{领域是否成熟?}:::decision
    B -->|否| D{领域是否成熟?}:::decision
    C -->|是| E(可采用 RSM 或敏捷方法):::process
    C -->|否| F(使用敏捷方法如 XP 或 XBreed):::process
    D -->|是| G(使用 RSM):::process
    D -->|否| H(使用敏捷方法):::process
    E --> I([项目结束]):::startend
    F --> I
    G --> I
    H --> I

2.2 敏捷性的定义及特性

2.2.1 传统对敏捷性的定义

敏捷性通常被定义为“应对变化的能力”。从达尔文的角度来看,敏捷性是“遗传适应性”,即一个物种应对不断变化的环境、进化并避免灭绝的能力。

大多数敏捷主义者更倾向于认为敏捷方法将软件开发的人性方面放在首位,将开发视为一种主要是混沌(不可知)的新兴遗传现象。这意味着敏捷方法不应寻求规划或控制,而应允许以总体目标为导向和衡量的新兴自组织行为,目标始终是交付可工作的代码。

实际上,这只是一种观察到的行为方式,表明敏捷方法能够应对变化。因为许多敏捷方法不采用传统意义上的规划,允许“现场开发者”做出决策,具有战术性,所以能够应对变化,无需丢弃计划。

2.2.2 敏捷性作为快速响应能力

除了应对一般变化的能力,敏捷方法在应对一种特殊类型的变化——加急请求方面表现出色。

加急请求是具有最高优先级的请求,所有其他工作都必须服从于它,简单来说就是插队。加急请求在不成熟的市场或组织中更有可能出现。

无论使用何种软件开发方法,都可以对请求进行加急处理,但敏捷方法在处理这类请求时表现更好。这意味着与任何 RSM 相比,敏捷方法对组织总体目标(即获取更多利润)的影响更小。具体表现为,由于加急请求,敏捷方法导致的在制品库存增加、投资增加、生产率降低和总体前置时间增加的幅度更小。

以下是不同方法应对加急请求的对比:
| 方法 | 加急请求处理方式 | 平均前置时间 | 处理成本 |
| ---- | ---- | ---- | ---- |
| Extreme Programming | 类似“串行加急”,优先处理最新重要请求 | 短,小于 2 周 | 较低 |
| Scrum | 加急请求需等待下一个 Sprint | 约 6 周 | 适中 |
| FDD | 可接受变更,但处理加急请求成本较高 | 较长 | 较高 |

2.3 敏捷方法与统计过程控制

根据 Wheeler 的四个过程控制状态,可以将敏捷方法和 RSM 映射到四个象限中。

方法 测量方式 质量一致性 所处状态
XP 缺乏明确分析、建模和规划,故事定义一致性待完善 声称每两周交付符合客户要求的产品,应处于左列 状态不稳定,在图表中位于 y 轴下方
Scrum 倡导者回避编码化和建模 每月交付符合要求的质量 位于 y 轴较低位置,与 XP 过程控制视角相似
FDD 基于高级编码方案,度量指标高度定义 团队熟练掌握概念模型和编码方案时,从阈值状态开始,可进入理想状态 相对稳定,有较好的发展趋势
RSM 基于 PMI/ISO/SEI 模型,精确估计和按时交付 符合质量标准,达到“可重复”的 CMM Level 2 要求 理论上应处于理想状态

随着系统向图表的左上方移动,过程成熟度和对工作底层元素(即“软件的自然哲学”)的理解都会增加。就像其他科学一样,在理解宇宙的基本构建块之前,测量的准确性取决于对测量对象的了解程度。对底层哲学的更好理解有助于更好地理解要测量的内容。

综上所述,在选择软件开发方法时,需要综合考虑项目的特点、需求的稳定性、团队的能力以及市场环境等因素,以确保选择最适合的方法来实现项目的成功。

3. 不同敏捷方法应对加急请求的深入分析

3.1 加急请求对不同敏捷方法的影响机制

加急请求在软件项目中是不可避免的,尤其是在快速变化的市场环境中。不同的敏捷方法对加急请求的处理方式和受影响程度各不相同。

3.1.1 Extreme Programming(XP)
  • 处理机制 :XP 采用“串行加急”的方式,这意味着它优先处理最新、最重要的请求。由于其迭代周期短,通常为 1 到 2 周,所以能够在短时间内响应加急需求。在每个迭代中,团队会根据需求的优先级来安排工作,最新的加急请求会被立即纳入考虑。
  • 成本与效益 :这种处理方式的优点是响应速度快,能够快速满足客户的紧急需求。但缺点是可能会打乱原有的迭代计划,导致一些低优先级的任务被延迟。不过,由于迭代周期短,这种延迟的影响相对较小。
3.1.2 Scrum
  • 处理机制 :Scrum 在当前 Sprint 期间排除加急请求,请求必须等待到下一个 Sprint。这是因为 Scrum 强调 Sprint 的稳定性和完整性,避免在 Sprint 期间引入不必要的干扰。
  • 成本与效益 :这种方式保证了 Sprint 内工作的有序进行,但也导致加急请求的平均前置时间较长,约为 6 周。对于一些对时间敏感的加急请求,可能无法及时满足。
3.1.3 Feature-Driven Development(FDD)
  • 处理机制 :FDD 主要用于较大规模的项目,团队通常为 10 人或更多,迭代周期往往是季度或更长。虽然 FDD 有变更控制过程可以接受变更,但由于项目规模大、工作进度复杂,处理加急请求时需要对正在进行的工作进行调整,可能会导致较大的成本。
  • 成本与效益 :为了适应加急请求,可能需要暂停或调整正在进行的工作,这会导致在制品库存增加,增加了项目的风险和成本。而且,由于项目规模大,调整工作的难度也较大,可能会导致较长的延迟。

3.2 加急请求的规模与成本分析

通过“规模与加急能力”图(Figure 34 - 3)可以进一步分析加急请求的成本。该图以项目中雇佣的开发人员数量(或项目的运营费用烧钱率)为 y 轴,以库存前置时间天数(即系统中在制品库存的天数乘以系统的前置时间天数)为 x 轴,绘制了不同过程处理加急请求的成本范围。

3.2.1 成本构成
  • 库存增加成本 :加急请求会导致在制品库存增加,这会增加项目的持有成本,包括风险和不确定性。例如,库存中的工作可能会因为需求变化而过时,导致浪费。
  • 前置时间延长成本 :较长的前置时间会带来更大的不确定性和变化风险,同时也可能导致吞吐量损失。因为客户可能会因为等待时间过长而改变需求或失去耐心。
3.2.2 不同方法的成本对比

从图中可以看出,不同方法在处理加急请求时的成本差异较大。XP 由于其短迭代和快速响应能力,在处理加急请求时,库存增加和前置时间延长的幅度相对较小;Scrum 由于 Sprint 的限制,加急请求的前置时间较长,但在 Sprint 内的工作稳定性较高;FDD 由于项目规模大、工作复杂,处理加急请求时可能会导致较大的库存增加和前置时间延长。

以下是不同方法处理加急请求的成本对比表格:
| 方法 | 库存增加成本 | 前置时间延长成本 | 总体成本 |
| ---- | ---- | ---- | ---- |
| Extreme Programming | 较低 | 较低 | 较低 |
| Scrum | 适中 | 较高 | 适中 |
| FDD | 较高 | 较高 | 较高 |

3.3 应对加急请求的策略建议

根据不同方法的特点和成本分析,可以给出以下应对加急请求的策略建议:

3.3.1 项目前期规划
  • 在项目开始前,评估项目可能面临加急请求的可能性和频率。如果预计加急请求较多,优先考虑使用敏捷方法,如 XP 或 Scrum。
  • 制定应急计划,明确在遇到加急请求时的处理流程和责任分工。
3.3.2 团队沟通与协作
  • 建立良好的团队沟通机制,确保团队成员能够及时了解加急请求的情况,并共同协商应对策略。
  • 培养团队的灵活性和适应性,提高团队应对变化的能力。
3.3.3 客户管理
  • 与客户保持密切沟通,提前了解客户的潜在加急需求,并在项目规划中适当预留一些资源。
  • 向客户解释不同方法处理加急请求的特点和成本,让客户做出合理的决策。

以下是一个 mermaid 流程图,展示应对加急请求的策略流程:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([收到加急请求]):::startend --> B{评估请求紧急程度}:::decision
    B -->|高| C(优先处理,使用 XP 或 Scrum 调整计划):::process
    B -->|中| D(与团队协商,考虑是否调整当前 Sprint):::process
    B -->|低| E(纳入下一个迭代或计划):::process
    C --> F(执行调整后的计划):::process
    D --> G{团队同意调整?}:::decision
    G -->|是| F
    G -->|否| E
    E --> H(等待下一个迭代):::process
    F --> I([完成请求处理]):::startend
    H --> I

4. 敏捷方法与传统方法在过程控制中的综合比较

4.1 基于 Wheeler 过程控制状态的映射分析

根据 Wheeler 的四个过程控制状态,将敏捷方法(XP、Scrum、FDD)和传统方法(RSM)映射到一个图表中,可以更直观地比较它们在过程控制中的特点。

4.1.1 图表维度
  • 测量方式 :行分为使用低可变性测量的可重复方法和使用定义不明确或未编码、主观方法进行测量的方法。
  • 质量一致性 :列以符合可接受标准(如每个特性 1 个缺陷、每个功能点 0.25 个缺陷)来衡量质量。同时,代码质量差会导致生产率下降,因此也可以用生产率来衡量一致性。
4.1.2 不同方法的位置分析
  • XP :位于 y 轴下方,表明其不注重显式分析、建模和规划,故事定义的一致性仍在发展中。虽然 Kent Beck 认为 XP 每天都涉及建模,但没有推荐的方法,且所选方法与 XP 过程本身无关。不过,XP 声称每两周(未来可能每周)交付客户要求的产品,这意味着一个优秀的 XP 团队应该在左列,即交付符合质量的产品。
  • Scrum :在 y 轴上的位置较低,因为其倡导者回避编码化和建模。Schwaber 甚至认为建模可能是“浪费时间”。但 Scrum 有助于在混沌中理出头绪,每月交付符合要求的质量,从过程控制的角度看,与 XP 相似。
  • FDD :基于先进的编码方案,如特性、特性集、主题领域、原型、领域中立组件和状态图等,度量指标高度定义。如果团队熟练掌握概念模型和编码方案,FDD 从阈值状态开始,能够改进过程并进入理想状态。
  • RSM :在达到 SEI SW CMM 2 级或更高的团队中使用时,理论上应该只出现在理想状态。因为 RSM 基于 PMI/ISO/SEI 的范围 - 预算 - 进度模型,必须准确估计并按时交付,以达到“可重复”的 CMM Level 2 要求。

4.2 不同方法的优缺点总结

方法 优点 缺点
XP 快速响应变化,短迭代周期,能及时交付客户需求;团队协作紧密,沟通效率高 缺乏明确的分析、建模和规划,故事定义一致性有待提高
Scrum 提供清晰的项目框架,Sprint 机制保证工作的有序进行;能在混沌中提供一定的控制 倡导者回避建模,可能导致对项目整体架构的理解不足;加急请求处理不灵活
FDD 基于高级编码方案,度量指标明确,适合大规模项目;有助于提高过程成熟度 项目规模大,处理加急请求成本高;对团队成员的概念模型和编码方案掌握要求高
RSM 能够准确估计和按时交付,符合质量标准,适合成熟、稳定的项目 缺乏灵活性,难以应对需求变化频繁的项目;前期规划和文档工作繁琐

4.3 选择合适方法的关键因素

在选择软件开发方法时,需要综合考虑以下关键因素:

4.3.1 项目特性
  • 项目规模 :大规模项目可能更适合 FDD 或 RSM,因为它们有更完善的管理和控制机制;小规模项目可以选择 XP 或 Scrum,以提高灵活性和响应速度。
  • 需求稳定性 :需求稳定的项目可以考虑 RSM;需求变化频繁的项目则应优先选择敏捷方法。
4.3.2 团队能力
  • 技术能力 :团队成员对特定方法的技术掌握程度会影响方法的选择。例如,如果团队熟悉 FDD 的编码方案和概念模型,那么 FDD 可能是一个好选择。
  • 协作能力 :敏捷方法强调团队协作和沟通,因此团队的协作能力也是选择方法的重要因素。
4.3.3 市场环境
  • 市场成熟度 :在成熟市场中,项目需求相对明确,RSM 可能更合适;在不成熟市场中,需求变化快,敏捷方法更能适应市场变化。
  • 加急请求频率 :如果项目可能面临频繁的加急请求,敏捷方法(如 XP)可能更具优势。

以下是选择合适方法的决策树 mermaid 流程图:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始选择方法]):::startend --> B{项目规模大吗?}:::decision
    B -->|是| C{需求稳定吗?}:::decision
    B -->|否| D{需求变化频繁吗?}:::decision
    C -->|是| E(考虑 FDD 或 RSM):::process
    C -->|否| F(考虑敏捷方法):::process
    D -->|是| F
    D -->|否| G{团队协作能力强吗?}:::decision
    G -->|是| H(考虑 XP 或 Scrum):::process
    G -->|否| I(考虑结构化方法):::process
    E --> J([确定方法]):::startend
    F --> J
    H --> J
    I --> J

综上所述,软件项目管理方法的选择是一个复杂的决策过程,需要综合考虑项目的各个方面。不同的方法在不同的场景下有各自的优势和劣势,只有根据具体情况选择合适的方法,才能提高项目的成功率和效益。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值