甘特图依赖关系:FS、SS、FF、SF、延隔与提前量详解

甘特图依赖关系详解:四种类型(完成-开始、开始-开始、完成-完成、开始-完成)、延隔与提前量、何时用哪一种,以及容易扭曲排期的常见错误。

依赖关系说明一项任务何时可以开始或完成,取决于另一项任务。类型和延隔写对了,日期自己就会算出来;写错了,排期看上去精确,实际却是错的。

简而言之

  • 完成-开始是默认类型;只有工作确实重叠或必须同时结束时,才使用其余三种。
  • 类型和延隔写在“前置任务”列:3、5SS+2、8FF-1。延隔为正,提前量为负,均以工作日计。
  • 有多个前置任务的任务,要等最后一个前置任务放行才开始,所以最慢的那条链接决定它的日期。
  • 循环依赖会被检测出来:闭合循环的那条链接以虚线绘制,且不参与排期。
  • 依赖一项不存在的任务会被拒绝。

什么是依赖关系,为什么类型很重要

依赖关系把两项任务连起来。在前的是前置任务,在后的是后续任务,这条链接规定前置任务的哪个时点(开始或完成)约束后续任务的哪个时点。在日期由计算得出而不是手工输入的图表里,依赖关系是唯一能让任务在时间上移动的东西。既没有依赖关系也没有固定开始日期的任务,会直接从计划的第一天开始。

依赖关系有四种类型。完成-开始(FS)是默认类型:前置任务完成后,后续任务才开始,比如“填补裂缝”之后才“刷墙”。开始-开始(SS)允许前置任务一开始,后续任务就可以开始,用来表示可以重叠的工作。完成-完成(FF)要求后续任务与前置任务同时完成,适合必须一起收尾的工作。开始-完成(SF)比较少见:前置任务开始之前,后续任务不能完成,常见于交接场景,即旧的安排要一直运行到新的安排开始为止。

任何类型都可以带延隔或提前量。延隔是加在链接上的正数工作日,例如混凝土必须养护三天。提前量是负数,让后续任务在前置任务结束之前就开始。在 QueryChart 中,这些都写在“前置任务”(Depends on)列里:单独一个数字如 3,表示完成-开始,依赖任务 3;5SS+2 表示开始-开始,依赖任务 5,延隔两个工作日;8FF-1 表示完成-完成,依赖任务 8,提前一天。延隔和提前量按工作日(周一至周五)计算,而不是日历日。

下面的示例是一份系统实施计划:多数链接用完成-开始,工作有重叠的地方用带延隔的开始-开始,还有几项任务汇聚到同一个后续任务上。打开电子表格面板,对照条形来读“前置任务”列。

一份有完成-开始链接和重叠的实施计划

四个阶段共十六项任务。打开电子表格面板,对照条形阅读“前置任务”列。

  1. 一条简单的完成-开始链

    “项目启动”需要 2 个工作日,“需求与差异分析”需要 10 个工作日,每一项都在前一项完成后开始。“方案设计签署”的工期为 0,所以它是一个里程碑,落在需求分析结束的那一天。

  2. 带延隔的开始-开始

    “系统配置”持续 20 个工作日。“试迁移数据”以开始-开始链接依赖它,延隔 10 天,因此迁移在配置进行到一半时开始;同时它还要等“数据映射与清洗”完成。

  3. 多个前置任务,一个后续任务

    “系统集成测试”依赖“系统配置”、“试迁移数据”和“集成开发”。它要等这三项中最后一项完成才开始,所以最慢的那一项决定日期。随后是“用户验收测试”。

  4. 重叠的培训,然后是关口

    “培训材料”在“系统配置”开始 5 个工作日后开始,“最终用户培训”在“用户验收测试”开始 3 天后开始。这两条链接都是带延隔的开始-开始。“上线就绪评审”是一个里程碑,要等验收测试和培训都完成。这份图表没有使用完成-完成或开始-完成链接。

运作方式

  1. 列出任务并给每项任务设定工期

    每行输入一项任务,并以工作日设置其“工期”(Duration)。依赖关系是挂在任务上的,所以任务必须先存在;而各项工期的长短,会改变哪条链接最慢。

  2. 先添加完成-开始链接

    在“前置任务”列输入必须先完成的任务编号,例如 3。这就是完成-开始,覆盖了计划中的大多数情况。你也可以输入任务名称,或在图表上从一个条形拖到另一个条形,创建同样的链接。

  3. 只在工作重叠的地方改变类型

    如果第二项任务在第一项开始后就能开始,写 5SS。如果两项任务必须同时结束,写 5FF。如果后续任务在前置任务开始之前不能完成,写 5SF。每次都要问:普通的完成-开始链接是真的错了,还是只是偏保守。

  4. 为已知的间隔添加延隔或提前量

    加上 +2 表示等待两个工作日,如 5SS+2;加上 -1 表示提前一天,如 8FF-1。延隔用于真实的、有名目的间隔,如养护、通知期或评审窗口。

  5. 读日期,检查最长的链

    看每个汇聚点由哪个前置任务决定。选中一项任务,可以点亮它上游和下游的链;也可以打开“视图”中的“关键路径”,查看决定完成日期的那条链。

应避免的错误

  • 该用完成-开始时用了开始-开始

    让任务重叠,会在纸面上缩短计划。如果第二项任务确实需要第一项任务的产出,这种重叠就是假的,完成日期也过于乐观。只有工作真的可以提前开始时,才用开始-开始。

  • 把等待时间藏在延隔里,而不是写成任务

    10 天的延隔在图上不显示为任务,没人看得出在等什么。如果这段等待有负责人或名称,比如供应商交付周期,就把它做成一项任务,延隔只留给短的、机械性的间隔。

  • 什么都和什么链接

    每多一条链接,就是声称一项任务约束了另一项任务。只链接真正的前置任务。如果一项任务依赖两件事,就把两个都列出来;但不要仅仅因为两项任务在列表中相邻,就把它们串起来。

  • 给有前置任务的任务固定开始日期

    固定的开始日期不会随它所依赖的任务移动,而且与依赖关系冲突的固定日期会被标记出来。只在日期确实固定时才固定它,比如某场活动,其余交给依赖关系来驱动。

打开实施计划

把实施计划打开为你自己的图表,在“前置任务”列里改一个依赖类型或延隔,看日期如何移动。

打开实施计划

相关指南

常见问题

默认应该用哪种依赖类型?

完成-开始。它是 QueryChart 的默认类型,只要第二项任务需要第一项任务完成,它就是对的。只有工作确实重叠时,才切换到开始-开始、完成-完成或开始-完成。

延隔和提前量有什么区别?

延隔是加在被链接时点之间的正数工作日,后续任务要等待。提前量是负数,后续任务可以比普通链接允许的更早开始。写法如 5SS+2 或 8FF-1。

延隔会把周末算进去吗?

不会。工作日是周一至周五,延隔或提前量就是若干个工作日。延隔 5 就是一个工作周。

如果我创建了循环依赖会怎样?

循环会被检测出来,闭合循环的那条链接以虚线绘制,且不用于排期。依赖一项不存在的任务会被拒绝。

任务可以依赖里程碑吗?

可以。里程碑是工期为 0 的任务,所以和其他任务一样可以作为前置任务。签字或决策就是这样给其后的工作设置关口的。里程碑放在哪里,见《甘特图里程碑》指南(/zh/guides/甘特图里程碑)。

本指南所用的模板

系统上线实施计划甘特图模板 — 可编辑的实施计划甘特图:需求、配置、数据迁移、集成、测试、培训、切换与上线后支持,含依赖关系和里程碑,改工期日期自动跟随。

实施计划甘特图: 计划 → 配置 → 迁移与集成 → 测试与培训 → 上线
甘特图依赖关系:FS、SS、FF、SF、延隔与提前量详解