第1章软件项目管理概述111.4过程管理与软件项目管理的关系1.4.1软件过程定义所谓过程,简单来说就是人们做事情的一种固有的方式。做任何事情都存在过程,小到日常生活中的琐事,大到工程项目。对于做一件事,有过经验的人对完成这件事的过程很了解,会知道完成这件事需要经历几个步骤,每个步骤都完成什么事,需要什么样的资源和什么样的技术,等等,因而可以顺利地完成工作。没有经验的人对过程不了解,就会有无从着手的感觉。如图1-5所示,如果项目人员将关注点只放在最终的产品上,不关注期间的开发过程,那么不同的开发队伍或者个人可能会采用不同的开发过程,结果导致开发的产品质量是不同的,有的质量高,有的质量差,这完全依赖于个人的素质和能力。过程A关注点用户需求秤过程CE图1-5关注结果反之,如图1-6所示,如果项目人员将项目的关注点放在项目的开发过程上,不管谁来做,也不管什么需求,均采用统一的开发过程,即企业的关注点在过程,则经过同一企业过程开发的软件,产品的质量是一样的。可以通过不断提高过程的质量来提高产品的质量。这个过程是公司能力的体现,是不依赖于个人的。也就是说,产品的质量依赖于企业的过程能力,不依赖于个人能力。关注点用户需求产品用户需求产品a产品用户需求图1-6关注过程软件过程不能简单地理解为软件产品的开发流程,因为我们要管理的并不只是软件产品开发的活动序列,而是软件开发的最佳实践。软件过程包括流程、技术、产品、活动间关系、角色、工具等,是软件开发过程中的各方面因素的有机结合。因此,在软件过程管理中,首先要
12第1章软件项目管理概述进行过程定义,将过程以一种合理的方式描述出来,并建立起企业内部的过程库,使过程成为企业内部可以被重用的共享资源。对于过程,要不断地进行改进,以不断地改善和规范过程,从而帮助企业提高生产力。如果将一个软件生产类比作一个工厂的生产,那么生产线就是过程,产品按照生产线的规定过程进行生产软件开发的风险之所以大,是因为软件过程能力低,其中关键的问题在于软件开发组织不能很好地管理其软件过程,为此必须强调和加强软件开发过程的控制和管理。软件项目的开发过程主要有系统调研、需求分析、概要设计、详细设计、编码、测试、实施与维护等。不同软件项目的过程大体相同,但不同项目的每一个过程所包含的一系列具体的开发活动(子过程)千差万别,而且不同的项目组采用不同的开发技术,使用不同的技术路线,其开发过程的侧重点也不一样。因此项目经理在软件项目开发前,需根据所开发的软件项目和项目组的实际情况,建立起个稳定、可控的软件开发过程模型,并按照该过程来进行软件开发,这是项目成功的基本保证。软件过程是极其复杂的过程。我们知道,软件是由需求驱动的,有了用户应用的实际需求才会引发开发一个软件产品。软件产品从需求的出现到最终的产品出现,要经历一个复杂的开发过程。软件产品在使用时要根据需求的变更进行不断的修改,这称为软件维护。我们把用于从事软件开发及维护的全部技术、方法、活动、工具,以及它们之间的相互变换统称为软件过程。由此可见,软件过程的外延非常大,包含的内容非常多。对于一个软件开发机构来说,做出一些经验。做过的项目越多,一个软件项目,无论成功与否,都能够或多或少地从中总结出其经验越丰富,特别是一一个成功的开发项目,从中可以总结出一些完善的过程,我们称之为最佳实践(best practices)。最佳实践开始是存放在成功者的头脑中的,很难被机构内部共享和重复利用并发挥其应有的效能。长期以来,这些本应从属于机构的巨大的财富被人们所忽视,这无形中给机构带来了巨大的损失,当人员流动时,这种企业的财富也随之流失,并且使这种财富无法被其他的项目再利用。过程管理就是对最佳实践进行有效的积累,形成可重复的过程,使最佳实践可以在机构内部共享。过程管理的主要内容包括过程定义与过程改进。过程定义是对最佳实践加以总结,以形成一套稳定的可重复的软件过程。过程改进是根据实践中对过程的使用情况,对过程中有偏差或不切合实际的地方进行优化的活动。通过实施过程管理,软件开发机构可以逐步提高其软件过程能力,从根本上提高软件生产能力。1. 4.2过程管理在软件项目中的作用前面介绍了过程在软件开发中的重要性。对于软件这种产品来讲,软件过程具有非常重要的意义。对于一件家具,其质量好主要有两方面的因素:-是用于生产这件家具的材料的质量要好,否则很难有好的家具;二是生产的加工工艺要好。早期的家具是以手工制造为主的,由于工匠的手艺不同,产品的质量参差不齐,由于技术的不断发展,材料上得到了进一步的提高,同时在产品的加工上更多地引人了高技术含量的木工机械,所以产品的加工能力和质量的稳定性都得到了很大程度的提高。软件产品在生产上有一定的特殊性。首先,软件产品没有物理的存在实体,它是完全的逻辑的高度聚合体,所以在质量因素的构成上不存在材料质量的因素,因而,在生产过程中唯一影响产品质量的是产品的生产工艺。生产工艺在软件工程中的术语就是软件过程。软件过程管理对软件产业的发展非常重要。软件产业发展中的重要问题是要注重循序渐进地积累,不仅积累技术实践,更为重要的是积累我们所欠缺的管理实践,即积累项目中的各个环节的实践经验和项目管理的实践经验,这样才能保证企业生产力持续地发展,满足业务发展的需要。软件过程管理将帮助软件组织对过程资产进行有效管理,使之可以复用于实际项目中,并结合从项目中获取的过程的实际应用结果来不断地改进过程。这样软件组织能够有能力改变自
第1章软件项目管理概述:13身的命运,将它从维系在一个或几个个体身上变成维系在企业中的管理上。过程管理让软件组织直观感觉到的最明显的转变就是软件项目中的所有成员的位置可以替换1.4.3过程管理与项目管理的关系顾名思义,过程管理就是对过程进行管理,其目的是要让过程能够被共享、复用,并得到持续改进。在软件行业,要管理的是软件过程。过程管理与项目管理在软件组织中是两项重要的管理,项目管理用于保证项目的成功,而过程管理用于管理最佳实践。但这两项管理并不是相互孤立的,而是有机地紧密地相结合的。图1-7中展现的是过程管理和项目管理的基本关系。过程管理的成果即软件过程可以在项目管理中辅助于项目管理的工作,,在项目的计划阶段,项目计划的最佳参考是过去的类似项目中的实践经验,过程改进过程定义这些内容通过过程管理成为过程管理的工作成果,这些成果对于一个项目的准确估算和合理计划非常有帮助。合理项目监控项目规划的计划是项目成功管理的基础。在项目计划的执行过程中,计划将根据实际情况不断地调整,直到项目结束时,项目计划才能真正稳定下来。这份计划及其变更历史是过程管项目实施理中的过程改进的最有价值的参考。在国外的成熟的软件组织内部,每个项目开发完成后必须提供“软件过程改进建议”文档,这是从软件开发项目的过程中提炼出来的对图1-7过程管理和项目管理的关系软件过程改进的建议。过程的改进注重从项目的实际经验中不断地将最佳实践提炼出来。1.4.4软件工程技术的发展趋势软件是一种知识密度型产品,与一般产品不同,其较难实现工业化生产。当计算机于20世纪中期投入民用后,由于硬件昂贵、计算机存储空间不足、处理器性能差等因素的制约,计算机软件的编写工作只能依赖于当时少量的编程人员完成,其生产能力局限性极大地制约了软件技术及开发的发展,这种情况直至20世纪60年代才引起了关注,伴随着计算机应用范围的增大、软件需求量的增加,对软件设计的要求也更为复杂,需要一种可以改变传统编程的新方式。1968年的NATO会议被认定为软件工程的历史性时刻,这次会议提出应当把软件当做一个工程来设计,软件工程的概念由此诞生。软件工程被当作一系列的计算机软件开发与维护、工具与方法等为世人所接受并发展至今。软件技术是信息产业的支柱产业之一,软件工程技术不是一成不变的。软件工程技术之所以能发展到今天较为成熟的状态,是因为其经历了不断变革与创新,而软件工程技术的发展也将继续进行创新与发展。信息产业与软件产业的不断发展,对软件工程技术也提出了更高的要求。纵观目前软件产业的发展与需求,软件工程技术必将朝着智能化、综合化、服务化、业务化等方向发展。由于计算能力向服务器端的迅速靠拢,具备高并行计算能力与可用性的中间件技术已得到了广泛的运用,其已逐渐发展成为开发大型软件系统的必选项目。软件工程采用了中间件技术,中间件可协助处理一些细小的环节,这样软件开发人员可将多余的精力投入在业务逻辑上,代码编写量大为减少,软件开发团队的规模相应地缩小,并对角色进行了更为专业化的定位。起初,组装一个计算机可以通过CPU、内外存储器、IVO控制电路等集成起来,而CPU再通过运算器、高速缓冲存储器、总线等集成。目前,组装一台计算机,不需要从规划CPU、内
14第1章软件项目管理概述外存储器、VO等做起,可以通过采购或者集成获得符合自己标准的产品。随着集成电路技术的发展,在开发系统的时候,不用从元器件、单元电路、电路模块开始制作,可以通过集成来完成。集成电路的思路也可以应用到软件项目构建过程。很多软件项目的构造过程可能是,逐行代码的编写,逐个构件(模块)的编写,逐个子系统的集成,最后成为一个软件系统。纵观软件工程技术的发展,从命令行式程序、面向过程的语言、面向对象的语言、面向服务的体系结构(SOA),到目前的业务流程管理(BPM),软件工程技术已经逐步发展到面向服务以至于面向业务,如果实现了业务计算,对于一个软件项目,更多需要对业务的研究和规划,采用一定的集成工具完成一个软件系统。因此,将来软件项目的构造可能不是靠大量的编程,更多是基于业务的设计和计算,这样,项目管理的工作变得更加重要了。1.5本书的组织结构软件项目管理不同于其他领域的项目管理,有很多的特殊性,软件工程远远没有建筑工程等领域规范化,经验在软件项目管理中占很重要的作用。本书分为四篇,代表软件项目管理的4个阶段,即项目初始、项目计划、项目执行控制项目结束,如图1-8所示。第二篇和第三篇是本书的核心,项目计划和项目执行控制是项目管理最重要的两项任务。在项目的前期,项目经理完成项目的初始化和计划阶段的工作,这个阶段的重点是明确项目的范围和需求,项目初始项目计划》项目执行控制项目结束并据此计划项目的活动,进行项目的估算和资源分配、进度表的排定图1-8软件项目管理的阶段等。在项目计划完成后,整个项目团队按照计划的安排来完成各项工作。在工作进展的过程中,项目经理要通过多个途径来了解项目的实际进展情况,并检查与项目计划之间是否存在偏差,出现偏差意味着工作没有按照计划的预期来进行,这有可能对项目的最终结果产生重大影响,因此需要及时调整项目计划。调整计划要具体问题具体分析,先要找到问题发生的原因,然后做出相应的应对措施。在实际项目的进展过程中,计划工作与跟踪工作会交替进行,核心是围绕着最终的项目目标。1.项目初始项目初始软件项目管理的第一个阶段是确定项目的目标范围,包括项目立项招投标、合同(或者协议)的确定,明确软件要完成的主要功能,以及项目开发的阶段周期等。项目确立生存期模型因此,项目初始篇又分两章,主要内容包括项目确立、生存期模型,如图1-9所示。图1-9项目初始路线图2.项目计划项目计划是建立项目行动指南的基准,包括对软件项目的估算、风险分析、进度规划、人员的选择与配备、产品质量规划等,用于指导项目的进程发展。规划建立软件项目的预算,可提供一个控制项目成本的尺度,为将来的评估提供参考,是项目进度安排的依据。最后形成的项目计划书将作为跟踪控制的依据。因此,项目计划篇又分10章,其中用两章篇幅讨论范围计划,然后依次是成本计划、进度计划、质量计划、配置管理计划、人员与沟通计划、风险计划、合同计划、集成计划,如图1-10所示
第1章软件项目管理概述15页目计划>范围计划》成本计划》进度计划>质量计划》配置管理计划>人员与沟通计划>风险计划》合同计划》集成计划图1-10项目计划路线图3.项目执行控制旦建立了基准计划就必须按照计划执行,包括按计划执行项目和控制项目,以使项目在预算内、按进度、使顾客满意地完成。在这个阶段,项目管理过程包括测量实际的进程,并与计划进程相比较,同时发现计划的不当之处。为了测量实际的进程,掌握实际上已经开始或结束的任务、已投人的资金等很重要。>项目执行控制如果实际进程与计划进程的比较显示出项目落后于计划、超出预算或是没有达到技术要求,就应该采取纠正措施,以使项目能恢复到正常轨道,或者更正计划的不合理之处>集成计划执行控制>核心计划执行控制>辅助计划执行控制因此,项目执行控制是对所有计划的执行控制过程。项目执行控制篇图1-11项目执行控制路线图又分3章,主要内容包括集成计划执行控制、核心计划执行控制、辅助计划执行控制,如图1-11所示。4.项目结束项目管理的最后环节是项目的结束过程。项目的特征之一是项目结束它的一次性。项目有起点也有终点,项目结束期的主要工作是适当地做出项目终止的决策,确认项目实施的各项成果,进行项目的交接和清算等,同时对项目进行最后评审,并对项目进行总结。项目结束路线图如图1-12所示。>项目结束过程1.6案例分析及课程实践说明图1-12结束过程路线图1.案例分析本书案例是针对“医疗信息商务平台”项目的管理过程,这个案例贯穿始终,并围绕各章主题进行具体案例分析。2.课程实践为了配合“软件项目管理”课程的实践环节,本书要求学生针对“软件项目管理在线学习网站”(简称SPM)项目完成项目管理实践,包括17个实践环节,这17个实践环节体现在不同的章节中。可将所有学生进行分组,每组5人,每组代表一个团队,并且每个团队有自己的名称,学生以团队形式完成这个情景项目的实践环节