📋 项目管理入门 · 项目经理·核心技能

关键路径法(CPM):最长路径=最短工期、浮动为零、前向/后向遍历与赶工 vs 快速跟进 | 项目管理入门

1957–1959 年 Kelley 与 Walker 为工厂检修排期而生——最长的依赖链恰恰决定最短工期,浮动为零的任务才叫『关键』

一句话先懂 · TL;DR

一节有出处的关键路径法(CPM)入门课:CPM 由杜邦的 Morgan Walker 与 Remington Rand 的 James Kelley 于 1957–1959 年提出,最初为复杂的工厂检修排期,是把工期当已知值的确定性方法。讲透最反直觉的一点——关键路径是网络中最长的依赖链,它的总时长恰恰等于项目最短可能完成时间;『关键』不是最难或最重要,而是浮动(float/slack)为零、一拖全拖。按五步流程实操:列活动与工期→标依赖→画网络图→前向遍历求 ES/EF→后向遍历求 LS/LF,总浮动=LS−ES=LF−EF,浮动为 0 的活动链即关键路径。再讲管理含义:盯紧关键任务、用非关键任务的浮动当调度缓冲;压缩工期只对关键路径有效,赶工(加资源、成本上升)与快速跟进(串行改并行、风险上升)各有代价;并辨析 CPM 与 PERT(1958,美国海军北极星项目,三点估计)的区别。事实出自 Kelley & Walker PMI 史料与 PMBOK 等一手来源。

CPM 是什么:最长的依赖链,恰恰决定最短的工期

关键路径法(Critical Path Method, CPM)由杜邦的 Morgan Walker 与 Remington Rand 的 James Kelley1957–1959 年提出,最初是为了给复杂的工厂检修排期——任务间依赖太多,手算排不过来。

做法:把项目拆成一串『活动』,标出每个活动的工期与彼此的先后依赖,连成一张网络图。CPM 是确定性方法(工期当作已知值),用来回答两个核心问题:这个项目最快多久能完?哪些任务一拖就拖累全局?

⚠️最反直觉的一点:关键路径是网络中『最长』的那条依赖活动链,而它的总时长恰恰等于项目『最短』可能完成时间。为什么?因为项目要结束,所有路径必须都走完,最长那条决定了完工时间的下限。推论:想让项目更快交付,只压缩非关键任务没用,必须缩短关键路径本身。一个项目还可能有不止一条关键路径(并列最长)。

另一个核心概念是浮动/松弛时间(float / slack):一个活动最多能拖延多久而不拖累项目完工。关键路径上的活动浮动为零——它们一拖,整个项目交付日就顺延;不在关键路径上的活动有正浮动,可以在浮动范围内延后,而不影响最终工期。

所以『关键』二字不是指任务最难或最重要,而是指它没有任何缓冲、一动就动全局。识别哪些活动浮动为零,就找到了项目经理最该死盯的那批任务。

CPM 网络图示意:多条路径中最长的依赖链即关键路径,它的总时长=项目最短工期,链上活动浮动为零

怎么算:五步流程 + 前向/后向遍历求 ES/EF/LS/LF

找关键路径的实操五步

1. 列出所有活动及其工期
2. 标出活动间的依赖(谁必须在谁之前完成);
3. 画成网络图(活动为节点、依赖为箭头);
4. 前向遍历(forward pass)——从项目起点往后推,算每个活动的最早开始 ES最早完成 EF(EF=ES+工期;后继活动的 ES 取所有前置活动 EF 的最大值),由此得出项目最短工期
5. 后向遍历(backward pass)——从项目终点往前推,算最晚开始 LS最晚完成 LF(在不推迟项目完工的前提下最晚能拖到何时),再算每个活动的浮动。

💡判定公式:总浮动 = LS − ES = LF − EF。浮动为 0 的活动连起来,就是关键路径。例:某活动 ES=第 5 天、LS=第 9 天,总浮动 = 9 − 5 = 4 天——它有 4 天缓冲,不在关键路径上。

拿到关键路径后该干什么?盯紧它上面的每个任务、给它们最稳的资源,并对它们的风险做应对;非关键任务的浮动则是你的调度弹药——可以容忍小延误,甚至临时抽调它们的资源去支援关键任务。

前向遍历自左向右算 ES/EF,后向遍历自右向左算 LS/LF;总浮动=LS−ES=LF−EF,浮动为 0 的活动连成关键路径

怎么用:压缩工期两条路,以及三个常见误解

CPM 给项目经理的最大价值是把注意力聚焦:不是所有任务都该被平均用力——关键路径上的任务一旦延误项目就延误,要优先派最可靠的人、最早动手、风险预案做足、进度天天盯

要让项目更快完成,只能压缩关键路径(压非关键任务对交付日毫无帮助)。两种进度压缩手段:

- 赶工(crashing):给关键任务加资源/加班来缩短工期,代价是成本上升,且通常有边际递减;
- 快速跟进(fast-tracking):把原本串行的关键任务改成部分并行,不额外花钱但增加返工与风险

压缩时还要小心:把当前关键路径压短后,另一条路径可能反超成为新的关键路径,所以要边压边重算。随着项目推进,原本非关键的路径也可能因延误而变成新的关键路径,同样需要重算。

⚠️三个常见误解:

① 『关键路径=最难/最重要的任务』——错。关键指『浮动为 0、一拖全拖』,它可能是一串平淡无奇的任务;难任务若有浮动反而不在关键路径上。

② 『有浮动的任务不重要、可以随便拖』——错。浮动是有限缓冲,一旦拖超浮动,它就变成关键路径、开始拖累项目。

③ 『CPM 就是 PERT』——不完全。CPM(1957,杜邦)把工期当确定值;PERT(1958,美国海军北极星导弹项目)用三点估计(乐观/最可能/悲观)处理工期的不确定性,更适合研发型项目。两者网络逻辑相通,差别在如何对待工期的不确定。
压缩工期两法对比:赶工=加资源换时间(成本上升、边际递减);快速跟进=串行改部分并行(返工与风险上升)——都只对关键路径有效

自测 · 学完检查一下

想真正动手做题、记进度、攒连胜?到互动课里练。

关于关键路径法(CPM)的由来与定位,下面哪个说法是对的?

答案:CPM 由杜邦的 Morgan Walker 与 Remington Rand 的 James Kelley 于 1957–1959 年提出,最初为复杂的工厂检修排期,是把工期当作已知值的确定性方法

CPM 由杜邦的 Morgan Walker 与 Remington Rand 的 James Kelley 于 1957–1959 年提出,最初是为给复杂的工厂检修排期(任务间依赖太多,手算排不过来);它是确定性方法,把工期当作已知值,用来回答『项目最快多久能完、哪些任务一拖就拖累全局』。用三点估计处理不确定性的是 PERT(1958,美国海军北极星项目),不是 CPM;CPM 也远早于 PMBOK 和敏捷运动。(出处:Kelley & Walker, 'Origins of CPM: A Personal History'(PMI);Kelley & Walker (1959). Critical-Path Planning and Scheduling)

关键路径是项目网络中『最长』的依赖活动链,但它的总时长却等于项目『最短』可能完成时间。为什么?

答案:因为项目要结束必须所有路径都走完,最长那条链走完所需的时间就是完工时间的下限

项目网络里从头到尾有很多条路径,项目要结束,所有路径必须都走完——所以最长那条依赖链决定了完工时间的下限:它走完之前项目不可能结束,它走完之时项目即可结束。这就是『最长路径=最短工期』这个反直觉等式的由来。推论:想更快交付,只压缩非关键任务没用,必须缩短关键路径本身;且一个项目可能有不止一条(并列最长的)关键路径。它与任务难度无关,也不存在什么经验系数。(出处:PMI, PMBOK Guide — Schedule Management;Critical Path Method, Wikipedia)

判断:关键路径上的『关键』,指的是这些任务技术上最难、最重要——关键路径就是把项目里最难的任务连起来的那条链。

答案:错误

错误。『关键』不是指任务最难或最重要,而是指浮动(float/slack)为零——没有任何缓冲、一拖整个项目交付日就顺延。关键路径可能是一串平淡无奇的任务;技术上最难的任务如果有正浮动,反而不在关键路径上。识别哪些活动浮动为零,就找到了项目经理最该死盯的那批任务。(出处:PMI, PMBOK Guide — Total Float(关键活动浮动=0);Critical Path Method, Wikipedia)

在 CPM 的两遍计算中,前向遍历(forward pass)和后向遍历(backward pass)各算出什么?

答案:前向遍历从项目起点往后推,算每个活动的最早开始 ES 与最早完成 EF(EF=ES+工期);后向遍历从项目终点往前推,算最晚开始 LS 与最晚完成 LF

前向遍历从项目起点往后推:算每个活动的最早开始 ES 与最早完成 EF(EF=ES+工期;后继活动的 ES 取所有前置活动 EF 的最大值),由此得出项目最短工期;后向遍历从项目终点往前推:算最晚开始 LS 与最晚完成 LF(在不推迟项目完工的前提下最晚能拖到何时)。然后每个活动的总浮动=LS−ES=LF−EF,浮动为 0 的活动连起来就是关键路径。两遍算的是时间参数,不是成本、风险或资源利用率。(出处:PMI, PMBOK Guide — Forward/Backward Pass;Critical Path Method, Wikipedia)

某活动的最早开始 ES=第 5 天、最晚开始 LS=第 9 天、最早完成 EF=第 8 天、最晚完成 LF=第 12 天。它的总浮动是多少?在不在关键路径上?

答案:总浮动 = LS − ES = 9 − 5 = 4 天(同样 LF − EF = 12 − 8 = 4),有正浮动,不在关键路径上

总浮动的公式是 LS − ES = LF − EF:本题 9 − 5 = 4 天,用 LF − EF 验算 12 − 8 = 4 天,两式必然相等。总浮动 4 天>0,说明这个活动最多能拖 4 天而不拖累项目完工——有正浮动的活动不在关键路径上;只有浮动为 0 的活动才是关键活动。EF−ES 算出的 3 天是它自己的工期,不是浮动;LF−ES 混合了两套时间参数,都不对。(出处:PMI, PMBOK Guide — Total Float = LS−ES = LF−EF)

找出一个项目的关键路径,正确的五步流程是?

答案:列出所有活动及工期 → 标出活动间依赖 → 画成网络图 → 前向遍历求 ES/EF(得项目最短工期)→ 后向遍历求 LS/LF、算浮动=LS−ES,浮动为 0 的活动链即关键路径

实操五步:① 列出所有活动及其工期;② 标出活动间的依赖(谁必须在谁之前完成);③ 画成网络图(活动为节点、依赖为箭头);④ 前向遍历求每个活动的 ES/EF、得出项目最短工期;⑤ 后向遍历求 LS/LF,算每个活动浮动=LS−ES,浮动为 0 的活动链即关键路径。计算必须建立在活动清单、依赖和网络图之上,所以遍历不可能排在最前;预算倒推工期更不是 CPM 的做法。拿到关键路径后:盯紧链上每个任务、给最稳的资源、做风险应对。(出处:PMI, PMBOK Guide — Develop Schedule / Critical Path Method 步骤)

判断:项目要提前交付,给任何任务压缩工期效果都一样——压缩非关键任务和压缩关键任务同样能让项目更早完成。

答案:错误

错误。要让项目更快完成,只能压缩关键路径——压非关键任务对交付日毫无帮助,因为项目完工时间由最长那条链(关键路径)决定,非关键任务本来就有浮动、不卡完工。还要小心:把当前关键路径压短后,另一条路径可能反超成为新的关键路径,所以要边压边重算。(出处:PMI, PMBOK Guide — Schedule Compression;Critical Path Method, Wikipedia)

关于两种进度压缩手段——赶工(crashing)与快速跟进(fast-tracking),哪个说法是对的?

答案:赶工=给关键任务加资源/加班来缩短工期,代价是成本上升且通常有边际递减;快速跟进=把原本串行的关键任务改成部分并行,不额外花钱但增加返工与风险

两种进度压缩手段各有代价:赶工(crashing)是给关键任务加资源/加班来缩短工期,代价是成本上升,且通常有边际递减;快速跟进(fast-tracking)是把原本串行的关键任务改成部分并行,不额外花钱但增加返工与风险。第一个选项把两者说反了;『没有代价』『推迟交付/砍范围』都不是这两个术语的含义。记住它们都只对关键路径有效,且压缩后要重算——另一条路径可能反超成为新的关键路径。(出处:PMI, PMBOK Guide — Crashing / Fast-tracking)

判断:有正浮动的任务反正不在关键路径上,随便拖多久都不会影响项目,不用管它。

答案:错误

错误。浮动是有限缓冲:有正浮动的任务只能在浮动范围内延后而不影响最终工期,一旦拖超浮动,它就变成关键路径、开始拖累项目。而且随着项目推进,原本非关键的路径可能因延误而变成新的关键路径,需要重算。正确的用法是把非关键任务的浮动当调度弹药——容忍小延误、必要时抽调它们的资源去支援关键任务,但要盯着别拖穿缓冲。(出处:Critical Path Method, Wikipedia;PMI, PMBOK Guide — Total Float 与关键路径监控)

判断:CPM 与 PERT 的网络逻辑相通,但 CPM(1957,杜邦)把工期当确定值,而 PERT(1958,美国海军北极星导弹项目)用乐观/最可能/悲观三点估计处理工期的不确定性,更适合研发型项目。

答案:正确

正确。『CPM 就是 PERT』是常见误解:两者网络逻辑相通,差别在如何对待工期的不确定——CPM(1957,杜邦)是确定性方法,把工期当作已知值;PERT(1958,美国海军北极星导弹项目)用三点估计(乐观/最可能/悲观)处理工期的不确定性,更适合研发型项目。(出处:Kelley & Walker, 'Origins of CPM: A Personal History'(PMI);PERT — Program Evaluation and Review Technique(US Navy, 1958),Wikipedia)

想边练边学,而不只是读?

到互动课里答题、记进度、攒连胜——游客即可试学,无需注册。

进入互动课程 →

Learn something new — don't miss updates

New courses, features and learning tips. Occasional emails, unsubscribe anytime.