教学PPT软件项目管理(1).ppt
第三章 软件项目管理,2023/2/21,2,软件项目管理概述,软件项目管理的对象是软件工程项目。它所涉及的范围覆盖了整个软件工程过程。软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。,2023/2/21,3,软件项目管理的提出,软件项目管理的提出是在20世纪70年代中期的美国当时美国国防部专门研究了软件开发不能按时提交,预算超支和质量达不到用户要求的原因,结果发现70%的项目是因为管理不善引起的,而非技术原因。于是软件开发者开始逐渐重视起软件开发中的各项管理。到了20世纪90年代中期,软件研发项目管理不善的问题仍然存在。据美国软件工程实施现状的调查,软件研发的情况仍然很难预测,大约只有10的项目能够在预定的费用和进度下交付。,2023/2/21,4,软件项目管理概述,软件项目的特征软件产品的不可见性项目的高度不确定性软件过程的多变化性软件人员的高流动性降低复杂性和控制变化是软件项目管理的关键问题。,2023/2/21,5,软件项目管理的“4P”,2023/2/21,6,软件项目管理的“4P”,人员(People)人员的素质和组织管理是软件工程项目的基本要素和关键因素在对人员进行组织时,有必要考虑参与软件过程的人员类型 产品(Product)定义项目范围,其中包括建立产品的目的和范围、可选的解决方案、技术或管理的约束等 过程(Process)通常将项目分解为任务-子任务等,其分解准则是基于软件工程的过程项目(Project)采用科学的方法及工具对项目基本内容进行管理,以实现项目的目标,2023/2/21,7,4P:人员(People),项目管理人员负责软件项目的管理工作,其负责人通常称为项目经理项目经理除了要求掌握相应的软件开发技术外,更多的应具备管理人员应有的技能。项目经理的任务就是要对项目进行全面的管理,具体表现在对项目目标要有一个全局的观点,制定项目计划,监控项目进展,控制反馈,组建团队,在不确定环境下对不确定问题进行决策,必要时进行谈判并解决冲突高级管理人员可以是领域专家,负责提出项目的目标并对业务问题进行定义,这类业务问题通常会对项目产生较大的影响,2023/2/21,8,4P:人员(People),开发人员掌握了开发一个产品或应用所需的专门技术,可胜任包括需求分析、设计、编码、测试、发布等各种相关的开发岗位客户一组可说明待开发软件的需求的人,也包括与项目目标有关的风险承担者最终用户产品或应用提交后,那些与产品/应用进行交互的人,2023/2/21,9,4P:产品(Product),软件开发者和客户必须一起定义产品的目的和范围软件目的从客户的角度定义该产品的总体目标,但不必考虑这些目标如何实现软件范围定义了与软件产品相关的数据、功能和行为,及其相关的约束。在确定了产品的目的和范围后,就要开始设计并选择备选的解决方案,选择的依据是由产品交付期限、预算、可用的人员、技术接口及各种其他因素所形成的约束,2023/2/21,10,4P:过程(Process),在软件过程的管理中,需要定义整个软件开发的活动、所采用的技术方法、各个阶段的里程碑、各种工程制品等,这些定义必须是文档化的。还要通过有效的培训,将关于过程的知识传授给过程所涉及的每一个开发人员,促使他们按照过程定义的方式协作完成相关的任务。软件过程不是一成不变的,软件项目组应根据项目的具体情况和特点,选择合适的软件过程模型以及模型中包含的活动和任务,2023/2/21,11,4P:项目(Project),软件项目管理的核心内容项目的规划 在项目的启动和计划阶段,项目管理者需要确定项目的范围和需求,并以此为基础进行项目的规划、估算和资源分配等,制定出切实可行的项目计划。跟踪控制 在项目的执行过程中,项目管理者需要及时了解项目的进展情况,对于可能发生的变更进行有效的控制和管理。,2023/2/21,12,软件项目管理的关注点,2023/2/21,13,软件项目管理活动,项目启动阶段确定项目的目标和范围。确定项目范围、组建项目团队、建立项目环境项目规划阶段建立项目的基准计划。确定项目活动、预算项目成本、制定进度计划项目实施阶段按照计划执行和控制项目。监控项目执行、管理项目风险、控制项目变更项目收尾阶段交付产品,总结经验教训。客户验收项目、安装培训软件、总结项目经验,2023/2/21,14,软件项目管理活动,项目启动阶段确定项目范围项目管理者了解客户的实际需求,从功能、性能和交付要求的角度定义软件的范围,研究系统的可行性和可能的解决方案,并与客户在软件范围、验收标准和交付日期等方面达成正式的协议。组建项目团队项目管理者根据系统任务的要求组织开发团队,并明确每一位成员的角色和职责。建立项目环境项目管理者与项目团队一起,建立软件开发所需的基础设施,包括网络环境、软件系统、配置管理工具、文档模板、会议程序和沟通系统等。,2023/2/21,15,软件项目管理活动,项目规划阶段确定项目活动项目管理者需要明确项目的各种活动、里程碑和可交付的文档,确定各种活动之间的依赖关系和执行顺序,估计软件开发所需要的资源。预算项目成本项目管理者根据每项活动所需的资源进行成本估算,确定项目的成本预算。制定进度计划项目管理者预计完成每一项活动所需花费的时间,制定出合理的开发进度计划,以确保项目在预定时间、预算资金与可利用资源的约束条件下完成。,2023/2/21,16,软件项目管理活动,项目实施阶段监控项目执行项目管理者需要跟踪项目的执行情况,综合评价整个项目的实际进展,及时发现和报告实际情况与计划的偏差,并在必要的情况下采取纠正行动。管理项目风险项目管理者应该识别可能造成项目进度推迟或预算超支的潜在问题,并采取有效的风险管理策略,以减少潜在问题发生的可能性和影响。控制项目变更任何项目都不可避免地要发生变更,项目管理者应该建立有效的变更控制系统,包括变更控制委员会、软件配置管理和项目沟通系统,以便对项目变更进行控制和管理。,2023/2/21,17,软件项目管理活动,项目收尾阶段客户验收项目根据项目协议中规定的验收标准,客户对所交付的软件产品进行评价,最终正式接收产品。安装培训软件项目团队在模板环境中安装软件系统,培训用户使用系统,并移交文档。总结项目经验项目团队分析和总结项目的经验教训,避免在以后的软件项目中犯同样的错误,不断提高软件开发管理水平。,2023/2/21,18,课程实验:项目管理活动,1.了解项目内容、范围和期限2.确定开发过程(方法、工具、语言、文档和支持)3.确定组织结构4.明确管理过程(人员职责)5.制定项目计划6.人员分配7.风险管理8.确定要产生的文档9.执行和控制项目的进展10.交付项目,2023/2/21,19,内容提纲,人员组织与管理软件项目组织形式微软公司的开发组织软件团队的建设项目沟通管理软件项目规划软件风险管理软件配置管理,You are here!你在这儿!,2023/2/21,20,人员在软件开发中的重要性,人员是软件开发中最重要的资源人员的选择、分配和组织很大程度上影响软件项目的效率、进度、过程管理和产品质量软件开发依赖于开发人员的认知能力和沟通技能项目经理的任务主要是面向人的项目经理必须能够了解人项目经理需要建设和优化团队,使其工作达到最佳典型的软件开发组织形式民主式、主程序员式、技术管理式,2023/2/21,21,人员的选择,2023/2/21,22,民主式组织结构,小组成员完全平等,名义上的组长与其他成员没有任何区别。大家享有充分的民主,项目工作由全体讨论协商决定,并根据每个人的能力和经验进行适当分配。优点同等的项目参与权激发大家的创造力,有利于攻克技术难关特别适合于规模小、能力强、习惯于共同工作的软件开发组缺点缺乏明确的权威领导,很难解决意见分歧无法适用于大规模开发的情形。,2023/2/21,23,主程序员式组织结构,以主程序员为核心主程序员既是项目管理者也是技术负责人对团队其他人员的职能进行专业化分工优点实现了项目人员的专业化分工,所有人员在主程序员的领导下协调工作,确保了工作概念的完整性。员工之间采取简单的交流沟通模式,提高了工作效率。缺点很难找到技术和管理才能兼备的主程序员,2023/2/21,24,技术管理式组织结构,技术与管理工作进行分离技术负责人负责技术决策,参与全部代码的审查工作管理负责人负责非技术性事务的管理决策和绩效评价优点明确划分技术和管理的管理权限,充分发挥技术人才和管理人才各自的特长可以组成层次式的结构,适合大规模的软件开发项目缺点由于技术和管理的职责分离,容易出现职责不清的矛盾,2023/2/21,25,案例:微软公司的软件开发组织,微软开发团队的特点小型的、多元化的项目组织相互依赖的角色与共同分享的职责具备专深的技术水平和业务技能具有强烈的产品意识,关注最终发布的软件产品清晰的目标和远景人人参与设计项目组成员在同一地点办公对于规模较大的项目,采取类似小型项目组的运作模式,2023/2/21,26,案例:微软公司的软件开发组织,项目团队的角色划分产品管理角色程序管理角色软件开发角色软件测试角色用户体验角色发布管理角色,主要任务是控制客户需求、产品特性和开发周期之间的关系,推动产品从生产走向市场的实际进程,提高客户满意度。,2023/2/21,27,案例:微软公司的软件开发组织,项目团队的角色划分产品管理角色程序管理角色软件开发角色软件测试角色用户体验角色发布管理角色,主要任务是在规定的项目资源、期限等限制条件下,制定和管理项目日程、费用预算、产品特性说明等文档,负责推动产品开发过程顺利进行,确保产品能够如期发布。,2023/2/21,28,案例:微软公司的软件开发组织,项目团队的角色划分产品管理角色程序管理角色软件开发角色软件测试角色用户体验角色发布管理角色,主要任务是使用适当的技术和工具实现项目目标,满足客户需求。除了技术因素外,开发人员还必须仔细考虑可能影响产品质量的每一个开发环节,确保最终产品可以真正满足客户需求。,2023/2/21,29,案例:微软公司的软件开发组织,项目团队的角色划分产品管理角色程序管理角色软件开发角色软件测试角色用户体验角色发布管理角色,测试角色是项目过程中保证产品质量的最后一个环节。测试人员的主要任务是在产品最终发布前找到尽可能多的缺陷或错误。,2023/2/21,30,案例:微软公司的软件开发组织,项目团队的角色划分产品管理角色程序管理角色软件开发角色软件测试角色用户体验角色发布管理角色,主要任务是协助用户更好地使用产品,排除用户在使用产品时遇到的问题和障碍。,2023/2/21,31,案例:微软公司的软件开发组织,项目团队的角色划分产品管理角色程序管理角色软件开发角色软件测试角色用户体验角色发布管理角色,主要任务是确保产品的顺利发布,为项目组的正常运营提供服务和支持。,2023/2/21,32,案例:微软公司的软件开发组织,2023/2/21,33,案例:微软公司的软件开发组织,2023/2/21,34,案例:微软公司的软件开发组织,2023/2/21,35,案例:微软公司的软件开发组织,2023/2/21,36,案例:微软公司的软件开发组织,2023/2/21,37,案例:微软公司的软件开发组织,2023/2/21,38,案例:微软公司的软件开发组织,大型项目的团队模型,2023/2/21,39,案例:微软公司对员工的要求,个人素质聪明有自我发展能力足够自信有很强的工作驱动能力,知道如何开展工作沉着与镇定有创新精神对待产品和技术热爱技术,热心解决问题针对变化和创新,有良好的适应和管理能力,2023/2/21,40,案例:微软公司对员工的要求,注重客户的反馈所有员工都要以客户为中心开展工作员工代表公司的形象团队合作有团队精神具备良好的交流沟通能力善于与人相处,2023/2/21,41,软件团队的建设,团队成功的关键:明确的目标与共同的承诺清晰的分工与紧密的协作融洽的关系与通畅的沟通高昂的士气与高效的工作,2023/2/21,42,思考与讨论,思考你认为一个合格的软件工程师应该具备什么素质和能力?讨论在本课程实验的开发中,你们打算采取什么组织方式?如何定义角色职责?你们小组人员有哪些类型?技术不熟练技术有些了解,但自我估计过高工作熟悉、可轻松完成但缺少热情工作热情高、完成份内工作且主动去做未安排或未想到的事情,2023/2/21,43,内容提纲,人员组织与管理项目沟通管理项目沟通复杂性项目沟通方式项目沟通活动软件项目规划软件风险管理软件配置管理,You are here!你在这儿!,2023/2/21,44,项目沟通管理,项目沟通管理是对项目实施过程中的各种形式和各种内容的沟通行为进行管理的过程。涉及:对传递项目信息的内容、方法和过程等方面进行综合管理;目的:保证项目的有关信息能够在适当的时间、以适当的方式产生、收集、处理、贮存和交流。影响团队沟通的因素团队成员的地位团队成员的个性团队成员的性别组合沟通渠道,2023/2/21,45,沟通的复杂性,软件团队规模是影响沟通有效性的重要因素之一沟通渠道数量n(n-1)/2,其中:n为团队成员的人数定期沟通的人员规模对开发效率的影响,2023/2/21,46,常用沟通方式,直接交谈电话交谈电子邮件会议项目网站书面报告,2023/2/21,47,常用沟通方式,直接交谈一种由事件驱动的、基于时机的非正式信息沟通方式可以将信息迅速传递给对方,并在最短的时间内获得答案,容易促进人与人之间的交流。适用情况:解决由于缺乏协调而引起的简单问题。与领导层和项目成员等的个别谈话从客户和用户处获取需求交流问题并商讨解决方案缺点不适合很多人参与沟通的情况。在交谈中产生的信息和决定没有文档记录,因而会带来无据可查的问题。,2023/2/21,48,常用沟通方式,电话交谈也是一种直接交谈,可以不受任何地点的限制适用情况重要会议或重要事项的通知交流简单问题,2023/2/21,49,常用沟通方式,电子邮件一种常用的沟通方式,具有异步性和及时性的特点。可以使接受者随时随地收到邮件而对发送者没有任何限制,同时接受者也可以在合适的时间处理邮件而免除了被随时打扰的问题。适用情况发布项目信息发送项目文档会议或事项的通知缺点简短的文本信息可能由于脱离上下文而使人错误理解,发送地址错误、丢失或没有阅读等问题也会经常发生。,2023/2/21,50,常用沟通方式,会议适合于许多参与者讨论、检查和协商问题,并达成一致的解决方案常见的项目会议包括项目启动会议、阶段评审会议、解决问题会议、需求和设计评审会议、项目验收总结会议等适用情况项目启动会议客户需求评审和验收评审项目阶段评审项目组内任务检查集体讨论问题并达成一致意见项目总结会议,2023/2/21,51,常用沟通方式,项目网站保持组间交流、对外发布项目信息的理想工具。可以发布项目文档的最新版本和项目进展的最新动态消息,建立项目论坛和讨论小组,提供参考资料和开发工具。适用情况发布项目进展情况发布文档、代码等项目阶段性成果项目组间技术问题讨论提供项目资料和工具等,2023/2/21,52,常用沟通方式,书面报告一种正式的书面沟通方式,适合于复杂程度高、严谨性强的信息沟通通常包括有关项目的重要决定、项目计划、技术文档、项目进展报告、项目工作总结等适用情况有关项目的重要决定,项目计划软件编码规范等标准文档项目可行性研究报告项目技术文档,包括需求规格说明书、设计说明书、测试文档、用户手册等项目进展报告,项目总结报告缺点报告编写和阅读花费时间长,缺乏信息的有效反馈。,2023/2/21,53,项目沟通管理活动,规划项目沟通建立基础设施实施阶段性评审每周组织小组会议,2023/2/21,54,项目沟通活动,规划项目沟通在软件开发初期,开发人员需要通过面对面的会议完成问题定义和初步设计。初步设计完成之后,项目管理者可以将整个系统划分为若干相对独立的子系统,并将每一个子系统分配给一组开发人员承担,同时成立支持小组负责整个开发的文档管理和配置管理等。这时,大量的项目交流发生在项目组内部,项目组之间的交流主要发生在开发的关键点。项目组内部的交流活动状态检查、组内讨论、需求说明、项目变更等项目组之间的交流活动客户评审、项目评审、版本发布、问题讨论、项目变更等,2023/2/21,55,项目沟通活动,建立基础设施为了支持整个项目和小组内部的交流,项目管理者可以建立项目的信息系统和内部网站,项目相关人员通过浏览器和网络服务器实现对项目数据的存取访问。各种项目数据按照逻辑组织分布在后台服务器上,系统通过对访问权限的控制,满足各层次人员的不同使用需求。各个项目小组可以建立自己的内部网站,网站可以包括如下内容:项目公告:分布项目的重要事件和消息。问题论坛:发表和回答项目中的各种问题。项目文档:提供可交付的系统版本以及内部的项目文档资料等,2023/2/21,56,项目沟通活动,实施阶段性评审项目阶段性评审是开发人员与其他相关人员共同评价项目的实施情况,以便了解项目的执行状态,发现问题并找出偏差。包括客户参与的评审活动和项目组进行的评审活动客户参与的评审活动,通常发生在需求文档分布和系统验收交付时。项目组进行的评审活动,通常包括总体设计评审、详细设计评审、代码审查和测试评审等。,2023/2/21,57,项目沟通活动,每周组织小组会议项目小组需要每周组织组内会议进行状态检查、集体讨论和问题讨论等,其重点在于检查各项任务与计划相比的完成情况,从而发现偏差并及时纠正。在小组会议上,项目成员通过讨论项目中未解决的或者突然出现的问题,共同商讨问题的解决方案,促进了彼此之间的非正式交流。,2023/2/21,58,内容提纲,人员组织与管理项目沟通管理软件项目规划软件规模估算软件成本估算软件项目计划软件风险管理软件配置管理,You are here!你在这儿!,2023/2/21,59,软件项目规划,软件项目规划是项目管理者对资源、成本和进度作出合理的估算,制定出切实可行的软件项目计划。软件项目规划过程确定项目的目的和范围具体说明项目的最终产品以及期望的时间、成本、质量目标分解和定义整个项目应包括的工作活动和任务估算完成该项目的规模及其所需资源制定合理的软件项目计划包括进度、成本、质量等方面的预测,2023/2/21,60,软件规模估算,代码行技术功能点技术,2023/2/21,61,代码行技术,代码行技术代码行技术是一种简单而直观的软件规模估算方法它从过去开发类似产品的经验和历史数据出发,估算出所开发软件的代码行数。估算时,要求评估人员给出乐观的(a),悲观的(b),可能的(m)三种情况下的估计值,公式 L(a+4m+b)/6L是软件的代码行数,单位是行代码(LOC)或千行代码(kLOC),2023/2/21,62,代码行技术,举例某软件系统中有一个指定窗口对象,开发人员估计处理该窗口编辑所需的支持代码在200400行之间,并且认为接近200行,这时最终的估算结果可能是:L(2002504400)/6266 LOC,2023/2/21,63,代码行技术,生产率PL/PML 代码行数,单位 kLOC或LOC;PM 软件开发的工作量,单位人月;P 软件开发的生产率,单位每人月完成的代码行数;单位成本 CS/L 每行代码的平均成本S 软件开发的总成本,单位人民币或美元(货币单位),2023/2/21,64,代码行技术,代码出错率 EQRN/L 每千行代码的错误总数N 软件的错误总数;举例 开发人员对某软件系统进行规模估算,该软件所需的最佳代码行数为60000行,可能代码行数为64000行,悲观代码行数为80000行;开发成本为20000元,软件开发的工作量为1000人月,开发小组共4人,试计算代码行的期望值L,软件开发的生产率P,每行代码的单位成本C。,2023/2/21,65,代码行技术,答案 L=(a+4m+b)/6=(60000+64000*4+80000)/6=66000 Loc P=L/PM=66/1000=0.066 kLOC/人月 C=S/L=20000/66=303 元/kLOC,2023/2/21,66,代码行技术,习题 用代码行技术来估算一个图形软件包的规模。假设该软件包有四个主要功能,即用户接口控制、二维几何分析、计算机图形显示、外部设备控制,每个功能的代码行估计值如下表所示,并计算每个功能的生产率和单位成本。,2023/2/21,67,代码行技术,习题 用代码行技术来估算一个图形软件包的规模。假设该软件包有四个主要功能,即用户接口控制、二维几何分析、计算机图形显示、外部设备控制,每个功能的代码行估计值如下表所示,并计算每个功能的生产率和单位成本。,2023/2/21,68,代码行技术,优点简单方便,在历史数据可靠的情况下可以很快估算出比较准确的代码行数缺点需要依赖比较详细的功能分解,难以在开发初期进行估算估算结果与所用开发语言紧密相关,无法适用于非过程语言,2023/2/21,69,功能点技术,功能点技术功能点技术是依据软件信息域的基本特征和对软件复杂性的估计,估算出软件规模。这种方法适合于在软件开发初期进行估算,并以功能点为单位度量软件规模,适合于度量信息系统。软件信息域的5 个基本特征外部输入:用户进行添加或修改数据的屏幕或表格外部输出:软件为用户产生的输出屏幕或报表外部查询:软件以联机输出方式产生的独立查询内部逻辑文件:软件修改或保存的逻辑记录集合外部接口:与其他系统进行信息交换或共享的文件,2023/2/21,70,功能点技术,计算步骤第1步:计算信息域特征数量及其复杂度第2步:计算未调整功能点数UFP第3步:计算复杂度调整因子Fi(i1,2,14)第4步:计算调整功能点FPFPUFP0.650.01Fi第5步:根据需要,将最后得出的功能点FP转化为代码行数,2023/2/21,71,功能点技术,功能点计算,2023/2/21,72,功能点技术,复杂度调整值 Fi 0,1,50无影响;1 偶然产生影响;2 产生轻度的影响;3 产生一般程度的影响;4 产生重要的影响;5 产生非常重要的影响,2023/2/21,73,功能点技术,复杂度调整值 Fi 0,1,50无影响;1 偶然产生影响;2 产生轻度的影响;3 产生一般程度的影响;4 产生重要的影响;5 产生非常重要的影响,2023/2/21,74,功能点技术,部分开发语言的每个功能点对应的平均代码行数,2023/2/21,75,实例:功能点技术,假设该公司大约有3000名员工,需要开发一个简单的工资软件,具体需求如下:系统生成员工的工资单,列出工资的所有收入项和纳税扣除额,并在屏幕上显示工资单,工资单的功能复杂度是“复杂”;另外,系统产生7个报表,每个报表的复杂度是“简单”。系统要求用户从屏幕上输入员工的基本信息(包括员工编号、基本工资、所在等级所属部门等)和每月的考勤情况,这两个屏幕输入的复杂度为“复杂”;另外,还有一个所得税信息的输入,其复杂度为“中等”。系统提供20个查询,每个查询的复杂度是“简单”。系统内部维护一个员工信息文件,该文件的复杂度是“复杂”。系统引用了3个数据表,包括员工基本信息、部门信息和所在等级,其中员工基本信息的复杂度是“中等”,其他两个的复杂度是“简单”。,2023/2/21,76,实例:功能点技术,第1步:计算信息域特征数量及其复杂度外部输入:由用户输入到系统进行处理或存储的信息单元员工信息:“复杂”每月考勤信息:“复杂”所得税信息:“中等”外部输入:系统为用户产生的业务信息单元,包括屏幕数据、报表数据、错误信息等。工资单(收入项信息,纳税扣除额的信息):“复杂”7个报表:“简单”,2023/2/21,77,实例:功能点技术,第1步:计算信息域特征数量及其复杂度外部查询:系统以联机输出方式产生的独立查询。系统提供20个查询:“简单”内部文件:软件修改或保存的逻辑记录集合,可以是数据表,也可以是数据文件。员工信息文件:“复杂”外部接口:与其他系统进行信息交换或共享的文件。员工信息表:“复杂”部门信息表:“简单”工资等级表:“简单”,2023/2/21,78,实例:功能点技术,第2步:计算未调整功能点数UFP,2023/2/21,79,实例:功能点技术,第3步:计算复杂度调整因子Fi(i1,14),2023/2/21,80,实例:功能点技术,第4步:计算调整功能点FPFPUFP0.650.01Fi1500.650.01(332245251)138第5步:将功能点 FP 转化为代码行数例如使用VB 6 编程语言,则代码行数为:138243312 LOC,2023/2/21,81,功能点技术,适用适合于软件开发初期进行估算,并以功能点为单位度量软件规模。优点与开发语言无关,并考虑了应用环境因素的影响。缺点判断信息域的复杂度等级和技术因素的影响程度时,通常存在较大的主观性,不太适用于非信息系统。,2023/2/21,82,软件成本估算,目前,软件成本估算一般包括:专家判断类比估算经验模型自上向下的方法:对整个项目的总开发时间和总工作量作出估算,然后把它们按阶段、步骤和工作单元进行分配。自下向上的方法:分别估算各工作单元所需的可发时间,然后汇总得出总的工作量和开发时间。,2023/2/21,83,专家判断,专家判断是依靠一个或多个专家对项目成本作出估计,这是一种近似的猜测,要求专家具有专门知识和丰富的经验。Delphi 方法是最流行的专家评估技术,它鼓励参与者就问题相互讨论,互相说服对方,最终达成共识。,2023/2/21,84,专家判断,Delphi 方法的具体步骤:项目协调人向每个专家提供软件规模和估算表格;项目协调人召集专家小组会讨论与规模相关的因素;每个专家匿名填写成本估算表格;项目协调人整理出一个估算总结,并将其反馈给专家;项目协调人召集召集小组会讨论较大的估算差异;专家复查估算总结,并在估算表上提交另一个匿名估计;重复46,直到估算结果中的最低和最高达到一致。,2023/2/21,85,类比估算,类比估算是一种比较科学的传统估算方法,它适合评估一些与历史项目在应用领域、环境和复杂度上相似的项目,通过新项目与历史项目的比较得到规模估算。类比估算的精确度取决于历史项目数据的完整性和准确度。使用好类比估算的前提之一是,组织建立起较好的项目后评价与分析机制,保证对历史项目的数据分析是可信赖的。,2023/2/21,86,类比估算,类比估算的基本步骤整理出项目的功能列表和实现每个功能的代码行数;标识出每个功能列表与历史项目的相同点和不同点,特别注意历史项目中不足的地方;通过步骤(1)和(2)得出各个功能的估算值;产生成本估计。,2023/2/21,87,COCOMO模型,结构性成本模型COCOMO(COnstructive COst MOdel)是一种利用经验模型进行成本估算的方法。COCOMO模型将相同的开发复杂度分成三种类型,分别为组织型、半独立型、嵌入型,其具体特征:,2023/2/21,88,COCOMO模型,COCOMO模型分为基本的、中间的和详细的三个层次,层次越高则准确性越高。基本COCOMO模型中间COCOMO模型,2023/2/21,89,基本COCOMO模型,基本的 COCOMO 模型仅仅使用产品规模和系统类型来确定开发工作量和进度,适合于小到中等规模的项目进行快速而粗略的估计。这是一个静态单变量模型,用一个以源代码行数为自变量的经验函数来计算软件开发工作量。计算公式其中,E 所需开发工作量,单位人月;D 所需开发时间,单位月;L 已估算出的源代码行数,单位kLOC;a,b,c,d 是常数,与软件系统的类型有关,可从下表查出。,2023/2/21,90,基本COCOMO模型,简单COCOMO模型参数举例前面使用功能点技术估算软件规模的工资管理系统,是一个半独立系统,那么,请使用基本COCOMO模型估算其开发工作量及时间,2023/2/21,91,基本COCOMO模型,练习一个4万行规模的组织型应用程序,花50万美元可在市场上买到。如果自己开发,则每人月的总花费需要4000美元,试问购买合算还是自己开发合算?请用简单COCOMO模型估算其开发成本。解:计算 3.2*401.05,得到MM开发工作量,再将 4000*MM,其结果若超过50万美元,则购买合算;否则,自己开发合算.(组织型的 MM=3.2(KLOC)1.05,这里KLOC=4万行),2023/2/21,92,中间COCOMO模型,中间COCOMO模型以基本COCOMO 模型为基础,通过对影响工作量的若干因素进行估计,确定出调节因子,再对工作量估算公式进行修正。计算公式其中,E 所需开发工作量,单位人月;F 调节因子;它与软件产品,计算机环境,人员和项目等因素有关,由若干个Fi(i1,17)的值相乘得到;L 已估算出的源代码行数,单位kLOC;a,b 是常数,可从中间COCOMO模型参数表中查出。,2023/2/21,93,中间COCOMO模型,中间COCOMO模型参数,2023/2/21,94,中间COCOMO模型,影响工作量的若干因素,2023/2/21,95,中间COCOMO模型,举例一个 10 KLOC 嵌入式软件产品,要完成在商业微处理器上实现通信处理功能,这里使用中间 COCOMO 模型估计开发工作量和进度。F1.07 E47(人月),2023/2/21,96,计算工作量影响因素,2023/2/21,97,计算工作量影响因素,2023/2/21,98,练习,某开发项目的评估规模是 55 KLOC,且认为是中等复杂程度。该项目所开发的软件是可以支持 Web 的系统,具有强大的后端数据库,属于半独立型,这里使用基本的 COCOMO 模型估计开发工作量和进度。假设你是一个软件项目的负责人,该项目要求开发一个安全性要求极高的医疗控制系统,用于控制医院病人的放射性治疗。该系统是嵌入式系统,内存限定在16MB,程序规模估计是10KLOC,病人的放射治疗信息将记录到数据库中。(1)请使用简单COCOMO模型估算系统开发的工作量。(2)请考虑产品、计算机、人员和项目等影响因素,使用中间COCOMO模型估算系统开发的工作量,并说明考虑这些因素的理由及其取值。,2023/2/21,99,软件项目计划,软件项目计划是一个用来协调所有其他计划、以指导项目实施和控制的文件,它应该随着项目的进展和信息的补充进行定期完善。软件项目计划包括项目可用的资源、工作分解以及完成工作的进度安排,另外还有各种支持性计划。质量计划:描述质量过程和质量标准确认计划:描述系统确认的方法、资源和进度配置管理计划:描述配置管理的过程和结构维护计划:预期系统维护需求和所需的成本与人力人员开发计划:描述如何开发项目人员的技能和经验,2023/2/21,100,SPMP(IEEE 10581998),1.概述1.1 项目概述1.2 项目交付产品1.3 SPMP 的演化1.4 参考资料1.5 定义和缩写2.项目组织2.1 过程模型2.2 组织结构2.3 组织界限和沟通3.管理过程3.1 管理目标和优先级3.2 假设、依赖关系和限制3.3 风险管理3.4 监督和控制机制3.5 项目人员计划,4.技术过程4.1 方法、工具和技术4.2 软件文档4.3 用户文档4.4 项目支持功能5.工作包、进度表和预算5.1 工作包5.2 依赖关系5.3 资源需求5.4 预算和资源分配5.5 进度表6.其他6.1 索引6.2 附录,2023/2/21,101,内容提纲,人员组织与管理项目沟通管理软件项目规划软件风险管理风险识别风险分析风险规划风险监控软件配置管理,You are here!你在这儿!,2023/2/21,102,软件风险管理,风险是一种不确定的事件或条件。项目风险将影响项目进度和资源产品风险将影响产品的质量和性能业务风险将影响开发或采购软件的组织软件风险管理是通过主动而系统地对项目风险进行全过程的识别、分析和监控,最大限度地降低风险对软件开发的影响。,2023/2/21,103,项目风险管理过程,2023/2/21,104,风险识别,风险识别是试图采用系统化的方法,识别特定项目已知的和可预测的风险。常用的风险识别方法头脑风暴法由项目小组根据项目目标、项目的制约因素和假设条件,在项目具有的历史资料以及过去的经验教训等基础上综合判断项目的可能风险。风险检查表列出了所有可能的与每一个风险因素有关的提问,使项目管理者可以集中识别常见的、已知的和可预测的风险,诸如软件规模、商业影响、客户特性、软件过程、开发技术、开发环境、开发人员等方面的风险,2023/2/21,105,举例:头脑风暴法,举例:识别举办短期培训班项目的风险列出项目的工作分解结构;项目小组一起进行头脑风暴,对每一项任务进行讨论,识别所有可能的风险,防止遗漏重要的风险。,2023/2/21,106,举例:头脑风暴法,可能的风险确定培训项目题目选择不当,可能招不来学生,导致亏本。寻找培训讲师讲师可能生病或者临时有重要事情来不了。招生可能没有学员报名。授课投影仪可能出问题。结束课程学员不满意,大闹课堂 问题:还有哪些可能的风险?,2023/2/21,107,举例:风险检查表,2023/2/21,108,举例:风险检查表,2023/2/21,109,风险类型,常见的软件项目风险类型:软件规模风险与待开发或修改的软件系统估算相关的风险,包括系统规模、数据库大小、用户数量、可复用性、度量方法及其可信度等;如:软件规模估计不足;开发所需时间不足等。商业影响风险与软件产品的商业环境与要求相关的风险,包括产品对公司业务带来的利润影响、管理层的重视程度、交付期限的合理性、产品质量对于成本的影响、产品与其他系统的互操作性等;如:组织的结构发生了变化;组织财政问题导致项目预算消减等。,2023/2/21,110,风险类型,常见的软件项目风险类型:客户相关风险与客户的素质以及开发者和客户定期通信的能力相关的风险,包括需求的明确程度、客户的参与和支持程度、客户与开发人员的配合程度等;如:需求变更导致主要的设计和开发重做;客户无法理解需求变更带来的影响。软件过程风险如果软件过程定义得不清楚,分析、设计、测试是以无序的方式进行,且没有采取实际行动来保证软件的质量,则软件项目处于风险之中。包括过程问题、技术问题。如:没有定期对测试过程和测试情况进行复审;没有使用特定的方法进行软件分析。,2023/2/21,111,风险类型,常见的软件项目风险类型:开发技术风险与开发软件系统所使用的软件技术或硬件技术相关的风险,包括所用技术的成熟程度、开发方法的特殊要求和创新要求、功能实现的可行性等;如:数据库事务处理速度不够;拟采用的系统组件存在缺陷,而影响系统的功能。开发环境风险与所用软件工程环境相关的风险,包括软件项目管理工具、过程管理工具、分析与设计工具、编程工具、配置管理工具、测试工具等的可用程度和人员培训程度;如:CASE工具生成的代码效率低,CASE工具无法集成。,2023/2/21,112,风险类型,常见的软件项目风险类型:开发人员风险与项目团队成员相关的风险,包括人员的能力和经验、技术培训、人员稳定性等。如:招牌不到所需技能的人员;关键的人员在项目的关键时刻生病或不在;无法进行所需的人员培训等。,2023/2/21,113,风险分析,风险分析是对已识别的风险进行估计和评价,确定风险发生的概率与后果。定性分析评估已识别出的项目风险的影响和可能性,并按照可能产生的影响进行排序。定量分析量化分析每一风险的概率及其对项目目标造成的后果,并得出每种风险的大小和严重程度等。软件开发风险通常包括性能、成本、支持和进度等因素,这些因素对项目目标可能产生的影响可以划分为可忽略的、轻微的、严重的、灾难性的等四个级别。P62,2023/2/21,114,举例:软件项目风险分析,风险评估表是随着软件项目的进展发生变化的,项目管理者需要定期复查和更新风险评估表。,2023/2/21,115,风险规划,在识别和分析项目风险之后,项目管理者应该关注那些影响较大的风险,并制定出具体的风险应对策