10.1软件项目管理概述10.2进度计划10.3成本估算10.4人员组织10.5质量保证10.6能力成熟度模型第10章软件项目管理2第10章软件项目管理10.1软件项目管理概述软件项目管理的概念软件项目管理是指在软件开发过程中对项目的成本、人员、进度、风险、质量等进行详细分析和控制的管理活动,从而使软件工程项目能够按照预期的成本、进度、质量顺利完成,提高企业的效益和综合竞争力。什么有些软件企业在实施项目管理的时候收不到很好的效果呢?特点3第10章软件项目管理软件项目管理的特点软件产品具有无形性软件项目的一次性软件项目管理的工作十分复杂软件项目管理具有创造性软件项目具有生命周期4第10章软件项目管理软件项目管理的内容制定项目计划人员组织分工软件开发完成项目的各项内容成本管理质量管理软件配置管理•估算软件项目的成本•在软件开发过程中按计划管理经费的使用•制定软件质量保证计划•控制质量要素•对阶段性的软件产品进行评审•对最终产品进行验证和确认•制定配置管理计划•对程序、文档和数据的各种版本进行管理5第10章软件项目管理10.2进度计划软件开发项目的进度安排有两种考虑方式。①系统最终交付日期已经确定,软件开发部门必须在规定期限内完成。②系统最终交付日期只确定了大致的期限,最后交付日期由软件开发部门确定。6第10章软件项目管理10.2进度计划进度安排的方法采用图示的方法描述,可以表现各项任务之间进度的相互依赖关系。以下介绍几种有效的图示方法,在这些图示方法中,有以下信息必须明确标明:①各个任务的计划开始时间和完成时间。②各个任务完成的标志(即○表示文档编写,△表示评审)。③各个任务与参与工作的人数,各个任务与工作量之间的衔接情况。④完成各个任务所需的物理资源和数据资源。甘特图用水平线段表示任务的工作阶段;线段的起点和终点分别对应于任务的开工时间和完成时间;线段的长度表示完成任务所需的时间。7第10章软件项目管理甘特图完成文档编写评审计划完成当前进度周A1234567891011121314BCDE任务优点:标明了各任务的计划进度和当前进度,能动态地反映软件开发进展情况缺点:难以反映多个任务之间存在的复杂的逻辑关系8第10章软件项目管理PERT技术和CPM方法PERT技术叫做计划评审技术,CPM方法叫做关键路径法,它们都是安排开发进度,制定软件开发计划的最常用的方法。它们都采用网络图来描述一个项目的任务网络。通常用两张表来定义网络图。一张表给出与特定软件项目有关的所有任务(也称为任务分解结构),另一张表给出应当按照什么样的次序来完成这些任务(也称为限制表)。9第10章软件项目管理PERT技术和CPM方法PERT技术和CPM方法都为项目计划人员提供了一些定量的工具用于完成以下任务。①确定关键路径,即决定项目开发时间的任务链。②应用统计模型,对每一个单独的任务确定最可能的开发持续时间的估算值。③计算边界时间,以便为具体的任务定义时间窗口。边界时间的计算对于软件项目的计划调度是非常有用的。10课堂示例某软件项目在进入编码阶段之后,考虑安排3个模块A、B、C的开发工作。其中,模块A是公用模块,模块B与C的测试有赖于模块A调试的完成。模块C是利用已有的模块,但在理解之后要对它做部分修改,直到模块A、B、C做组装测试为止。11课堂示例10423A编码6A测试8C理解B编码A调试C修改67885678B测试C测试B调试C调试BC组装测试58697•完成的任务•完成任务的持续时间•整个任务网络的起点•终结12第10章软件项目管理指定进度开发计划Pressma给出了在整个定义与开发阶段工作量分配的一种建议方案,这个分配方案称为40-20-40规则。它指出在整个软件开发过程中,编码的工作量仅占20%,编码前的工作量占40%,编码后的工作量占40%。20%40%40%13第10章软件项目管理指定进度开发计划40-20-40规则只用来作为一个指南,实际的工作量分配比例必须按照每个项目的特点来决定。2%~3%10%~25%15%~20%20%~25%计划阶段需求分析测试调试软件设计编码阶段14第10章软件项目管理10.3成本估算软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价,它主要是人的劳动消耗。人的劳动消耗所需代价是软件产品的开发成本。另一方面,软件产品开发成本的计算方法不同于其他物理产品成本的计算。软件产品的开发成本是用一次性开发所花费的代价来计算的。因此软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到确认测试,即整个软件开发全过程所花费的代价作为依据计算的。15第10章软件项目管理软件开发成本估算方法估计人员根据已完成项目所耗费的总成本,推算将要开发的软件的总成本,然后按比例将它分配到各开发任务中去,再检验它是否能满足要求。把待开发的软件细分,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到软件开发的总工作量。把待开发的软件项目与过去已完成的软件项目进行比较,估算每个不同之处对成本的影响。自顶向下自底向上差别估计16第10章软件项目管理成本估算模型IBM模型IBM模型是一个静态单变量模型,只要估算出源代码的数量,就可以对工作量、文档数量等进行估算。一般一条机器指令为一行源代码。一个软件的源代码行数不包括程序注释、作业命令和调试程序。对于非机器指令编写的源程序,如汇编语言或高级语言程序,应转换成机器指令源代码行数来考虑。在应用中有时要根据具体实际情况,对公式的参数进行修改。17第10章软件项目管理成本估算模型IBM模型——估算方式(最小二乘法)利用最小二乘法拟合,提出了如下的估算公式:E=5.2×L0.91L是源代码行数(以KLOC计),E是工作量(以PM计)D=4.1×L0.36D是项目持续时间(以月计)S=0.54×E0.6S是人员需要量(以人计)DOC=49×L1.01DOC是文档数量(以页计)18第10章软件项目管理10.3成本估算成本估算模型COCOMO模型ConstructiveCostModelDSIMMTDEV源指令条数开发工作量,度量单位为人月开发进度,度量单位为月结构型成本估算模型,是一种精确、易于使用的成本估算方法。在该模型中使用了以下基本量。19第10章软件项目管理成本估算模型COCOMO模型是一种层次模型,按照其祥细程度分为三级:即基本的COCOMO模型、中间的COCOMO模型和详细的COCOMO模型。该模型主要对工作量MM(单位:人月)和进度TDEV(单位:月)进行估算。模型中考虑到估算量与开发环境有关,将开发项目分为三类:组织型(Organic)规模5万,较简单,开发人员对产品目标理解充分,经验丰富,对软件开发环境熟悉。大多数应用软件及老的操作系统、编译系统属此类。嵌入型(Embadded)软件、硬件关系紧密,操作有限制条件,对接口、数据结构,算法要求较高。如大型复杂的事务处理系统,大型、超大型的操作系统,军事指挥系统,航天控制系统等半独立型(Semidetached)对项目要求界于上述两者之间,规模复杂度中等。如新操作系统,大型数据库,生产控制等软件属此类。第10章软件项目管理2021第10章软件项目管理COCOMO模型的分类基本COCOMO一个静态单变量模型,它用一个以已估算出来的源代码行数为自变量的函数来计算软件开发工作量。中间COCOMO在计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。详细COCOMO包括中间COCOMO模型的所有特性。alkloccMM=①基本的COCOMO模型(静态单变量模型)其中:MM—工作量,KLOC—估计的源代码行Cl—模型系数,—模型指数.Cl、取决于开发项目的模式为组织型、半独立型或嵌入型。下表是根据63个项目的数据统计结果,按照基本的COCOMO模型估算的工作量和进度。总体类型工作量进度组织型MM=10.4(KDSI)1.05TDEV=10.5(MM)0.38半独立型MM=3.0(KDSI)1.12TDEV=10.5(MM)0.35嵌入型MM=3.6(KDSI)1.20TDEV=10.5(MM)0.32第10章软件项目管理22其中:fi—成本因素包括:生产因素(可靠性,数据库规模,软件复杂度)计算机因素(时间约束,存储约束,环境变更率,计算机换向时间)人员因素(系统分析员能力、经验,程序员能力,开发人员环境知识,程序时间语言知识)项目工程因素(设计技术,软件工具,进度限制约束)③详细的COCOMO模型按照开发阶段给出更加详细的成本因素fi。②中间的COCOMO模型进一步考虑了15种影响软件工作量的因素,更加合理的估算软件工作量和进度。第10章软件项目管理23MM=alklocc∏fi15i=1×24第10章软件项目管理10.4人员组织软件项目组织原则①尽早落实责任:在软件项目开始策划之时,就要分配好人力资源,指定专人负责专项任务。负责人有权进行管理,并对任务的完成负责。②减少接口:在开发过程中,人与人之间的联系是必不可少的,组织应该有合理的分工、好的组织结构,应减少不必要的通信。③责权均衡:项目负责人的责任不应比委任给他的权力还大。矩阵模式25第10章软件项目管理10.4人员组织组织结构模式课题模式把软件人员按课题组成小组,小组成员自始至终参加所承担课题的各项任务,负责完成软件产品的定义、设计、实现、测试、复查、文档编制,甚至包括维护在内的全过程。职能模式把参加开发项目的软件人员按任务的工作阶段划分成若干专业小组。待开发的软件产品在每个专业小组完成阶段加工(即工序)以后,沿工序流水线向下传递。是以上两种模式的复合。一方面,按工作性质成立一些专门组,如开发组、业务组、测试组等;另一方面,每一个项目又有它的经理人员负责管理。每个软件人员属于某一个专门组,又参加某一项目的工作。26第10章软件项目管理10.4人员组织程序设计小组的组织形式小组的核心由一位主程序员、2~5位技术员、一位后援工程师组成。主程序员负责小组全部技术活动的计划、协调与审查工作,还负责设计和实现项目中的关键部分。技术员负责项目的具体分析与开发,以及文档资料的编写工作。后援工程师支持主程序员的工作,为主程序员提供咨询,也做部分分析、设计和实现的工作,并在必要时能代替主程序员工作。主程序员制小组27第10章软件项目管理10.4人员组织程序设计小组的组织形式在民主制小组中,遇到问题,组内成员之间可以平等地交换意见。这种组织形式强调发挥小组每个成员的积极性,要求每个成员充分发挥主动精神和协作精神。这种组织形式适合于研制时间长、开发难度大的项目。民主制小组28第10章软件项目管理10.4人员组织程序设计小组的组织形式组内人员分为3级:组长(项目负责人)一人负责全组工作,包括任务分配、技术评审和走查、掌握工作量和参加技术活动。他直接领导2~3名高级程序员,每位高级程序员通过基层小组,管理若干位程序员。这种组织结构只允许必要的人际通信,比较适用于项目本身就是层次结构的课题。层次式小组29第10章软件项目管理10.5质量保证软件质量的定义关于软件质量的定义,有以下两种观点。ANSI/IEEEStd729-1983定义软件质量为“与软件产品满足规定的和隐含的需求的能力有关的特征或特性的全体”。M.J.Fisher定义软件质量为“所有描述计算机软件优秀程度的特性的组合”。30第10章软件项目管理10.5质量保证软件质量的定义软件质量反映了以下3个方面的问题。①软件需求是度量软件质量的基础,不符合需求的软件就不具备质量。②规范化的标准定义了一组开发准则,用来指导软件人员用工程化的方法来开发软件。如果不遵守这些开发准则,软件质量就得不到保证。③往往会有一些隐含的需求没有显式地提出来,如果软件只满足那些精确定义了的需求而没有满足这些隐含的需求,软件质量也不能保证。31第10章软件项目管理10.5质量保证软件质量因素的定义32第10章软件项目管理10.5质