1、CMM(Capability Maturity Model)概述 什么是 CMM?(能力成熟模型)对软件开发管理的最佳方法的描述。由美国SEI 根据对软件管理作业的评估和软件行业反馈于1991年规范制定。软件管理的指导准则,不是具体实现方法。公认的软件管理流程改善模式。该软件管理标准仍在不断改进。All rights reserved by Jeff XiongCMM 概述 为什么CMM 如此热门?美国选择软件承包商的强制标准。对软件质量至关重要的大型公司,是很好的软件管理标准。软件公司可用来评估和改进软件管理流程。若恰当使用CMM,有助于软件公司提高效率和软件质量。All rights re
2、served by Jeff XiongCMM 概述 实施 CMM 过程中存在哪些问题?实现 CMM 没有权威的标准。CMM 需求庞大,实施需要较长时间,且费用很高。许多公司在实施半年内,或只达到较低级别的CMM后就放弃。对于追求高效的小公司过于繁琐。没有国际统一认证机构,CMM审核非常耗时、频繁且昂贵。All rights reserved by Jeff XiongCMM 级别的定义等级等级特性特性重要操作领域重要操作领域5 Optimizing可优化的可优化的对软件管理不断改进操作改进管理新技术管理防止失误4 Managed可掌控的可掌控的对软件开发流程有定量分析,对软件质量定性控制软件
3、质量控制流程定量分析控制3 Defined规范化的规范化的有规范的软件开发操作流程同级审核项目组间协调软件产品工程集成式软件管理培训计划公司内规范流程公司内注重流程2 Repeatable可重复的可重复的有管理控制,有稳定的规划和产品基准,但开发仍倚赖个人。软件配置管理软件质量保证软件分包管理软件项目跟踪和监控软件项目规划软件需求管理1 Initial初始的初始的个人英雄 All rights reserved by Jeff XiongCMM 各级别软件管理透明度 All rights reserved by Jeff XiongCMM 各级别公司达到比例%All rights reserv
4、ed by Jeff Xiong基于从基于从19961996年以来的对年以来的对901901家组织机构进行的最新评估家组织机构进行的最新评估From SEIs“Process Maturity Profile of the Software Community,SEMA Update,August 2000。”CMM第一级特点与问题 没有稳定的软件开发与维护流程操作。没有有效的项目规划。开发过程是应急式反应系统。任务紧迫时只做编码与简单测试。软件进度、花费、功能和质量变化莫测。软件成功依赖个人。项目较大和复杂时,管理经常漏洞百出。All rights reserved by Jeff Xion
5、g如何摆脱CMM第一级 微软经验:以团队的方式工作,选择有力的领导来管理。对团队成员明确分工与责任。采用规格说明书,对开发周期各个阶段进行验收和控制。进度、花费和功能等需文档记录并适时调整。All rights reserved by Jeff Xiong微软产品组行政架构Product Unit ManagerGroup PMPM LeadPMDev ManagerDev LeadDevTest ManagerTest LeadTester All rights reserved by Jeff Xiong微软项目组工作架构 All rights reserved by Jeff Xiong
6、Developer LeadDeveloperDeveloperDeveloperDeveloperTester LeadTester Tester Tester Tester Product ManagerProgram ManagerUser EducationUsability EngineerDesignerCMM第二级主要实践领域 需求管理(Requirements Management)软件项目规划(Software Project Planning)软件项目跟踪和监控(Project Tracking and Oversight)软件分包管理(Subcontract Manage
7、ment)软件质量保证(Quality Assurance)软件配置管理(Configuration Management)All rights reserved by Jeff XiongCMM第二级:需求管理 目标 软件规划、开发活动和产品必须同软件的系统需求保持一致。控制软件的系统需求,并作为软件开发和管理的基准。实践 与用户建立并保持软件项目需求协议。在项目正式开始前审核系统需求,解决有关问题。当系统需求修正时,其所涉及的软件规划、产品以及各项活动必须进行适当调整。All rights reserved by Jeff XiongCMM第二级:需求管理 微软经验:项目经理负责撰写需求文
8、档,作为软件产品基准。需求来源包括:产品经理制定的客户和竞争对手研究报告 可用性工程师提供的产品可用性检测结论 Beta 用户及重要客户意见反馈 公司战略方针和项目组间合作需要 需求变动时,项目经理负责落实项目各项相关修改,使与需求一致。All rights reserved by Jeff XiongCMM第二级:软件项目规划 目标 记录项目的评估,用来规划和跟踪整个软件项目。软件项目活动和投入是有计划的并有文档记录。相关的组和个人同意他们对于软件项目所做的相应承诺。实践 评估软件产品及所需资源的规模。制定开发时间表。确定及评估软件风险。讨论各方投入。All rights reserved
9、by Jeff XiongCMM第二级:软件项目规划 微软经验 项目经理准备项目规划的草案。包括产品目标、基本功能集、进度、里程碑以及资源估算等。项目经理主持由开发经理,测试经理及有关人员参加的Brainstorm会议,讨论该草案。确定产品功能集,商定开发进度,并将未解决问题和行动项目分配给相关人员。在一次或多次Brainstorm会议以后,解决全部项目规划的问题。项目经理制定一页(高层次的)规划书,包括有优先级的功能集、资源估算、开发时间表及各种开发风险的评估。All rights reserved by Jeff XiongCMM第二级:软件项目跟踪和监督 目标 根据软件规划书跟踪实际的结
10、果和产品性能。当实际结果严重偏离规划时,有步骤地采取措施矫正以缩小差距。相关的组和个人同意对于软件计划的调整。实践 根据规划文档中有关的评估、投入和计划跟踪并审核软件的完成结果。根据实际结果调整这些计划。All rights reserved by Jeff XiongCMM第二级:软件项目跟踪和监督 微软经验 PM主持每周的团队会议,交流项目的进展情况并撰写报告。PM负责每天跟踪产品问题(Bug),必要时同开发组长与测试组长开”诊断会议”(Triage),用以监控Bug 情况。对多项目组合作的大型产品,由总经理和各项目经理组成战争团队(War Team),定时召开会议讨论影响产品的热点问题。
11、PM根据实际情况作出决策,修正项目计划各项,并通报有关方面予以实现。All rights reserved by Jeff XiongCMM第二级:软件分包管理 目标 主承包商选择合格的软件转包商,并彼此接受承约。双方随时保持通讯联系。主承包商根据承约,对转包商的实际结果和性能进行跟踪。实践 选择软件转包商。同转包商确定承约。跟踪并审核转包商的产品结果和性能。All rights reserved by Jeff XiongCMM第二级:软件分包管理 微软经验 核心产品开发工作较少外包。与微软合作的大公司开发人员常要在微软本部工作,便于通讯交流,更好的控制项目进度。一些较外围工作,如培训课程设
12、计、部分软件测试、许多本地化工作包括翻译、测试等外包给合格软件商。对外包的软件商,微软派项目经理协商项目要求,并通过频繁电子邮件、定期会议和实地考察方式进行项目监控。All rights reserved by Jeff XiongCMM第二级:软件质量保证 目标 有规划地进行软件质量保证工作。客观地检验软件产品是否遵循已制定的标准、步骤和需求运作。软件质量检验结果通报相关的组和个人。把项目组内无法解决的问题提交给高级管理人员处理。实践 审核并监测软件产品和运作,来验证是否符合已制定步骤和标准。向软件项目组和其它相关负责人提供监测与审核的结果。All rights reserved by Je
13、ff XiongCMM第二级:软件质量保证 微软经验 微软组织结构保证软件测试组独立于项目经理和开发组运作。测试规划由测试组长根据功能规格书制定,并由项目经理和开发组长审查通过。测试人员根据规划执行整套测试。一般有BVT,Smoke Testing,Performance Testing等。测试人员找到缺陷(Bug)后,立即将所有步骤,现象等记录在中央数据库RAID 中,并发邮件通知项目经理和有关开发人员。项目经理负责Bug处理,指定开发人员改正,或有必要时交给高级经理处理。All rights reserved by Jeff XiongCMM第二级:软件配置管理 目标 有规划地进行软件配置
14、管理工作。软件产品能够标识版本,是可控制及可获取的。在软件产品版本上的修改作业是受控制的。软件功能基准调整后,相关组和个人可获知其状态和内容。实践 在任意时间能确定软件的配置(如软件产品版本和描述)。有系统地控制软件配置的调整。在软件整个生命周期中,维持配置的完整性和可跟踪性。All rights reserved by Jeff XiongCMM第二级:软件配置管理 微软经验 项目编码使用源代码控制和管理软件。源代码改变都有记录,每次check-in须用电子邮件通知项目组和所有相关人员。开发人员需每天执行Sync操作,和最新代码保持一致。Build Team负责在每天固定时间,摄取当时的所有
15、源代码和其它设置,运行生成产品,并标识版本号。所有每日产生的产品存于服务器上,供查询和使用。All rights reserved by Jeff XiongCMM第三级主要实践领域 公司内注重流程(Organization Process Focus)公司内规范流程(Organization Process Definition)培训计划(Training Program)集成式软件管理(Integrated Software Management)软件产品工程(Software Product Engineering)项目组间协调(Intergroup Coordination)同级审核(
16、Peer Reviews)All rights reserved by Jeff XiongCMM第三级:公司内注重流程 目标 在整个公司中协调软件流程的发展和改进工作。根据相关的流程标准来衡量所使用的软件流程的优缺点。规划整个公司的软件流程发展及改进工作。实践 发展并保持对公司和项目组的软件流程的理解。协调对软件流程的评估、开发、维护及改进的工作。All rights reserved by Jeff XiongCMM第三级:公司内注重流程 微软经验 公司范围内采用标准的项目管理工具/平台。如Raid,SLM,SourceDepot,LocStudio等。所有项目使用相同或类似的软件开发流程
17、。如check-in,daily build,bvt等。由高效率工具组(Productivity Tools Group)开发软件流程管理平台,并负责在各个项目中推广。由项目总结会(postmodern)来汲取经验,发现问题和提出流程改进意见。在全公司范围内实施最佳实践活动。All rights reserved by Jeff XiongCMM第三级:公司内规范流程 目标 公司开发和维护标准的软件流程。对项目组如何使用该流程的有关资料,予以收集、审核与公布。实践 开发和维护公司标准软件流程,以及流程有关的资料。如 软件生命周期的描述 流程简化的准则和条件 公司软件流程库 软件流程相关文档库
18、All rights reserved by Jeff XiongCMM第三级:公司内规范流程 微软经验 公司致力于开发和维护软件流程。如从1989年起推广采用每日构建(Daily Build)和里程碑(Milestone)流程,现在已经成为所有项目的标准流程。MSTE(technical education)组负责整理,修订公司所有软件流程的说明,使用等资料,并对员工进行培训。各项目组根据需要,对公司软件流程进行修改。并在项目网站上发布软件流程模板。All rights reserved by Jeff XiongCMM第三级:培训计划 目标 规划培训活动。培训须提供管理软件和技术任务所必须
19、的技能与知识。软件开发及有关项目组的人员,需接受必要的培训以胜任他们的角色。实践 首先确定公司、项目组和个人需要得到的培训。根据已知的需要安排有针对性的培训。All rights reserved by Jeff XiongCMM第三级:培训计划 微软经验 MSTE 负责公司主要培训任务。MSTE培训有很多方式,如现场教学、网上教程、实况录像、出版书籍等。这些课程涵盖项目管理、编码技巧、测试理论等软件生产的各个方面。MSTE 提供项目组各角色培训课程。项目组内采用师傅/徒弟方式,由资深人员带新手工作上路。各项目组经常举办午餐会(Brown bag),介绍新技术、经验心得、项目汇报等。All r
20、ights reserved by Jeff XiongCMM第三级:集成式软件管理 目标 由公司标准软件流程经剪裁,制定出项目组内特别的软件流程。根据项目组内定义的软件过程来规划和管理项目。实践 注重开发项目组内特别的软件流程,并用来管理软件项目。根据机构的标准软件流程,依照指定项目的特性,剪裁而成项目组内特别定义的软件流程。All rights reserved by Jeff XiongCMM第三级:集成式软件管理 微软经验 所有项目组使用公司标准流程,如里程碑、每日构建、bug诊断等。每个项目组都会根据实际情况,修改这些标准流程。PM负责修改和制定项目组规范化软件流程。如:每日构建在大
21、型操作系统(Win2000)项目时,增加Checkin Window步骤。Web service项目有很多的特殊的项目过程,但微软也希望通过某些工具或平台将其标准化。All rights reserved by Jeff XiongCMM第三级:软件产品工程 目标 生产软件时,软件工程的所有任务流程是有规范的、集成的且一贯地完成的。软件产品应当保持彼此一贯性。实践 使用项目中规范的软件流程、适当的方法及工具来完成软件开发和维护的任务。All rights reserved by Jeff XiongCMM第三级:软件产品工程 微软经验 项目采用相同的软件开发周期:计划阶段、开发阶段、稳定阶段、
22、发行阶段和总结会。项目组共享同样的管理工具,如源代码管理SLM、开发平台Visual Studio、缺陷(Bug)数据库管理Raid等。开发人员采用相同工作流程,如Checkin,代码审查等。测试人员使用同样的方法,包括自动测试、性能和压力测试等,用以控制产品的质量。项目经理使用同样的原型系统设计产品功能,按照模板书写各类规格说明书等。All rights reserved by Jeff XiongCMM第三级:组间协调 目标 所有相关组同意用户需求。所有相关组同意各工程组的任务承诺。工程组要确定、跟踪并解决组间的问题。实践 软件工程组须与其它项目工程组共同参与并解决项目系统级的需求、目标和
23、难题。项目组间的技术界面和交往,须是有计划的、可控制的,以保证整个系统的质量和完整性。All rights reserved by Jeff XiongCMM第三级:组间协调 微软经验 项目组间的协调与交往由项目经理负责。如:与客户、产品经理、市场部、其它项目组经理等联系,讨论系统需求、计划等。协调产品各功能项目组,使其在技术使用、用户界面、开发进度等方面保持同步。在公司内外部做项目演示。大型项目组间经常设有专门的项目经理用来负责“外部组”联络。如IE组与Office组间的合作。All rights reserved by Jeff XiongCMM第三级:同级审核 目标 规划同级审核 确定并
24、清除软件工作产品中的错误。实践 由同事对软件产品进行有条理的检查,用来发现错误和需要修改的地方。在项目规范的软件流程中,确定需要接受同级审核的文档,并把它列为软件规划的一部分。All rights reserved by Jeff XiongCMM第三级:同级审核 微软经验 项目开发所需的各类文档几乎都要经过同级审核,审核多半是通过电子邮件,还有开会讨论。软件开发人员的代码同级审查是标准的,强制性的流程 项目经理撰写的软件功能规格书审查也是一标准流程,它需要所有项目组成员,和有关的外部人员参与讨论。测试人员的测试计划、样例及缺陷(bug)报告由项目经理和开发人员进行审查。All rights
25、reserved by Jeff XiongCMM第四级主要实践领域 量化过程管理(Quantitative Process Management)软件质量管理(Software Quality Management)All rights reserved by Jeff XiongCMM第四级:量化流程管理 目标 有规划地进行流程量化管理。量化地控制流程的运行效率。用量化尺度确知公司标准软件流程的能力。实践 制定项目软件流程的执行效率目标。测量并分析该流程的执行效率。量化控制流程的执行效率。All rights reserved by Jeff XiongCMM第四级:量化流程管理 微软经验
26、:项目的标准流程一般都包含量化尺度管理。开发源代码管理平台如SLM,可统计源代码操作的各种数据,例如新代码比例、程序修改频度等。程序错误管理工具Raid,可制表进行各种统计,如Bug在不同时间的消长情况等。项目规格说明书必须量化分析各项要求,如项目需求、资源分配、里程碑设计、项目进度表等。All rights reserved by Jeff XiongCMM第四级:软件质量管理 目标 有规划地进行项目质量管理活动。制定可度量的软件产品质量各目标,并划分优先级。量化并掌控对质量目标的实际进展。实践 定义软件产品的质量目标 制定达到这些目标的计划 监控及调整质量目标以满足客户的需要。All ri
27、ghts reserved by Jeff XiongCMM第四级:软件质量管理 微软经验:测试组长严格按照项目规格设计书撰写测试计划和测试样例。明确定义程序错误的优先级及严重度。对不同优先级的程序错误进行不同程度的监控。按固定流程建立、分配、解决和关闭程序错误。定期制作和发布程序错误现行状态表。测试组长必须签字负责项目质量的完成。All rights reserved by Jeff XiongCMM第五级主要实践领域 预防失误(Defect Prevention)技术改变管理(Technology Change Management)过程改变管理(Process Change Manage
28、ment)All rights reserved by Jeff XiongCMM第五级:预防失误 目的 有规划地进行失误预防活动。找出并确定相同的失误的原因。对原因进行优先级划分并系统地消除。实践 分析过去的失误并采用相应的措施以避免重复。失误可能在项目的早期阶段或其它项目中被发现。各项目间建立机制以汲取彼此教训。All rights reserved by Jeff XiongCMM第五级:预防失误 微软经验:项目完成后的总结会是标准及强制性的流程。项目总结会专注于流程改进,每项改进任务会明确分配给具体的个人去落实。每周或每日的项目进度报告中总是列出未解决的问题和风险。作战会议中首先讨论焦
29、点问题。All rights reserved by Jeff XiongCMM第五级:技术改变管理 目标 有规划地进行技术改进管理 评判新技术对产品质量和生产率的影响。在公司内部推广使用合适的新技术。实践 识别、选择、评估新技术,并将新技术在公司内有效的推广。改进软件质量,提高生产率及缩短软件开发周期。All rights reserved by Jeff XiongCMM第五级:技术改变管理 微软经验:Internet Wave 始于1996 每个项目开始考虑如何在产品功能中支持Internet。.NET/XML Wave 始于2000 每个项目开始考虑如何在产品功能中支持Web Serv
30、ices。每年进行重组以获取新技术及商机。All rights reserved by Jeff XiongCMM第五级:过程改变管理 目标 为过程的持续改进制定计划 整个机构都参与软件过程的改进。整个机构的标准软件过程和各项目的软件过程都进行不断的改进。实践 定义过程改进的具体目标 不断地对软件过程进行主动和系统的评估和改进。All rights reserved by Jeff XiongCMM第五级:过程改变管理 微软经验:从1985年起,建立独特的项目经理队伍和相互独立的产品机构的组织结构。从1989年起,推广使用了里程碑的过程管理。在Win2000发布后的三个月中进行了整个Windows产品部门范围内的过程改进评估和实施。源码管理工具SLM 被更高级的Source Depot取代。程序错误管理工具Raid被更高级的Product Studio取代。All rights reserved by Jeff Xiong总结 微软以改进软件产品的质量和开发效率为出发点,通过多年实践逐渐形成独特的软件管理流程。CMM是各成功软件企业管理的共同经验的描述。CMM是软件管理的指导准则,但不包括具体实现方法。使用微软的经验需要很好的企业文化以及项目团队成员全力投入。All rights reserved by Jeff Xiong