CMMI
- 刻画了软件团队/组织从不成熟到成熟的每个阶段的特征 (也就是 roadmap)
- 等级 2 和等级 3 关注的是当前状态
- 等级 4 和等级 5 是根据结果 (未来) 来进行管理
等级一:初始级
开发相对混乱,依赖个人英雄主义,没有过程概念,救火文化盛行
- 软件组织对项目的目标与要做的努力很清晰,项目的目标可以实现。
- 由于任务的完成带有很大的偶然性,软件组织无法保证在实施同类项目时仍然能够完成任务,项目实施是否成功主要取决于实施人员。
等级二:已管理级
项目小组体现出项目管理的特征,有项目计划和跟踪、需求管理、配置管理等。
- 软件组织对项目有一系列管理程序,避免了软件组织完成任务的随机性,保证了软件组织实施项目的成功率。
- 软件组织在项目实施上能够遵守既定的计划与流程,有资源准备,权责到人,对项目相关的实施人员进行相应的培训,对整个流程进行监测与控制,并联合上级单位对项目与流程进行审查。
- 从 2 级升级到 3 级的原因:固化最佳实践,对小组而言是能够更快地学习其他的做法。
等级三:已定义级
公司层面有标准流程和相应的规范,每个项目小组可以基于此定义自己的过程,使得优秀的做法可以在公司内分享。
- 软件组织能够根据自己的特殊情况及自己的标准流程,将这套管理体系与流程予以制度化。
- 软件组织不仅能够在同类项目上成功,也可以在其他项目上成功。
- 科学管理成为软件组织的一种文化,成为软件组织的财富。
等级四:定量管理级
构建预测模型,以统计过程控制的手段来管理过程
- 软件组织的项目管理实现了数字化。
- 通过数字化技术来实现流程的稳定性,实现管理的精度,降低项目实施在质量上的波动。
- 在这个级别我们希望能够看到一个预测模型。
等级五:优化级
继续应用统计方法识别过程偏差,找到问题根源并消除,避免未来继续发生类似问题
- 软件组织能够充分利用信息资料,对软件项目在项目实施的过程中可能出现的次品予以预防。
- 能够主动地改善流程,运用新技术,实现流程的优化。
一些理解
- CMM/CMMI 不适用于软件开发的原因
- CMM/CMMI 并不是一种具体的软件过程或者软件开发方法
- CMM/CMMI 建立了一组有效地描述成熟软件组织特征的准则。
- CMMI 是过程改进模型而非软件过程或者软件过程模型:CMMI 指导软件过程改进,不指导开发。
- 按照 CMM/CMMI 模型的要求,一个软件组织应当定义使用本软件组织特点的软件过程,并且不断优化该过程,来更好地实现软件组织的商业目标。
- CMM/CMMI 并不能作为检验软件过程优劣的标准:过程改进对不同企业的含义不一样,成熟度等级无法脱离企业环境直接横向比较。
- CMM/CMMI 与其他软件过程或者软件开发方法的比较是没有任何意义的。
- CMM/CMMI 并不是一种具体的软件过程或者软件开发方法
- 一些误解:
- CMMI 模型需要适当裁剪以适应公司的实际情况:需要裁剪的是公司内部定义的组织级开发流程和开发规范。
- CMMI 模型太重了,不适合互联网时代的轻量级开发:这个说法的错误之处在于,不一定是 CMMI 重或者轻,而是,CMMI 根本就不是开发模型。
- CMMI 模型只适合大公司、大项目,不适合小项目:首先没人检验过;其次,项目的大小衡量本身也缺乏值得信赖的参考依据;最后,接受这种说法的人还是把 CMMI 当成是一种特殊的开发模型。
- CMMI 模型只适合需求不变或者很少变化的场合,不适合需求不确定,变化很多的场合:CMMI 不是开发模型,与需求变化与否无关,谈不上适应或者不适应。
- CMMI 不是过程优劣的标准,也不适合用作公司之间的能力比较,说法怎么样?对的,CMMI 本身是有评级。(美国国防部订单招标要求企业至少达到 CMMI 的 3 级。因为公司的能力需要绝对东西,也就是能力强,能力弱,而 CMMI 衡量的是相对的水平,CMMI 仅仅关注在本公司的目标下的等级
- 更多讨论:试论 CMM/CMMI 不适合在当前软件开发当中应用的原因
考试题
- 【2020-mid】请描述 CMMI 模型的 5 个等级的特征,并且解释为何 CMMI 模型不应该是敏捷方法的对立面:
- 五个等级的特征
- Initial 原始级别:开发相对混乱,依赖个人英雄主义,没有过程概念,救火文化盛行
- Managed 已管理级别:项目小组体现出项目管理的特征,有项目计划和跟踪、需求管理、配置管理等
- Defined 已定义级别:公司层面有标准流程和相应的规范,每个项目小组可以基于此定义自己的过程,使得优秀的做法可以在公司共享。
- Quantitatively Managed 定量管理级别:构建预测模型,已统计过程控制的手段来管理过程
- Optimizing 优化级:继续应用统计方法识别过程偏差,找到问题根源并消除,避免未来继续发生类似问题。
- 原因解释:
- CMMI 是过程改进模型,刻画了软件组织从不成熟到成熟的路线图。
- 大部分敏捷方法都是开发方法
- 因此两者是完全不同性质的事物,将两者对立是不合适的。
- 五个等级的特征