1软件开发的风险管理软件项目管理课程之2讲授内容1.项目案例2.什么是软件风险?3.如何进行风险管理?4.风险评估5.风险控制6.小结3项目案例案例角色和人物–小王:软件项目负责人–老王:公司技术老总开发小组:小李,老赵,小田,小谢4项目实施存在风险(1/4)项目已成功实施1个月,某天小谢突然告诉小王,他已办理好了去德国的签证,2周后他会辞职离开公司前往德国留学(人员)–小谢的离开显然将会影响项目组的正常运作,影响项目的进度,为此将会给项目的实施带来损失–可以想象,2周以后小谢的离开将会带来一系列问题:谁来接替小谢的工作?在此之前谁来负责交接小谢的工作?如何尽可能的避免由此给项目组带来的损失(包括进度损失和工作损失等)–尽管还没发生,但必须考虑如何避免问题的发生,以及一旦发生后该采取得措施,以便将损失减少到最少5项目实施存在风险(2/4)按照软件开发计划,需求分析应该在12月31日之前完成,然而在软件项目实施过程中项目经理发现,由于原先对工作量估算过于乐观,需求分析在12月31日之前已经不可能完成(计划)–显然,原先计划制定的不科学和不准确,导致了实施过程中进度难以控制,如果强行按照计划来执行显然是不可行的,为此,必须对计划重新进行分析和调整6项目实施存在风险(3/4)在软件设计阶段,软件设计负责人老王发现,用户需求中的某项需求(例如,将已有word文档的内容显示在Web页面上)至今尚未找到解决的技术途径(技术)–显然,该问题将直接影响软件项目的后续开发工作,影响到软件项目能否成功完成7项目实施存在风险(4/4)在需求分析过程中,老王带领的需求分析小组和用户在进行交流的过程中发生了矛盾,出现了争吵,用户方说将不再配合需求分析小组的工作,而且他们确实没有配合开发方的工作(合作)–显然,开发方和用户方出现这种状况显然是双方没有想到的–这种状况延续下去必将对软件项目的实施产生影响,影响软件项目的进度,甚至会导致项目失败8案例提示我们风险在项目实施过程中大量存在软件风险形式多样软件风险事先难以确定软件风险会对软件项目的实施产生不良影响如果不对风险进行良好的管理,项目就很难保证按照计划、在成本和进度范围内,开发出高质量的软件产品,甚至会导致项目失败9软件项目管理问题什么是软件风险?有哪些形式的软件风险?如何管理软件风险?10讲授内容1.项目案例2.什么是软件风险?3.如何进行风险管理?4.风险评估5.风险控制6.小结11什么是软件风险?什么是软件风险?–使软件项目的实施受到影响和损失、甚至导致失败的、可能会发生的事件–例如,人员的临时流失,计划过于乐观,设计的低劣软件风险的特点–事先难以确定–带来损失,影响项目实施,甚至会导致项目失败12讲授内容1.项目案例2.什么是软件风险?3.如何进行风险管理?4.风险评估5.风险控制6.小结13如何进行风险管理1.什么是风险管理?2.风险进行管理的方式3.如何进行风险管理?14什么是软件风险管理?在风险影响软件项目成功实施前,对它进行识别和处理,并预防和消除风险的发生–识别风险(会有哪些风险?)–预防和消除风险(最好别让风险发生)–制定风险发生后的处理措施(万一发生该怎么办?)15风险管理的策略(1/2)危机管理–救火模式,风险造成麻烦后才着手进行处理–例如,小谢离开公司1个月后,其他小组需要小谢所负责子系统的模块以便进行集成和测试,但是相关代码还没写,此时已经影响其他小组计划和项目进度,为此抽调其他人接替小谢工作失败处理–察觉到了风险之后采取措施,但只是在风险发生之后–例如,小谢出走的第二天,公司决定抽调其他人员来接替风险缓解–识别了风险,并且事先制定好风险发生后的补救措施,但是不做任何防范措施。–例如,知道不好事件可能会发生,等它发生。小谢要走,小张接替16风险管理的策略(2/2)风险预防–将风险识别和风险防范作为软件项目的一部分加以规划和执行–例如,知道哪些不好事件可能会发生,制定好了万一发生的应对措施,同时采取措施防止它发生。–小谢要走,小张接替,同时和小谢商量,做工作,能否等到项目完成之后再走消灭根源–识别和消除可能产生风险的根源–例如,知道哪些不好事件可能会发生,制定好了万一发生的应对措施,同时采取措施消除风险根源,杜绝风险的发生–小谢要走,小张接替,同时给小谢提供更多的学习机会17风险管理的组成(1/3)风险管理风险评估风险控制风险识别风险分析风险优先级风险管理计划风险化解风险监控18风险管理的组成(2/3)风险评估–风险识别:识别风险,形成风险列表–风险分析:判定每一个风险出现的概率、产生的影响及其重要性–风险优先级:按照每个风险的重要性排出一个风险优先级风险评估是风险控制的基础19风险管理的组成(3/3)风险控制–风险管理计划:针对各个重要风险制定风险管理计划,确保各个单独的风险管理计划之间以及它们与相互计划之间的一致性–风险化解:执行风险管理计划,以缓解或消除风险–风险监控:监控风险化解的过程,可能会识别出新的风险20讲授内容1.项目案例2.什么是软件风险?3.如何进行风险管理?4.风险评估5.风险控制6.小结21风险评估1.风险识别2.风险分析3.风险优先级22风险识别风险的类别–计划编制–组织和管理–开发环境–最终用户–客户–承包商–需求–产品外部环境–人员–设计和实现–过程23计划编制风险计划、资源和产品的定义完全由客户或上层领导决定,忽略了项目组的意见,并且这些决定不完全一致计划忽略了必要的任务和活动计划不切实际计划基于特定小组成员,而这样的小组成员根本得不到产品规模估算过于乐观工作量估算过于乐观进度的压力造成生产率的下降目标日期提前,但没有相应地调整产品范围和可用资源一个关键任务的延迟导致其他相关任务的连锁反应……24组织和管理风险缺乏强有力、有凝聚力的领导(项目组、企业)解雇员工导致项目小组能力下降削减预算打乱项目计划仅由管理层和市场人员进行技术决策,导致进度延长低效的项目组组织结构降低生产率管理层审查/决策的周期比预期时间长管理层作出了打击项目组积极性的决定非技术的第三方的工作比预期要长(如,采购硬件设备)计划性太差,无法适应期望的开发速度项目计划由于压力而放弃,导致开发混乱管理方面的英雄主义,忽视客观确切的状态报告,降低发现和改正问题的能力25开发环境风险设施不能及时到位设施到位,但不配套开发工具未能及时到位开发工具不如期望的那样有效,开发人员需要更多的时间,或者更换工具开发工具的学习期比预期的要长开发工具的选择不是基于技术需求,不能提供计划要求的功能26最终用户风险最终用户坚持新的需求最终用户对最后交付的产品不满意,要求重新设计和重做最终用户不买进项目产品,无法提供后续支持最终用户的意见未被采纳,造成产品最终无法满足用户要求27客户风险(1/2)客户坚持新的需求客户对规划、原型和规格的审核/决策超出预期客户没有参与规划、原型和规格的审核,导致需求不稳定,以及长时间的变更客户答复的时间比预期的要长客户坚持技术决策而导致计划延长客户对开发进度管理过细,导致实际进度变慢客户提供的组件无法与开发的产品匹配,导致需要额外的设计和集成工作客户提供的组件质量欠佳,导致额外的测试、设计或者功能不完善28客户风险(2/2)客户要求的支持工具与环境不兼容,性能差或者不完善,导致生产率降低客户不接受交付的软件,尽管它满足了所有的规格客户期望的开发速度是开发人员所无法达到的29承包商风险承包商没有按照承诺交付产品承包商提供的产品质量低下,必须花时间改进质量承包商提供的产品性能达不到要求30需求风险需求已经成为项目基准,但仍在变化需求定义欠佳:不清晰、不准确、不一致增加额外的需求31产品风险错误发生率高的模块,需要更多的时间对它进行测试、设计和实现矫正质量低下的不可接受的产品需要更多的时间对它进行测试、设计和实现由于功能错误,导致需要重新进行设计和实现开发额外不需要的功能延长了进度要满足产品规模和速度要求,需要更多的时间严格要求与现有系统兼容,需要更多的时间要求软件重用,需要更多的时间……32外部环境风险产品依赖政府规章,而规章的改变不可预期产品依赖草拟中的技术标准,而最后的标准不可预期33人员风险(1/3)招聘人员所需的时间比预期要长作为人员参与工作的先决条件(如培训、其他项目的完成等)不能按时完成开发人员与管理层关系不佳导致决策迟缓、影响全局项目组成员没有全身心地投入到项目中,因而无法达到所需的产品功能和性能需求缺乏激励措施、士气低下,降低生产能力缺乏必要的规范,增加工作失误,重复工作,降低工作质量缺乏工作基础(语言、经验、工具等)项目结束前,项目组成员离开项目组34人员风险(2/3)项目后期,加入新的开发人员,额外的培训和沟通降低了项目组成员的开发效率项目组成员不能有效的在一起工作由于项目组成员之间的冲突,导致沟通不畅,设计欠佳,接口错误和额外重复的工作有问题的项目组成员没有调离项目组,影响其他成员的积极性项目组的最佳人选没有加入项目组,或者加入项目组但没有合理使用关键任务只能兼职参与项目人员不足35人员风险(3/3)任务的分配和人员的技能不匹配人员工作的进展比预期的要慢项目管理人员怠工导致计划和进度失效技术人员怠工导致工作遗漏、质量低下,工作需要重做36设计和实现风险设计过于简单,考虑不仔细、不全面,导致重新设计和实现设计过于复杂,导致一些不必要的工作,影响效率设计质量低下,导致重新设计和实现使用不熟悉的方法,导致需要额外的培训时间产品使用低级语言编写,导致效率较低分别开发的模块无法有效集成,需要重新设计和实现37过程风险跟踪不准确,导致无法预知项目进展是否落后于计划前期的质量保证行为不真实,导致后期的重复工作质量跟踪不准确,导致无法得知影响进度的质量问题不能有效遵循标准,导致沟通不足,质量问题和重复工作风险管理粗心,导致没有发现重大的项目风险……38例子:风险列表编号风险名称1计划过于乐观2由于要完全支持自动从主机更新数据而造成额外的需求3由于市场变化而需额外的需求4图形格式子系统接口不稳定5设计欠佳,需要重新设计39风险分析1.评估风险发生的概率2.估算风险造成损失的大小3.计算风险危险度(RiskExplosure)40评估风险发生的概率(1/2)主观性较强,采用方法–熟悉系统、有经验的人参与评估–多人独立评估,综合折中–采用分类:非常可能(0.8-1.0),很可能(0.6-0.8),或许(0.4-0.6),不太可能(0.2-0.4),不可能(0-0.2)41评估风险发生的概率(2/2)编号风险名称发生概率1计划过于乐观50%2由于要完全支持自动从主机更新数据而造成额外的需求5%3由于市场变化而需额外的需求35%4图形格式子系统接口不稳定25%5设计欠佳,需要重新设计15%42评估风险发生造成的损失可以基于“进度”,“成本”或者“工作量”来进行估算编号风险名称发生概率损失(人周)1计划过于乐观50%52由于要完全支持自动从主机更新数据而造成额外的需求5%203由于市场变化而需额外的需求35%84图形格式子系统接口不稳定25%45设计欠佳,需要重新设计15%1543计算风险危险度风险危险度=风险概率×风险损失编号风险名称发生概率损失(人周)危险度(周)1计划过于乐观50%52.52由于要完全支持自动从主机更新数据而造成额外的需求5%201.03由于市场变化而需额外的需求35%82.84图形格式子系统接口不稳定25%41.05设计欠佳,需要重新设计15%152.2544风险优先级(1/2)统计表明,项目80%成本用于解决20%的问题风险管理重点关注20%重要的部分根据风险的危险度确定风险的重要性,忽略其他的部分45风险优先级(2/2)编号风险名称发生概率损失(人周)危险度(周)3由于市场变化而需额外的需求35%82.