1
 软件工程
1.10.2.3 8.2.3 进度安排

8.2.3 进度安排

制订开发进度计划是项目管理的一个重要内容,进度安排的准确程度比成本估算的准确程度更显重要。软件产品可以通过重新定价或大量的销售来弥补成本的增加,但是一旦进度安排落空,会导致市场机会的丧失,使用户不满意,而且也会导致成本的增加。

软件生存周期的每一阶段工作量所占的百分比可以根据经验数据来确定,R.S.Pressman提出一种简单的被称为40-20-40的工作量分配规则,即前期工作(计划、需求分析、概要设计和详细设计阶段)和后期工作(测试阶段)各占40%,编码工作占20%。

1.软件开发小组人数与软件生产率

对于一个小型软件开发项目,一个人就可以完成需求分析、设计、编码和测试工作。随着软件开发项目规模的增大,就需要更多的人共同参与同一软件项目的工作,因此要求由多人组成软件开发小组。但是,软件产品是逻辑产品而不是物理产品,当几个人共同承担软件开发项目中的某一任务时,人与人之间必须通过交流来解决各自承担任务之间的接口问题,即所谓通信问题。通信需要花费时间和代价,会引起软件错误增加,降低软件生产率。

若两个人之间需要通信,则在这两人之间存在一条通信路径。如果一个软件开发小组有n个人,每两人之间都需要通信,则总的通信路径有img152条。假设一个人单独开发软件,生产率是5000行/(人-年)。若4个人组成一个小组共同开发这个软件,则需要6条通信路径。若在每条通信路径上耗费的工作量是250行/(人-年),则组中每人的生产率降低为

(5000-6×250/4)行/(人-年)=(5000-375)行/(人-年)=4625行/(人-年)

从上述简单分析可知,一个软件任务由一个人单独开发,生产率最高;而对于一个稍大型的软件项目,一个人单独开发,时间太长,因此组织软件开发小组是必要的。有人提出,软件开发小组的规模不能太大,人数不能太多,一般在2~8人为宜。

2.任务的并行性

当参加同一软件工程项目的人数不止一人时,开发工作就会出现并行的情形。在软件开发过程的各种活动中,第一项任务是进行项目的需求分析和评审,此项工作为以后的并行工作打下了基础。一旦软件的需求得到确认,并且通过了评审,概要设计(系统结构设计和数据设计)工作和测试计划制订工作就可以并行进行了。如果已经建立系统模块结构,那么对各个模块的详细设计、编码、单元测试等工作又可以并行进行。

软件工程项目的并行性提出了一系列的进度要求。因为并行任务是同时发生的,所以进度计划必须决定任务之间的从属关系,确定各个任务的先后次序和衔接,确定各个任务完成的持续时间。此外,应注意构成关键路径的任务,即若要保证整个项目能按进度要求完成,就必须保证各个任务要按进度要求完成,这样就可以确定在进度安排中应保证的重点。

3.制订开发进度计划

制订开发进度计划的第一步是对各阶段工作量进行一个合理的分配。R.S.Pressman提出的40-20-40规则只用来作为一个指南。实际的工作量分配比例必须按照每个项目的特点来决定。一般在计划阶段的工作量很少超过总工作量的2%~3%,除非是具有高风险的巨额投资的项目。需求分析可能占总工作量的10%~25%。花费在分析或原型化上面的工作量应当随项目规模和复杂性成比例地增加。通常用于软件设计的工作量为20%~25%,而用于设计评审与反复修改的时间也必须考虑在内。比较精确的进度安排可利用中间COCOMO模型或详细COCOMO模型。

在确定各阶段工作量后,可以对进度计划和工作的实际进展情况采用图示的方法具体描述,这特别有利于表现各项任务之间进度的相互依赖关系。下面介绍几种有效的图示方法。在这几种图示方法中,有几个信息必须明确标明:

(1)各个任务的计划开始时间、完成时间;

(2)各个任务完成的标志(用○表示文档编写,用△表示评审);

(3)各个任务与参与工作的人数,各个任务与工作量之间的衔接情况;

(4)完成各个任务所需的物理资源和数据资源。

1)Gantt图

Gantt图用水平线段表示任务的工作阶段;线段的起点和终点分别对应任务的开工时间和完成时间;线段的长度表示完成任务所需的时间。图8-2给出了一个具有5个任务的Gantt图。如果这5条线段分别代表完成任务的计划时间,则在横坐标方向附加一条可向右移动的纵线。它可随着项目的进展,指明已完成的任务(纵线扫过的)和有待完成的任务(纵线尚未扫过的)。我们从Gantt图上可以很清楚地看出各子任务在时间上的对比关系。

img153

图8-2 Gantt图

在Gantt图中,每一任务完成的标准不是以能否继续下一阶段任务为标准,而是以交付应该交付的文档与通过评审为标准。因此在Gantt图中,文档编写与评审是软件开发进度的里程碑。Gantt图的优点是简单、易用、易修改,可以直接了解各项活动的时间点;缺点是难以反映多个任务之间存在的依赖关系。一般来说,对简单的软件宜使用,但对内部任务的依赖关系复杂的项目,应采用下面介绍的PERT图及关键路径来安排进度。当然,如果这两种工具同时使用,便可以相互取长补短,更好地安排进度。

2)PERT图和CPM方法

PERT技术称为计划评审技术,是制订软件开发计划最常用的方法,它采用网络图来描述一个项目的任务网络,PERT图中每一个圆代表一项开发活动,圆中数字表示完成这一活动所需的时间,圆间的箭头代表活动发生的先后顺序。例如,在图8-3中,完成分析需要3个月,完成设计需要4个月,设计发生在分析之后,即只有在分析结束后才能开始设计等。

img154

图8-3 一个简单软件开发项目的PERT图

经验表明,采取从后向前建立PETR图的方法往往比较容易。也就是说先画出终点,然后逐步前推画出每个活动,直至项目起点。

CPM方法称为关键路径法。从起点到终点可能有多条路径,其中耗时最长的路径就是关键路径,因为它决定了完成整个工程所需的时间。与PETR图不同,每个活动的上方标出该项活动的起止时间,并且用粗黑箭头标出路径需时最长的关键路径。如图8-4所示,分析活动(0,3)表示始于“0”,终于“3”,历时3个月,关键路径共需时15个月。

img155

图8-4 软件开发项目的关键路径

利用PERT图和CPM方法为项目计划人员提供了一些定量的工具。

(1)确定关键路径各项活动按时完成,因为关键路径上的任何活动如有延期,整个项目将随之延期。

(2)通过缩短关键路径上某活动的时间,可以达到提高缩短项目开发周期的目的,对不处于关键路径上的活动,可以根据需要调整其起止时间,或者延缓活动的进度。

(3)计算活动的边界时间,以便为具体的任务定义时间窗口。边界时间的计算对于软件项目的计划调度是非常有用的。