第3章 软件开发管理工具 本章将介绍软件配置管理工具、软件项目开发管理工具和软件开发项目管理工具。通过本章的学习,学生需要了解这几种工具的功能、性能、特点和选用方法。 3.1配置管理工具 3.1.1软件配置管理 1. 软件配置管理概述 软件配置管理(Software Configuration Management,SCM),又称软件形态管理或软件建构管理。SCM界定软件的组成项目,对每个项目的变更进行管控(版本控制),并维护不同项目之间的版本关联,以使软件在开发过程中任一时间的内容都可以被追溯。 软件配置管理贯穿于整个软件生命周期,它为软件研发提供了一套管理办法和活动原则。软件配置管理无论是对于软件企业管理人员还是研发人员都着重要的意义。软件配置管理可以提炼为以下三个方面的内容。 1) 版本控制 版本控制(Version Control)是全面实行软件配置管理的基础,可以保证软件技术状态的一致性。我们在平时的日常工作中都在或多或少地进行版本管理的工作。比如有时为了防止文件丢失,而复制一个后缀为bak或日期的备份文件,当文件丢失或被修改后可以通过该备份文件恢复。版本控制是对系统不同版本进行标识和跟踪的过程。版本标识的目的是便于对版本加以区分、检索和跟踪,以表明各个版本之间的关系。一个版本是软件系统的一个实例,在功能上和性能上与其他版本有所不同,或是修正、补充了前一版本的某些不足。实际上,对版本的控制就是对版本的各种操作控制,包括检入/检出控制、版本的分支和合并、版本的历史记录和版本的发行。 2) 变更控制 变更控制(Change Control)是至关重要的。但是要实行变更控制也是一件令人头疼的事情。担忧变更的发生是因为对代码的一点儿小小的干扰都有可能导致一个巨大的错误,但是它也许能够修补一个巨大的漏洞或者增加一些很有用的功能。担忧变更也因为有些程序员可能会破坏整个项目,虽然智慧思想有不少来自于这些程序员的头脑。过于严格的控制也有可能挫伤他们进行创造性工作的积极性。 3) 过程支持 很多人已渐渐意识到了软件工程过程概念的重要性,而且也逐渐了解了这些概念和软件工程支持技术结合的重要性,尤其是软件过程概念与CM(Change Management,变更管理)有着密切的联系,因为CM理所当然地可以作为一个管理变更的规则(或过程)。例如,IEEE软件配置管理计划的标准就列举了建立一个有效的CM规则所必需的许多关键过程概念。但是,传统意义上的软件配置管理主要着重于软件的版本管理,缺乏软件过程支持(Process Support)的概念。在大多数有关软件配置管理的定义中,并没有明确提出配置管理需要对过程进行支持的概念。因此,不管软件的版本管理得多好,组织之间没有连接关系,组织所拥有的是相互独立的信息资源,从而形成了信息的“孤岛”。在CM提供了过程支持后,CM与CASE环境进行了集成,组织之间通过过程驱动建立一种单向或双向的连接。开发员或测试员则不必去熟悉整个过程,也不必知道整个团队的开发模式。其只需集中精力关心自己所需要进行的工作。在这种情况下,可以延续其一贯的工作程序和处理办法。 2. 软件配置管理模式 软件配置管理中所使用的模式主要有以下四种。 (1) 恢复提交模式。这种模式是软件配置管理中最基本的模式。它是一种面向文件单一版本的软件配置模式。这种模式中典型的软件配置管理工具有SCCS工具、RCS工具以及基于它们的各种软件配置管理工具。 (2) 面向改变模式。在这种模式中,主要考虑的不是软件产品的各单一版本,而是各组成单元的改变。在这种模式下,版本是通过对基线实施某改变请求的结构。这种模式对于将用户及结点间的改变进行广播和结合是十分有效的。 (3) 合成模式。这一模式是在基于恢复提交模式的基础上,引入系统模型这一概念用以描述整个软件产品的系统结构,从而将软件配置管理从软件产品的单元这一级扩展到系统这一级。这种模式对于软件产品的构建非常有用。 (4) 长事务模式。这一模式也是基于恢复提交模式的,它引入了工作空间的概念,各个开发人员在各自的工作空间下与其他用户相互隔离,独立地对软件进行修改。 3. 软件配置管理作用 随着软件系统的日益复杂化和用户需求、软件更新的频繁化,配置管理逐渐成为软件生命周期中的重要控制过程,在软件开发过程中扮演着越来越重要的角色。一个好的配置管理过程能覆盖软件开发和维护的各个方面,同时对软件开发过程的宏观管理,即项目管理,也有重要的支持作用。良好的配置管理能使软件开发过程有更好的可预测性,使软件系统具有可重复性,使用户和主管部门对软件质量和开发小组有更强的信心。 软件配置管理的最终目标是管理软件产品。由于软件产品是在用户不断变化的需求驱动下不断变化,为了保证对产品有效地进行控制和追踪,配置管理过程不能仅仅对静态的、成形的产品进行管理,而必须对动态的、成长的产品进行管理。由此可见,配置管理同软件开发过程紧密相关。配置管理必须紧扣软件开发过程的各个环节: 管理用户所提出的需求,监控其实施,确保用户需求最终落实到产品的各个版本中去,并在产品发行和用户支持等方面提供帮助,响应用户新的需求,推动新的开发周期。通过配置管理过程的控制,用户对软件产品的需求如同普通产品的订单一样,遵循一个严格的流程,经过一条受控的生产流水线,最后形成产品,发售给相应用户。从另一个角度看,在产品开发的不同阶段通常有不同的任务,由不同的角色担当,各个角色职责明确,泾渭分明,但同时又前后衔接,相互协调。 好的配置管理过程有助于规范各个角色的行为,同时又为角色之间的任务传递提供无缝的接合,使整个开发团队像一个交响乐队一样和谐而又错杂地进行。正因为配置管理过程直接连接产品开发过程、开发人员和最终产品,这些都是项目主管人员所关注的重点,因此配置管理系统在软件项目管理中也起着重要作用。配置管理过程演化出的控制、报告功能可帮助项目经理更好地了解项目的进度、开发人员的负荷、工作效率和产品质量状况、交付日期等信息。同时,配置管理过程所规范的工作流程和明确的分工有利于管理者应付开发人员流动的困境,使新的成员可以快速实现任务交接,尽量减少因人员流动而造成的损失。 总之,软件配置管理作为软件开发过程的必要环节和软件开发管理的基础,支持和控制着整个软件生存周期,同时对软件开发过程的项目管理也有重要的支持作用。 4. 软件配置管理过程 在软件配置管理过程中,需要考虑下列这些问题: ①采用什么方式来标识和管理已存在程序的各种版本?②在软件交付用户之前和之后如何控制变更?③谁有权批准和对变更安排优先级?④利用什么办法来估计变更可能引起的其他问题?这些问题可归结到软件配置管理过程的以下6个活动中。 1) 配置项(Software Configuration Item,SCI)识别 Pressman对于SCI给出了一个比较简单的定义: “软件过程的输出信息可以分为三个主要类别: 计算机程序(源代码和可执行程序),描述计算机程序的文档(针对技术开发者和用户),数据(包含在程序内部或外部)。这些项包含所有在软件过程中产生的信息,总称为软件配置项。” 由此可见,配置项的识别是配置管理活动的基础,也是制定配置管理计划的重要内容。 软件配置项分类软件的开发过程是一个不断变化着的过程,为了在不严重阻碍合理变化的情况下来控制变化,软件配置管理引入了“基线(Base Line)”这一概念。IEEE对基线的定义是这样的: “已经正式通过复审和批准的某规约或产品,它因此可作为进一步开发的基础,并且只能通过正式的变化控制过程改变。” 所以,根据这个定义,在软件的开发流程中把所有需加以控制的配置项分为基线配置项和非基线配置项两类。例如,基线配置项可能包括所有设计文档和源程序等,非基线配置项可能包括项目的各类计划和报告等。 所有配置项都应按照相关规定统一编号,按照相应的模板生成,并在文档中的规定章节(部分)记录对象的标识信息。在引入软件配置管理工具进行管理后,这些配置项都应以一定的目录结构保存在配置库中。 所有配置项的操作权限应由CMO(Configuration Management Officer,配置管理员)严格管理,基本原则是: 基线配置项向软件开发人员开放读取权限; 非基线配置项向PM(Project Manager,项目经理)、CCB(Change Control Board,变更控制委员会)及相关人员开放。 2) 工作空间管理 在引入了软件配置管理工具之后,所有开发人员都会被要求把工作成果存放到由软件配置管理工具所管理的配置库中去,或是直接工作在软件配置管理工具提供的环境之下。所以为了让每个开发人员和各个开发团队能更好地分工合作,同时又互不干扰,对工作空间的管理和维护也成为软件配置管理的一个重要活动。 一般来说,比较理想的情况是把整个配置库视为一个统一的工作空间,然后再根据需要把它划分为个人(私有)、团队(集成)和全组(公共)这三类工作空间(分支),从而更好地支持将来可能出现地并行开发的需求。 每个开发人员按照任务的要求,在不同的开发阶段,工作在不同的工作空间上,例如,对于私有开发空间而言,开发人员根据任务分工获得对相应配置项的操作许可之后,他即在自己的私有开发分支上工作,他的所有工作成果体现为在该配置项的私有分支上的版本的推进,除该开发人员外,其他人员均无权操作该私有空间中的元素; 而集成分支对应的是开发团队的公共空间,该开发团队拥有对该集成分支的读写权限,而其他成员只有只读权限,它的管理工作由SIO(System Integration Officer,系统集成员)负责; 至于公共工作空间,则是用于统一存放各个开发团队的阶段性工作成果,它提供全组统一的标准版本,并作为整个组织的Knowledge Base(知识库)。 当然,由于选用的软件配置管理工具不同,在对于工作空间的配置和维护的实现上有比较大的差异,但对于CMO来说,这些工作是他的重要职责,他必须根据各开发阶段的实际情况来配置工作空间并定制相应的版本选取规则,来保证开发活动的正常运作。在变更发生时,应及时做好基线的推进。 3) 版本控制 版本控制是软件配置管理的核心功能。所有置于配置库中的元素都应自动予以版本的标识,并保证版本命名的唯一性。版本在生成过程中,依照设定的使用模型自动分支、演进。除了系统自动记录的版本信息以外,为了配合软件开发流程的各个阶段,还需要定义、收集一些元数据(Metadata)来记录版本的辅助信息和规范开发流程,并为今后对软件过程的度量做好准备。当然如果选用的工具支持的话,这些辅助数据将能直接统计出过程数据,从而方便软件过程改进(Software Process Improvement,SPI)活动的进行。 对于配置库中的各个基线控制项,应该根据其基线的位置和状态来设置相应的访问权限。一般来说,对于基线版本之前的各个版本都应处于被锁定的状态,如需要对它们进行变更,则应按照变更控制的流程来进行操作。 4) 变更控制 在对SCI的描述中,可引入基线的概念。从IEEE对于基线的定义中可以发现,基线是和变更控制紧密相连的。也就是说,在对各个SCI做出了识别,并且利用工具对它们进行了版本管理之后,如何保证它们在复杂多变的开发过程中真正地处于受控的状态,并在任何情况下都能迅速地恢复到任一历史状态就成为软件配置管理的另一重要任务。因此,变更控制就是通过结合人的规程和自动化工具,以提供一个变化控制的机制。 变更管理的一般流程是: ①(获得)提出变更请求; ②由CCB(变更控制委员会)审核并决定是否批准; ③(被接受)修改请求分配人员,提取SCI(配置项),进行修改; ④复审变化; ⑤提交修改后的SCI(配置项); ⑥建立测试基线并测试; ⑦重建软件的适当版本; ⑧复审(审计)所有SCI(配置项)的变化; ⑨发布新版本。 在这样的流程中,CMO通过软件配置管理工具来进行访问控制和同步控制,而这两种控制则是建立在前文所描述的版本控制和分支策略的基础上的。 5) 状态报告 配置状态报告就是根据配置项操作数据库中的记录来向管理者报告软件开发活动的进展情况。这样的报告应该定期进行,并尽量通过CASE工具自动生成,用数据库中的客观数据来真实地反映各配置项的情况。 配置状态报告根据报告着重反映当前基线配置项的状态,以作为对开发进度报告的参照。同时也能从中根据开发人员对配置项的操作记录来对开发团队的工作关系做出一定的分析。 配置状态报告应该包括下列主要内容: ①配置库结构和相关说明; ②开发起始基线的构成; ③当前基线位置及状态; ④各基线配置项集成分支的情况; ⑤各私有开发分支类型的分布情况; ⑥关键元素的版本演进记录; ⑦其他应予以报告的事项。 6) 配置审计 配置审计的主要作用是作为变更控制的补充手段,来确保某一变更需求已被切实实现。在某些情况下,它被作为正式的技术复审的一部分,但当软件配置管理是一个正式的活动时,该活动由SQA(Software Quality Assurance,软件质量保证)人员单独执行。 总之,软件配置管理的对象是软件研发活动中的全部开发资产。所有这一切都应作为配置项纳入管理计划统一进行管理,从而能够保证及时地对所有软件开发资源进行维护和集成。因此,软件配置管理的主要任务也就归结为以下几条: ①制定项目的配置计划; ②对配置项进行标识; ③对配置项进行版本控制; ④对配置项进行变更控制; ⑤定期进行配置审计; ⑥向相关人员报告配置的状态。 3.1.2软件配置管理工具的功能 软件配置管理(Software Configuration Management,SCM)为软件开发提供了一套管理办法和活动原则,成为贯穿软件开发始终的重要质量保证活动。 软件配置管理作为软件开发过程中的必要环节和软件开发管理的基础,支持和控制着整个软件生存周期。若要有效地实施软件配置管理,除了培养软件开发者的管理意识之外,更重要的是使用优秀的软件配置管理工具。 软件配置管理工具支持用户对源代码清单的更新管理,以及对重新编译与连接的代码的自动组织,支持用户在不同文档相关内容之间进行相互检索,并确定同一文档某一内容在本文档中的涉及范围,同时还应支持软件配置管理小组对软件配置更改进行科学的管理。下面讨论SCM工具的功能。 需要说明的是,从学术上讲,软件配置管理(SCM)只是变更管理(Change Management,CM)的一个方面; 但从SCM工具的发展来看,越来越多的SCM工具开始集成变更管理(CM)的功能,甚至问题跟踪(Defect Tracking)的功能。 1. 权限控制 权限控制(Access Control)对SCM工具来说至关重要。一方面,既然是团队开发,就可能需要限制某些成员的权限; 特别是大项目往往牵扯到子项目外包,到最后联调阶段会涉及很多不同的单位,更需要权限管理。另一方面,权限控制也减小了误操作的可能性,间接提高了SCM工具的可用性(Usability)。 现有的SCM工具在权限控制方面差异很大,但通过不同权限控制方法的差异,不难看到其共性: 其核心概念是行为(Action)、行为主体、行为客体。 (1) 行为主体。即用户(User)。用户组(User Group)并不是行为主体,但它的引入大大方便了权限管理。 (2) 行为客体。即项目和项目成员(Member)。不管从SCM工具的开发者还是使用者的角度,项目和项目成员都是不同的行为客体。 (3) 行为。即由主体施加在客体之上的特定操作,检入和检出是再典型不过的例子。 三个核心概念搞清之后,就可以讨论权限的概念了。 权限是一个四元向量: (主体,客体,行为,布尔值),即“主体在客体上施加某种行为是否被获准”。 由此看来,权限控制的基本工作就是负责维护主体集合、客体集合、行为集合、权限向量集合。其中,行为集合是固定不变的(在SCM工具开发之时已确定),其他三种集合都是动态变化的。 2. 版本控制 版本控制(Version Control)是软件配置管理的基本要求,它可以保证在任何时刻恢复任何一个版本,是支持并行开发的基础。 SCM工具记录项目和文件的修改轨迹,跟踪修改信息,使软件开发工作以基线(Baseline)渐进方式完成,从而避免了软件开发不受控制的局面,使开发状态变得有序。 SCM工具可以对同一文件的不同版本进行差异比较,可以恢复个别文件或整个项目的早期版本,使用户方便地得到升级和维护必需的程序和文档。 SCM工具内部对版本的标识,采用了版本号(Version Number)方式,但对用户提供了多种途径来标识版本,被广泛应用的有版本号、标签(Label)和时间戳(Time Stamp)。多样灵活的标识手段,为用户提供了方便。 3. 增强的版本控制 快照(Snapshot)和分支(Branch)以基本的版本控制功能为基础,使版本控制的功能又更进一步增强。 快照是比版本高一级的概念,它是项目中多个文件各自的当前版本的集合。快照使恢复项目的早期版本变得方便,它还支持批量检入(Check in)、批量检出(Check out)和批量加标签(Label)等操作。总之,快照是版本控制的一种增强,使版本控制更加方便高效。 分支允许用户创建独立的开发路径,其典型用途有二。第一,分支和合并(Merge)一起,是对并行开发(Concurrent Development)的有力支持。第二,分支支持多版本开发,这对发布后的维护尤其有用。例如,客户报告有打印bug,小组可能从某个还未引入打印bug的项目版本引出一个分支,最终发布一个bug修订版。分支是版本控制的另一种增强。 版本控制和增强的版本控制是SCM工具其他功能的基础。 4. 变更管理 变更管理(Change Management)是指在整个软件生命周期中对软件变更的控制。SCM工具提供有效的问题跟踪(Defect Tracking)和系统变更请求(System Change Requests,SCRs)管理。通过对软件生命周期各阶段所有的问题和变更请求进行跟踪记录,来支持团队成员报告(Report)、抓取(Capture)和跟踪(Track)与软件变更相关的问题,以此了解谁改变了什么,为什么改变。变更管理有效地支持了不同开发人员之间,以及客户和开发人员之间的交流,避免了无序和各自为政的状态。 5. 独立的工作空间 开发团队成员需要在开发项目上协同、并发地工作,这样可以大大提高软件开发的效率。沙箱(Sandbox)为并行开发提供了独立的工作空间,在有的SCM工具中也称为工作目录(Working Folder)。 使用沙箱,开发人员能够将所有必要的项目文件复制到私有的一个树型目录,在这些副本上进行修改。一旦对修改感到满意,就可以将修改合并(Merge)到开发主线(Main Line)上去; 当然,如果该文件只有该成员一人修改,只需将修改过的文件检入(Check In)到主项目中即可。 并发和共享是同一事物的不同方面,并发的私有工作空间共享同一套主项目(Master Project)文件,因此有必要让所有团队成员拥有得知项目当前状态的能力。SCM工具提供刷新(Refresh)操作,某位团队成员可以使其他团队成员在主项目文件上所做的变更,在自己沙箱的图形用户界面上反映出来。 6. 报告 为保证项目按时完成,项目经理必须监控开发进程并对发生的问题迅速做出反应。报告功能使项目经理能够随时了解项目进展情况; 通过图形化的报告,开发的瓶颈可以一目了然地被发现; 标准的报告提供常用的项目信息,定制报告功能保证了拥有适合自己需求的信息。 软件配置管理可以向用户提供配置库的各种查询信息。实际上,许多软件配置管理工具的此项功能是分散在各种相应的功能中的。 7. 过程自动化 过程详细描述了各种人员在整个软件生存周期中如何使用整个系统,过程控制可以保证每一步都按照正确的顺序由合适的人员实施。 SCM工具使用事件触发机制(Event Trigger),即让一个事件触发另一个事件产生行为,来实现过程自动化。例如,让“增加项目成员”操作自动触发“产生功能描述表(Form)”操作,开发人员填制该文件的功能描述表,规范开发过程。 过程自动化不仅可以缩短复杂任务的时间,提高生产率,而且还规范了团队开发的过程,减少了混乱。 8. 管理项目的整个生命周期 从开发、测试、发布到发布后的维护,SCM工具的使命“始于项目开发之初,终于产品淘汰之时”。SCM工具应预先提供典型的开发模式的模板,以减少用户的劳动; 另一方面,也应支持用户自定义生命周期模式,以适应特殊开发需要。 9. 与主流开发环境的集成 将版本控制功能与主流集成开发环境(IDE)集成,极大地方便了软件开发过程。从集成开发环境的角度看,版本控制是其一项新功能; 从SCM工具的角度看,集成开发环境充当了沙箱的角色。 3.1.3成熟软件配置管理工具的特征 1.软件配置管理工具的发展 软件配置管理最早是使用人工的方法,以类似档案管理的方式管理软件配置管理项。这种管理方式烦琐,特别是当软件较大时,对大量的文档进行更动控制、配置审计等工作,容易出错,工作效率极低。随着管理水平的提高,出现了用计算机进行管理的软件配置管理工具。相对于其他CASE工具,配置管理工具应该是最必不可少的,它可以帮助开发人员管理软件开发时烦琐的工作。从早期的基于文件的版本控制工具,如RCS,到今天现代的软件配置管理工具,如Harvest、CleasrCase、Star Team和Firefly等,软件配置管理工具已经有了长足的发展,并且依然在快速地发展着。 软件配置管理工具发展过程中的关键特征如下。 (1) 第1代: 基于文件,以版本控制、支持Check out/Check in模型和简单分支为主要特征。第1代软件配置管理工具只是处理文件版本控制的工具。它们是基于单一文件的工具,将各独立文件的改变存储在特殊的文档文件之中,一般支持恢复提交模式,并提供分支,这类工具最早的是SCCS和RCS。 (2) 第2代: 基于项目库,支持并行开发团队协作以及过程管理。这一代工具的最显著特征是软件开发项目的源代码与它们的文档分离,而存储在一个数据库中,该数据库称为项目数据库或软件库。这种结构将重点从文件一级移到了项目一级,并对整个项目信息有一个统一的观点。这一代配置管理工具有基于变动请求的IBM的CMVC,面向操作的Platium公司的CCC以及SQL公司的PCMS等。 (3) 第3代: 全面结合CM管理等各个软件开发环节的软件配置管理整体解决方案。它在保持了第2代软件配置管理工具的优点的基础上加入了“文件透明性”这一特性。最具有代表性的产品是Rational ClearCase,它是通过一个独占的文件系统MVPS来实现文件透明性的。 总之,在其发展的几十年间,软件配置管理的任务和作用始终没有改变过。唯一改变的是那些以软件配置管理为核心的配置管理工具及操作系统。这些工具已经从简单的版本控制和半自动构造系统进行到现在复杂的软件配置管理,通过这些工具,用户实现了以前无法实现的功能,真正实现自动软件配置管理。 2. 成熟软件配置管理工具的特征 企业要实施软件配置管理面临的第一步就是要选择合适的工具,在此列出一个成熟的软件配置管理工具应该具备的特征。 (1) 配置项(对象)管理。版本控制,配置管理,并行开发支持和基线支持。 (2) 构建与发布管理。能利用流行的构建工具ANT/MAKE,支持多平台构建,支持并行构建,能自动处理构建依赖关系,以及能收集和维护重新产生之前构建所需要的信息。 (3) 工作空间管理。能自动跟踪工作空间中所有类型的变更,能应用不同配置填充工作空间,以及工作空间既允许隔离又允许更新。 (4) 流程管理。不同类型的对象都应具备流程定制能力,流程的范围可定制,以及支持测试与发布流程。 (5) 分布式开发的支持。负载均衡。 (6) 与其他工具的集成能力。变更请求工具,开发工具,其他CASE工具,以及命令行SDK。 (7) 易用性、易管理性。报告能力和架构的弹性。 3.2项目管理工具 项目管理一般包括项目进度管理、质量保证和成本控制。本节将从这几方面展开介绍。 3.2.1项目进度管理 本节重点介绍项目进度概述,进度控制的四个过程,如何实施进度控制。 1. 项目进度概述 1) 概念 项目进度计划(Plan)是指对一个工程项目按一定的方式进行分解,并对分解后的工作单元(Activity)规定相互之间的顺序关系以及工期。 进度(Schedule)是指作业在时间上的排列,强调的是作业进展(Progress)以及对作业的协调和控制(Coordination & Control),在规定工期(Duration)内完成规定任务的情况。 工期是由从开始到竣工的一系列施工活动所需的时间构成的。工期目标包括: 总进度计划实现的总工期目标; 各分进度计划(采购、设计、施工等)或子项进度计划实现的工期目标; 各阶段进度计划实现的里程碑目标。通过计划进度目标与实际进度完成目标值的比较,找出偏差及其原因,采取措施调整纠正,从而实现对项目进度的控制。 进度控制是指在限定的工期内,以事先拟定的合理且经济的工程进度计划为依据,对整个建设过程进行监督、检查、指导和纠正的行为过程。进度控制是反复循环的过程,体现运用进度控制系统控制工程建设进展的动态过程。进度控制在某一界限范围内(最低费用相对应的最优工期)加快施工进度能达到使费用降低的目的。而超越这一界限,施工进度的加快反而将会导致投入费用的增大。因此,对建设项目进行三大目标(质量、投资、进度)控制的实施过程中应互相兼顾,单纯地追求某一目标的实现,均会适得其反。因而对建设项目进度计划目标实施的全面控制,是投资目标和质量目标实施的根本保证,也是履行工程承包合同的重要工作内容。 2) 进度控制全过程 工程项目进度计划的实施中,控制循环过程包括: (1) 执行计划的事前进度控制,体现对计划、规划和执行进行预测的作用。 (2) 执行计划的过程进度控制,体现对进度计划执行的控制作用,以及在执行中及时采取措施纠正偏差的能力。 (3) 执行计划的事后进度控制,体现对进度控制每一循环过程总结整理的作用和调整计划的能力。 建设项目实施全过程的三项控制各有各的实用环境、控制工作内容和时间。能实现对施工进度事先进行全面控制最好,但是,工程进度计划的编制者很难事先对项目的实施过程可能出现的问题进行全面估计,因此,进度控制工作大量的是在过程控制和事后控制中完成的。 3) 进度控制的措施 进度控制是一项全面的、复杂的、综合性的工作,原因是工程实施的各个环节都影响工程进度计划。因此要从各方面采取措施,促进进度控制工作。采用系统工程管理方法,编制网络计划只是第一道工序,最关键的是如何按时间主线进行控制,保证计划的实现。为此,采取进度控制的措施包括: (1) 加强组织管理。网络计划在时间安排上是紧凑的,要求参加施工的不同管理部门及管理人员协调配合努力工作。因此,应从全局出发合理组织,统一安排劳力、材料、设备等,在组织上使网络计划成为人人必须遵守的技术文件,为网络计划的实施创造条件。 (2) 为保证总体目标实现,对工期应着重强调工程项目各分级网络计划控制。严格界定责任,依照管理责任层层制定总体目标、阶段目标、结点目标的综合控制措施,全方位寻找技术与组织、目标与资源、时间与效果的最佳结合点。 (3) 网络计划的实施效果应与经济责任制挂钩。把网络计划内容、结点时间要求具体落实,实行逐级负责制,对实际网络计划目标的执行有责任感和积极性。同时规定网络计划实施效果的考核评定指标,使各分部、分项工程完成日期、形象进度要求、质量、安全、文明施工均达到规定要求。 (4) 网络计划的编制修改和调整应充分利用计算机,以利于网络计划在执行过程中的动态管理。 2. 进度控制的四个过程 1) 进度控制过程的四个阶段 进度控制的四个步骤(PDCA)是: 计划(Plan)、执行(Do)、检查(Check)、行动(Action)。进度控制过程是一个周期性的循环过程。进度控制过程有四个阶段(见图31): ①编制进度计划; ②实施进度计划; ③检查与调整进度计划; ④分析与总结进度计划。 图31进度控制过程的四个阶段 2) 进度计划的编制 进度计划是表示各项工程的实施顺序、开始和结束时间以及相互衔接关系的计划。进度计划是现场实施管理的核心指导文件,是进度控制的依据和工具。进度计划是按工程对象编制,重点是安排工程实施的连续性。 (1) 进度计划编制的目的。具体目的包括: 保证按时获利以补偿已经发生的费用支出; 协调资源; 使资源需要时可以利用; 预测在不同时间上所需资金和资源的级别以便赋予项目不同的优先级; 保证项目正常完成。 (2) 进度计划编制的要求。具体要求包括: 保证项目在合同规定的时间内完成,实现项目目标要求; 实施进度安排必须满足连续性和均衡性要求; 实施顺序的安排应进行优化,以便提高经济效益; 应选择适当的计划图形,满足使用进度计划的要求; 讲究编制程序,提高进度计划的编制质量。 (3) 进度计划编制的原则。具体原则包括: 应对所有大事及其期限要求进行说明; 确切的工作程序能够通过工作网络得以说明; 进度应该与工作分解结构(WBS)有直接关系。采用WBS中的系统数字来说明工作进度,应该表明项目开始和结束时间; 全部进度必须体现时间的紧迫性。可能的话应详细说明每件大事需要配置的资源; 项目越复杂,专业分工就越细,就更需要综合管理,需要一个主体的、协调的工作进度计划。 (4) 进度计划的内容。具体内容包括: 项目综合进度计划; 设备(材料)采购工作进度计划; 项目实施(开发)进度计划; 项目验收和投入使用进度计划。 3) 进度计划的实施 (1) 做好准备工作。具体工作包括: 将进度计划具体化为实施作业计划和实施任务书; 分析计划执行中可能遇到的阻力、计划执行的重点和难点,提出保证计划成功实施的措施; 将计划交给执行者; 可以开会进行,也可结合下达实施任务书进行。管理者和作业者均应提出计划实现的技术和组织措施。 (2) 做好实施记录。在计划实施过程中,应进行跟踪记录,以便为检查计划、分析实施状况、计划执行状况、调整计划、总结等提供原始资料; 记录工作最好在计划图表上进行,以便检查计划时分析和对比; 记录必须实事求是,不得造假; 流水计划: 在计划流水之下绘制实际进度线条; 网络计划: 记录实际持续时间; 在计划图上用彩色标明已完成部分; 用切割线记录; 等等。 (3) 做好调度工作。调度工作的任务是掌握计划实施情况,协调关系,排除矛盾,克服薄弱环节,保证作业计划和进度控制目标的实现。调度工作的内容: 检查计划执行中的问题,找出原因,提出解决措施; 督促供应商按进度计划要求供应资源; 控制施工现场临时设施正常使用,搞好平面管理,发布调度令,检查决议执行情况; 调度工作应以作业计划和现场实际需要为依据,加强预测,信息灵通,准确、灵活、果断,确保工作效率; 在接受监理的工程中,调度工作应与监理单位的协调工作密切结合,调度会应请监理人员参与,监理协调会应视为调度会的一种形式。 4) 进度计划的检查与调整 (1) 进度计划的检查。①检查时间分类: 日常检查、定期检查; ②检查内容: 进度计划中的开始时间、完成时间、持续时间、逻辑关系、实物工程量和工作量、关键线路、总工期、时差利用等; ③检查方法: 对比法,即计划内容和记录的实际状况进行对比; ④检查的结果应写入进度报告,承建单位的进度报告应提交给监理工作师,作为其进度控制、核发进度款的依据。 (2) 进度计划的调整。具体方法包括: 通过检查分析,若进度偏离计划不严重,可以通过协调矛盾、解决障碍来继续执行原进度计划; 当项目确实不能按原计划实现时,则应对计划进行必要的调整,适当延长工期或改进实施速度; 新的“调整计划”应作为进度控制的新依据。 5) 进度计划的分析与总结 (1) 进度计划的分析与总结。其目的是为了发现问题、总结经验、寻找更好的控制措施,进一步提高控制水平; 通过定量分析和定性分析,归纳出卓有成效的控制及原因,为以后的进度控制提供借鉴。 (2) 项目进度控制的数据收集。①实际数据: 采集内容包括活动的开始和结束的实际时间; 实际投入的人力; 使用或投入的实际成本; 影响进度的重要原因及分析; 进度管理情况; ②有关项目范围、进度计划和预算变更的信息: 变更可能由建设单位或承建单位引起,也可能是由某种不可预见的事情发生引起; 一旦变更被列入计划并取得建设单位同意,就必须建立一个新的基准计划,整个计划的范围、进度和预算可能与最初的基准计划不同。 3. 如何实施进度控制 1) 进度控制的目标与范围 (1) 进度控制的意义: 有利于尽快发挥投资效益; 有利于维护良好的管理秩序; 有利于提高企业经济效益; 有利于降低信息系统工程的投资风险。 (2) 进度控制的目标: ①总目标: 通过各种有效措施保障工程项目在规定的时间内完成,即信息系统达到竣工验收、试运行及投入使用的计划时间; ②总目标分解,按单项工程分解,按专业分解,按工程阶段分解,按年、季、月分解。 (3) 进度控制的范围: ①纵向: 在工程建设的各个阶段,对项目建设的全过程控制; ②横向: 在工程建设的各个组成部分,对分项目、子系统的控制。 (4) 影响进度控制的因素。总体包括: 工程质量的影响,设计变更的影响,资源投入的影响,资金的影响,相关单位的影响,可见或不可见风险因素的影响,承建单位管理水平的影响。 2) 进度控制的任务、程序与方法措施 (1) 计划阶段。项目经理应该参与招标前的准备工作,编制本项目的工作计划,内容包括项目主要内容、组织管理、实施阶段计划、实施进程等; 分析项目的内容及项目周期,提出安排工程进度的合理建议; 对建设合同中所涉及的产品和服务的供应周期做出详细说明,并建议建设单位做出合理安排; 对工程实施计划及其保障措施提出建议,并在招标书中明确; 在评标时,应对项目进度安排及进度控制措施进行审查,提出审核意见。 (2) 设计阶段。根据工程总工期要求,确定合理的设计时限要求; 根据设计阶段性输出,由粗而细地制定项目进度计划; 协调各方进行整体性设计; 提供设计所需的基础资料和数据; 协调有关部门,保证设计工作顺利进行。 (3) 实施阶段。根据工程招标和施工准备阶段的工程信息,进一步完善项目进度计划,并据此进行实施阶段进度控制; 审查施工进度计划,确认其可行性并满足项目控制进度计划要求; 审查进度控制报告,对施工进度进行跟踪,掌握施工动态; 在施工过程中,做好对人力、物力、资金的投入控制工作及转换工作,做好信息反馈、对比和纠正工作,使进度控制定期连续进行; 开好进度协调会,及时协调各方关系,使工程施工顺利进行; 及时处理工程延期问题。 (4) 验收阶段。项目验收,并提交验收报告。 4. 进度控制方法 1) 甘特图 甘特图(Gantt Chart),又叫横道图、条状图(Bar Chart)。甘特图的思想比较简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间。基本是一条线条图,横轴表示时间,纵轴表示活动(项目),线条表示在整个期间上计划和实际的活动完成情况。它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比。管理者由此可便利地弄清一项任务(项目)还剩下哪些工作要做,并可评估工作进度,见图32。 图32甘特图 2) 工程进度曲线(“香蕉”曲线图) “香蕉”型曲线是两条S形曲线组合成的闭合曲线,从S形曲线比较法中得知,按某一时间开始的施工项目的进度计划,其计划实施过程中进行时间与累计完成任务量的关系都可以用一条S形曲线表示。对于一个施工项目的网络计划,在理论上总是分为最早和最迟两种开始与完成时间的。因此,一般情况下,任何一个施工项目的网络计划,都可以绘制出两条曲线: 其一是计划以各项工作的最早开始时间安排进度而绘制的S形曲线,称为ES曲线。其二是计划以各项工作的最迟开始时间安排进度而绘制的S形曲线,称为LS曲线。两条S形曲线都是从计划的开始时刻开始和完成时刻结束,因此两条曲线是闭合的。一般情况下,其余时刻ES曲线上的各点均落在LS曲线相应点的左侧,形成一个形如“香蕉”的曲线,故此其为“香蕉”型曲线。在项目的实施中,进度控制的理想状况是任一时刻按实际进度描绘的点,应落在该“香蕉”型曲线的区域内,见图33。 “香蕉”型曲线比较法的作用: 利用“香蕉”型曲线进行进度的合理安排; 进行施工实际进度与计划进度比较; 确定在检查状态下,后期工程的ES曲线和LS曲线的发展趋势。 3) 网络图计划法 (1) 单代号网络图。用一个圆圈代表一项活动,并将活动名称写在圆圈中。箭线符号仅用来表示相关活动之间的顺序,因其活动只用一个符号就可代表,故称为单代号网络图,见图34。 图33“香蕉”曲线图 图34单代号网络图 (2) 双代号网络图。双代号网络图是应用较为广泛的一种网络计划形式。它是以箭线及其两端结点的编号表示工作的网络图。双代号网络图中,每一条箭线应表示一项工作。箭线的箭尾结点表示该工作的开始,箭线的箭头结点表示该工作的结束。见图35。 图35双代号网络图 ① 箭线: 在双代号网络中,工作一般使用箭线表示,任意一条箭线都需要占用时间,消耗资源,工作名称写在箭线的上方,而消耗的时间则写在箭线的下方。 ② 虚箭线: 是实际工作中不存在的一项虚设工作,因此一般不占用资源,消耗时间,虚箭线一般用于正确表达工作之间的逻辑关系。 ③ 结点: 反映的是前后工作的交接点,接点中的编号可以任意编写,但应保证后续工作的结点比前面结点的编号大,即图中的i