1第1章CMM的产生与发展过程2软件过程评估有那些必要性?CMM是如何产生的?CMM的用途与使用方法有那些?CMM的发展过程如何?CMM在中国的现状如何?问题的提出?31、软件管理过程的三大组件:软件开发人员软件开发机构软件开发过程4软件开发人员面临的问题做成的产品是什么?和其它部分的关系及影响如何?客户的实际需要是什么?能否实现?所需的知识、工具是什么?资源、时间和进度如何?5软件开发机构面临的问题如何达到产品的质量?如何分派任务?如何掌握和执行政策?报告制度如何建立?机构是人员的支撑平台,负责定义政策、目标、预算、性能指标。6软件开发过程面临的问题如何测量过程的质量?如何知道过程的好和坏?如何标识影响客户质量的关键过程?是客户需求管理吗?是软件配置管理吗?软件开发过程包括软件需求、软件设计、软件实现、软件集成、软件测试、软件维护等各阶段的管理。7过程改进机会过程的改进机会通过以下机构进行成本管理计划管理质量管理8过程改进的工作以上机构独立于任何机构,完成改进机构改进过程改进各个开发人员的性能和能力92、软件过程评估的必要性10软件特殊性的需要:个体层次:程序、数据及文档。整体层次:特定系统中个体层次软件的总称。学科层次:所涉及的理论、方法、技术所构成的学科。软件的三个层次:11①软件成本的提高②软件开发进度难于控制③软件工作量的估计困难④软件质量难于保证⑤软件的个性与维护困难软件应用中出现的问题软件特殊性的需要12软件开发的风险大的原因:改进软件过程的需要过程能力低软件过程管理水平低缺乏工程实践和管理实践13①软件用户或采购者②软件组织或提供商降低软件风险的需要14软件成功的十条经验中的三要素:CMM对软件需求管理的需要①有效的用户参与②明确的业务目标③稳定的基本需求15①软件需求必须形成文档。②软件需求必须能够控制,进而建立工程和管理的基线。③成员必须接受软件需求管理培训。④建立衡量软件需求状态的信息。CMM2级对软件需求管理的指导16①需求分析→确保需求的完整性、一致性、可测试性。②需求设计→编码、测试实例都能够回溯到相应的源头,需求发生实质变更之前,能够判别该变更所带来的潜在的影响。③需求修订→应遵从统一的流程,需求的变更应自始至终被跟踪;④需求文档→应当通过配置和变更管理工具进行管理。CMM3级对软件需求管理的指导17软件质量是捉摸不定的概念提高软件产品质量的需要某某软件好用,不好用;某某软件功能全、结构合理;某某软件功能单一、操作困难;18产品质量,包括软件质量,是人们实践产物的属性和行为,是可以认识,可以科学地描述的。可以通过一些方法和人类活动,来改进质量。实施CMM是改进软件质量的有效方法:控制软件生产过程、提高软件生产者组织性和软件生产者个人能力的有效合理的方法19软件工程的相关领域和因素需求工程(RE:REQUIREMENTSENGINEERING)。理论上,需求工程是应用已被证明的原理、技术和工具,帮助系统分析人员理解问题或描述产品的外在行为。软件复用(SR:SOFTWAREREUSE)。定义为利用工程知识或方法,由一已存在的系统,来建造一新系统。这种技术,可改进软件产品质量和生产率。还有软件检查、软件计量、软件可靠性、软件可维修性、软件工具评估和选择等。203、软件管理与机构21CMM的不同特征刚性:模型的表示和描述。灵活性:解释与实现。概念化:①定义机构行为,②提供不同的保证级别,③减少与软件开发过程相关联的风险和恶果。22CMM的观点软件产品开发周期不是独立存在的,不是从编代码才开始的,包括完整项目计划、评估、和管理过程,是公司总体战略的一部分。23现行机构存在的问题响应性而不是前瞻性;缺乏规则与政策;没有估计和计划;没有明确定义责任;性能不一致;没有提前计划;管理层只响应危机;不断测试与改变承诺;24连续过程改进有什么好处呢?JosephJuran博士指出:质量改进要每年完成40%。级别质量(缺陷/KSLOC)生产率成本(百万美元)开发时间(月)L19缺陷/KSLOC1SLOC/hr32.540L23缺陷/KSLOC3SLOC/hr1532L31缺陷/KSLOC5SLOC/hr6.525L40.3缺陷/KSLOC8SLOC/hr2.519L50.1缺陷/KSLOC12SLOC/hr116软件缺陷研究(来源:Copyright1990HerbKrasner)1SLOC=500000行25实现CMM的意义能够改进过程和业务26CMM能提供什么样的改进呢?竞争性。可预测性、可控制性、有效性、27改进什么呢?机构的竞争性28对公司有什么意义呢?减少底线,提高生产率29任何机构级别中,经理是否能验证与控制软件产品开发过程的进展?大多数公司无法控制,完全凭运气和感觉。304、CMM的诞生、用途与使用方法CMM(CapabilityMaturityModel能力成熟度模型)的本质是软件管理工程的一个部分。它是对于软件组织在定义,实现,度量,控制和改善其软件过程的进程中各个发展阶段的描述。他通过5个不断进化的层次来评定软件生产的历史与现状。31信息时代,软件质量的重要性越来越为人们所认识。软件是产品、是装备、是工具,其质量使得顾客满意,是产品市场开拓、事业得以发展的关键。而软件工程领域在1992年至1997年取得了前所未有的进展,其成果超过软件工程领域过去15年来的成就总和。32软件管理工程引起广泛注意源于20世纪70年代中期。当时美国国防部曾立题专门研究软件项目做不好的原因,发现70%的项目是因为管理不善而引起,而并不是因为技术实力不够,进而得出以上的结论。管理影响全局,技术影响局部33到了20世纪90年代中期,软件管理工程不善的问题仍然存在,大约只有10%的项目能够在预定的费用和进度下交付。34软件项目失败的主要原因需求定义不明确;缺乏一个好的软件开发过程;没有一个统一领导的产品研发小组;子合同管理不严格;没有经常注意改善软件过程;对软件构架很不重视;软件界面定义不善且缺乏合适的控制;软件升级暴露了硬件的缺点;关心创新而不关心费用和风险;软件标准太少且不够完善等等。35在关系到软件项目成功与否的众多因素中,软件度量、工作量估计、项目规划、进度控制、需求变化和风险管理等都是与工程管理直接相关的因素。由此可见,软件管理工程的意义至关重要。直接相关的因素36因为软件复杂和难以度量,软件管理工程的发展还很不成熟。软件管理工程的特殊性软件是知识产品,进度和质量都难以度量,生产效率也难以保证。软件系统复杂程度也是超乎想象。软件管理工程和其它工程管理相比有其特殊性。37①结构化生产时代(70年代开始)②过程为中心的时代(80年代末期)③面向对象技术(90年代中期)④构件技术(2000年代初期)⑤软件工业化生产(2010年中期)软件管理工程的发展过程3870年代开始结构化分析结构化设计结构化评审结构化程序设计结构化测试结构化生产时代特征3980年代末期,研究CMM模型的成熟模型日益为市场接受为标志.开始进入:个体软件过程PSP群组软件过程TSP过程成熟模型CMM以过程为中心的时代的特征4090年代中期追求软件工业化生产追求软件过程技术的成熟面向对象分析面向对象设计面向对象技术的特征412000年代初期软件过程技术成熟面向对象技术成熟软件集成开发方式构件技术时代的特征42到2010年中期实现真正的软件工业化生产工业化生产43软件过程改善是管理的核心。要高效率、高质量和低成本地开发软件,必须改善软件生产过程。软件生产转向以改善软件过程为中心软件工业已经或正在经历着软件过程的成熟化“规范的软件过程是软件工业化的必要条件。工业化生产的特征44软件过程研究的是如何将人员、技术和工具等组织起来,通过有效的管理手段,提高软件生产的效率,保证软件产品的质量。由此诞生了软件过程的三个流派:软件过程的三个流派①CMU-SEI的CMM/PSP/TSP;②ISO9000质量标准体系;③ISO/IEC15504(SPICE)。45CMM:软件能力成熟度模型;PSP:个体软件过程;TSP:群组软件过程;1987年美国CarnegieMellon大学软件工程研究所(CMU/SEI)以W.S.Humphrey为首的研究组发表的研究成果承制软件工程能力的评估方法;CMM/PSP/TSP46ISO9000质量标准体系是在70年代由欧洲首先采用的,其后在美国和世界其他地区也迅速地发展起来。目前,欧洲联合会积极促进软件质量的制度化,提出了如下ISO9000软件标准系列:ISO9001、ISO9002、ISO9003、ISO9004-2、ISO9004-4;ISO900047ISO/IEC15504(SPICE)是1991年国际标准化组织采纳了一项动议,开展调查研究,按照CMU-SEI的基本思路,产生的技术报告ISO/IEC15504--信息技术软件过程评估ISO/IEC1550448CMM以实践为基础,CMM是一个渐进的有动态尺度的标准;驱使组织不断地改进和完善。ISO9000是静态的质量管理标准提供一个良好的体系结构和实施基础。CMM和ISO9000的主要区别49目前,学术界和工业界公认美国CarnegieMellon大学软件工程研究所(CMU/SEI)以W.S.Humphrey为首主持研究与开发的软件能力成熟度模型CMM是当前最好的软件过程,已成为业界事实上的软件过程的工业标准。软件过程的工业标准50①软件过程评估SPA;②软件过程改进SPI;③软件能力评价SCE;CMM的主要用途51CMM的使用方法①评估组用来识别软件组织的强处与弱点;②评价组用来识别选择不同软件商的风险和监督合同;③评估软件开发者用来开发其它基于CMM的评估方法,以针对一些特殊的需要;④高级管理者用来了解在软件组织中制定一个软件过程改进计划所必要的活动;⑤技术人员和过程改进组用来作为指南,指导他们在软件组织中定义和改进软件过程。525、CMM的发展过程1987年美国CarnegieMellon大学软件工程研究所(CMU/SEI)以W.S.Humphrey为首的研究组发表了CMM/PSP/TSP技术,为软件管理工程开辟了一条新的途经。531987:SEI应美国政府的要求,开发了第一个软件能力成熟度框架和软件成熟度问卷,用于评估软件供应商的能力。1991:SEI正式推出了民用CMM1.0版。1993:CMM研讨会之后,正式推出CMM1.11999:推迟CMM2.0的研究,投入CMMI的研究。CMMI:能力成熟度模型集成。软件获取方法的改革;建立一种从集成产品与过程改进的角度出发,包含健全的系统开发原则的改进过程。SW-CMM:区别与其它领域的软件能力成熟度模型。54对于CMM的作用归纳两个主要方面:①科学地评价软件开发单位的软件能力成熟等级;②帮助软件开发单位进行自检,了解自己的强项和弱项,从而不断完善和改进单位的软件开发过程,确保软件质量,提高软件开发效率。CMM的作用55由于CMM并未提供有关实现CMM关键过程域所需的具体知识和技能,因此,美国CarnegieMellon大学软件工程研究所(CMU/SEI)以W.S.Humphrey为首主持研究与开发:①个体软件过程PSP(Personalsoftwareprocess)②群组软件过程TSP(TeamSoftwareProcess)形成CMM/PSP/TSP体系。56PSP个体软件过程1995年推出,在软件工程界引起了极大的轰动;使软件工程从定向走向定量的开发。PSP可用于控制、管理和改进个人工作方式的自我改善过程,是一个包括软件开发表格、指南和规程的结构化框架。PSP个体软件过程57PSP为基于个体和小型群组软件过程的优化提供了具体而有效的途径。例如:如何制订计划,如何控制质量,如何与其他人相互协作等等。PSP在软件设计阶段的着眼点在于软件缺陷的预防,其具体办法是强化设计结束准