项目管理指南 · 进度与时间
关键路径法(CPM):步骤、示例与公式
关键路径法(CPM)是一种进度计划技术,用于找出项目中由相互依赖的活动组成的最长链条,这条链条决定了整个项目可以完成的最短时间。本指南讲解相关公式,手动演示一个包含九项活动的示例,并说明工作开展后如何运用关键路径。
要点总结
- 关键路径是贯穿项目网络的最长路径,因此它决定了项目的最短工期。
- 顺推法得出最早开始和最早完成日期;逆推法得出最晚日期;两者之差就是浮动时间。
- 总浮动时间为零的活动是关键活动:其中任何一项延误,项目完成日期都会推迟,除非您把时间追回来。
- 只有缩短关键活动才能缩短项目,而且只能缩短到另一条路径成为关键路径为止。
- 每次更新进展后都要重新计算,因为关键路径可能会发生变化。
什么是关键路径法?
关键路径法(CPM) 是一种根据活动、工期和依赖关系计算项目进度的方法。它找出从开始到结束由相互依赖的活动组成的最长序列,即 关键路径。由于这条路径上的每项活动都必须依次进行,其总长度就是项目可能的最短工期。
CPM 能为您提供简单任务清单无法提供的三样东西:
- 日期:每项活动在不延误项目的前提下最早和最晚可以开始和完成的时间。
- 浮动时间:每项活动在影响完成日期之前可以推迟多久(参见 浮动时间与松弛时间).
- 关注点:一份简短的活动清单,其中任何延误都会推迟结束日期,让您清楚应将管理精力投向何处。
该方法由杜邦公司的 Morgan R. Walker 和雷明顿兰德公司的 James E. Kelley Jr. 于 20 世纪 50 年代末开发,用于规划大型工业项目。PERT 是一种密切相关的技术,使用三种工期估算,大约在同一时期为美国海军开发。如今,几乎每一款进度计划工具内部都在运行同样的计算,它也仍然是 PMP 认证 考试的核心内容。
CPM 是以下领域中的一项技术: 项目进度安排。在您了解活动及其逻辑关系后,它回答“这需要多长时间,什么决定了结束日期?”
CPM 关键术语与公式
| 术语 | 缩写 | 含义 |
|---|---|---|
| 工期 | D | 完成该活动所需的工作时间 |
| 最早开始 | ES | 所有紧前活动完成后,活动最早可以开始的时间 |
| 最早完成 | EF | 最早可以完成的时间:ES + D |
| 最晚完成 | LF | 在不延误项目的前提下最晚可以完成的时间 |
| 最晚开始 | LS | 在不延误项目的前提下最晚可以开始的时间:LF − D |
| 总浮动时间 | TF | 在不延误项目的前提下可以推迟多久:LS − ES(或 LF − EF) |
| 自由浮动时间 | FF | 在不延误任何紧后活动的前提下可以推迟多久:紧后活动的最小 ES − EF |
| 关键路径 | 在正常进度计划中,其活动总浮动时间为零的路径 | |
| 次关键路径 | 只有少量浮动时间的路径,稍有延误就可能变为关键路径 |
以下公式采用 第 0 天惯例,即项目从时间 0 开始,活动的最早完成时间就是其结束的时刻。这是大多数教科书和 PMP 考试采用的惯例;另一种第 1 天惯例将在下文说明。
- 顺推法:ES = 所有紧前活动中最大的 EF(第一项活动为 0);EF = ES + D。
- 逆推法:LF = 所有紧后活动中最小的 LS(最后一项活动为项目完成时间);LS = LF − D。
- 总浮动时间 = LS − ES = LF − EF。
- 自由浮动时间 = 紧后活动中最小的 ES − EF。
6 个步骤找出关键路径
1. 列出活动和工期
从以下内容开始: 工作分解结构 ,并列出每项活动及其工期估算,使用相同的单位,通常是工作日。将里程碑作为工期为零的活动纳入。
2. 识别依赖关系
对于每项活动,记录哪些活动必须在它开始之前完成。这些就是它的 紧前活动与紧后活动。大多数关系是完成到开始;我们关于 任务依赖关系 的指南介绍了其他类型。
3. 绘制网络图
将每项活动画成一个方框(即节点法或前导图法),并按照依赖关系用箭头连接方框。除第一项活动外,每项活动都应有紧前活动;除最后一项活动外,每项活动都应有紧后活动。
4. 进行顺推
从左向右计算。第一项活动从 0 开始。对于其他每项活动,最早开始时间是其紧前活动中 最大 的最早完成时间,因为它必须等所有紧前活动都完成后才能开始。加上工期即得到最早完成时间。网络中最大的最早完成时间就是项目工期。
5. 进行逆推
从右向左计算。将最后一项活动的最晚完成时间设为项目工期。对于其他每项活动,最晚完成时间是其紧后活动中 最小 的最晚开始时间,因为它必须及时完成,以便赶上最早开始的紧后活动。减去工期即得到最晚开始时间。
6. 计算浮动时间并识别关键路径
对每项活动用 LS 减去 ES。总浮动时间为零的活动是关键活动,将它们从头到尾连接起来就是关键路径。请在您的 甘特图 上突出显示,让整个团队都能看到。
关键路径法示例
一个小型团队正在上线一个新网站。项目经理列出了九项活动,工期以工作日计:
| 活动 | 描述 | 工期 | 紧前活动 |
|---|---|---|---|
| A | 商定需求 | 3 | 无 |
| B | 设计页面 | 5 | A |
| C | 设置托管 | 2 | A |
| D | 撰写内容 | 6 | A |
| E | 构建前端 | 7 | B |
| F | 构建后端 | 6 | B, C |
| G | 加载内容 | 2 | D, E |
| H | 测试 | 3 | F, G |
| I | 上线 | 1 | H |
网络中的各条路径
对于小型网络,列出每条路径是一种有用的交叉检查方式:
| 路径 | 计算 | 长度 |
|---|---|---|
| A-B-E-G-H-I | 3 + 5 + 7 + 2 + 3 + 1 | 21 天 |
| A-B-F-H-I | 3 + 5 + 6 + 3 + 1 | 18 天 |
| A-C-F-H-I | 3 + 2 + 6 + 3 + 1 | 15 天 |
| A-D-G-H-I | 3 + 6 + 2 + 3 + 1 | 15 天 |
最长的路径是 A-B-E-G-H-I,共 21 天,因此它就是关键路径。在包含数百项活动的实际项目中,您无法列出每条路径,这正是顺推和逆推的重要之处。
顺推法
- A 在 0 开始,在 3 完成。
- B、C 和 D 都紧随 A,因此均在 3 开始。B 在 8 完成,C 在 5 完成,D 在 9 完成。
- E 紧随 B:在 8 开始,在 15 完成。
- F 紧随 B 和 C。它必须等待两者中较晚完成的那个(B,在 8 完成),因此在 8 开始,在 14 完成。
- G 紧随 D(9)和 E(15),因此在 15 开始,在 17 完成。
- H 紧随 F(14)和 G(17),因此在 17 开始,在 20 完成。
- I 在 20 开始,在 21 完成。项目需要 21 天。
逆推法
- I 必须在 21 之前完成,因此必须在 20 之前开始。H 必须在 20 之前完成,在 17 之前开始。
- G 必须在 17(H 的最晚开始时间)之前完成,在 15 之前开始。F 也必须在 17 之前完成,因此最晚可在 11 开始。
- E 必须在 15(G 的最晚开始时间)之前完成,在 8 之前开始。D 也必须在 15 之前完成,因此最晚可在 9 开始。
- C 必须在 11(F 的最晚开始时间)之前完成,因此最晚可在 9 开始。
- B 有两项紧后活动:E(最晚开始时间 8)和 F(最晚开始时间 11)。取较小值,因此 B 必须在 8 之前完成,在 3 之前开始。
- A 有三项紧后活动,最晚开始时间分别为 3、9 和 9。它必须在 3 之前完成,在 0 开始。
浮动时间与关键路径
| 活动 | D | ES | EF | LS | LF | 总浮动时间 | 自由浮动时间 |
|---|---|---|---|---|---|---|---|
| A | 3 | 0 | 3 | 0 | 3 | 0 | 0 |
| B | 5 | 3 | 8 | 3 | 8 | 0 | 0 |
| C | 2 | 3 | 5 | 9 | 11 | 6 | 3 |
| D | 6 | 3 | 9 | 9 | 15 | 6 | 6 |
| E | 7 | 8 | 15 | 8 | 15 | 0 | 0 |
| F | 6 | 8 | 14 | 11 | 17 | 3 | 3 |
| G | 2 | 15 | 17 | 15 | 17 | 0 | 0 |
| H | 3 | 17 | 20 | 17 | 20 | 0 | 0 |
| I | 1 | 20 | 21 | 20 | 21 | 0 | 0 |
活动 A、B、E、G、H 和 I 的总浮动时间为零,构成关键路径。有三点值得注意:
- C 有 6 天总浮动时间,但只有 3 天自由浮动时间。 它可以推迟 3 天而不影响任何活动。超过 3 天就会开始延误 F,占用 F 的浮动时间,不过在 6 天全部用完之前,项目仍能按时完成。
- F 是次关键活动。 由于只有 3 天浮动时间,后端构建稍有超时就会使路径 A-B-F-H-I 变为关键路径。
- D 的浮动时间完全属于它自己。 内容撰写最多可以推迟 6 天而不影响任何其他活动,因此在需要时,它很适合把人员借调给关键工作。
同样的计算,以一个包含六项活动的网络为例,在我们的 顺推法与逆推法 指南中逐个单元格地列出。您也可以下载我们的免费 关键路径模板,它会为您计算浮动时间并标记关键活动。
第 0 天还是第 1 天?两种计算惯例
您会看到两种为顺推和逆推编号的方式,它们得出的答案相差 1。两者都没有错,但切勿混用。
| 第 0 天惯例 | 第 1 天惯例 | |
|---|---|---|
| 第一项活动开始 | ES = 0 | ES = 1 |
| 最早完成 | EF = ES + D | EF = ES + D − 1 |
| 下一项活动开始 | ES = 紧前活动的 EF | ES = 紧前活动的 EF + 1 |
| 最晚开始 | LS = LF − D | LS = LF − D + 1 |
| 前一项活动的最晚完成时间 | LF = 紧后活动的 LS | LF = 紧后活动的 LS − 1 |
| 总浮动时间 | LS − ES | LS − ES(结果相同) |
在第 0 天惯例中,“在 3 完成”指第 3 天结束时。在第 1 天惯例中,示例中的活动 A 从第 1 天进行到第 3 天,B 从第 4 天进行到第 8 天,依此类推,这与人们查看日历的习惯一致。两种惯例下的浮动时间和关键路径完全相同。如果考试答案或同事的数字在每项活动上都相差一天,原因通常是采用了不同的惯例。
CPM 中的依赖关系、滞后量和制约因素
基本方法假设每个关系都是没有间隔的完成到开始关系。实际进度计划要复杂得多,顺推和逆推的调整方式如下:
- 滞后量 为关系增加等待时间。带有 2 天滞后量的完成到开始关系意味着紧后活动的 ES 等于紧前活动的 EF + 2。 提前量 是一种负的滞后量,允许工作重叠。参见 提前量与滞后量.
- 开始到开始(SS) 关系将紧后活动的开始与紧前活动的开始绑定,例如“开发开始 3 天后开始测试”。
- 完成到完成(FF) 关系将两者的完成绑定在一起,例如“构建完成时文档也完成”。
- 日期制约因素 例如“必须在某日完成”或“不得早于某日开始”,会覆盖计算出的日期。请谨慎使用,因为它们会阻止进度计划自然地重新计算。
- 负浮动时间 在制约因素或要求的完成日期早于计算出的完成日期时出现。负浮动时间的数值告诉您需要追回多少时间。
大多数进度计划软件都会自动处理这些情况。手动核对关键路径时,请首先查看滞后量和制约因素,因为它们通常是手动计算与工具结果不一致的原因。
CPM、PERT 与关键链对比
CPM 通常与两种相关技术一起讲授。它们回答的问题略有不同。
| CPM | PERT | 关键链 | |
|---|---|---|---|
| 工期 | 每项活动一个估算值 | 三个估算值:(O + 4M + P) ÷ 6 | 不含余量的集中估算,外加缓冲 |
| 核心问题 | 哪些活动决定结束日期? | 完成日期的不确定性有多大? | 资源限制如何影响结束日期? |
| 资源 | 假设资源随时可用 | 假设资源随时可用 | 围绕资源制约因素安排进度 |
| 典型应用 | 建筑、工程以及大多数计划型项目 | 研究、新产品、不确定性高的工作 | 多项目和资源受限的环境 |
在实践中,它们可以很好地结合:您可以将 PERT 估算用作 CPM 计算中的工期,然后运行 蒙特卡洛模拟 来查看完成日期的可能范围。
在进行中的项目上运用关键路径
在计划阶段找出关键路径只实现了一半的价值。在交付过程中:
- 按固定节奏更新进展并重新计算,通常每周一次。记录实际日期和剩余工期,然后让工具重新进行顺推和逆推。
- 检查路径是否发生了变化。 如果非关键活动的推迟超过其浮动时间,它所在的路径就会变为关键路径。如果关键活动提前完成,另一条路径可能成为关键路径。
- 关注次关键路径。 将浮动时间不超过(例如)五天的活动与关键活动一并报告。在我们的示例中,F 需要与关键活动同等的关注。
- 警惕多条关键路径。 当两条或多条路径的浮动时间为零时,其中任何一条延误都会导致项目延误,因此延期完成的总体风险更高。
- 检查资源。 CPM 假设只要逻辑允许,人员就随时可用。 资源平衡 以消除超负荷,可能会延长关键路径,或产生一条新的关键路径。
如何缩短关键路径
如果计算出的完成日期晚于业务需要,您有四个主要选择:通过增加资源对关键活动进行赶工,通过让原本顺序进行的活动重叠来快速跟进,缩减范围,或改变逻辑关系。我们关于 进度压缩 和 快速跟进与赶工 的指南解释了其中的权衡。
缩短是有限度的。在示例中,将前端构建(E)从 7 天缩短到 4 天可节省 3 天,使项目缩短到 18 天。再缩短 E 已无济于事,因为路径 A-B-F-H-I(18 天)会成为关键路径。每次调整后务必重新计算,以确定新的关键路径在哪里。
关键路径法的优势与局限
| 优势 | 局限 |
|---|---|
| 显示哪些活动决定结束日期,以及哪些延误会产生影响 | 使用单点估算,因此看起来可能比实际更确定 |
| 计算浮动时间,让您知道哪里有灵活性 | 除非对进度计划进行资源平衡,否则假设资源无限 |
| 为截止日期和权衡决策提供逻辑依据 | 需要完整、正确的依赖关系才能可靠 |
| 一旦更新进展,即可凸显延误的影响 | 大型网络需要软件以及专人维护 |
| 适用于任何有先后顺序工作的行业 | 对于范围在每个冲刺都会变化的高度迭代工作,作用较小 |
对于工期不确定的情况,可加入 PERT 估算或模拟。对于资源密集型项目,可对进度计划进行资源平衡,或考虑 关键链项目管理。对于敏捷工作,请在发布和里程碑层面而不是在单个用户故事层面使用关键路径。
关键路径的常见错误
- 遗漏依赖关系。 没有紧后活动的活动会让计算提前结束,并可能掩盖真正的关键路径。
- 硬编码日期。 直接输入开始日期而不关联活动,会导致顺推和逆推无法正常进行。
- 混用惯例。 顺推使用第 0 天惯例而逆推使用第 1 天惯例,会导致浮动时间相差 1。
- 忽视日历。 即使逻辑正确,周末、节假日和兼职资源也会改变实际日期。
- 只计算一次,此后不再计算。 关键路径每周都可能变化;计划阶段确定的路径在两个月后可能已不再相关。
- 把浮动时间当作人人可用的空闲时间。 总浮动时间由一条路径上的活动共享。如果一项活动用掉了它,同一路径上后续活动的浮动时间就会减少。
关键路径工具与模板
对于小型网络,电子表格就很好用,还能帮助您理解计算过程。我们的免费 关键路径模板 包含工期、紧前活动、最早和最晚日期、总浮动时间以及关键标记等列,而 项目进度表模板 则可以在您想把结果转化为日期和负责人时派上用场。
对于更大的项目,请使用在工期或依赖关系发生变化时自动重新进行顺推和逆推的软件。大多数具备依赖关系感知甘特图的项目管理工具都能显示哪些任务决定完成日期。 Wrike是我们排名第一的工具,适合使用交互式甘特图和依赖关系管理多个项目的团队,而 Smartsheet 则适合偏好电子表格布局的计划人员。购买前,请确认哪个套餐包含您所需的进度计划功能。
本主题的免费模板
常见问题
项目管理中的关键路径法是什么?
关键路径法是一种进度计划技术,它利用活动、工期和依赖关系计算每项活动的最早和最晚日期。它找出关键路径:由相互依赖的活动组成的最长链条,它决定了项目可能的最短工期。
如何计算关键路径?
列出活动、工期和依赖关系;进行顺推,求出最早开始和最早完成日期;进行逆推,求出最晚开始和最晚完成日期;然后计算总浮动时间(LS − ES)。总浮动时间为零的活动构成关键路径。
关键路径是最长路径还是最短路径?
它是贯穿网络的最长路径。由于路径上的活动必须依次进行,这条最长路径就是整个项目可以完成的最短时间。
关键路径法有哪些步骤?
列出活动,识别依赖关系,绘制网络图,进行顺推,进行逆推,然后计算浮动时间,并将浮动时间为零的活动确定为关键路径。
总浮动时间和自由浮动时间有什么区别?
总浮动时间是活动在不延误项目完成的前提下可以推迟的时间。自由浮动时间是活动在不延误任何紧后活动最早开始的前提下可以推迟的时间。自由浮动时间总是小于或等于总浮动时间。
一个项目可以有多条关键路径吗?
可以。当两条或多条路径的工期同为最长时,它们都是关键路径。这会增加进度风险,因为其中任何一条延误都会导致项目延误。
关键路径在项目期间会变化吗?
会。如果非关键活动的推迟超过其浮动时间,或者关键活动提前完成,另一条路径就可能成为关键路径。这就是每次更新进展后都应重新计算的原因。
什么是负浮动时间?
当要求的完成日期或制约因素早于计算出的完成日期时,就会出现负浮动时间。它表示为了满足该日期必须追回多少天。
CPM 和 PERT 有什么区别?
CPM 对每项活动使用单一工期估算,侧重于逻辑关系和浮动时间。PERT 使用乐观、最可能和悲观估算来反映不确定性。参见我们的 PERT 图 指南。
关键路径法是谁开发的?
CPM 由杜邦公司的 Morgan R. Walker 和雷明顿兰德公司的 James E. Kelley Jr. 于 20 世纪 50 年代末开发,用于规划大型工业项目。
什么是次关键路径?
只有少量浮动时间的路径。轻微延误就可能使其成为关键路径,因此应像监控关键路径本身一样密切监控它。
如何缩短关键路径?
通过增加资源对关键活动进行赶工,通过让活动重叠来快速跟进,缩减范围或改变逻辑关系。只有调整关键活动才能缩短项目,而且只能缩短到另一条路径成为关键路径为止。
敏捷中还会使用关键路径法吗?
会,但通常在更高的层面使用。混合型项目常将 CPM 用于发布、里程碑和团队之间的依赖关系,而各团队自身则以冲刺进行计划。