单元测试Dern_yu@hotmail.comCMM与项目管理20.课程目的了解CMM的起源、过程成熟度框架和能力成熟度模型。理解CMM等级,了解过程的可视化和性能预测。理解CMM操作定义,掌握关键过程域的含义。了解项目管理基本知识要点,熟悉6种生命周期模型。第一部分CapabilityMaturityModel篇“CMM不是目标,CMM是过程的衡量标尺”4能力成熟度模型概述–能力成熟度模型给软件组织提供如何增加对开发和维护软件过程的控制,如何向软件工程和管理的优秀文化进化等方面的指导,即识别问题并选择其过程改进的策略。–Shewart30年代的统计质量控制原理Crosby提出成熟度框架的思想(质量实践的五个进化阶段)IBM改进以适应软件过程Deming和Juran发展并论证了统计质量控制原理1986年被Humphrey带到SEI加上了成熟度等级的概念1987年研制出软件过程评估和软件能力评价两种方法1.CMM的产生5过程成熟度框架–过程成熟度是一个过程被准确地定义、管理、测量、控制、并且是有效地程度。成熟度意味着能力上的增长潜力,并表明一个组织软件过程的丰富性和组织在项目中运用它时的一致性。1.CMM的产生6定义与构成–软件过程成熟度等级是向成熟软件组织前进路途中的台阶。每一个等级为过程改进提供一个台阶,每一个等级包含一组过程目标,当目标满足时,能使软件过程的一个重要成分稳定。每达到成熟度框架的一个等级,就建立起软件过程的一个不同的成分,导致组织过程能力的增长。2.软件过程成熟度等级72.软件过程成熟度等级5个等级图例85个等级–初始级:无秩序,无过程定义,成功依赖于个人的努力。–可重复级:已建立基本的项目管理过程,有必要的过程纪律,使具有类似应用的项目,能重复以前的成功。–已定义级:管理活动和工程活动的软件过程文档化、标准化、并集成到组织的标准软件过程。全部项目均采用组织标准软件过程的一个经批准的、讲究的版本。–已管理级:已采集详细的有关软件过程和产品质量的度量。无论软件过程还是产品均得到了定量了解和控制。–优化级:利用来自过程和来自新思想、新技术的先导性试验的定量反馈信息,使过程的持续改进成为可能。2.软件过程成熟度等级9本质–CMM是一个描述模型,描述能刻画特定成熟度等级的本质(或关键)属性。–CMM是一个规范模型,规范组织在约束环境下从事大规模项目时应该具有的行为规范类型。–CMM处于充分抽象的层次上,不会过多限制一个组织如何去实施软件过程;仅仅描述通常期待的软件过程的本质属性。3.理解成熟度等级10理解可重复级和已定义级–项目的规模和复杂性的增长,注意力从技术问题转向组织体系和管理问题,即过程成熟度的关键问题。–等级2在组织体系上要求存在指导项目建立合适的管理过程的方针。通过将项目管理过程编制成文件并遵照执行,管理者建立起领导地位。–等级3建立在项目管理的基础之上,对整个软件过程加以定义、集成和文档化。等级3上的一个挑战是构造这样一些过程,这些过程允许软件人员开展工作时仍有一定的自由度。3.理解成熟度等级11设计的主导地位–达到CMM最高成熟度等级的组织,具有能在预测成本和进度的限制下生产出极其可靠的软件过程。CMM是从制造业中所产生的过程思想推导出的,但软件过程不像制造过程那样以重复问题占主导地位,软件过程以设计问题占主导地位,而且是知识密集型的活动。3.理解成熟度等级12可视的管理视图4.软件过程的可视性13四种用法–评估组运用CMM去识别组织中的强项和弱项。–评价组运用CMM去确定选择承包商授予经营权的风险,并运用CMM监控合同。–经理和技术人员运用CMM去理解那些对于规划和实施其软件过程改进大纲来说必不可少的活动。–过程改进组,例如SEPG,运用CMM做指南,帮助他们定义和改进其组织的软件过程。6.CMM的操作定义147.关键过程域KPA18个KPA15CMM2的6个KPA–需求管理目的是在客户和软件项目之间建立对顾客需求的共同理解,与顾客的协议是策划和管理软件项目的基础。–软件项目策划目的是制定进行软件工程和管理软件项目的合理的计划,没有切合实际的计划不可能实施有效的项目管理。–跟踪与监控目的是建立适当的对实际进展的可视性,使管理者在软件项目性能显著偏离软件计划时能采取有效的措施。–子合同管理目的是选择合格的子承包商,并有效地管理他们。–质量保证目的是给管理者提供对于软件项目正采用的过程和正在构造的产品的恰当的可视性。–配置管理目的是在项目的整个软件生存周期中建立和维护软件产品的完整性。7.关键过程域KPA16CMM3的7个KPA–组织过程焦点目的是规定组织在改进其整体软件过程活动方面的职责。–组织过程定义目的是开发和保持一组便于使用的软件过程财富,能改进项目过程性能,并为组织能获得积累性的、长期的利益奠定基础。–培训大纲目的是培育个人的技能和知识,使得它们能有效地和高效率地执行其任务。–集成软件管理目的是将软件工程活动和管理活动集成为一个协调的、已定义的软件过程。–软件产品工程目的是一致地执行一个妥善定义的工程过程,为了能有效和高效地生产正确的、一致的软件产品,该工程过程集成全部软件工程活动。(定义一个有效的软件开发过程(开发周期+相关工具及方法))–组间协调目的是为软件工程组积极参与其它工作组工作制定一种方法,使得项目能有效和高效地满足客户的需求。–同行评审目的是及早和高效地除去软件工作产品中的缺陷。方法有法根式审查、结构化走查和学院式的评审方法。7.关键过程域KPA17它仅指明该做什么,而没有指明如何做,它不是方法论,但我们在学习CMM时,可以从中学到分析问题的方法。它仅指明该做的关键内容,它仅描述软件过程的本质属性,而并非面面俱到。抓问题的主要方面的思想贯穿在整个CMM模型中。软件过程是指软件工程过程、软件管理过程和软件组织的过程三者的有机结合。软件工程过程是我们理解的常规的软件的需求分析、设计、编码、测试等过程,软件管理过程是指为使软件过程顺利进行而进行和管理活动的集合。上述两个过程是以软件工程组为主的活动。软件组织的过程是企业级的对软件的组织活动,是以企业为主的活动。它是从软件过程的角度考虑问题,而并非关注软件开发工具。这与框架软件生存周期无关,也与所采用的开发技术无关。基于CMM的过程改善投资力度大、周期长,而技术投资则可能在短期内有较快回报。单独依靠技术改进可能在短期内有较快回报,但最终可能一无所获。8.CMM小结第二部分项目管理篇“项目管理是在当今急剧变化的时代中求得生存的关键”19软件工程专家Boehm(1983)–用分阶段的生命周期计划严格管理–坚持进行阶段评审–实行严格的产品控制–采纳现代程序设计技术–结果应能清楚地审查–开发小组的人员应少而精–承认不断改进软件工程实践的必要性0.软件工程的七条基本原理20什么是软件软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。什么是项目一次性、多任务的工作,具有明确规定的开始和结束日期的,拥有特定工作范围、预算和要达到的特定性能水平的任务。制约因素范围S、成本C、进度T、预期绩效P工程化的核心是实现软件生产模式的转变1.基本概念21被动式项目管理技术最好的人作为技术带头人,四处“救火”。主动式项目管理对风险的主动进攻,真正意义上的项目管理。2.类型22项目管理的五要素–技术、方法、团队建设、信息、沟通从战术看–产品规格、成本、进度从战略看–人员、问题、过程3.项目管理范围234.过程管理软件过程用于从事软件开发及维护的全部技术、方法、活动、工具以及他们之间的相互变换统称为软件过程。过程管理对最佳实践进行有效的积累、形成可重复的过程,使我们的最佳实践可以在机构内部共享。过程管理与项目管理项目管理用于保证项目的成功,过程管理用于管理最佳实践。过程管理与项目管理的关系4.过程管理过程定义项目控制项目计划过程改进操作过程管理项目管理团队成员25立项管理合同管理需求管理生存期定义任务分解规模估算进度计划质量计划配置管理计划风险计划团队建设项目监控项目度量结项管理5.主要管理范围26瀑布模型V模型原型模型螺旋式模型快速应用开发模型渐近式阶段模型6.生存期模型27各项活动按自上而下,相互衔接的固定次序,如同瀑布逐级下落。每项活动均处于一个质量环(输入-处理-输出-评审)中。优点:文档驱动缺点:系统可能不满足客户需求需求定义系统与软件设计集成与系统测试实现与单元测试运行与维护6.1瀑布模型28先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。优点:能满足客户需求缺点:可能导致系统设计较差,效率低,难以维护6.2原型模型需求的采集与细化客户评价原型快速设计建造原型加工原型产生样品停止开始296.3螺旋型模型螺旋模型加入风险分析。沿着螺线旋转,自内向外每旋转一圈便开发出更完善的一个新版本。优点:风险驱动缺点:风险分析人员需要有经验且经过充分训练30一步步地行进,强调测试的重要性,每一步都将比前一阶段进行更加完善的测试,每个开发活动都将生成一个比原来版本更加详细的系统。6.4V模型需求与规划规格设计详细设计单元测试集成测试系统测试操作与维护编码编码31用工具快速构造系统的一种方法,模型中更多的是规划与设计,而不是编码和测试。6.5快速应用开发模型需求规划用户设计构建提交用户沟通开发时间开发的费力程度32每个过程都是从始至终的,只是各阶段的任务量不同而已,80/20黄金规则可以应用到这里。6.6渐近式阶段模型详细规划管理需求开发构架详细设计构建系统测试文档编制33软件工程=工程过程+管理过程软件工程学=技术+工具+规范+管理没有计划就不算开始没有跟踪就不算完成没有度量就不算了解找正确的人员做正确的软件正确地做软件8.归纳总结