
关键路径法是项目管理里用来算工期、找重点的方法:把活动、活动之间的依赖关系和各自工期画成网络图,算出每条路径需要多长时间,耗时最长的那条就是关键路径,它的长度等于项目最短可能工期。算清这条路径,你就能判断哪些任务一天都不能拖、哪些任务有几天的余地,以及工期需要压缩时从哪里下手。
关键路径法(CPM)是什么
关键路径法(CPM)是一种基于网络图的进度计划与分析方法。输入是活动清单、活动之间的依赖关系和每项活动的工期,输出是项目最短完成时间与每项活动的时间余地。这里的"路径"指从项目开始到结束的一条活动序列,"关键路径"是其中累计工期最长的那条,由总浮动时间为零的关键活动组成。一个网络里关键路径往往不止一条,两条路径累计工期相同,就都是关键路径。
为什么"最长"的那条路径决定的是最短工期
关键路径上的活动必须依次完成,工期一路累加。其他路径不会超过它,所以它的长度就是项目最早能结束的时间。非关键路径有富余时间,推后几天不影响项目结束日期;关键路径上任何一项活动晚一天,项目结束日期就跟着晚一天。
六个时间参数
| 参数 | 含义 | 怎么算 |
| 最早开始时间 ES | 活动最早能开始的时间 | 取所有紧前活动 EF 的最大值 |
| 最早完成时间 EF | 活动最早能完成的时间 | ES + 工期 |
| 最晚完成时间 LF | 不影响项目完工的前提下最晚完成的时间 | 取所有紧后活动 LS 的最小值 |
| 最晚开始时间 LS | 不影响项目完工的前提下最晚开始的时间 | LF - 工期 |
| 总浮动时间 TF | 不影响项目总工期时可以推迟的天数 | LS - ES,也等于 LF - EF |
| 自由浮动时间 FF | 不影响紧后活动最早开始可以推迟的天数 | 紧后活动 ES 的最小值 - 本活动 EF |
怎么算关键路径:正推、逆推与总浮动时间
计算分四步,顺序不能颠倒:
- 拆活动、标出依赖关系。
- 正推,从起点向终点算最早开始和最早完成时间。
- 逆推,从终点向起点算最晚完成和最晚开始时间。
- 两者相减得到总浮动时间,浮动为零的活动构成关键路径。
第一步:拆活动和依赖关系
活动从工作分解结构拆到能估出工期的一层,再标出先后关系。依赖关系常见四种:
- 完成—开始:前一项做完,后一项才能开始,排期里用得最多。
- 开始—开始:前一项开始,后一项才能开始。
- 完成—完成:前一项做完,后一项才能做完。
- 开始—完成:前一项开始,后一项才能完成,实际项目里很少用。
两项活动之间需要固定等待时,用滞后量表示,比如混凝土养护、审批等待。
第二步:正推,算最早时间
从项目起点向终点推。按第 0 天起算时,第一项活动的最早开始时间取 0;按自然日期排期时,取项目开始日。每项活动的最早完成时间等于它的最早开始时间加工期。一项活动有多个紧前活动时,最早开始时间取这些紧前活动最早完成时间中的最大值,前置工作全部完成它才能开始。
第三步:逆推,算最晚时间
从项目终点往回推。最后一项活动的最晚完成时间取项目目标完工时间,算最短工期时就是正推得到的总工期。每项活动的最晚开始时间等于最晚完成时间减工期。一项活动有多个紧后活动时,最晚完成时间取这些紧后活动最晚开始时间中的最小值,晚于这个时间就会拖累紧后活动。
第四步:算总浮动时间,找出关键路径
总浮动时间等于最晚开始时间减最早开始时间。它为零的活动在关键路径上,数值越大表示时间余地越大。自由浮动时间只关心紧后活动能不能按时开始,总浮动时间关心整个项目会不会延期,排期时更常用的是后者。
一个算例:6 个活动、18 天工期
下面用一个示例项目的六个活动演示计算过程,时间单位为天,活动从第 0 天开始计算。
| 活动 | 工期 | 紧前活动 | ES | EF | LS | LF | 总浮动时间 |
| A 需求梳理 | 3 | — | 0 | 3 | 0 | 3 | 0 |
| B 界面设计 | 4 | A | 3 | 7 | 3 | 7 | 0 |
| C 接口开发 | 6 | A | 3 | 9 | 6 | 12 | 3 |
| D 前端开发 | 5 | B | 7 | 12 | 7 | 12 | 0 |
| E 联调测试 | 4 | C、D | 12 | 16 | 12 | 16 | 0 |
| F 上线准备 | 2 | E | 16 | 18 | 16 | 18 | 0 |
两条路径的累计工期分别是 A—B—D—E—F 共 18 天、A—C—E—F 共 15 天,所以关键路径是前者,项目最短工期 18 天。接口开发有 3 天总浮动时间,推迟不超过 3 天不影响总工期;一旦超过,关键路径就会转移到它所在的路径上。

把关键路径用起来:盯什么、压什么、多久重算一次
关键活动优先拿到资源
关键活动没有浮动时间,人员和设备要优先保障。非关键路径上有闲置资源时,可以在浮动时间范围内调配去支援关键活动,前提是这些人手确实能缩短关键活动的工期。
压缩工期:赶工与快速跟进
赶工是给关键活动加人、加班或者加设备,用成本换时间。它对加资源就能缩短的活动有效,重复性的编码、录入工作效果明显;设计、调试这类需要反复判断的工作,加人未必能等比缩短。
快速跟进是把原本串行的活动改为部分并行,比如设计还没全部完成就开始采购。它省时间,代价是返工风险,只适合依赖关系不是硬约束的活动。
两种做法都会改变路径长度或者网络结构,压缩之后必须重算关键路径,原来非关键的那条可能变成新的瓶颈。

按浮动时间安排非关键活动
浮动时间是同一路径上活动共享的缓冲,不是每项活动各自都有一份。一批非关键活动共用同一批人时,如果都按最晚开始时间排,资源冲突会集中到后期。更稳妥的做法是按总浮动时间排优先级:浮动越小越早盯,浮动为零的按关键活动管理。
进度更新后重算,而不是只改日期
每个报告周期或者里程碑结束时,用实际进度替换计划值,重新做一遍正推和逆推。活动提前、延后、取消或者新增,都会让关键路径转移,只改甘特条上的日期看不出这种转移。
重算本身不复杂,麻烦的是把输入凑齐:活动清单在一张表上,依赖关系记在会议纪要里,实际进度散在聊天记录中,每次都要先花时间对齐口径。把活动、依赖关系和实际进展放在同一个工具里维护,重算就变成替换实际值再算一遍,禅道这类覆盖产品、项目、质量流程的项目管理软件解决的正是这个前置问题。
关键路径法的边界与常见误用
资源约束下,算出来的工期可能做不到
关键路径法计算时不考虑资源够不够用,它默认活动只要逻辑上能开始就能开始。两个人不能同时干两件事时,资源冲突必须写进逻辑关系,否则算出来的最短工期无法落地。解决资源冲突通常要做资源平衡或者资源平滑,前者可能延长工期,后者尽量不延长。把资源约束和缓冲一起纳入计算的,是关键链法。
估算不准时,要配合概率方法
CPM 用单一工期估算,适合有历史数据、重复性较高的工作。缺乏经验、不确定性大的项目,可以先做三点估算,把乐观、最可能和悲观三个时间算出期望值再代入网络图;也可以走计划评审技术这条路,也就是 PERT,从概率角度估计项目在某个日期内完成的可能。两者网络逻辑相同,差别在时间处理方式:一个用确定值,一个用概率分布。
只看一条关键路径会漏掉什么
- 关键路径可能不止一条。长度相同的路径都是关键路径,都要盯。
- 近关键活动容易被忽略。总浮动时间很小的活动,延后几天就会变成新的关键路径,优先级不该低于关键活动。
- 关键路径不等于风险清单。它回答的是延误会不会影响总工期,风险高低还要看技术难度、外部依赖和团队经验。浮动时间也不是可以随便消耗的余额,它留着应对风险。
常见问题
关键路径法就是甘特图吗?
不是,两者解决的问题不同。甘特图用横条展示每项活动的时间安排和实际进展,回答的是现在做到哪了;关键路径法用网络图计算依赖关系和浮动时间,回答的是哪些活动一天都不能拖。实际排期里常先用甘特图把时间排开,再抽出网络关系算关键路径,最后把结论标回甘特图。
关键路径法必须用软件算吗?
活动数量少、依赖关系简单时,用表格手算就够。活动超过几十项、依赖交叉时,手工正推和逆推容易出错,尤其是每次进度更新都要重算一遍。工具的价值不在替代判断,而在保持输入一致,把重复的重算劳动接过去。
工期按工作日还是自然日算?
常见做法是按工作日估算工期,再按项目日历折算成自然日期,这样周末和节假日不会算进工期。活动涉及跨部门的固定节点时,比如审批窗口,把等待时间作为滞后量单独列出,不要混进工期。里程碑的工期为零,只用来标记时间点。
多项目并行时,单个项目的关键路径还够用吗?
不够。关键路径法是单项目视角,它假设资源能按逻辑关系随时到位。多个项目共用同一批人或者同一套测试环境时,冲突要在项目集层面排优先级,单项目的关键路径看不出跨项目的资源争抢。这类情况通常先在组合层面分配资源,再回到每个项目重算关键路径。
文章标题 :关键路径法详解:用CPM精准掌控项目工期 ,发布者 :项目管理研究院


































