PMBOK 6th 紧前关系绘图法实战:4种逻辑关系(FS/FF/SS/SF)代码建模与案例解析
项目管理专业人士常面临理论到实践的鸿沟——如何将PMBOK中抽象的紧前关系绘图法(PDM)转化为可执行的工具操作?本文将以Python和MS Project为例,拆解四种依赖关系的技术实现路径,带您穿透概念迷雾,直达工程落地。
1. 紧前关系绘图法的技术本质
紧前关系绘图法(Precedence Diagramming Method)本质上是一种用有向图表示任务依赖关系的数学建模工具。节点代表活动,边代表逻辑约束,这种结构天然适合用图论工具处理。现代项目管理软件如MS Project或Python的networkx库,底层均采用类似原理。
四种逻辑关系的技术特征对比:
| 关系类型 | 数学表达式 | 典型应用场景 | 技术实现要点 |
|---|---|---|---|
| FS | A.end ≤ B.start | 硬件安装后启动软件配置 | 默认关系,无需特殊标注 |
| FF | A.end ≤ B.end | 文档编写与编辑同步完成 | 需设置负滞后量(-duration) |
| SS | A.start ≤ B.start | 多任务并行启动 | 常用于敏捷迭代规划 |
| SF | A.start ≤ B.end | 新旧系统切换 | 需设置正滞后量(+duration) |
提示:在代码实现中,FF和SF关系需要通过滞后量参数调整,这是建模时最容易出错的技术点。
2. Python networkx实现四类关系建模
下面通过networkx构建包含全部四种关系的项目网络图:
import networkx as nx
import matplotlib.pyplot as plt
# 创建有向图对象
G = nx.DiGraph()
# 添加节点(活动)及持续时间
activities = {
'A': {'duration': 3, 'description': 'PC硬件装配'},
'B': {'duration': 2, 'description': '操作系统安装'},
'C': {'duration': 5, 'description': '文档编写'},
'D': {'duration': 3, 'description': '文档编辑'},
'E': {'duration': 4, 'description': '地基浇灌'},
'F': {'duration': 2, 'description': '混凝土找平'},
'G': {'duration': 1, 'description': '启动新应付系统'},
'H': {'duration': 1, 'description': '关闭旧应付系统'}
}
# 添加节点属性
for node, attr in activities.items():
G.add_node(node, **attr)
# 定义四种逻辑关系
dependencies = [
('A', 'B', {'type': 'FS'}), # 完成-开始
('C', 'D', {'type': 'FF', 'lag': -activities['C']['duration']}), # 完成-完成
('E', 'F', {'type': 'SS', 'lag': 0}), # 开始-开始
('G', 'H', {'type': 'SF', 'lag': activities['H']['duration']}) # 开始-完成
]
# 添加边(依赖关系)
G.add_edges_from(dependencies)
# 可视化
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=2000, node_color='skyblue')
edge_labels = {(u,v):d['type'] for u,v,d in dependencies}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.show()
关键实现细节:
- FF关系需要通过
lag=-前驱活动duration实现同步完成 - SF关系需要设置
lag=后继活动duration确保前驱开始时后继可完成 - 使用
nx.dag_longest_path()可自动计算关键路径
3. MS Project中的高级依赖设置
在图形化工具中设置非FS关系需要特殊操作:
FF关系配置步骤:
- 在甘特图视图中双击任务链接线
- 将类型改为"完成-完成(FF)"
- 在"滞后时间"输入负值(如"-3d")
SS关系实战案例(建筑施工):
- 地基浇灌(任务A)与混凝土找平(任务B)建立SS关系
- 设置滞后量1天表示找平需在地基开始1天后启动
- 最终效果:A开始后1天,B才能开始
注意:MS Project默认不显示关系类型标识,建议通过"格式→网格线→关键任务"高亮特殊依赖。
4. 行业案例:软件开发流水线建模
某DevOps团队的需求交付流程包含典型的多重依赖:
dev_ops_process = {
'需求分析': {'duration': 5},
'UI设计': {'duration': 3},
'后端开发': {'duration': 10},
'前端开发': {'duration': 8},
'集成测试': {'duration': 3},
'用户验收': {'duration': 2}
}
dev_ops_dependencies = [
('需求分析', 'UI设计', {'type': 'FS'}),
('需求分析', '后端开发', {'type': 'FS'}),
('UI设计', '前端开发', {'type': 'SS', 'lag': 2}), # UI开始2天后前端启动
('后端开发', '集成测试', {'type': 'FF', 'lag': -2}), # 后端结束前2天开始测试
('前端开发', '集成测试', {'type': 'SF', 'lag': 1}),
('集成测试', '用户验收', {'type': 'FS'})
]
这种混合依赖模式实现了:
- 前后端并行开发(SS关系)
- 测试与开发重叠进行(FF关系)
- 用户验收严格在测试完成后启动(FS关系)
5. 异常处理与常见陷阱
实际建模时会遇到几个典型问题:
-
循环依赖检测
try: nx.find_cycle(G) except nx.NetworkXNoCycle: print("无循环依赖") else: print("存在循环逻辑,需调整依赖关系") -
时间参数冲突
- 当FF关系的滞后量绝对值大于后继活动duration时,会导致无法满足的约束
- 解决方案:调整
lag值或拆分活动
-
可视化优化技巧
- 使用
pyvis库实现交互式网络图 - 不同颜色标识各类关系(红色=FS,蓝色=FF等)
- 使用
在最近一个ERP系统升级项目中,团队误将新旧系统切换设为FS关系,导致旧系统过早关闭引发业务中断。修正为SF关系并设置合理滞后量后,实现了平滑过渡。

被折叠的 条评论
为什么被折叠?



