首页 › 指南 › 项目网络图详解

项目网络图详解

每一张甘特图背后,都有一幅更安静的图景,决定着这些条形落在何处:那就是项目网络。它标出每个活动以及它们之间的连接,然后运行两趟简单的扫描,找出每个任务最早和最晚能发生的时间。浮动时间、关键路径,以及你真正看到的那些条形,都从这些数字中产生。本指南将带你走过紧前关系绘图法、四种依赖类型,以及在一个小而真实的网络上完整演算的正推与逆推计算。

作者 Uttam Regmi更新于 2026年10月16日3 分钟阅读

本页内容
  1. 网络图究竟是什么
  2. 两种记法,只剩一种
  3. 节点表示活动,箭线表示依赖
  4. 四种依赖类型
  5. 一步步搭建网络
  6. 正推计算:最早日期
  7. 逆推计算:最晚日期
  8. 浮动时间与关键路径
  9. 网络如何支撑甘特图
  10. 网络如何支撑关键路径
  11. 破坏网络的常见错误
  12. 从图纸到有生命的计划
紧前关系网络把活动画成节点、把依赖画成箭线,关键路径则径直贯穿其中:
完成 → 开始ABB 等待 A开始 → 开始ABB 等待 A完成 → 完成ABB 等待 A开始 → 完成ABB 等待 A

网络图究竟是什么

项目网络图是你计划中逻辑的一张地图。它剥去日历和条形,只显示两样东西:构成工作的各个活动,以及规定哪个活动必须等待哪个的依赖关系。排程中的其余一切,包括甘特图上的日期,都是从这张地图算出来的。

画出它的价值在于,逻辑错误会变得一目了然。一条缺失的连接、一个不依赖任何事物的任务、一个两个任务互相等待的回路:这些在日期清单里很容易藏身,但在网络里会立刻显眼。把网络画对,进度几乎自行搭建;画错,再怎么小心地录入日期也救不了计划。

两种记法,只剩一种

历史上有两种画网络的方式。较老的双代号(活动在箭线上)法把活动放在箭线上,用节点作为连接点。它很繁琐,常常只为表达某些连接就得加上看不见的虚箭线,如今已在现代实践中基本消失。

胜出的是单代号(活动在节点上)法,更为人熟知的名字是紧前关系绘图法,即 PDM。在 PDM 中,每个活动是一个方框,也就是节点,每条箭线是两个活动之间的一种依赖。你今天可能接触到的几乎每一款排程工具,底层都用 PDM,所以这才是值得学的记法。本指南余下的内容全都围绕它展开。

节点表示活动,箭线表示依赖

在 PDM 中,节点承载工作。一个节点保存活动的名称及其工期,一旦跑完两趟计算,它还保存四个算出的日期以及浮动时间。箭线承载规则。一条从活动 A 画到活动 B 的箭线表示 B 依赖 A,于是在 A 完成它那一部分之前,B 无法自由地发生。

请仔细读这个方向,因为它就是整张图的全部语法。箭尾是紧前活动。箭头是紧后活动。没有进入箭线的节点可以立即开始。没有射出箭线的节点是项目的一个终点。网络的形状,不过就是把所有这些紧前与紧后关系一次画出来的集合。

完成 → 开始ABB 等待 A开始 → 开始ABB 等待 A完成 → 完成ABB 等待 A开始 → 完成ABB 等待 A
每条箭线如何在两个活动节点之间编码一条由紧前到紧后的规则

四种依赖类型

并非每种依赖都是简单的"先完成这个,再开始那个"式连接。PDM 支持四种类型,依据紧前活动的哪一端连到紧后活动的哪一端来定义。完成到开始远为最常见,但其余三种之所以存在,是因为真实的工作会相互重叠。

类型规则日常例子
完成到开始(FS)紧后活动在紧前活动完成之后开始先浇筑地基,再砌墙
开始到开始(SS)紧后活动在紧前活动开始之后开始平整场地一开始,就可以开始铺路
完成到完成(FF)紧后活动在紧前活动完成之后完成测试只有在编码收尾时才收尾
开始到完成(SF)紧后活动在紧前活动开始之后完成新班次一开始,旧班次就结束

关于每一种何时才物尽其用的更深入介绍,参见关于任务依赖的指南。下面的演算只使用完成到开始的连接,这样既让算术保持干净,又能展示整套方法。

一步步搭建网络

画草图不需要专门的软件。一块白板加上便利贴就够了,而动手去画的那份自律,常常让缺失的逻辑浮出水面。步骤始终相同。

  1. 列出必须发生的每个活动,一个活动一个节点,并为每个诚实地标上工期。
  2. 对每个活动,问一问在它能开始之前必须完成什么,然后从每一个这样的紧前活动向它画一条箭线。
  3. 检查至少有一个节点没有紧前活动,这样网络才有起点,并且至少有一个没有紧后活动,这样它才有终点。
  4. 排查回路,也就是沿着箭线走会回到出发点的情形,找到就把它破开,因为网络不能包含环。
  5. 运行正推计算得到最早日期,再运行逆推计算得到最晚日期。
  6. 相减得到浮动时间,并把浮动为零的那条链标为你的关键路径。

第五步和第六步是这套方法的机械核心,所以接下来两节会在一个具体例子上把它们走一遍。

正推计算:最早日期

正推计算从左向右扫描,回答这个问题:每个活动最早能多快发生?它为每个节点给出两个数字:最早开始(ES)和最早完成(EF),其中 EF 不过是 ES 加上工期。ES 的规则是,一个活动在它的每个紧前活动都完成之前都不能开始,所以它的 ES 是喂入它的那些活动中最大的那个 EF。

这个网络。六个活动:A 需求(3 天)、B 设计(4 天,在 A 之后)、C 后端(6 天,在 B 之后)、D 前端(5 天,在 B 之后)、E 集成(3 天,在 C 和 D 之后)、F 发布(2 天,在 E 之后)。从第 0 天起算,每个最早完成都是它的最早开始加上它的工期。

向前扫描。A 在 0 开始,在 3 完成。B 在 3 开始,在 7 完成。B 随后同时喂入 C 和 D,所以两者都在 7 开始:C 在 13 完成,D 在 12 完成。E 要等 C 和 D 中较晚的那个,所以它的开始是 13,而不是 12,并在 16 完成。F 在 16 开始,在 18 完成。

结果。整个项目需要 18 天。这个唯一的数字,也就是网络中最大的最早完成,就是这项工作可能完成的最短时间。

逆推计算:最晚日期

逆推计算从右向左扫描,回答镜像的问题:在不把终点往后推的前提下,每个活动最晚能到什么时候?它给出最晚完成(LF)和最晚开始(LS),其中 LS 是 LF 减去工期。你通过把最终活动的 LF 设为它在正推计算中的 EF 来起步,然后往回推。LF 的规则是,一个活动必须在它最早的紧后活动需要开始之前完成,所以它的 LF 是依赖它的那些活动中最小的那个 LS。

设定终点。F 是终点,所以它的 LF 等于它为 18 的 EF,它的 LS 是 16。E 必须在 F 开始之前完成,所以 E 的 LF 是 16,LS 是 13。

沿分支往回推。C 和 D 都喂入 E,所以两者的 LF 都取 13。C 为 6 天,LS 是 7。D 为 5 天,LS 是 8。B 同时喂入 C 和 D,所以它的 LF 是两者最晚开始中较小的那个,即 7,这让 B 的 LS 为 3。A 喂入 B,所以 A 的 LF 是 3,LS 是 0。

这段差距揭示了什么。D 最晚可以到第 8 天开始,但最早可以到第 7 天开始,所以它有滑动的余地。其余每个活动的最晚开始都等于它的最早开始,意味着它们一点余地都没有。

A · 3B · 5C · 2D · 4关键路径: A → B → D浮动时间 (C): 3工期: 12
正推与逆推计算所揭示出的那条浮动为零、即关键路径的链

浮动时间与关键路径

浮动时间,有时称为时差,是你做完两趟计算的回报。对任何活动而言,它是最晚开始减去最早开始,也等于最晚完成减去最早完成。它是该活动在拖累下游某件事之前可以滑动的时间量。任何浮动为零的活动都位于关键路径上,也就是贯穿网络的最长链,以及决定项目长度的那条序列。

活动工期ESEFLSLF浮动关键
A 需求303030是
B 设计437370是
C 后端67137130是
D 前端57128131否
E 集成3131613160是
F 发布2161816180是

关键路径是 A、B、C、E、F,它们的工期相加为 18。D 是唯一有时差的活动,只有一天,因为与它并行的那个后端要多花一天。这些数字背后更广的理论,见关于关键路径法的指南,而时差本身的含义则见关于浮动时间的指南。

网络如何支撑甘特图

甘特图是正推计算的一幅画面。每个条形都是从一个活动的最早开始画到它的最早完成,而条形的纵向堆叠,不过就是沿页面往下排列的那些节点。你在甘特工具里从一个条形拖到另一个条形的依赖箭线,和网络里的箭线是同一批,只是弯折了一下以贴合时间轴。当你移动一个条形、它后面的那些跟着移动时,你正在实时地看着一趟正推计算重新算一遍。

这正是为什么一张无视依赖的甘特图如此脆弱。底下没有网络,那些条形就只是装点过的日期,永远不会对变化作出反应。有了网络,它们就表现得像一个模型。你可以在免费甘特图制作工具里连同连接一起搭出那个有生命的版本,并在录入延误的那一刻看着它层层传导。

网络如何支撑关键路径

关键路径不是你画出来的东西。它是网络算出来、再由你读出来的东西。两趟计算一做完,关键路径就不过是每一个浮动为零的节点,首尾相接连在一起。在我们的例子里,这些节点组成一条不间断的链,但更大的网络可以同时有好几条关键路径,或者有一条只带一天浮动的准关键路径,一旦某个估算增长,它立刻变成关键。

因为路径是从浮动时间里生出来的,所以逻辑或工期一动,它就跟着动。把后端缩短,前端就可能转而成为关键。这就是用网络而非条形来思考的回报:这张图不只显示今天的关键路径,还告诉你一旦现实发生变化,接下来会由哪条链接管。

破坏网络的常见错误

大多数坏掉的网络,都栽在少数几个反复出现的原因上,而且一旦你认得这套套路,它们全都容易发现。在你信任那些日期之前,对照这份清单快速检查一遍,能让你免于一个算得信心十足却答错了的计划。

错误症状修正
悬空活动计划中段某个节点没有紧前或没有紧后补上缺失的连接,让它汇入流程
隐藏回路工具拒绝排程或者卡死找到那个环,删掉一条错的箭线
用日期代替逻辑紧前活动滑动时条形却不动把固定日期换成一条真正的依赖
连接过多一团没人读得懂的箭线只保留那些确实必需的连接

其中最糟的是第三个,用一个硬日期顶替一条依赖,因为它造出的计划看上去已经完工,却悄无声息地不再对变化作出反应。一张只搭一次、此后再没碰过的甘特图不是计划,而是一个愿望。

从图纸到有生命的计划

网络不是你画一次就归档的文档。它是让进度保持诚实的引擎,而只有当你每次改动估算或连接时都让这两趟计算重新跑一遍,它才算物有所值。在一款好工具里,这会在你编辑工期或拖动依赖的那一刻自动发生,而这恰恰是为什么把计划建立在真实逻辑之上,胜过用手敲日期。

从逻辑出发,而不是从日历出发。列出活动,画出箭线,跑完两趟计算,再把关键路径读出来。做到这一点,日期便会自行料理,浮动时间告诉你哪里还有余地,关键路径告诉你哪里没有。这就是那张坐落在你将来会搭建的每一张甘特图之下的紧前关系网络,全部安静的力量。

网络图就是条形之下的逻辑。画出活动及其依赖,运行正推与逆推计算,浮动时间、关键路径和甘特图便全都从同一幅图里产生。

常见问题

网络图和甘特图有什么区别?

网络图展示的是纯粹的逻辑:活动作为节点,依赖作为箭线,没有时间轴。甘特图把这些同样的活动作为条形摆到日历上。网络通过它的两趟计算算出日期,甘特图则显示结果,所以它们是同一个计划的两种视图。

紧前关系绘图法是什么意思?

紧前关系绘图法,即 PDM,是把活动画在节点上来绘制项目网络的方式。每个活动是一个方框,每条依赖是方框之间的一条箭线。它取代了较老的把活动画在箭线上的风格,是如今每一款现代排程工具在其甘特视图之下所用的记法。

正推计算和逆推计算如何协同工作?

正推计算从左向右扫描,找出每个活动最早能开始和完成的时间。逆推计算从右向左扫描,找出在不拖延项目的前提下每个活动最晚能发生的时间。两者在每个活动处之间的差距,就是它的浮动时间,而浮动为零标出关键路径。

四种依赖类型是哪些?

完成到开始,即一个任务等待另一个完成,是常见的那种。开始到开始连接两个起点。完成到完成连接两个终点。开始到完成是少见的那种,把紧后活动的完成系到紧前活动的开始上。每一种都把紧前活动的不同一端连到紧后活动。

一个网络能有不止一条关键路径吗?

能。任何浮动为零的活动链都是关键的,而一个网络可以同时容纳好几条这样的链。也可能存在一条只带一两天浮动的准关键路径,一旦它上面的某个估算增长,它立刻变成关键,这正是为什么也值得盯住那些低浮动的链。

作者 Uttam Regmi. Synth88 Labs 创始人,在迪拜打造注重隐私的网页与移动应用。 完整简介 · LinkedIn · Medium · GitHub

本文也提供英文版本。

Advertisement

免费创建你的甘特图

在浏览器中直接使用,无需注册。数据保存在你自己的设备上。

打开编辑器