软件工程项目管理第六章项目管理..............................36.1项目管理概述.............................46.1.1项目管理的特点........................56.1.2项目管理的过程.......................86.2项目计划.................................106.3进度安排.................................126.4项目估算..................................146.4.1软件规模估算........................166.4.2软件开发成本估算....................196.5项目组织................................236.5.2人员配备............................246.6软件质量...............................256.6.1软件质量及质量保证....................256.6.2质量保证的主要内容....................266.6.3质量保证体系..........................276.6.4软件工程标准化........................286.6.5CMM模型..............................366.7软件配置管理............................396.7.1概述................................4026.7.2配置管理的过程......................416.8常用软件项目管理工具....................433第六章项目管理本章要点软件项目管理概念项目管理组织及过程软件质量及保证CMM模型本章学习目标了解软件项目管理的任务与目标、软件的作用范围理解可行性研究、成本估算技术与成本估算模型、软件项目的组织与计划、软件质量保证。理解软件能力成熟度模型(CMM)的基本概念、软件过程的成熟度等级、关键过程区域、软件企业如何实施CMM。掌握软件管理技术的基本方法。46.1项目管理概述软件项目管理同样体现出管理的四个基本职能,即计划、组织、领导和控制。软件项目管理是项目管理方法的一个应用领域,项目管理就是为了满足甚至超越项目涉及人员对项目的需求和期望而将理论知识、技能、工具和技巧应用到项目的活动中去。要想满足或超过项目涉及人员的需求和期望,我们是需要在下面这些相互间有冲突的要求中寻求平衡:范围、时间、成本和质量有不同需求和期望的项目涉及人员明确表示出来的要求(需求)和未明确表达的要求(期望)项目管理关注计划和资源分配以保证在预算内按时完成质量合格的系统。项目管理也面临技术开发同样的问题:复杂和变化。复杂的产品需要很多有着不同背景和能力的开发者参与开发。市场竞争和需要使开发过程需要变化,带来了经常性的资源重新分配,并使得对项目状况的跟踪也变得困难。管理者和开发者使用同样的方法处理和多变问题:通用模型、交流、基本原理和配置。5项目管理已经成为一种广泛应用于各行各业的技术管理过程。在软件行业,对项目实施有效的管理是软件成败的关键。项目管理已经得到越来越多的企业和政府部门的重视,学习和借鉴国际上先进的项目管理经验是非常明智和有益的。软件企业的项目规范是许多公司通过几十年的摸索和实践逐步发展形成的。随着我国正式加入世界贸易组织(WTO),我国与国际上的交流与合作更加频繁,越来越多的国内软件将承接外包软件作为业务发展的一个方向。外包软件指的是发达国家的企业将软件开发项目转移到他国。利用他国廉价的劳动力成本来降低软件开发的成本。国外企业选择外包软件的合作伙伴时,最看重的是项目管理的项目经理的综合素质要求较高,好的项目经理应该在软件开发技术,软件开发技术,软件工程理论与实践,项目管理,人际沟通等方面均要有较深的造诣。6.1.1项目管理的特点软件项目管理除涉及计算机软硬件领域技术外,还涉及到系统工程学、心理学、社会学、经济学、乃至法律等方面的问题。需要用到多方面的综合知识,特别是要涉及到社会的因素、精神的因素、人的因素比技术问题复杂得多。在相关领域的研究成果和实践已经比较丰富,但在具体的软件项6目实践中,必须结合该项目的工作条件、人员和社会环境等多种因素来开展和实施。软件工程发展的实践证明,软件项目成败的关键往往在于项目管理能力水平的高低,管理得好就能带来效率,赢得时间,最终将在技术前进的道路上取得领先地位。软件项目的特点:软件产品与其他任何产业产品相比有它自己的特点,它是无形的,没有物理属性,它是一个物理系统的逻辑影射,因此难以理解难于驾驶。但它确实是把思想、概念、算法、流程、组织、效率、优化等融合在一起了。文档编制的工作量在整个项目过程研制过程中站有很大的比重,但往往人们并不重视,因而直接影响了软件的质量。软件开发工作技术性很强,要求参加工作的人员具有一定的技术水平和实际工作的经验。另外,人员的流动对项目的影响很大,离去的人员不但带走了重要信息,还带走了工作经验。软件项目管理的困难1.智力密集,可见性差:软件工程充满了大量高强度的脑力劳动。软件开发的成果是不可见的逻辑实体,软件产品的质量的尺度加以衡量,对于不深入掌握软件知识或缺乏软件经验的人员,是不可能领导做好软件管理工作的。72.单位生产:在内容、形式各异的基础上研制或生产,与其它领域中大规模现代化生产有着很大的差别,也自然会给管理工作造成许多实际困难。3.劳动密集,自动化程度低:软件项目经历的各个阶段都渗透了大量的手工劳动,这些劳动十分细致、复杂和容易出差。尽管近年来已经有了软件工具和CASE的研究,但远未达到自动化的程度。软件产品的提高自然受到了很大影响。4.使用方法繁琐,维护困难:软件工作渗透人的因素:不仅要求软件人员具有一定的技术水平和工作经验,而且还要求他们具备良好的心理素质。软件人员的情绪和他们的工作环境对他们工作有好大的影响。在总结和分析足够数量失误的软件项目之后,看出其原因大都与管理工作有关问题渗透及到软件项目研制中的计划制定,进度估计资源使用,人员配备,组织机构和管理方法等管理的许多侧面。软件项目管理的主要职能包括:制定计划:规定待完成的任务、要求、资源和进度等建立组织:为实施计划,保证任务的完成,需要建立分工明确的责任制度。配备人员:任何各种层次的技术人员和管理人员。指导:鼓励和动员软件人员完成所分配的工作。8检验:对照计划和标准,监督和检查实施的情况。6.1.2项目管理的过程为使软件项目开发获得最终成功,必须对软件项目的工作范围,可能遇到的风险,需要的资源(人,软/硬件),要实现的任务,过程中的里程碑,花费的工作量(成本),以及进度的安排作到心中有数。软件项目管理应该提供这些信息,这种管理开始于技术工作开始之前,在软件从概念到实现的过程中持续进行,最后终止于软件项目工程结束。通常,软件项目管理包括以下过程:1软件项目启动通常,项目管理人员和用户是在系统工程启动阶段确定项目的目标和范围。当明确了软件项目的目标和范围后,就考虑可能的解决方案,标明技术和管理上的要求,确定合理,精确成本估算,实际可行的任务分解以及可管的进度安排。2度量度量的工作是为了有效地定量地进行管理。度量的目的是为了把握软件工程实际情况和它所生产的产品质量。在对过去未度量的事项进行度量时,需要解决是哪些适合于过程和产品,如何使用收集到的数据,用于比较个人、过程或产品的度量是否合理。3估算9在软件项目管理过程中一个关键的活动是制定项目计划。在做计划时,必须就需要的人力、项目持续时间、成本作出估算。这种估算大多是参考以前的花费作出的。管理人员可使用各种估算技术,并可用一种估算技术作为另一种估算技术的交叉检查。4风险分析风险分析对软件项目管理是决定性的,风险分析实际上就是贯穿在软件工程过程中的一系列风险管理步骤,其中包括风险识别、风险估计、风险管理方案、风险解决和风险监督,它能让人们去主动“攻击”风险。5进程安排软件项目的进程安排与任何一个项目的进程安排没有实质上的不同。首先识别一组项目任务,再建立任务之间的相互关联,然后估算各个任务的工作量,分配人力和其它资源,制定进度时序。6追踪和控制项目管理人员追踪在制度安排的每个任务,如果任务实际完成日期滞后于进度安排,则管理人员可以使用一种自动的项目进度安排工具来确定在项目的中间里程碑上进度误期所造成的影响。此外,还可以对资源重新定向,对任务重新安排或者可以修改交付日期以调整已经暴露的问题。用这种方式可以较好地控制软件的开发。106.2项目计划计划是管理工作的重要职能,在软件项目管理中,软件项目从制定项目计划开始。项目计划中需要确定以下几项内容:目标:定义了待完成的目标,迫切需要的资源,约束和优先级。范围:定义待开发系统的边界,什么包括在系统里,什么不包括在系统里。产品技术说明:说明软硬件信息以及有关功能、性能、安全性等方面的约束。时间:进度表。资金:预算。地点:工作空间分配。人员:参与人员以及项目组织。在这里,我们强调,项目计划所需确定的内容最终必须以文档的形式保留下来,无论软件项目的规模多少,项目计划文档都是必需的。因为:1、撰写项目计划的过程也是一个澄清模糊认识,整理思路的过程,只有用文字记录下来的东西,才是明确的。2、文档能够作为同其他人的沟通渠道。项目计划可以帮助客户了解我们的开发活动,帮助项目组成员了解项目的约束和策略,帮助项目经理跟踪项目的进展。113、项目计划文档可以作为数据基础和检查列表。通过定期回顾,项目经理能清楚项目所处的状态以及哪些环节需要重点进行更改和调整。很明显,在做这些计划时并为进行项目需求分析,所依据的基础是系统计划,以系统规格说明为依据。要准确回答以上问题是比较困难的,主要靠的是估计,估计的准确程度也与项目的风险直接相关。项目计划针对不同的工作目标,类型有如下几种:项目实施计划,这是软件开发的综合性计划,包括人物、进度、人力、环境、资源,组织等。质量保证计划,把软件开发的质量要求具体规定为在每批个开发阶段中可以检查的质量保证活动。软件测试计划,规定测试活动的人物、测试方法、进度、资源、人员职责等。文档编制计划,规定所开发的项目应编制的文档种类、内容、进度、人员职责等。用户培训计划,规定对用户进行培训的目标、要求、进度、人员职责等。综合支持计划,规定软件开发过程中所需要的支持,以及如何获得和利用这些支持。软件分发计划,软件项目完成后,如何提交给客户。12在以上各类计划中,软件项目实施计划是综合性的,进行工作的划分是该计划应首先解决的问题,常用的计划结构有按阶段进行项目的计划,任务分解结构和人物责任矩阵。6.3进度安排软件开发项目的进展安排有两种考虑方式:1.统最终交付日期已经确定,软件开发部门必须在规定期限内完成任务。2.系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定进度安排的准确程度可能比成本估算程度更重要。如果进度安排落空,会导致市场机会的丧失,使得用户不满意,而且也会导致成本的增加。因此,在考虑进度安排时,要把人员的工作量与花费的时间联系起来对于一个小型软件开发项目,一个人就可以完成需求分析、设计、编码和测试工作。而对于一个稍大型的软件项目,一个人单独开发,时间太长。因此,软件开发组是必要的。一般软件开发组的规模不能太大,人数不能太多,2--8人左右较合适当参加同一软件工程项目的人数超过一人的时候,开发工作就会出现并行情况。13在软件开发过程的各个活动中,第一项任务是进行项目的需求分析和评审,此项工作为以后的并行工作打下了基础。一旦软件的需求得到认可,并且通过了评审、概要设计(系统结构设计和数据设计)工作和测试计划制定工作就可以并行进行。如果系统的模块结构已经建立,对各个模块的详细设