上一篇拆的是下午那张主观卷——它踩点给分,一道 25 分的大题由若干小问拼成,写到几个得分点就拿几分。在项目管理类科目(中级系统集成项目管理工程师,简称中项;高级信息系统项目管理师,简称高项)的案例卷里,有几类小问年年出现、答案唯一、可以练到基本不丢分。其中最典型的一类就是 计算题。高项案例分析一共三道大题,其中一道是计算题,关键路径法和挣值管理是这类题的主力考点,相关分值常在 15 分上下 4。

计算题里出场率最高的一种叫 关键路径法(Critical Path Method,缩写 CPM)。它在上午的选择题里也几乎年年出现 2。这篇把它从读图讲到结论,顺带说清它为什么是你最该先练熟的题型。

网络图:把“谁必须等谁”画出来

一个项目可以拆成若干 活动,也就是一件件要花时间做完的事。活动之间有先后关系:需求没做完,设计就开不了工——需求是设计的 紧前活动,设计是需求的 紧后活动。

把这些活动和它们之间的先后关系连成一张图,就是 网络图。软考卷面上很少直接给你画好的图,更常见的是给一张表:

活动紧前活动工期(天)
A无3
BA4
CA2
DB3
EC4
FD、E2

读表只要盯一件事:每个活动的紧前都有谁。这张表就是整张网络图,后面所有计算都从它出发。

四个时间参数,全是“时刻”不是“第几天”

每个活动会算出一组四个数字:

  • 最早开始时间 ESES:等齐所有紧前活动之后,最早能在哪个时刻开工。
  • 最早完成时间 EF=ES+工期EF = ES + \text{工期}。
  • 最晚完成时间 LFLF:为了不拖累项目总工期,最迟必须在哪个时刻做完。
  • 最晚开始时间 LS=LF−工期LS = LF - \text{工期}。

这四个数都是 时刻,不是“第几天”。A 从 0 时刻开始、到 3 时刻完成,下一个活动就接着从 3 时刻开始。日常口语会说“第 4 天一早”,公式里写 3。这点后面还会专门说,先记住它是时刻。

顺推取大:从前往后走一遍

第一遍叫 顺推,从起点往终点走,算 ESES 和 EFEF。规则两条:起点活动的 ESES 记 0;一个活动有多个紧前时,ESES 取所有紧前 EFEF 里 最大 的那个。

套到例子上:

  • A 没有紧前:ES=0ES = 0,EF=0+3=3EF = 0 + 3 = 3。
  • B 的紧前是 A:ES=3ES = 3,EF=3+4=7EF = 3 + 4 = 7。
  • C 的紧前是 A:ES=3ES = 3,EF=3+2=5EF = 3 + 2 = 5。
  • D 的紧前是 B:ES=7ES = 7,EF=7+3=10EF = 7 + 3 = 10。
  • E 的紧前是 C:ES=5ES = 5,EF=5+4=9EF = 5 + 4 = 9。
  • F 的紧前是 D 和 E:取 EFEF 里更大的 10,ES=10ES = 10,EF=10+2=12EF = 10 + 2 = 12。

终点 F 的最早完成时间 12,就是项目的 最短总工期:12 天。

为什么取最大?因为紧前活动要 全部 做完当前活动才能开始,起算点只能是最晚收工的那个紧前。

逆推取小:从后往前再走一遍

第二遍叫 逆推,从终点往起点走,算 LFLF 和 LSLS。起点的规则换了:终点活动的 LFLF 直接等于它的 EFEF,也就是总工期;一个活动有多个紧后时,LFLF 取所有紧后 LSLS 里 最小 的那个。

  • F 是终点:LF=12LF = 12,LS=12−2=10LS = 12 - 2 = 10。
  • D 的紧后只有 F:LF=10LF = 10,LS=10−3=7LS = 10 - 3 = 7。
  • E 的紧后只有 F:LF=10LF = 10,LS=10−4=6LS = 10 - 4 = 6。
  • B 的紧后只有 D:LF=7LF = 7,LS=7−4=3LS = 7 - 4 = 3。
  • C 的紧后只有 E:LF=6LF = 6,LS=6−2=4LS = 6 - 2 = 4。
  • A 的紧后有 B 和 C:取 LSLS 里更小的 3,LF=3LF = 3,LS=3−3=0LS = 3 - 3 = 0。

取最小的道理和顺推镜像对称:一个活动后面挂着好几个紧后,为了谁都不耽误,它必须在 最早要开工的那个紧后 之前做完——所以看的是最小的那个 LSLS。

总时差与自由时差:两种“还能拖多久”

两遍算完,六个时间参数就齐了。这时算两个时差:

总时差 TF=LS−ES=LF−EF\text{总时差 } TF = LS - ES = LF - EF

自由时差 FF=min⁡(所有紧后活动的 ES)−本活动的 EF\text{自由时差 } FF = \min(\text{所有紧后活动的 } ES) - \text{本活动的 } EF

两个名字很像,差别在“不影响谁”:

  • 总时差问的是:拖多久才不影响 项目总工期。
  • 自由时差问的是:拖多久才不影响 紧后活动的最早开始。

把所有数字填成一张表:

活动工期ESEFLSLF总时差自由时差
A3030300
B4373700
C2354610
D371071000
E45961011
F21012101200

C 和 E 的对比最能说明问题。两个活动的总时差都是 1 天:各拖 1 天,都不会让总工期超过 12 天。但 C 的自由时差是 0——C 只要拖上 1 天,紧后活动 E 的最早开始就被从第 5 天顶到第 6 天,E 的完成时间跟着从 9 变成 10。只不过 D 也是在 10 收工,F 要等的是 D 和 E 里更晚的那个,所以总工期仍然不动。E 的自由时差是 1,道理就在这:E 拖 1 天,EFEF 从 9 变 10,还是没超过 D 的 10,F 依旧在 10 开工。

这里还藏着一条永远成立的规律:自由时差 ≤ 总时差。因为自由时差同时受“紧后活动”和“总工期”两重约束,约束越多,能拖的时间只会越短。E 是 1 对 1,C 是 0 对 1,都符合。

关键路径:总时差为 0 的那条链

总时差为 0 的活动串起来,就是 关键路径:A → B → D → F,长度 3+4+3+2=123 + 4 + 3 + 2 = 12,正好等于总工期。

关键路径可以一句话说清:它是从起点到终点 最长 的那条链,而项目不可能比最长的链更早完工,所以这条链的长度就是总工期,链上任何活动拖一天,总工期就跟着多一天。你也能靠枚举所有路径来核对(本例另一条 A → C → E → F 是 3+2+4+2=113 + 2 + 4 + 2 = 11,短于 12),但活动一多,路径数量会爆炸,用总时差为 0 判断更稳。

为什么这是最该先练稳的分

它是下午卷里少有的“有标准答案”的部分。 上一篇说过主观题踩点给分、允许答案不完整,但计算题不同:数值和结论是客观的,对就是对。作答时通常还要求把计算过程写出来 1——公式一条、代入一条、结果一条、结论一条,各自都是得分点。你会算,就能一分不落地收下。

题型高度固定。 中项和高项案例里的进度类计算,问来问去就那几件事。2023 年下半年中项的一道案例计算题同时问了四件:关键路径与工期是什么、这张进度图叫什么、任务 A、D、F 的总时差和自由时差各是多少、任务 C 拖延 1 周对项目进度有没有影响 5。用的全是这一篇里的方法。

算出来的数能自己校验。 自由时差不会大于总时差;关键路径的长度一定等于你算出的总工期。这两条对不上,就说明中间某步错了,不用等对答案才知道。

最容易错的一处:时刻,不是天数

最后说一个高频失分点。ESES 直接等于紧前活动的 EFEF,千万不要加 1。

A 从 0 做到 3,B 紧接其后从 3 开始——这是“0 到 3 三个单位时间”和“3 到 7 四个单位时间”首尾相接的写法。日常你会说“A 干了三天,第四天 B 开工”,但卷面上的时间参数按时刻算,写成 3 3。一旦脑子里按自然天数去数,后面每个活动的 ESES、EFEF 都会整体偏移,连带关键路径和时差全错。

这里还有一条边界:这一整套计算成立的前提,是每个活动的工期已经估好、依赖关系已经定死。工期本身是估出来的数,所以 CPM 给出的“最短总工期”按的是当前估算;方案一变、工期一调,关键路径可能整条换掉。