第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)。进度控制过程是一个周期性的循环过程。进度控制过程有四个阶段(见图31): ①编制进度计划; ②实施进度计划; ③检查与调整进度计划; ④分析与总结进度计划。 图31进度控制过程的四个阶段 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)。甘特图的思想比较简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间。基本是一条线条图,横轴表示时间,纵轴表示活动(项目),线条表示在整个期间上计划和实际的活动完成情况。它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比。管理者由此可便利地弄清一项任务(项目)还剩下哪些工作要做,并可评估工作进度,见图32。 图32甘特图 2) 工程进度曲线(“香蕉”曲线图) “香蕉”型曲线是两条S形曲线组合成的闭合曲线,从S形曲线比较法中得知,按某一时间开始的施工项目的进度计划,其计划实施过程中进行时间与累计完成任务量的关系都可以用一条S形曲线表示。对于一个施工项目的网络计划,在理论上总是分为最早和最迟两种开始与完成时间的。因此,一般情况下,任何一个施工项目的网络计划,都可以绘制出两条曲线: 其一是计划以各项工作的最早开始时间安排进度而绘制的S形曲线,称为ES曲线。其二是计划以各项工作的最迟开始时间安排进度而绘制的S形曲线,称为LS曲线。两条S形曲线都是从计划的开始时刻开始和完成时刻结束,因此两条曲线是闭合的。一般情况下,其余时刻ES曲线上的各点均落在LS曲线相应点的左侧,形成一个形如“香蕉”的曲线,故此其为“香蕉”型曲线。在项目的实施中,进度控制的理想状况是任一时刻按实际进度描绘的点,应落在该“香蕉”型曲线的区域内,见图33。 “香蕉”型曲线比较法的作用: 利用“香蕉”型曲线进行进度的合理安排; 进行施工实际进度与计划进度比较; 确定在检查状态下,后期工程的ES曲线和LS曲线的发展趋势。 3) 网络图计划法 (1) 单代号网络图。用一个圆圈代表一项活动,并将活动名称写在圆圈中。箭线符号仅用来表示相关活动之间的顺序,因其活动只用一个符号就可代表,故称为单代号网络图,见图34。 图33“香蕉”曲线图 图34单代号网络图 (2) 双代号网络图。双代号网络图是应用较为广泛的一种网络计划形式。它是以箭线及其两端结点的编号表示工作的网络图。双代号网络图中,每一条箭线应表示一项工作。箭线的箭尾结点表示该工作的开始,箭线的箭头结点表示该工作的结束。见图35。 图35双代号网络图 ① 箭线: 在双代号网络中,工作一般使用箭线表示,任意一条箭线都需要占用时间,消耗资源,工作名称写在箭线的上方,而消耗的时间则写在箭线的下方。 ② 虚箭线: 是实际工作中不存在的一项虚设工作,因此一般不占用资源,消耗时间,虚箭线一般用于正确表达工作之间的逻辑关系。 ③ 结点: 反映的是前后工作的交接点,接点中的编号可以任意编写,但应保证后续工作的结点比前面结点的编号大,即图中的i<j,且不得有重复。 ④ 起始结点: 即第一个结点,它只有外向箭线(即箭头离向结点)。 ⑤ 终点结点: 即最后一个结点,它只有内向箭线(即箭头指向结点)。 ⑥ 中间结点: 既有内向箭线又有外向箭线的结点。 ⑦ 线路: 即网络图中从起始结点开始,沿箭头方向通过一系列箭线与结点,最后达到终点结点的通路。一个网络图中一般有多条线路,线路可以用结点的代号来表示。 3.2.2质量保证 1. 质量保证概述 软件质量保证(SQA)是建立一套有计划、有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。它通过对软件产品和活动进行评审和审计来验证软件是合乎标准的。软件质量保证组在项目开始时就一起参与建立计划、标准和过程。这些将使软件项目满足机构方针的要求。 软件质量保证的目标: 使工作有计划进行; 客观地验证软件项目产品和工作是否遵循恰当的标准、步骤和需求; 将软件质量保证工作及结果通知给相关组别和个人; 高级管理层接触到在项目内部不能解决的不符合类问题。 2. SQA的工作内容和工作方法 1) 计划 针对具体项目制定 SQA计划,确保项目组正确执行过程。制定SQA计划应当注意如下几点。 有重点: 依据企业目标以及项目情况确定审计的重点。 明确审计内容: 明确审计哪些活动,哪些产品。 明确审计方式: 确定怎样进行审计。 明确审计结果报告的规则: 审计的结果报告给谁。 2) 审计/证实 依据 SQA计划进行SQA审计工作,按照规则发布审计结果报告。 注意审计一定要有项目组人员陪同,不能搞突然袭击。双方要开诚布公,坦诚相对。 审计内容是否按照过程要求执行了相应活动,是否按照过程要求产生了相应产品。 3) 问题跟踪 对审计中发现的问题,要求项目组改进,并跟进直到解决。 3. SQA的素质 过程为中心: 应当站在过程的角度来考虑问题,只要保证了过程,QA就尽到了责任。 服务精神: 为项目组服务,帮助项目组确保正确执行过程。 了解过程: 深刻了解企业的工程,并具有一定的过程管理理论知识。 了解开发: 对开发工作的基本情况了解,能够理解项目的活动。 沟通技巧: 善于沟通,能够营造良好的气氛,避免审计活动成为一种找茬活动。 4. SQA活动 SQA是一种应用于整个软件过程的活动,它包含: 一种质量管理方法; 有效的软件工程技术(方法和工具); 在整个软件过程中采用的正式技术评审; 一种多层次的测试策略; 对软件文档及其修改的控制; 保证软件遵从软件开发标准; 度量和报告机制。 SQA与两种不同的参与者相关——做技术工作的软件工程师和负责质量保证的计划、监督、记录、分析及报告工作的SQA小组。 软件工程师通过采用可靠的技术方法和措施,进行正式的技术评审,执行计划周密的软件测试来考虑质量问题,并完成软件质量保证和质量控制活动。 SQA小组的职责是辅助软件工程小组得到高质量的最终产品。SQA小组完成以下工作。 (1) 为项目准备SQA计划。涉及的内容包括: 需要进行的审计和评审; 项目可采用的标准; 错误报告和跟踪的规程; 由SQA小组产生的文档; 向软件项目组提供的反馈数量。 (2) 参与开发项目的软件过程描述。评审过程描述以保证该过程与组织政策、内部软件标准、外界标准以及项目计划的其他部分相符。 (3) 评审各项软件工程活动,对其是否符合定义好的软件过程进行核实。记录、跟踪与过程的偏差。 (4) 审计指定的软件工作产品,对其是否符合事先定义好的需求进行核实。对产品进行评审,识别、记录和跟踪出现的偏差; 对是否已经改正进行核实; 定期将工作结果向项目管理者报告。 (5) 确保软件工作及产品中的偏差已记录在案,并根据预定的规程进行处理。 (6) 记录所有不符合的部分并报告给高级领导者。 5. 正式技术评审 正式技术评审是一种由软件工程师和其他人进行的软件质量保障活动。 1) 目标 (1) 发现功能、逻辑或实现的错误。 (2) 证实经过评审的软件的确满足需求。 (3) 保证软件的表示符合预定义的标准。 (4) 得到一种用一致的方式开发的软件。 (5) 使项目更易管理。 2) 评审会议 3~5人参加,不超过2h,由评审主席、评审者和生产者参加,必须做出下列决定中的一个: 工作产品可不可以不经修改而被接受; 由于严重错误而否决工作产品; 暂时接受工作产品。 3) 评审总结报告、回答 评审总结报告是项目历史记录的一部分,标识产品中存在问题的区域,作为行政条目检查表以指导生产者进行改正。 4) 评审指导原则 (1) 评审产品,而不是评审生产者。注意客气地指出错误,气氛轻松。 (2) 不要离题,限制争论。有异议的问题不要争论但要记录在案。 (3) 对各个问题都发表见解。问题解决应该放到评审会议之后进行。 (4) 为每个要评审的工作产品建立一个检查表。应为分析、设计、编码、测试文档都建立检查表。 (5) 分配资源和时间。应该将评审作为软件工程任务加以调度。 (6) 评审以前所做的评审。 6. 检验项目内容 项目的检验涉及以下四个方面的内容。 1) 需求分析 检验的步骤: 需求分析→功能设计→实施计划。 检验过程需要检查的内容包括: 开发目的,目标的具体数值或参数,开发的工作量,开发所需要的资源,各阶段的产品作业内容及开发体制的合理性。 2) 设计 检验的步骤: 结构设计→数据设计→过程设计。 检验过程需要检查的内容包括: 产品的计划量与实际量,评审工作量,差错数,评审方法,出错原因及处理情况,阶段结束的判断标准。 3) 实现 检验的步骤: 程序编制→单元测试→集成测试→确认测试。 检验过程需要检查的内容包括: 程序编制,单元测试,集成测试,确认测试,测试环境,测试用例设计,以上过程的具体方法。 4) 验收 检验过程需要检查的内容包括: 说明书检查,程序检查。 3.2.3成本控制 1. 成本管理 1) 成本管理概述 成本管理是在项目具体实施过程中,为了确保完成项目所花费的实际成本不超过预算成本而展开的项目成本估算、项目预算、项目成本控制等方面的管理活动。 成本管理主要包括资源计划编制、成本估算、成本预算和成本控制等过程。其中,资源计划编制是确定项目需要的物资资源的种类和数量; 成本估算是编制一个为完成项目各活动所需要的资源成本的近似估算; 成本预算是将总成本估算分配到各单项工作活动上; 成本控制是控制项目预算的变更。资源规划是成本估算的基础和前提,有了成本估算,才可以进行成本预算,将成本分配到各个单项任务中。然后在项目实施过程中通过成本控制保证项目的成本不超预算。所以,软件的成本估算是成本管理的中心环节。 2) 成本管理的基本原则 (1) 合理化原则。成本管理的根本目的,在于通过成本管理的各种手段,促进不断降低项目成本,以达到可能实现最低目标成本的要求。但是,项目的成本并非越低越好,应研究成本降低的可能性和合理的成本最低化。一方面应挖掘各种成本降低的潜力,使可能性变为现实; 另一方面应从实际出发,制定通过主观努力可能达到的合理的费用水平。 (2) 全面管理的原则。成本管理应是全面、全过程、全员参加的管理,而不仅仅是局部的、某些阶段、某些人员参加的管理。 (3) 责任制原则。为实行全面成本管理应对成本费用进行层层分解,层层落实,明确各相关者的责任。 (4) 管理有效原则。应对成本费用进行层层分解。成本管理的有效化,就是促使项目以最小的投入,获取最大的产出; 以最少的人力和财力,完成较多的管理工作,提高管理效率。 (5) 管理科学化原则。成本管理是一种科学管理,应按信息化项目的客观规律,采用科学的方法合理确定项目的成本目标,动态管理费用发生的过程,有效降低成本的支出,最优实现项目的成本目标。 (6) 管理动态性原则。信息化项目成本管理具有动态特性,所以项目的成本管理应考虑动态性原则。即项目在进行过程中,成本可能会发生变更。无论是项目供方还是需方都应充分考虑项目成本的可变性。 2. 成本控制 项目成本控制是指项目组织为保证在变化的条件下实现其预算成本,按照事先拟订的计划和标准,通过采用各种方法,对项目实施过程中发生的各种实际成本与计划成本进行对比、检查、监督、引导和纠正,尽量使项目的实际成本控制在计划和预算范围内的管理过程。随着项目的进展,根据项目实际发生的成本项,不断修正原先的成本估算和预算安排,并对项目的最终成本进行预测的工作也属于项目成本控制的范畴。项目成本控制工作的主要内容包括以下几个方面。 (1) 识别可能引起项目成本基准计划发生变动的因素,并对这些因素施加影响,以保证该变化朝着有利的方向发展。 (2) 以工作包为单位,监督成本的实施情况,发现实际成本与预算成本之间的偏差,查找出产生偏差的原因,做好实际成本的分析评估工作。 (3) 对发生成本偏差的工作包实施管理,有针对性地采取纠正措施,必要时可以根据实际情况对项目成本基准计划进行适当的调整和修改,同时要确保所有的有关变更都准确地记录在成本基准计划中。 (4) 将核准的成本变更和调整后的成本基准计划通知项目的相关人员。 (5) 防止不正确的、不合适的或未授权的项目变动所发生的费用被列入项目成本预算。 (6) 在进行成本控制的同时,应该与项目范围变更、进度计划变更、质量控制等紧密结合,防止因单纯控制成本而引起项目范围、进度和质量方面的问题,甚至出现无法接受的风险。 有效成本控制的关键是经常及时地分析成本绩效,尽早发现成本差异和成本执行的无效率,以便在情况变坏之前能够及时采取纠正措施。一旦项目成本失控,在预算内完成项目是非常困难的,如果项目没有额外的资金支持,那么成本超支的后果就是要么推迟项目工期,要么降低项目的质量标准,要么缩小项目的工作范围,这三种情况是各方都不愿意看到的。 3. 项目成本控制的依据 1) 项目各项工作或活动的成本预算 项目各项工作或活动的成本预算是根据项目的工作分解结构图,为每个工作包进行的预算成本分配,在项目的实施过程中,通常以此为标准对各项工作的实际成本发生额进行监控,是进行成本控制的基础性文件。 2) 成本基准计划 成本基准计划是按时间分段的费用预算计划,可用来测量和监督项目成本的实际发生情况,并能够将支出与工期进度联系起来,时间是对项目支出进行控制的重要依据。 3) 成本绩效报告 成本绩效报告是记载项目预算的实际执行情况的资料,它的主要内容包括项目各个阶段或各项工作的成本完成情况,是否超出了预先分配的预算,存在一些问题等。通常用以下6个基本指标来分析项目的成本绩效。 (1) 项目计划作业的预算成本,是按预算价格和预算工作量分配给每项作业活动的预算成本。 (2) 累积预算成本,将每一个工作包的总预算成本分摊到项目工期的各个区间,这样计算出截止到某期的每期预算成本汇总的合计数,成为该时点的累积预算成本。 (3) 累积实际成本,已完工作的实际成本,截止到某一时点的每期发生的实际成本额的合计数。 (4) 累积盈余量,已完工作的预算成本,由每一个工作包的总预算成本乘以该工作包的完工比率得到。 (5) 成本绩效指数,衡量成本效率的指标,是累积盈余量同累积实际成本的比值,反映了用多少实际成本才完成了一单位预算成本的工作量。 (6) 成本差异,累积盈余量同累积实际成本之间的差异。 4) 变更申请 变更申请是项目的相关利益者以口头或者书面的方式提出的有关更改项目工作内容和成本的请求,其结果是增加或减少项目成本,有关项目的任何变动都必须经过项目业主、客户的同意,以获得他们的资金支持。项目管理者要根据变更后的项目工作范围或成本预算来对项目成本实施控制。 5) 项目成本管理计划 项目成本管理计划对在项目的实施过程中可能会引起项目成本变化的各种潜在因素进行识别和分析,提出解决和控制方案,为确保在预算范围内完成项目提供一个指导性的文件。 4. 项目成本控制的方法 有效的成本控制的关键是经常及时地分析费用绩效,以便在情况变坏之前能够采取纠正措施积极解决它,从而减缓对项目范围和进度的冲击。成本控制的常用工具和技术有如下几种。 1) 成本变更控制系统 这是一种项目成本控制的程序性方法,主要通过建立项目成本变更控制体系,对项目成本进行控制。该系统主要包括三个部分: 成本变更申请、按准成本变更申请和变更项目成本预算。提出成本变更申请的人可以是项目业主、客户、项目管理者、项目经理等项目的一切利益相关者。所提出的项目成本变更申请呈交到项目经理或项目其他成本管理人员,然后这些成本管理者根据严格的项目成本变更控制流程,对这些变更申请进行一系列的评估,以确定该项变更所导致的成本代价和时间代价,再将变更申请的分析结果报告给项目业主、客户,由他们最终判断是否接受这些代价,核准变更申请。变更申请被批准后,需要对相关工作的成本预算进行调整,同时对成本基准计划进行相应的修改。最后,注意成本变更控制系统应该与其他变更控制系统相协调,成本变更的结果应该与其他变更结果相协调。 2) 绩效测量 绩效测量主要用于估算实际发生变化的方法,如挣值分析法等。在费用控制过程中,要把精力放在那些费用绩效指数小于1或费用差异较小的工作包上,而且费用绩效指数和费用差异越小越要优先考虑,以减少费用或提高项目进行的效率。在采取措施时主要应针对近期的工程活动和具有较大估计费用的活动上,因为越晚采取行动则造成的损失就可能越大,纠正的可能性也就越小,而费用估算较大的活动,减少其成本的机会也就越多。 具体而言,降低项目费用的方法有很多种,如改用满足要求但成本较低的资源,提高项目团队的水平以促使他们更加有效地工作,或者减少工作包和特定活动的作业范围和要求。 另外,即使功用差异为正值,也不可掉以轻心,而要想办法控制项目费用,让其保持下去,因为一旦费用绩效出现了麻烦,再要使它回到正轨上来往往是很不容易的。 3) 挣值法 挣值法是用以分析目标实施与目标期望之间差异的一种方法。挣值法又称为赢得值法或偏差分析法。 挣值法通过测量和计算已完成工作的预算费用与已完成工作的实际费用,将其与计划工作的预算费用相比较得到项目的费用偏差和进度偏差,从而达到判断项目费用和进度计划执行状况的目的。 3.2.4软件项目管理工具 1. 项目管理 项目管理是基于现代管理学基础之上的一门管理学科,它把企业管理中的财务控制、人才资源管理、风险控制、质量管理、信息技术管理(沟通管理)、采购管理等有效地进行整合,以达到高效、高质、低成本地完成企业内部各项工作或项目的目的。项目管理目前已成为继MBA之后的一种“黄金职业”。 项目管理的核心是“四控两管一协同”。“四控”指控制进度、质量、费用和风险,“两管”指合同管理和信息管理,“一协同”指项目内外的沟通协同工作。 随着IT行业的发展,IT行业内的项目拓展和投资比比皆是。为了提高项目管理水平,赢得市场竞争,特别是在加入WTO后在国内、国际市场上拥有与国际接轨的项目管理人才,越来越多的业界人士正通过不同的方式参加项目管理培训并力争获得世界上最权威的职业项目经理(PMP)资格认证。 软件项目管理是为了完成一个既定的软件开发目标,在规定的时间内,通过特殊形式的临时性组织运行机制,通过有效的计划、组织、领导与控制,在明确的可利用的资源范围内完成软件开发。软件项目管理的对象是软件项目。 2. 软件项目管理软件 1) 项目管理软件的定义 在进行项目管理的时候,常常需要辅助工具,即项目管理软件。 项目管理软件为了使工作项目能够按照预定的成本、进度、质量顺利完成,而对人员、产品、过程和项目进行分析和管理。通常,项目管理软件具有预算、成本控制、计算进度计划、分配资源、分发项目信息、项目数据的转入和转出、处理多个项目和子项目、制作报表、创建工作分析结构、计划跟踪等功能。这些工具可以帮助项目管理者完成很多工作,是项目经理的得力助手。主要有工程项目管理软件和非工程项目管理软件两大类。 根据项目管理软件的功能和价格,大致可以划分两个档次: 一种是高档工具,功能强大,但是价格不菲。例如,Primavera 公司的P3、Welcom公司的OpenPlan、北京梦龙公司的智能PERT系统、Gores公司的Artemis等。另外一种是通用的项目管理工具,例如TimeLine公司的TimeLine、Scitor的Project Scheduler、Microsoft的 Project、上海沙迪克软件有限公司的ALESH等,它们的功能虽然不是很强大,但是价格比较便宜,可以用于一些中小型项目。 但对于一般的软件项目管理,Microsoft Project足以应对,它可以算是目前软件项目管理中最常用的工具之一。Microsoft Project是微软公司的产品,目前已经占领了通用项目管理软件市场比较大的份额。 Microsoft Project可以创建并管理整个项目,它的数据库中保存了有关项目的详细数据,可以利用这些信息计算和维护项目的日程、成本以及其他要素,创建项目计划并对项目进行跟踪控制。Microsoft Project的版本从Project 98、 Project 2000、Project 2002、Project 2003、Project 2006到Project 2019。Microsoft Project的配套软件Microsoft Project Server可以用来给整个项目团队提供任务汇报、日程更新、每个项目耗时记录等协同工作方式。实际上,在中国,Project 2003比较常见,用户特别多,其概念功能可基本满足用户的需要。 2) 项目管理软件的发展 随着微型计算机的出现和运算速度的提高,20世纪80年代后项目管理技术也呈现出繁荣发展的趋势,涌现出大量的项目管理软件。根据管理对象的不同,项目管理软件可分为: ①进度管理; ②合同管理; ③风险管理; ④投资管理等软件。根据提高管理效率、实现数据/信息共享等方面功能的实现层次不同,又可分为: ①实现一个或多个项目的管理手段,如进度管理、质量管理、合同管理、费用管理,或者它们的组合等; ②具备进度管理、费用管理、风险管理等方面的分析、预测以及预警功能; ③实现了项目管理的网络化和虚拟化,实现基于Web的项目管理软件甚至企业级项目管理软件或者信息系统,企业级项目管理信息系统便于项目管理的协同工作,数据/信息的实时动态管理,支持与企业/项目管理有关的各类信息库对项目管理工作的在线支持。 国外的项目管理软件有: Primavera公司的P3、Artemis公司的Artemis Viewer、NIKU公司的Open Work Bench,这些软件适合大型、复杂项目的项目管理工作; 而Sciforma公司的Project Scheduler(PS)、Primavera公司的Sure Trak、Microsoft公司的Project、IMSI公司的Turbo Project等则是适合中小型项目管理的软件。值得一提的是,SAP公司的Project Systems(PS) Module也是一个不错的企业级项目管理软件。 国内的工程项目管理软件功能较为完善的有: 新中大软件、邦永科技PM2、建文软件、三峡工程管理系统(TGPMS)、易建工程项目管理软件等,基本上是在借鉴国外项目管理软件的基础上,按照我国标准或习惯实现上述功能,并增强了产品的易用性。非工程类项目管理软件是微软Project软件。国内项目管理软件企业中发展比较快的有深圳市捷为科技有限公司的iMIS PM等软件,根据软件管理功能和分类的不同,各种项目管理软件价格的差异也较大,从几万元到几十万元不等。适于中小型项目的软件价格一般仅为几万元,适于大型复杂项目的软件价格则为十几万到几百万元。值得一提的是,邦永科技PM2项目管理系统,是国内为数不多的,可以实现对工程项目进行全过程管理的企业级的工程项目管理平台。 3.2.5软件项目管理工具的特征与选择 1. 项目管理软件的特征 1) 预算及成本控制 大部分项目管理软件系统都可以用来获得项目中各项活动、资源的有关情况。另外,还可以利用用户自定义公式来运行成本函数。大部分软件程序都应用这一信息来帮助计算项目成本,在项目过程中跟踪费用。大多数软件程序可以随时显示并打印出每项任务、每种资源(人员、机器等)或整个项目的费用情况。 2) 日程表 大部分系统软件都对基本工作时间设置一个默认值,例如,星期一到星期五,早上8点到下午5点,中间有一小时的午餐时间。对于各个单项资源或一组资源,可以修改此日程表。汇报工作进程时要用到这些日程表,它通常可以根据每个单项资源按天、周或月打印出来,或者将整个项目的日程打印成一份全面的,可能有墙壁那么大的项目日程表。 3) 电子邮件 一些项目管理软件程序的共同特征是可以通过电子邮件发送项目信息。通过电子邮件,项目团队成员可以了解重大变化,如最新的项目计划或进度计划,可以掌握当前的项目工作情况,也可以发出各种业务表格。 4) 图形 当前项目管理软件的一个最突出的特点是能在最新数据资料的基础上简便、迅速地制作各种图表,包括甘特图及网络图。有了基准计划后,任何修改就可以轻易地输入到系统中,图表自动会反映出这些改变。项目管理软件可以将甘特图中的任务连接起来,显示出工作流程。特别是用户可以仅用一个命令就在甘特图和网络图之间来回转换显示。 5) 转入/转出资料 许多项目管理软件包允许用户从其他应用程序,如文字处理、电子表格以及数据库程序中获得信息。为项目管理软件输入信息的过程叫作转入。同样地,常常也要把项目管理软件的一些信息输入到这些应用程序中去。发出信息的过程叫作转出。 6) 处理多个项目及子项目 有些项目规模很大,需要分成较小的任务集合或子项目。在这种情况下,大部分项目管理软件程序能提供帮助。它们通常可以将多个项目存储在不同文件里,这些文件相互连接。项目管理软件也能在同一个文件中存储多个项目,同时处理几百个甚至几千个项目,并绘制出甘特图和网络图。 7) 制作报表 项目管理软件包在最初应用时,一般只有少数报表,通常是列表总结进度计划、资源或预算。今天,绝大多数项目管理软件包都有非常广泛的报表功能。 8) 资源管理 目前的项目管理软件都有一份资源清单,列明各种资源的名称、资源可以利用时间的极限、资源标准及过时率、资源的收益方法和文本说明。每种资源都可以配以一个代码和一份成员个人的计划日程表。对每种资源加以约束,比如它可被利用的时间数量。用户可以按百分比划分任务配置资源,设定资源配置的优先标准,为同一任务分配各个资源,并保持对每项资源的备注和说明。系统能突出显示并帮助修正不合理配置,调整和修匀资源配置。大部分软件包可以为项目处理数以千计的资源。 9) 计划 在所有项目管理软件包中,用户都能界定需要进行的活动。正如软件通常能维护资源清单,它也能维护一个活动或任务清单。用户对每项任务选取一个标题、起始与结束日期、总结评价,以及预计工期(包括按各种计时标准的乐观、最可能及悲观估计),明确与其他任务的先后顺序关系以及负责人。通常,项目管理软件中的项目会有几千个相关任务。另外,大部分程序可以创建工作分析结构,协助进行计划工作。 10) 项目监督及跟踪 大部分项目管理软件包允许用户确定一个基准计划,并就实际进程及成本与基准计划里的相应部分进行比较。大部分系统能跟踪许多活动,如进行中或已完成的任务、相关的费用、所用的时间、起止日期、实际投入或花费的资金、耗用的资源,以及剩余的工期、资源和费用。关于这些临近和跟踪特征,管理软件包有许多报告格式。 11) 进度安排 在实际工作中,项目规模往往比较大,人工进行进度安排活动就显得极为复杂了。项目管理软件包能为进度安排工作提供广泛的支持,而且一般是自动化的。大部分系统能根据任务和资源清单以及所有相关信息制作甘特图及网络图,对于这些清单的任何变化,进度安排会自动反映出来。此外,用户还能调度重复任务,制定进度安排任务的优先顺序,进行反向进度安排,确定工作轮班,调度占用时间,调度任务,确定最晚开始或尽早开始时间,明确任务必须开始或必须结束日期,或者是最早、最晚日期。 12) 保密 项目管理软件一个相对新颖的特点是安全性。一些系统对项目管理包自身、单个项目文件、项目文件中的基本信息(例如工资)均设有口令密码。 13) 排序及筛选 利用排序,用户可以按随心所欲的顺序来浏览信息,如从高到低的工资率,按字母顺序的资源名称或任务名称。大部分程序有各种排序方式(如按名、姓等)。筛选功能帮助用户选择出符合具体准则的一些资源。例如,某些任务要用到某种具体资源,用户如果想了解这些任务的有关信息,只需命令软件程序忽略未使用这种的任务,而只把用到这种资源的任务显示出来就可以了。 14) 假设分析 项目管理软件一个非常实用的特点是进行假设分析。用户可以利用这一特点来探讨各种情形的效果。在某一项目的一些结点上,用户可以向系统询问: “如果拖延一周,会有什么结果?”系统会自动计算出延迟对整个项目的影响,并显示出结果。 2. 项目管理软件选择标准 市场上出现了各种各样的项目管理软件,各种软件都有着自身的优点和缺点,那么我们该如何来选取最适合自己的项目管理软件呢?可以通过考虑以下因素根据个人和企业需求来选取和购买合适的项目管理软件。 1) 容量 这主要是考虑系统是否能够处理预计进行的项目数量、预计需要的资源数以及预计同时管理的项目数量。 2) 操作简易性 主要应考虑系统的“观看”和“感觉”效果、菜单结构、可用的快捷键、彩色显示、每次显示的信息容量、数据输入的简易性、现在数据修改的简易性、报表绘制的简易性、打印输出的质量、屏幕显示的一致性,以及熟悉系统操作的难易程度。 3) 文件编制和联机帮助功能 主要考虑用户手册的可读性,用户手册里概念的逻辑表达,手册和联机帮助的详细程度,举例说明的数量、质量,对高级性能的说明水平。 4) 可利用的功能 一定要考虑系统是否具备项目组织所需要的各种功能。例如,程序是否包含工作分析结构以及甘特图和网络图,资源平衡或均衡算法怎么样?系统能否排序和筛选信息、监控预算、生成定制的日程表,并协助进行跟踪和控制?它能否检查出资源配置不当并有助于解决? 5) 报表功能 目前,各种项目管理软件系统的主要不同之处是它们提供的报表种类和数量。有些系统仅有基本的计划、进度计划和成本报表,而有一些则有广泛的设置,对各个任务、资源、实际成本、承付款项、工作进程以及其他一些内容提供报表。另外,有些系统更便于定制化。对报表功能应给予高度的重视,因为大多数用户非常注重软件这种能生成内容广泛、有说服力的报表的功能。 6) 与其他系统的兼容能力 在当今的数字化社会里,大量的电子系统日趋统一。如果用户的工作环境里,数据存储在各个地方,如数据库、电子数据表里,这时就要特别注意项目管理软件的兼容统一能力。有些系统只能与少数几种常见的软件包进行最基本的统一,有些却可以与分布数据库甚至对象向数据库进行高级的综合统一。另外,项目管理软件通过电子信箱向文字处理及图形软件包转入信息的能力也会影响到决策。 7) 安装要求 这里主要考虑运行项目管理软件对计算机硬件和软件的要求: 存储器、硬盘空间容量、处理速度和能力、图形显示类型、打印设置以及操作系统等。 8) 安全性能 有些项目管理软件有相对更好的安全性。如果安全问题很重要,那么就要特别注意对项目管理软件、每个项目文件及每个文件数据资料的限制访问方式。 9) 经销商的支持 要特别注意,经销商或零售商是否提供技术支持、支持的费用,以及经销商的信誉。 3.3软件开发项目监理工具 3.3.1软件开发项目监理概述 1. 软件开发项目监理的必要性 由于软件工程项目投资方或业主在信息技术方面相关专业技术、人才和经验的不足,投资方自行管理无益于提高项目投资的效益和建设水平,因为在整个软件生命周期中,需求分析、概要设计、详细设计、程序实现、运行和维护等各个阶段都对软件质量产生不同程度的影响,而投资方能介入或监控的往往只有需求分析和运行维护等有限的部分,因此,具有丰富经验、扎实的专业知识的第三方监理将能分担投资方遇到的困难,保证软件开发的顺利进行和软件可靠性。另外,监理方可以合理地协调投资方和开发方之间的关系,在项目实施过程存有争议时,可以由第三方在各个阶段给予公正、恰当、权威的评价。总之,实行第三方监理制度, 将使软件开发组织努力改进其过程管理,规范其开发过程,使文档标准化,同时在一定程度上帮助软件企业提升软件开发的技术水平,使得软件产品的质量从管理上得到保证,有利于软件产业的发展。 2. 软件开发项目监理的发展背景 依据原信息产业部2002年11月颁布的《信息系统工程监理暂行规定》,信息系统工程监理是指依法设立且具备相应资质的信息系统工程监理单位,受业主单位委托,依据国家有关法律法规、技术标准和信息系统工程监理合同,对信息系统工程项目实施的监督管理。 2009年11月,工业和信息化部发布《关于开展信息系统监理工程师资格认定有关事项的通知》规定: 为了适应信息系统工程监理行业发展需要,进一步推进信息系统工程监理单位资质管理,根据行政许可有关要求,经部计算机信息系统集成资质认证工作办公室研究,自2010年1月1日起,开展信息系统工程监理工程师资格认定。同年12月,工业和信息化部发布《关于信息系统工程监理单位资质认证的补充通知》规定: 为了更好地推动信息系统工程监理行业发展,规范信息系统工程监理临时资质认证工作,促进从业单位监理能力提高,经部计算机信息系统集成资质认证工作办公室研究,决定在监理资质认证中分步要求取得信息系统工程监理工程师资格人员数量。 2014年12月5日,国家标准化管理委员会下发《中华人民共和国国家标准公告(2014年第27号)》,公布信息技术服务标准(ITSS)族中的《信息技术服务 监理 第1部分: 总则》国家标准修订完成并颁布实施,国家标准号为GB/T 19668.1—2014。另外,《信息技术服务 监理 第2部分: 基础设施工程监理规范》《信息技术服务 监理 第3部分: 软件工程监理规范》《信息技术服务 监理 第4部分: 信息化工程安全监理规范》《信息技术服务 监理 第5部分: 运行维护监理规范》《信息技术服务 监理 第6部分: 应用系统: 数据中心工程监理规范》将陆续颁布实施。 以上颁布的规定或标准,使软件开发项目监理工作有了法律依据。 3. 软件开发项目监理的概念 信息系统监理指由建设方授权依照国家法律法规以及合同、行业标准、规范等对信息系统工程实施的监督和管理。在法律上是独立的第三方。与建设方签订委托合同。监理费用由建设方来承担。 软件开发项目监理是信息系统工程监理的一部分,指具备相应资质的信息系统工程监理单位,受业主委托,依据国家或地方有关法规、技术标准及双方签订的信息系统工程监理实施方案,对软件开发项目中的信息资源系统、信息应用系统工程进行保护投资、控制质量、确保进度等一系列的监督和管理。 4. 软件开发项目监理工具 “精研软件工程监理平台”是基于互联网的软件工程监理平台,其融合了软件工程管理念,以CMM 理论为框架,使一个甲方和多个乙方的相关工作都建立在这个可视化的管理平台上,使开发过程中相关角色之间可以协同,从而实现软件质量保障、项目异地开发、测试、验收、结算支付等功能的开放式过程管理,控制了质量、进度和成本。它是北京万维易化系统软件开发有限公司开发的产品。 在质量控制方面,整个项目被分成需求分析、概要设计、详细设计、编码和系统测试五个阶段,每一家承建单位都要按照系统要求,在完成每个阶段任务后,向系统提交项目进展报告、文档及测试用例,只有通过业主考核的承建单位才能进入下一阶段工程实施。如果出现问题将被要求及时修改,这与以往整个项目做完后再进行测试的做法完全不同。 在进度控制方面,由于进度是软件开发项目中必须严格控制的因素,任何一方的一个小项目不按时完成都有可能会给其他项目造成延误和经济损失,可谓“牵一发而动全身”,更何况整个工程涉及十几家承建单位。监理平台能够实时监控每个阶段和细节的进程状态、人员分配、成本等情况,项目主管对每一个任务的每一个进程都了如指掌。如果某段工期超出预定时间,系统就可以通过“催办”功能对相应人员进行业务办理提示,督促其尽快完成任务,这种机制一改过去那种只能凭人脑和经验办事的做法。 在成本控制方面,业主单位在事前将每一阶段费用按比例进行规定,系统设立费用申请和审批功能,承建单位在每一阶段提交费用申请后,只有业主单位在网上批示后才能够开工。不仅如此,系统随时会对前期预算费用和实际费用做比较,及时体现成本超支现象,从而解决以前项目中存在的费用管理混乱、账目不清、超支等难题。 3.3.2软件开发项目监理的内容 软件开发项目监理的中心任务是科学地规划和控制软件开发项目的投资、进度和质量三大基本目标。监理的基本方法是目标规划、动态控制、组织协调和合同管理。监理工作贯穿规划、设计、实施和验收的全过程。软件开发项目监理正是通过对其投资控制、进度控制、质量控制、风险控制、合同管理、信息管理以及相关的协调工作来实现对软件开发项目进行监督和管理,保证工程项目的顺利进行。软件开发项目监理的工作可以概括为如下几个方面。 1. 成本控制 成本控制的任务,主要是在建设前期进行可行性研究,协助建设单位正确地进行投资决策; 在设计阶段对设计方案、设计标准、总概(预)算进行审查; 在建设准备阶段协助确定标底和合同造价; 在实施阶段审核设计变更,核实已完成的工程量,进行工程进度款签证和索赔控制; 在工程竣工阶段审核工程结算。 2. 进度控制 进度控制首先要在建设前期通过周密分析研究确定合理的工期目标,并在实施前将工期要求纳入承包合同; 在建设实施期通过运筹学、网络计划技术等科学手段,审查、修改实施组织设计和进度计划,做好协调与监督,排除干扰,使单项工程及其分阶段目标工期逐步实现,最终保证项目建设总工期的实现。 3. 质量控制 质量控制要贯穿在项目建设从可行性研究、设计、建设准备、实施、竣工、启用及用后维护的全过程。主要包括组织设计方案评比,进行设计方案磋商及图纸审核,控制设计变更; 在施工前通过审查承建单位资质等; 在施工中通过多种控制手段检查监督标准、规范的贯彻; 以及通过阶段验收和竣工验收把好质量关等。 4. 风险控制 风险控制是指风险管理者采取各种措施和方法,消灭或减少风险事件发生的各种可能性,或风险控制者减少风险事件发生时造成的损失。作为管理者会采取各种措施减小风险事件发生的可能性,或者把可能的损失控制在一定的范围内,以避免在风险事件发生时带来的难以承担的损失。 5. 合同管理 合同管理是进行投资控制、工期控制和质量控制的手段。因为合同是监理单位站在公正立场采取各种控制、协调与监督措施,履行纠纷调解职责的依据,也是实施三大目标控制的出发点和归宿。 6. 信息管理 信息管理包括投资控制管理、设备控制管理、实施管理及软件管理。 7. 协调 协调贯穿在整个信息系统工程从设计到实施再到验收的全过程。主要采用现场和会议方式进行协调。 总之,“四控两管一协调”构成了软件开发项目监理工作的主要内容。为完满地完成软件开发项目监理基本任务,监理单位首先要协助建设单位确定合理、优化的三大目标,同时要充分估计项目实施过程中可能遇到的风险,进行细致的风险分析与评估,研究防止和排除干扰的措施以及风险补救对策,使三大目标及其实现过程建立在合理水平和科学预测基础之上。其次,要将既定目标准确、完整、具体地体现在合同条款中,绝不能有含糊、笼统和有漏洞的表述。最后才是在信息工程建设实施中进行主动的、不间断的、动态的跟踪和纠偏管理。 思考题 一、 名词解释 1. 软件配置管理工具 2. 软件开发监理工具 3. 项目管理工具 4. 项目进度管理 5. 质量保证 6. 成本控制 7. 甘特图 8. “香蕉”曲线图 9. 软件质量保证 二、 简答题 1. 软件配置管理有哪些内容? 2. 软件配置管理中使用了哪些模式? 3. 软件配置管理有什么作用? 4. 简单介绍软件配置管理过程中的活动。 5. 配置状态报告的主要内容是什么? 6. 成熟软件配置管理工具有哪些特征? 7. 软件开发监理工作包括哪几方面工作? 8. 进度控制有哪几个过程? 三、 分析题 1. 详细分析软件配置管理工具SCM的功能。 2. 分析软件配置管理工具的发展。 3. 项目管理的“四控两管一协同”包括什么? 4. 为什么要进行软件开发项目的监理?