『软件工程8』软件项目进度安排与跟踪,一招学会计算关键路径

简介: 该文章详细解释了如何在软件项目管理中安排进度与跟踪,特别是如何计算和利用关键路径方法(CPM)来优化项目时间管理。

一、项目进度安排的定义及原则

1、进度安排的定义

项目进度安排,即通过将工作量分配给特定的软件工程任务,和将所估算的工作量分布于已经计划好的项目持续时间中。

2、进度安排的基本原则

(1)划分 —— 项目被划分为若干个可管理的活动和任务

(2)相互依赖 —— 活动和任务之间的关系必须被确定为:顺序、并发、后续、独立进行;

(3)时间分配 —— 为每个任务分配工作单位(即开始和结束时间);

(4)工作量确认 —— 确保在任意时段分配到任务的人员数量不会超过项目组的人员数量;(比如:一个项目组此次预估需要有12人分配到任务才能完成此项工作,但原定人员数量为10人,那么12>10,这项任务的工作量必然超标了,所以要确保不能超过)

(5)定义责任 —— 每个被调度的任务都应该指定负责人

(6)定义结果 —— 每个被调度的任务都要有一个定义好的输出结果

(7)定义里程碑 —— 每个任务或任务组都与一个项目里程碑相关联;

二、通信开销

1、通信开销的定义

当几个人共同承担软件开发任务时,人与人之间必须通过交流来解决各自承担任务之间的接口问题,即所谓通信问题。通信需花费时间和代价,会引起软件错误增加,降低软件生产率。

2、通信路径计算

如果一个软件开发小组有 n 个人,每两人之间都需要通信,则总的通信路径有 $ \frac{n(n-1)}{2} $​ 条。

如想对通信路径有进一步了解,可到项目管理中的4P文章中的项目小组结构进行查看

3、案例分析

Q1:设一个人单独开发软件,生产率是5000行/人年。若 4 个人组成一个小组共同开发这个软件,则需要 6条通信路径。若在每条通信路径上耗费的工作量是 250 行/人年。则小组中每个人的软件生产率降低为多少?

A1:小组中每个人的软件生产率降低为 5000 - $ \frac{6}{4} $​×250 = 5000 - 375 = 4625 行/人年,所以项目组的生产率为18500。

Q2:如在上例中,到了开发后期再加入两名工程师,生产率为840行/人年,问此时项目组的生产率为?

A2:6个人所产生的的通信路径为 $ \frac{6*(6-1)}{2} $​ = 15条;所以项目组的生产率为5000 × 4 + 840 × 2 - 15 × 250 = 17930。

从上述分析可知:

  • 一个软件任务由一个人单独开发,生产率最高;而对于一个稍大型的软件项目,一个人单独开发,时间又太长;因此软件开发小组是必要的。
  • 但是,开发小组不宜太大,成员之间要避免过多的通信路径。
  • 在开发进程中,切忌中途加人,避免不必要的的生产率损失。

三、工作量分配

1、40-20-40规则

1)在整个软件开发过程中,编码工作量仅占 20%,编码前工作量占40%,编码后工作量占 40%

2)40-20-40 规则只应用来作为一个指南,实际的工作量分配比例必须按照各项目的特点来决定。

2、工作量分配图例

用一张图来了解关于软件各阶段的工作量分配比例。
工作量分配

3、工作量分布推荐

在实际的软件开发中,一种比较推荐的工作量分布为:

  • 计划阶段planning -> 2-3% ;
  • 需求分析阶段requirements analysis -> 10-25 % ;
  • 设计阶段design -> 20-25 %;
  • 编码阶段coding -> 15-20 % ;
  • 测试和调试阶段testing and debugging -> 30-40 %

四、项目进度安排方法

1、关键路径方法(CPM,Critical Path Method)

(1)定义

在关键路径上的活动才是按时完成任务的关键。

(2)关键路径的相关表达

  • LS:Latest start time 最晚开始时间;
  • ES:Earliest start time 最早开始时间;
  • FT:Float Time 浮动时间;
  • 关键路径的判断:计算哪条路径最长,即为关键路径;
  • 关键路径上的节点对应的浮动时间为FT = 0,且在每个项目中,关键路径不止一条;
  • 如果关键路径上的活动开始时间推迟,将会直接影响工期;
  • 最晚开始时间 - 最早开始时间 = 浮动时间。

(3)案例分析:盖房子

表1 盖一所房子的重要阶段

阶段 完成事项
1.1 完成调查
1.2 签发许可证
1.3 完成挖掘
1.4 库存材料
2.1 施工地基
2.2 外墙完成
2.3 外部管道完成
2.4 外部电力工作完成
2.5 外部壁板完成
2.6 外部涂装完成
2.7 安装门和一些固定设施
2.8 屋顶完成
3.1 内部管道完成
3.2 内部电力工作完成
3.3 墙板就位
3.4 内部涂装完成
3.5 铺设地板
3.6 安装门和一些固定设施

表2 盖房子相关活动的时间估计

具体活动 估计时间(天)
Step1: 准备工作
完成调查 3
签发许可证 15
完成挖掘 10
库存材料 10
Step2: 构建外部
施工地基 15
外墙完成 20
外部管道完成 10
外部电力工作完成 10
外部壁板完成 8
外部涂装完成 5
安装门和一些固定设施 6
屋顶完成 9
Step3: 构建内部
内部管道完成 12
内部电力工作完成 15
墙板就位 9
内部涂装完成 18
铺设地板 11
安装门和一些固定设施 7

表3 任务网络图
任务网络图

:某项目的活动网络图如表3所示,每项活动所需的天数如路径上数字所示。(1)请给出计算过程确定项目的关键路径和工期。(2)设定活动1.1和1.2的最早开始时间均为第1天,给出所有活动的最早开始时间ES、最迟开始时间LS和浮动时间FT。

答案解析:

(1)从图中可以看出,该项目有8条路径可以走到终点,分别为:

  • ①start → 1.1(3) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 2.3(10) → 2.4(10) → 2.5(8) → 2.6(5) → 2.7(6) → finish;
  • ②start → 1.1(3) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 2.3(10) → 2.4(10) → 2.5(8) → 2.6(5) → 2.8(9) → finish;
  • ③start → 1.1(3) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 3.1(12) → 3.2(15) → 3.3(9) → 3.4(18) → finish;
  • ④start → 1.1(3) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 3.1(12) → 3.2(15) → 3.3(9) → 3.5(11) → 3.6(7) → finish;
  • ⑤start → 1.2(15) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 2.3(10) → 2.4(10) → 2.5(8) → 2.6(5) → 2.7(6) → finish;
  • ⑥start → 1.2(15) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 2.3(10) → 2.4(10) → 2.5(8) → 2.6(5) → 2.8(9) → finish;
  • ⑦start → 1.2(15) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 3.1(12) → 3.2(15) → 3.3(9) → 3.4(18) → finish;
  • ⑧start → 1.2(15) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 3.1(12) → 3.2(15) → 3.3(9) → 3.5(11) → 3.6(7) → finish。

8条路径如下图所示:
路径展示
可以计算出,每条路径的工期分别为:

  • ①3+10+10+15+20+10+10+8+5+6=97天;

  • ②3+10+10+15+20+10+10+8+5+9=100天;

  • ③3+10+10+15+20+12+15+9+18=112天;

  • ④3+10+10+15+20+12+15+9+11+7=112天;

  • ⑤15+10+10+15+20+10+10+8+5+6=109天;

  • ⑥15+10+10+15+20+10+10+8+5+9=112天;

  • ⑦15+10+10+15+20+12+15+9+18=124天;

  • ⑧15+10+10+15+20+12+15+9+11+7=124天。

综上所述,项目的关键路径有两条,分别为⑦和⑧,即1.2 → 1.3 →1.4 → 2.1 → 2.2 → 3.1 → 3.2 → 3.3 → 3.4 和 1.2 → 1.3 →1.4 → 2.1 → 2.2 → 3.1 → 3.2 → 3.3 → 3.5 → 3.6,工期为124天。

(2)计算步骤如下:

填充关键路径的浮动时间。已知关键路径的浮动时间都为0,所以路径⑦和⑧上的所有节点的浮动时间都为0;

计算剩余节点的浮动时间。

  • 由图可得,1.1 → 1.3需要时间为13天,而关键路径1.2 → 1.3需要25天,所以1.1的浮动时间为12天;
  • 关键路径的前半部分为1.2 → 1.3 →1.4 → 2.1 → 2.2,后半部分有4个分路,⑦和⑧为关键路径,且后半部分的工期为54天;(12+15+9+18=54天,12+15+9+11+7=54天)
  • ⑤和⑥的后半部分与关键路径的差额分别为54-39=15天,54-42=12天,那么此时可以确定2.7的浮动时间为15天,2.8的浮动时间为12天;(10+8+5+6=39天,10+8+5+9=42天)
  • 由图可知,2.7和2.8都需要经过2.3 → 2.4 → 2.5 → 2.6,在这种情况下,选择与关键路径差额小的值为浮动时间,即2.3 → 2.4 → 2.5 → 2.6与2.8的浮动时间相等。

计算最早开始时间。将每一项活动前面经过的路径(不包含当前活动)进行相加,如遇到分叉口则选择有经过关键路径上的节点

计算最迟开始时间。逆推,通过公式最晚开始时间 - 最早开始时间 = 浮动时间推出最迟开始时间。

项目活动的最早开始时间ES、最迟开始时间LS和浮动时间FT如下:

活动 最早开始时间 最晚开始时间 浮动时间
1.1 1 13 12
1.2 1 1 0
1.3 16 16 0
1.4 26 26 0
2.1 36 36 0
2.2 51 51 0
2.3 71 83 12
2.4 81 93 12
2.5 91 103 12
2.6 99 111 12
2.7 104 119 15
2.8 104 116 12
3.1 71 71 0
3.2 83 83 0
3.3 98 98 0
3.4 107 107 0
3.5 107 107 0
3.6 118 118 0
Finish 124 124 0

由上述案例可以得出,通过关键路径可以判断出:

  • 开发时哪些活动必须等待;
  • 开发时哪些活动必须按进度进行防止拖延问题发生。

2、项目(进度计划)评估和评审技术(PERT,Program Evaluation and Preview Technique)

(1)定义

项目评估和评审技术是一种关键路径分析技术,使用正态分布来判断一个活动的最早开始时间接近该活动进度时间的概率。PERT技术可以计算关键路径、找出最可能成为瓶颈的活动。

注:项目评估和评审技术 (PERT) 的内容比关键路径还更为复杂一点,大家可以先理解关键路径,待我后面深学了再补充这一块知识。或者有小伙伴想补充的也欢迎私聊我哦~

五、获得值分析

获得值分析,主要分析两个内容进度是否拖延;成本是否超出预算。基于这两个内容,对获得值分析进行以下阐述。

1、基本量

(1)计划工作的预计成本(BCWS):截止到某一时刻,计划工作的预计工作量之和。

(2)完成预算(BAC): BCWS的总量,是项目的总工作量的估计。

(3)预定完成百分比:计划工作的预计成本占预计总工作量的百分比,计算公式为: $ \frac{BCWS}{BAC} $​。

(4)完成工作的预计成本(BCWP):截止到某一时刻,完成工作的预计工作量之和。

(5)完成百分比:完成工作的预计成本占预计总工作量的百分比,计算公式为: $ \frac{BCWP}{BAC} $​。

(6)所完成工作的实际成本(ACWP):截止到某一时刻,已完成的工作任务的实际工作量之和。

2、进度指示计算公式

(1)进度性能指标(SPI) = $ \frac{BCWP}{BCWS} $;

(2)进度偏差(SV) = BCWP - BCWS;

(3)成本性能指标(CPI) = $ \frac{BCWP}{ACWP} $;

(4)成本偏差(CV) = BCWP - ACWP。

总结:

  • 当SPI > 1,SV > 0,进度超前;
  • 当SPI = 1,SV = 0,进度正好;
  • 当SPI < 1,SV < 0,进度落后;
  • 当CPI > 1,CV > 0,成本节省;
  • 当CPI = 1,CV = 0,成本正好;
  • 当CPI < 1,CV < 0,成本超出预算。

3、案例分析

(1)案例一

下图是某工程的实际完成表。

工作任务 估计工作量 实际工作量 估计完成日期 实际完成日期(月日年)
1 5 10 1/25/21 2/1/21
2 25 20 2/15/21 2/15/21
3 120 80 2/25/21
4 40 50 4/15/21 4/1/21
5 60 50 7/1/21
6 80 70 9/1/21

Question:在该工程实施过程中,截止到21年4月1号,进度是否拖延?工期是否超出预算?

Answer:

截止到21年4月1号,计划完成任务1、2,实际完成了1、2、4,由此可计算出 BCWSBCWPACWPBAC 的值。

  • 计划工作的预计成本 BCWS 为:5 + 25 = 30

  • 完成工作的预计成本 BCWP 为:5 + 25 + 40 = 70

  • 所完成工作的实际成本 ACWP 为:10 + 20 + 50 = 80

  • 完成预算 BAC 为:5 + 25 + 120 + 40 + 60 + 80 = 330

  • 那么预定完成百分比为: $ \frac{BCWS}{BAC} = \frac{30}{330} $

  • 实际完成百分比为: $ \frac{BCWP}{BAC} = \frac{70}{330} $

  • 进度性能指标 SPI 为: SPI = $\frac{BCWP}{BCWS} = \frac{70}{30}$ > 1

  • 进度偏差 SV 为: SV = BCWP - BCWS = 70 - 30 = 40 > 0

  • 成本性能指标 CPI 为: CPI = $ \frac{BCWP}{ACWP} = \frac{70}{80} $< 1

  • 成本偏差 CV 为: CV = BCWP - ACWP = 70 - 80 = -10 < 0

综上所述,因为 SPI > 1,SV > 0CPI < 1,CV < 0 ,所以截止到21年4月1日,该工程进度超前,成本超出预算。

(2)案例二

工作任务 估计工作量 实际工作量 估计完成日期 实际完成日期(月日年)
1 50 70 1/25/21 2/1/21
2 35 20 2/15/21 2/15/21
3 20 40 5/15/21 3/1/21
4 40 40 4/15/21 4/1/21
5 60 10 6/1/21
6 80 20 7/1/21

Question:若考察点在21年5月1日,此时任务完成进度如上图所示,问进度是否拖延?工期是否超出预算?

Answer:

截止到21年5月1号,计划完成任务1、2、3、4,实际完成了1、2、3、4,由此可计算出 BCWSBCWPACWPBAC 的值。

  • 计划工作的预计成本 BCWS 为:50 + 35 + 20 + 40 = 145

  • 完成工作的预计成本 BCWP 为:50 + 35 + 20 + 40 = 145

  • 所完成工作的实际成本 ACWP 为:70 + 20 + 40 + 40 = 170

  • 完成预算 BAC 为:50 + 35 + 20 + 40 + 60 + 80 = 285

  • 那么预定完成百分比为: $ \frac{BCWS}{BAC} = \frac{145}{285} $

  • 实际完成百分比为: $ \frac{BCWP}{BAC} = \frac{145}{285} $

  • 进度性能指标 SPI 为: SPI = $\frac{BCWP}{BCWS} = \frac{145}{145} $= 1

  • 进度偏差 SV 为: SV = BCWP − BCWS =145−145 =0

  • 成本性能指标 CPI 为: CPI = $\frac{BCWP}{ACWP} = \frac{145}{170} $< 1

  • 成本偏差 CV 为: CV = BCWP - ACWP = 145 - 170 = -25 < 0

综上所述,因为 SPI = 1,SV = 0CPI < 1,CV < 0 ,所以截止到21年4月1日,该工程进度正好,即项目按计划进行,但成本超出预算。

(3)案例三

Question:

你被指定负责一个软件项目,这个项目由4个部分(A、B、C、D)组成,项目总预算为53000元,其中A任务预算为26000元,B任务预算为12000元,C任务预算为10000元,D任务预算为5000元。

截止到8月31日,A任务已经全部完成,B任务过半,C任务刚开始,D任务还没有开始,下表给出截止到8月31日的计划成本和实际成本,采用50/50规则计算截止到8月31日为止的 CVSVCPISPI

任务 计划费用 BCWS(元) 实际花费 ACWP(元) 已获取价值 BCWP(元)
A 26000 25500 26000
B 9000 5400 6000
C 4800 4100 5000
D 0 0 0
总计 39800 35000 37000

(备注:50/50规则指项目一开始就实现一半价值,直到结束才实现全部价值,即完成1%或99%,都认为只实现一半价值)

Answer:

截止到8月31日为止的 CV , SV , CPI , SPI 的计算结果如下:

  • BCWS = 39800元
  • ACWP = 35000元
  • BCWP = 37000元
  • SPI = $\frac{BCWP}{BCWS}$ ​ = 93%
  • SV = BCWP-BCWS = -2800元
  • CPI = $ \frac{BCWP }{ACWP} ​ $= 106%
  • CV = BCWP - ACWP = 2000元

综上所述,因为 SPI < 1,SV < 0CPI > 1,CV > 0 ,所以截止到8月31日,该工程进度落后一些,但是费用节省了。

六、写在最后

软件项目进度安排与跟踪的文章就讲解到这里啦!在这一块内容中,计算关键路径部分尤为重要,也是软考当中的常考题。在学会之后还要自己脱稿再演算多遍,且可以将题目举一反三进行多次计算。如果有不理解的欢迎私聊~

  • 公众号:星期一研究室
  • 微信:MondayLaboratory

创作不易,如果这篇文章对你有用,记得留下Star哦~

相关文章
|
10天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
6天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2506 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1519 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
8天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
530 13
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18836 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17524 13
Apache Paimon V0.9最新进展
|
8天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
457 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
353 4
叮咚!您有一份六大必做安全操作清单,请查收
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。