《软件工程》活动图

本文介绍了软件工程中活动图的基本概念,包括活动和活动间的依赖关系,以及如何通过活动图来估算项目完成时间。关键路径是决定项目最短完成时间的路径,冗余时间则是非关键路径上活动的机动开始时间。此外,文章还详细阐述了如何计算活动的最早最晚开始时间,以确保项目按期完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

描述了活动和活动间依赖关系的图,其中节点表示项目的里程碑(活动结束) ,线表示活动,线对应的时间表示活动的持续时间。
在这里插入图片描述

如图例中 ,A->B 的这条线代表的这个活动从 A 开始,需要做 3天,才能结束,到达 B 里程碑(标志着 A->B 这条线代表的活动的结束)。

注意:图中的点不代表活动,并不能说活动 A 用 3 天到达活动 B,这是不准确的
如到达 I 里程碑的边有两条, D->I, B->I,意思是有两个活动,完成后到达里程碑 I,并不能说 I 是个活动,如果这么理解会在计算最晚开始时间时出现错误。

估算项目完成时间

关键路径

定义: 从起点到终点总花费时间最长的路径,即这个项目的最短完成时间,因为如果这条路径无法完成那么整个项目都不能算完成。所以这条路径上的任务耽误一点都会影响最后项目完成时间。
在这里插入图片描述

如上图,其关键路径为 A->B->D->I->J->L = 20,其他路径都比它短。

冗余时间

不耽误总体进度的前提最晚开始时间最早开始时间差值,表示这个任务的机动开始时间,从最早开始时间开始,最晚可以拖的天数,再晚就会影响整个项目的完成时间。

简而言之,就是一个活动你可以偷几天的懒而不耽误最后的理论进度(不晚于关键路径的结束时间)

因此,路径越短,冗余时间越长

另外可以得出,关键路径就是冗余时间为0的路径;一个活动图可能会有多条关键路径。

最早最晚开始时间

在这里插入图片描述
以上图为例,开始逐步计算各个活动的最早最晚开始时间,(活动开始时间从1开始),表示方式为<最早开始时间,最晚开始时间,冗余时间>

  • 首先计算关键路径,可以得出Lab=&lt;1,1,0&gt;L_{ab}=&lt;1,1,0&gt;Lab=<1,1,0>Lbd=&lt;4(1+3),4(1+3),0&gt;L_{bd}=&lt;4(1+3),4(1+3),0&gt;Lbd=<4(1+3),4(1+3),0>Ldi=&lt;9(4+5),9(4+5),0&gt;L_{di}=&lt;9(4+5),9(4+5),0&gt;Ldi=<9(4+5),9(4+5),0>Lij=&lt;11,11,0&gt;L_{ij}=&lt;11,11,0&gt;Lij=<11,11,0>Ljl=&lt;13,13,0&gt;L_{jl}=&lt;13,13,0&gt;Ljl=<13,13,0>

关键路径是完全不能拖延的,而其余的非关键路径,则会有一定的冗余时间,现在从后往前开始计算最晚开始时间

  • l是结束里程碑,时间点为21,因此从l对应的非关键路径(该例仅有LklL_{kl}Lkl)开始,逐步计算最晚开始时间:
  • Lkl=&lt;?,18(21−3),?&gt;L_{kl}=&lt;?,18(21-3),?&gt;Lkl=<?,18(213),?>Ljk=&lt;?,16(18−2),?&gt;L_{jk}=&lt;?,16(18-2),?&gt;Ljk=<?,16(182),?>Lhk=&lt;?,14(18−4),?&gt;L_{hk}=&lt;?,14(18-4),?&gt;Lhk=<?,14(184),?>Lgh=&lt;?,11(14−3),?&gt;L_{gh}=&lt;?,11(14-3),?&gt;Lgh=<?,11(143),?>Lgj=&lt;?,11(13−2),?&gt;L_{gj}=&lt;?,11(13-2),?&gt;Lgj=<?,11(132),?>Leg=&lt;?,8(11−3),?&gt;L_{eg}=&lt;?,8(11-3),?&gt;Leg=<?,8(113),?>Lae=&lt;?,4(8−4),?&gt;L_{ae}=&lt;?,4(8-4),?&gt;Lae=<?,4(84),?>Lfh=&lt;?,13(14−1),?&gt;L_{fh}=&lt;?,13(14-1),?&gt;Lfh=<?,13(141),?>Lcf=&lt;?,10(13−3),?&gt;L_{cf}=&lt;?,10(13-3),?&gt;Lcf=<?,10(133),?>Lac=&lt;?,5(10−5),?&gt;L_{ac}=&lt;?,5(10-5),?&gt;Lac=<?,5(105),?>Lbi=&lt;?,5(11−6),?&gt;L_{bi}=&lt;?,5(11-6),?&gt;Lbi=<?,5(116),?>

如果你认真计算了,可能会有以下问题:

  • LgjL_{gj}Lgjj向后连接两个节点lk,使用哪个边的最晚开始时间计算?

最后选择了关键路径LjlL_{jl}Ljl的最晚开始时间,因为jl是关键路径,是不能耽误的,而j里程碑的达成需要gjij两个活动共同完成,gj的最晚开始时间的计算应该以jl的最晚开始时间点为基准来进行计算。

  • LaeL_{ae}LaeLacL_{ac}Lac的最早开始时间为什么是不确定的?

实际是确定的,第一个节点相连的活动最早开始时间肯定是1,但是为了统一格式,专一计算最晚开始时间,所以我写的是?

  • 接下来再次从前往后,计算非关键路径的最早开始时间,同时因为所有活动的最晚开始时间确定,可以同时求出冗余时间:
  • Lae=&lt;1,4,3&gt;L_{ae}=&lt;1,4,3&gt;Lae=<1,4,3>Leg=&lt;5,8,3&gt;L_{eg}=&lt;5,8,3&gt;Leg=<5,8,3>Lgj=&lt;7,11,4&gt;L_{gj}=&lt;7,11,4&gt;Lgj=<7,11,4>Lac=&lt;1,5,4&gt;L_{ac}=&lt;1,5,4&gt;Lac=<1,5,4>Lcf=&lt;6,10,4&gt;L_{cf}=&lt;6,10,4&gt;Lcf=<6,10,4>Lfh=&lt;9,13,4&gt;L_{fh}=&lt;9,13,4&gt;Lfh=<9,13,4>Lgh=&lt;8,11,3&gt;L_{gh}=&lt;8,11,3&gt;Lgh=<8,11,3>
  • 从前向后,以这个图为例,在活动LhkL_{hk}LhkLjkL_{jk}Ljk的时候会有一些问题,即选取之前那个活动的最早开始时间进行计算,这个时候可以参考上面对最晚开始时间的选取,关键在于理解一个节点相当于一个里程碑,只有到达节点代表节点之前的所有活动都完成了
  • 因此多汇点的节点之后的活动的最早开始时间应该是所有前置任务完成较晚的那一个时间点
  • 因此Lhk=&lt;max(9+1,8+3)=11,14,3&gt;L_{hk}=&lt;max(9+1,8+3)=11,14,3&gt;Lhk=<max(9+1,8+3)=11,14,3>Ljk=&lt;max(11+2,7+2)=13,16,3&gt;L_{jk}=&lt;max(11+2,7+2)=13,16,3&gt;Ljk=<max(11+2,7+2)=13,16,3>Lkl=&lt;max(13+2,11+4)=15,18,3&gt;L_{kl}=&lt;max(13+2,11+4)=15,18,3&gt;Lkl=<max(13+2,11+4)=15,18,3>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值