跳到正文
Blog
项目2026年9月5日· 6 min

用一个例子讲清关键路径(CPM)

如何计算最早和最晚开始、完成时间,总浮动和自由浮动时间,以及哪些任务不能延误——用一个七项活动的项目逐步演算。

项目延期,并不是因为所有任务都延期了,而是因为关键路径上的某个任务延期了。常见的情况是:一份进度表里有二十个任务都“稍微落后”,项目却照样按时交付;另一份进度表里,只有一个两天的任务出了问题,交付日期就被推后了。区别在于你是否知道哪些任务有余量、哪些没有。

一句话讲清楚

关键路径是相互依赖的任务中最长的那条链。它的总时长就是项目的工期。只要其中任何一个任务推迟一天,整个项目就会推迟一天。

计算之前需要准备什么

为每项活动记下三件事:

  1. 工期,以工作日计(由实际干活的人估算,而不是由盼着它完成的人估算)。
  2. 前置任务:之前必须完成什么。
  3. 依赖类型及延迟(如有)。

四种依赖类型,简单来说:

类型 含义 示例
FS(完成-开始) A 完成后 B 开始 抹灰完成后再刷漆
SS(开始-开始) A 开始后 B 开始 隔墙施工开始 2 天后开始布线(SS +2)
FF(完成-完成) A 完成时 B 完成 电气测试在安装完成 1 天后结束(FF +1)
SF(开始-完成) A 开始前 B 不能完成 下一班到岗前,当班不能下班

延迟会增加等待天数;负延迟(提前量)则允许任务重叠。FS 最常用;拿不准时,先用 FS。

逐步计算

  1. 正向推算。任务的最早开始(ES)等于其前置任务中最大的最早完成(EF)。EF = ES + 工期。
  2. 逆向推算。从项目结束往回推,任务的最晚完成(LF)等于其后续任务中最小的最晚开始(LS)。LS = LF − 工期。
  3. 总浮动时间 = LS − ES(或 LF − EF)。即任务可以推迟多少而不影响交付日期。
  4. 自由浮动时间 = 后续任务中最小的 ES − 本任务的 EF。即任务可以推迟多少而不影响任何其他任务。
  5. 总浮动时间为零的任务构成关键路径。

演算示例

假设你要装修一家新门店。所有依赖都是 FS,按天计算:“第 4 天完成”指第四天结束时完成。

  • A. 设计与图纸审批:4 天,无前置任务。
  • B. 采购材料:6 天,在 A 之后。
  • C. 土建施工:8 天,在 A 之后。
  • D. 电气安装:5 天,在 C 之后。
  • E. 定制家具制作:7 天,在 B 之后。
  • F. 刷漆与收尾:4 天,在 D 之后。
  • G. 安装与交付:3 天,在 E 和 F 之后。

正向推算:A 在第 4 天完成;B 从 4 到 10,C 从 4 到 12;D 从 12 到 17;E 从 10 到 17;F 从 17 到 21。G 要等 E(17)和 F(21)中较晚的那个,所以从 21 到 24。项目工期为 24 天。

从 24 逆向推算:G 最晚 21–24;F 17–21;E 必须在 21 前完成,所以 14–21;D 12–17;C 4–12;B 必须在 E 的最晚开始(14)前完成,所以 8–14;A 必须在 B 和 C 中较小的 LS(4)前完成,所以 0–4。

活动 工期 ES EF LS LF 总浮动 自由浮动
A. 图纸 4 0 4 0 4 0 0
B. 材料 6 4 10 8 14 4 0
C. 土建 8 4 12 4 12 0 0
D. 电气 5 12 17 12 17 0 0
E. 家具 7 10 17 14 21 4 4
F. 刷漆 4 17 21 17 21 0 0
G. 安装 3 21 24 21 24 0 0

关键路径是 A → C → D → F → G(4 + 8 + 5 + 4 + 3 = 24)。另一条链 A → B → E → G 合计 20 天:有 4 天余量。

注意 B:总浮动为 4,自由浮动却为 0。B 一旦延误,E 就会立刻推迟开始;这 4 天余量由 B 和 E 共享,而不是每个任务各有 4 天。

如果某项任务延误 2 天

  • C(关键任务)延误 2 天:D、F、G 都顺延 2 天,交付推迟到第 26 天。没有任何缓冲。
  • E(非关键任务)延误 2 天:在第 19 天而不是第 17 天完成;G 仍要等 F(21)。交付仍是第 24 天,但 B–E 这条链只剩 2 天余量。
  • B 延误 2 天:E 改为 12–19;交付不变,但共享浮动时间已用掉一半。如果这条链累计延误超过 4 天,它就会开始决定交付日期。

所以,汇报时应说明还剩多少浮动时间,而不仅仅是完成百分比。

如何缩短工期

赶工(Crashing,用资源压缩)。为关键任务增加人手、班次或设备。假设增加一支施工队,把土建从 8 天缩短到 6 天,额外花费 Bs 3,000(每缩短一天 Bs 1,500)。项目工期降为 22 天。规则:

  1. 只压缩关键任务;缩短 E 毫无作用。
  2. 先压缩每缩短一天成本最低的任务。
  3. 每次调整后重新计算:如果把 C 缩到 4 天,两条链都是 20 天,两条都成为关键路径。

风险:成本上升且收益递减(两支施工队挤在同一空间,效率不会翻倍)。

快速跟进(Fast-tracking,任务重叠)。把 FS 改为带延迟的 SS。如果刷漆可以在电气安装开始 3 天后开始(SS +3),F 为 15 到 19,G 为 19 到 22,不额外花钱就能节省 2 天。风险:如果前一个任务修改了后一个任务已完成的部分,就要返工。

让进度表保持“活”的

  1. 每周更新进度和实际日期,而不是等到最后。
  2. 每次更新后重新计算关键路径:它可能转移到另一条链上。
  3. 保存基准,用于对比计划与实际;如果还跟踪成本,挣值管理能告诉你是否同时既延期又超支。
  4. 每周例会只需检查浮动时间为 0 到 2 天的任务,而不是全部任务。

常见错误

  • 任务没有后续任务:“悬空”的任务在计算中会得到虚假的浮动时间。
  • 手工填写日期而不是设置依赖:进度表就不再自动重算。
  • 把浮动时间当作每个任务各自的空闲时间,实际上它由整条链共享。
  • 为了“凑上”承诺的日期而使用过于乐观的工期。
  • 忽视资源:同一个人负责的两个并行任务,并不是真正的并行。

检查清单

  • 每项活动都有工期、前置任务和后续任务(开始和结束除外)。
  • 非 FS 的依赖都有充分理由。
  • 完成了正向和逆向推算,两种方式算出的总浮动时间一致。
  • 已识别关键路径和余量很少的链。
  • 已保存基准。
  • 每周有固定的更新日。

用系统来管理

这种计算用 Excel 也能做,但每当任务延误就手工重算一遍,十分繁琐。像 MKA 这样的 ERP 支持带延迟的 FS、SS、FF 和 SF 依赖,计算浮动时间并在甘特图中标出关键路径;在项目演示中,你可以拉长一项任务,看看哪些任务会变成红色。

用您所在行业的数据体验 MKA。

30 分钟带您走一遍真实流程:从销售到发票,从库存到会计分录。