第1章软件项目管理概述1. 1项目与软件项目信息产业是目前发展较快的行业之一,也是对社会影响较大的行业之一,“软件”、“项目"、“软件项目”等概念已经越来越被大家所熟悉,并且普遍存在于我们生活或者社会的各个方面。软件行业是一个极具挑战性和创造性的行业,而软件项目管理也是一项具有挑战性的工作。项目管理是保证项目成功的必要手段。1.1.1项目及其特征人类社会和日常生活中有很多的活动,然而有的活动我们称之为项目,有的则不能称为项目。项目(prject)就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力;是以一套独特而相互联系的任务为前提,有效地利用资源,在一定时间内满足一系列特定目标的多项相关工作的总称。一般来说,日常运作和项目是两种主要的活动。它们虽然有共同点,例如,它们都需要由人来完成,均受到有限资源的限制,均需要计划、执行、控制,但是项目是组织层次上进行的具有时限性和唯一性的工作,也许需要一个人,也许涉及成千上万的人,也许需要100小时完成,也许要10年1千人完成,等等。“上班”、“批量生产”、“每天的卫生保洁”等属于日常运作,不是项目。项目与日常运作的不同是:项目是一次性的,日常运作是重复进行的;项目是以目标为导向的,日常运作是通过效率和有效性体现的;项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理;项目存在大量的变更管理,日常运作基本保持持续的连贯性。。下面介绍项目所具有的特征1)目标性。项目的目的在于得到特定的结果,即项目是面向目标的。其结果可能是一种产品,也可能是一种服务。目标贯穿于项目始终一系列的项目计划和实施活动都是围绕这些一个软件项目的最终目标可以是开发一个学生成绩管理系统。目标进行的。例如,2)相关性。项目的复杂性是固有的,一个项目有很多彼此相关的活动,例如,某些活动在其他活动完成之前不能启动,而另一些活动必须并行实施,如果这些活动相互之间不能协调地开展,就不能达到整个项目的目标。3)临时性。项目要在一个限定的期间内完成,是一种临时性的任务,有明确的开始点和
2第1章软件项目管理概述结束点。当项目的目标达到时,意味着项目任务完成。项目管理的很大一部分精力是用来保证在预定时间内完成项目任务,为此而制定项目计划进度表,标识任务何时开始、何时结束。项目任务不同于批量生产。批量生产是相同的产品连续生产,取决于要求的生产量,当生产任务完成时,生产线停止运行,这种连续生产不是项目。)独特性。在一定程度上,项目与项目之间没有重复性,每个项目都有其独自的特点。每一个项目都是唯一的。如果一位工程师正在按照规范建造第五十栋农场式的住宅,其独特性一定很低,它的基本部分与已经造好的第四十九栋是相同的,如果说其有特殊性,也只是在于其地基的土壤不同,使用了个新的热水器,请了几位新木工,等等。然而,如果要为新一代计算机设计操作系统,则该工作必然会有很强的独特性,因为这个项目以前没有做过,可供参考的经验并不多。5)资源约束性。每一项目都需要运用各种资源作为实施的保证,而资源是有限的,所以资源是项目成功实施的一个约束条件。6)不确定性。一个项目开始前,应当在一定的假定和预算基础上制订一份计划,但是,在项目的具体实施中,外部因素和内部因素总是会发生一些变化,会存在一定的风险和很多不确定性因素,因此项目具有不确定性。1.1.2项目群与项目、项目与子项目的关系项目群也称为大型项目(program),是通过协调来进行统一管理的一组相互联系的项目,一个大型项目可以理解为比项它本身可能不是项目。许多大型项目通常包括持续运作的活动。目高一级别的大项目,如“863计划”、“星火计划”、“登月计划”、“阿波罗登月计划”等。以“863计划”为例,它的目标是赶超世界先进水平,集中资源重点投人,争取在我国部分有优势的高科技领域有所突破,为我国在21世纪的经济发展和国防安全创造条件。这样的目标是战略性的,很难具体化,但它可以通过一系列的具体项目去实施。子项目(subproiect)是将项目分解成为更小单位,以便更好控制项目。项目中的某一阶段可以是一个单独的项目,也可以是一个子项目,个子项目可以转包给外部机构的一个单元。在实际工作中,子项目的划分是很灵活的,可以视项目的需要而定。可以按照阶段划分子项目,如一期项目、二期项目也可以按照项目的组成部分划分子项目。1.1.3软件项目软件是计算机系统中与硬件相互依存的部分,是包括程序、数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。软件项目除了具备项目的基本特征之外,还有如下特点:1)软件是一种逻辑实体,不是具体的物理实体,具有抽象性,这使得软件与其他的诸如硬件或者工程类项目有很多的不同之处2)软件的生产与硬件不同,开发过程中没有明显的制造过程,也不存在重复生产过程。3)软件没有硬件的机械磨损和老化问题,然而,软件存在退化问题。在软件的生存期中,软件环境的变化导致软件的失效率提高4)软件的开发受到计算机系统的限制,对计算机系统有不同程度的依赖。5)软件开发至今没有摆脱手工的开发模式,软件产品基本上是“定制的”,无法利用现有的软件组件组装成所需要的软件6)软件本身是复杂的。其复杂性来自于应用领域实际问题的复杂性和应用软件技术的复
第1章软件项目管理概述3杂性。7)软件的成本相当高昂。软件开发需要投人大量资金和高强度的脑力劳动,因此成本比较高8)很多软件工作涉及社会的因素,例如,许多软件开发受到机构、体系和管理方式等问题的限制。软件项目是一种特殊的项目,它创造的唯一产品或者服务是逻辑载体,没有具体的形状和尺寸,只有逻辑的规模和运行的效果。软件项目不同于其他项目,软件是一个新领域而且涉及的因素比较多,管理比较复杂。目前,软件项目的开发远远没有其他领域的项目规范,很多的理论还不适用于所有软件项目,经验在软件项目中仍起很大的作用。软件项目由相互作用的各个系统组成,“系统”包括被此相互作用的部分。软件项目中涉及的因素越多,被此之间的相互作用就越大。另外,变更也是软件项目中常见的现象,如需求的变更、设计的变更、技术的变更、社会环境的变更等,这些均说明了软件项目管理的复杂性。项目的独特性和临时性决定项目是渐进明细的,软件项目更是如此,因为软件项目比其他项目有更大的独特性。“渐进明细”表明项目的定义会随着项目团队成员对项目、产品等的理解、认识的逐步加深而得到逐渐深人的描述。软件行业是一个极具挑战性和创造性的行业,软件开发是一项复杂的系统工程,牵涉各方面的因素。软件项目的特征包括需求的不确定性和开发过程中存在技术风险。在实际工作中经常会出现各种各样的问题,甚至软件项目会面临失败。如何总结、分析失败的原因得出有益的教训,是今后项目取得成功的关键。软件项目要素组成1.1.4简单地说,项目就是在既定的资源和要求的约束下,为实现某种目的而相互联系的一次性工作任务。。一个软件项目的要素包括软件开发的过程、软件开发的结果、软件开发赖以生存的资源及软件项目的特定委托人(或者说是客户,既是项目结果的需求者,也是项目实施的资金提供者)1.1.5项目目标实现的制约因素项目目标就是在一定时间、预算内完成项目范围内的事项,以使客户满意。一个成功的项目应该在项目允许的范围内满足成本、进度要求,并达到客户满意的产品质量。所以,项目目标的实现受4个因素制约:项目范围、成本、进度计划和客户满意度,见图1-1。项目范围是为使客户满意必须做的所有工作。成本是完成项目范围)成本项目所需要的费用。进度计划安排每项任务的起止时间及所需的资源等,为项目描绘一个过程蓝图。客户能否满意要看交付的成果质量,只有客户满意才能意味着可以更快地结束项(客户满意度)进度计目,否则会导致项目的拖延,从而增加额外的费用。图1-1项目目标实现的制约因素1. 2项目管理项目普遍存在于人们的工作和生活中,如何管理这些项目是一项需要研究的任务。项目管理起源于美国,20世纪40~50年代主要应用于国防和军工项目,后来广泛应用于工商、金融、信息等产业及行政管理领域。目前,项目管理已经成为综合多门学科的新兴研究领域,其理论
4第1章软件项目管理概述来自于项目管理的工作实践。项目管理是指把各种系统、方法和人员结合在一起,在规定的时间、预算和质量目标范围内完成项目的各项工作。对于一个组织的管理而言,项目管理主要包括3个部分,即战略管理、运作管理、项目管理,见图1-2。·战略管理(strategymanagement)是从宏观上帮助企业明确战略管理和把握企业的发展方向的管理。·运作管理(operation management)是对日常的、重复性工作的管理。项目管理运作管理。项目管理(project management)是对一次性、创新性工作的管理。项目是企业的最小盈利单位,项目管理自然成为构筑企业利图1-23种管理的关系润的基石,从这种意义上说,项目管理是企业的核心竞争力所在。由于项目管理具有效率高、反应灵敏的优点,因此更多的企业希望采取项目式管理的方式(managementby project),从而可以对用户反应更及时,使管理更高效,提高企业的管理质量实施项目管理可以提高项目的效益。这里所指的项目的效益是一个综合性指标,包括低风险、高产出等。因此,不难得出我们在实施项目管理应该掌握的度,即引人项目管理后所产生的效益减去项目管理的成本后必须大于未引人项目管理时的效益。由于引人项目管理后所产生的效益与项目管理的复杂度(项目管理的成本)并非线性相关的,因此项目管理的复杂度必然存在一个最优值,这就是我们应该掌握的度,这个度被大家认可并且能够被准确地理解和实施。1.2.1项目管理背景随着世界由工业时代进入信息时代,时空概念的根本改变加剧了项目的复杂性和可变性项目涉及的范围和时间、空间跨度都在以空前的速度扩大。而随着行业竞争的加剧,项目只有在最少时间、最低成本的情况下完成才有意义。项目本身的复杂性和巨大风险及在分工合作中个人经验的不确定性,使个人经验已无法确保项自的成功或按时完成。项目管理是20世纪50年代后期发展起来的一种计划管理方法,它一出现就引起广泛关注。1957年,美国杜邦公司把这种方法应用于设备维修,把维修停工时间由125小时锐减为78小时。1958年,美国人在北极星导弹设计中应用项目管理技术,把设计完成时间缩短了两年。由于项目管理在运作方式和管理思维模式上最大限度地利用了内外资源,从根本上改善了管理人员的工作程序,提高了效率,降低了风险,因此自20世纪60年代以来它被广泛运用于航空航天、国防、信息、建筑、能源、化工、制造、环保、交通运输、金融、营销、服务、法律等行业。它不仅适用于大公司,而且适用于小型企业。目前,在全球发达国家的政府部门和企业机构中,项目管理已成为运作的中心模式。1.2.2项目管理定义项目管理是指一定的主体,为了实现其目标,利用各种有效的手段,对执行中的项目周期的各阶段工作进行计划、组织、协调、指挥、控制,以取得良好经济效益的各项活动的总和。通过项目各方干系人的合作,把各种资源应用于项目,以实现项目的目标,使项目干系人的需求得到不同程度的满足。因此,项目管理是一系列伴随着项目的进行而进行的,目的是确保项目能够达到期望结果的一系列管理行为。要想满足项目干系人的需求和期望,达到项目目标
第1章软件项目管理概述5需要在下面这些相互间有冲突的要求中寻求平衡:1)范围、时间、成本和质量。2)有不同需求和期望的项目干系人。3)明确表示出来的要求(需求)和未明确表达的要求(期望)。项目管理有时被描述为对连续性操作进行管理的组织方法。这种方法,更准确地应该被称为“由项目实施的管理”,它是将连续性操作的许多方面作为项目来对待,以便对其可以采用项目管理的方法。所以,对于一个通过项目实施管理的组织而言,对项目管理的认识显然是非常重要的。项目管理是要求在项目活动中运用知识、技能、工具和技术,以便达到项目目标的活动。项目管理类似导弹发射的控制过程,需要一开始设定好目标,然后在飞行中锁定目标,同时不断调整导弹的方向,使之不能偏离正常的轨道,最终击中目标软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。1.2.3软件项目管理的特征及重要性当前社会的特点是“变化”,而这种变化在信息产业中体现得尤为突出,技术创新速度越来越快,用户需求与市场不断变化,人员流动也大大加快。在这种环境下,企业需要应对的变化及由此带来的挑战大大增加,也给管理带来了很多问题和挑战。目前软件开发面临很多的问题,例如:1)在有限的时间、资金内,要满足不断增长的软件产品质量要求。2)开发的环境日益复杂,代码共享日益困难,需跨越的平台增多。3)程序的规模越来越大。4)软件的重用性需要提高。5)软件的维护越来越困难。因此,软件项目管理显得更为重要。软件项目管理是在20世纪70年代中期由美国提出的,当时美国国防部专门研究了软件开发不能按时提交、预算超支和质量达不到用户要求的原因,结果发现70%的项目是因为管理不善引起的,而非技术原因。于是软件开发者开始逐渐重视起软件开发中的各项管理。软件项目管理和其他项目管理相比具有以下特殊性。1)软件是纯知识产品其开发进度和质量很难估计和度量,生产效率也难以预测和保证。与普通的项目不同,软件项目的交付成果事先“看不见”,并且难以度量,特别是很多应用软件项目已经不再是业务流程的“电子化”,而是同时涉及业务流程再造或业务创新。因此,在项目早期,客户很难描述清楚需要提交的软件产品,但这一点对软件项目的成败又是至关重要的。与此矛盾的是,公司一般安排市场销售人员负责谈判,其重点是迅速签约,而不是如何交付,甚至为了尽早签约而“过度承诺”,遇到模糊问题时也怕因为解释而节外生枝,所以避而不谈,而甲方为了保留回旋余地,也不愿意说得太清楚,更不愿意主动提出来(因为甲方还有最终验收的主动权)。等到项目经理一旦接手项目,所有这些没有说清楚的隐患和口头承诺都将暴露出来,并最终由项目经理承担。2)项目周期长,复杂度高,变数多。软件项目的交付周期一般比较长,一些大型项目的周期可以达到2年以上。这样长的时间跨度内可能发生各种变化。软件系统的复杂性导致了开发过程中各种风险的难以预见和控制。从外部来看,商业环境、政策法规变化会对项目范围