本系列文章为笔记,内容根据北京大学《软件工程》MOOC
CMM概念及发展
认识软件质量
- 软件系统的质量取决于用来开发和改进它的过程和质量
- 要进行过程的改进,必须对现有的过程有所了解,特别是已存在问题有客观的认识
- 软件过程改进不是目的,是一个持续的过程
CMM(the Capability Maturity Model for software)软件能力成熟度模型
过程是生产产品的机制。不论是过程改善还是能力确定,均需要过程评估,而过程评估通常基于已提出的一些评估模型。
CMM是什么
- CMM指的是软件过程能力成熟度模型,按软件过程的不同成熟度划分了5个等级,1级被认为成熟度最低,5级成熟度最高
- CMM给出了从混乱、个人的过程到成熟的规范化过程的一个框架
- CMM项目的主要负责人指出“软件组织可以通过CMM去定义、实施、度量、控制和改进自己的软件过程”。人们可以利用该框架进行可靠且统一的评估,实现对软件过程的度量。
- CMM体现了软件工程和软件管理的优秀实践
- CMM不是银弹,并没有涉及的是项目成功的所有重要问题
CMM族
有多种基于CMM的模型,例如:
- SW-CMM(SoftwareCMM)软件CMM
- SE-CMM(System Engineering CMM)系统工程CMM
- SA-CMM(Software Acquisition CMM)软件采购CMM
- IPD-CMM(Integrated Product Development CMM)集成产品开发CMM
- P-CMM(People CMM)人力资源能力成熟度模型
注:通常把SW-CMM和CMM通用 CMMI的发展
SEI在SW-CMM2.0版本形成过程中,转为了一个新项目,CMMI,目标是集成已有的CMM模型,实现一个组织的集成化过程和改进
2002年发布的CMMI集成了三个CMM:SW-CMM,SE-CMM,IPD-CMM
CMMI1.1集成的目标是通过以下方法降低实现基于多学科模型的过程改进成本:
- 消除不一致
- 减少重复
- 增加清晰度和理解
- 提供公共术语
- 提供一致的风格
- 建立统一的构造规则
- 维护公共组件
- 确保与ISO/IEC 15504一致
![bd0bca4d1a81437b1d83c61e8f162da0.png](https://i-blog.csdnimg.cn/blog_migrate/0eb7f984a4e82417671222f7772539b7.jpeg)
CMM的基本内容
基本思想
整个软件任务可以看作是一个过程,该过程可以予以控制、测量和改进 基本概念
过程
过程是一种手段,通过该手段可以把人、规程、方法、设备以及工具进行集成,以产生一种所期望的结果
过程能力
- 定义:通过遵循其软件过程能够实现预期结果的程度
一个组织的软件过程能力,是未来项目结果的指示器,给出了一种预测该组织承担下一个软件项目可能结果的方法。是不同等级过程能力的基本指标。
- 低过程能力的基本特征
- 非常依赖当前的参与人员
- 软件过程与管理均是临时准备
- 没有严格的下一步
- 复审和测试常常不足
- 交付的“东西”不符合要求
- 冒险使用新技术
- 产品的质量很难预测
- 进度延迟和预算超额
- 高过程能力的特征
- 定义了过程,建立了使用技术的基础
- 开发和管理遵循一个确定的途径
- 过程得到了很好地控制,并得到各方面的支持
- 实现了过程制度化,并不断改进
具有成熟过程的组织特征:
![3209a282aa30f09dafbd9f22130bd987.png](https://i-blog.csdnimg.cn/blog_migrate/7af9bf4107aad720f1ba9b5b3cf47edc.jpeg)
过程性能
准寻一个过程所能达到实际结果的一个测度,过程能力和过程性能之间的关系
![87559a4078e726ffb1516672077c309d.png](https://i-blog.csdnimg.cn/blog_migrate/259cd53a60db1e4c283f5f799122cea2.jpeg)
软件过程能力与软件过程性能之间的关系:
- 一个是能够实现预期结果的程度,一个是得到的实际结果
- 一个项目的实际过程性能,可能并不能充分反映在其所在组织的整个过程能力
过程成熟度
一个特定软件过程被明确和有效地定义、管理、测量和控制的程度
软件过程成熟度指明:
- 一个软件开发组织软件过程能力的增长潜力——能力提高的基础性
- 一个开发组织软件过程的丰富多样性——能力提高的可能性
- 在各开发项目中运用软件过程的一致性——能力提高的持续性
由于开发组织通过运用软件过程,使各项目执行软件过程的纪律性一致地增强,导致软件生产率和质量可以得到不断地改进
组织成熟度
- 组织成熟度是由一组过程的组合能力来表达的,其中包括支持它们的制度因素
- 高的组织成熟度,是将组织的一组过程看作为一个整体,该整体是高的过程能力。主要表现为:
- 不论是开发还是管理,均有明确、严格的途径
- 定义了组织过程并不断改善之
- 得到了管理人员和其他人员的支持
- 实施了很好的控制
能力成熟度等级
- 软件开发组织在走向成熟的过程中,几个具有明确定义的、可以表征其软件过程能力成熟程度的等级
- 每一级包含一组过程目标。当一个软件开发组织达到其中一个目标时,则表明软件过程的一个(或几个)重要成分得到了实现,从而导致该组织软件过程能力的增长
- 每一个成熟度等级为到达下一个等级提供了基础
CMM五级标准
五级框架
- 成熟度框架
- 在这一框架中,将过程能力成熟度分为五级:
初始级、可重复级、已定义级、已管理、持续优化级
![a51897c12e2666593b32b9fda43afad5.png](https://i-blog.csdnimg.cn/blog_migrate/9e46b6e857c6677038bab759c63be211.jpeg)
- 过程成熟度框架
- 描述:一条从无序的、混乱的过程达到成熟的、有纪律的软件过程的进化途径
- 用途:以软件过程成熟度框架,可以导出过程改进策略,为软件过程的不断改进的历程提供了一份导引图;
- 基础:软件过程成熟度框架的基础是等级内部结构
各等级的基本特征
- 初始级
- 组织:组织通常没有提供开发和维护软件的稳定的环境
- 项目:当发生危机时,项目通常放弃计划的过程,回复到编码和测试
- 过程能力:不可预测,由于:
- 软件开发无规范
- 软件过程不确定、无计划、无秩序
- 过程执行不“透明”
- 需求和进度失控
- 结果:项目的成败完全取决于个人的能力和努力;软件性能随个人具有的技能、知识和动机的不同而变化;并只能通过个人的能力进行预测
- 可重复级
- 组织:将软件项目的有效管理过程制度化,这使得组织能够重复以前项目中的成功实践。
- 项目:配备了基本的软件管理控制
- 过程能力:
- 可重复的:即对当前项目的需求分析后制定的,能重复以前的成功实践,尽管在具体过程中可能有所不同,这是该级的一个显著特征
- 基本可控的:即对软件项目的管理过程是制度化的。
- 在项目的规划和服务跟踪过程中规定并设置了监测点;
- 对软件需求和为实现需求所开发的软件产品建立了基线;
- 为管理、跟踪软件项目的成本、进度和功能提供了规范;
- 提供了当不满足约定时的识别方法和纠偏措施;
软件项目过程基本上是可视的
- 过程是有效的:即对项目建立了实用的、已文档化的、已实施的、已培训的、已测量的和能改进的过程
项目的过程基本是可特征化的
- 项目是稳定的:即对新项目的策划和管理,有明确的管理方针和确定的标准(包括甲方),可使项目的进展稳定。
新项目的策划和管理是基于成功项目经验的
- 过程是有纪律的:即对所建立和实施的方针、规程,对软件项目过程而言,已进化为组织的行为。从而使软件开发组织能够保证准确地执行给定的软件过程。
总之,2级的过程是可视的,即可以获取项目运行状态。
![030c8ed91bacf667672c18c408439ca7.png](https://i-blog.csdnimg.cn/blog_migrate/6b308842952f3702d9dd9f3e52a44c0c.jpeg)
实现关键过程域:
软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪和监督、软件项目规划、需求管理。
其中:
- 过程域:互相关联的若干个软件实施活动和有关基础设施的集合
- 关键过程域:对某一成熟等级将起到至关重要的过程域即它们的实施将对达到该成熟度等级的目标起保证作用,这些过程域被称为关键过程域
- 每一软件过程成熟度等级均包含一组特定的关键过程域
- 已定义级
- 实现了可重复级(2级)的关键过程域
- 实现了关键过程域:
组织过程焦点、组织过程定义、培训大纲、集成软件管理、软件产品工程、组间协调以及同行评审
- 主要特征:
- 组织:在组织范围内开发和维护软件的标准过程被文档化,其中包括软件工程过程和管理过程,它们集成为一个一致的整体
- 项目:对组织的标准软件过程进行裁剪,来开发它们自己项目的软件过程
- 过程能力:是标准的和一致的。
- 建立了“组织的标准软件过程”:
- 关注的焦点转向组织的体系和管理
- 全组织建立了软件开发和维护的标准过程
- 软件工程过程和软件管理过程,被综合为一个有机的整体,并且已经文档化
- 建立了负责组织的软件过程活动的机构:
在软件组织中存在负责软件过程活动的机构,并具体实施全组织的过程制定、维护和改进
其中包括全组织的人员培训,使之具备必须的技能和知识,能高效地履行其职责。
- 项目定义的软件过程:
项目能够依据其环境和需求等,通过剪裁组织的标准过程,使用组织的过程财富,自定义项目的软件过程。其中,允许有一定的自由度,但任务间的不匹配情况,应在过程规划阶段得到标识,并进行组间协调和控制。
- 组织可视项目的进展:
由于项目自定义的软件过程将开发活动和管理活动综合为一个协调的、合理定义的软件过程,并明确规定了每一活动的输入、输出、标准、规程和验证判据
管理者或软件项目负责人能够洞察所有项目的技术进展、费用和进度
- 组织的软件能力均衡、一致,需求达到:
- 整个组织范围内的软件开发和维护过程已经标准化;
- 软件工程技术活动和软件管理活动都实现文档化的规范管理;
- 组织和项目的软件过程都是稳定的、可重复的
- 这种过程能力是建立在整个组织范围内对已定义过程中的活动、作用和职责的共同理解基础之上。
在整个组织范围内软件能力是均衡、一致的
![b1292493a3eabba8ee767ad46196b8e0.png](https://i-blog.csdnimg.cn/blog_migrate/491ef589124b9bd078254a65c4205429.jpeg)
- 定量管理级
实现了关键过程域:定量过程管理和软件质量管理
- 项目:项目减小过程性能的变化性,使其进入可接受的量化边界,从而达到对产品和过程的控制
- 组织:为软件产品和过程都设定了量化的质量目标
- 过程能力:可预言的
- 设置了定量的质量目标:
- 组织对软件产品和过程设置了定量的质量目标;
- 软件过程具有明确定义和一致的测量方法与手段;
可以定量地评价项目的软件过程和产品质量
- 项目产品质量和过程是受控和稳定的:
可以将项目的过程性能变化限制在一个定量的、可接受的范围之内。产品质量和过程是受控和稳定的
- 开发新领域软件的风险是可定量估计的:
由于组织的软件过程能力是已知的,从而可以利用全组织的软件过程数据库,分析并定量地估计出开发新领域软件的风险。
- 组织的软件过程能力是可定量预测的:
过程是经测量的并能在可预测的范围内运行,一旦发现过程和产品质量偏离所限制的范围时,能够立即采取措施予以纠正
![a121fd8e13089e79223c00530108c281.png](https://i-blog.csdnimg.cn/blog_migrate/7ae70bda52c81fda91657743a803063d.jpeg)
- 持续优化级
实现了关键过程域:缺陷预防、技术变化管理、过程变化管理
- 组织:关注于持续的过程改进;
- 项目:软件过程被评价,以防过失重复发生,从中获得的教训散布给其它项目。
- 过程能力:持续的改进
- 过程不断改进,即组织注重不断地进行过程改进
- 组织有办法识别出过程的弱点,并及时地予以克服;
- 能够利用关于软件过程有效性的数据,识别最佳软件工程实践的技术创新,并推广到整个组织。
- 缺陷能有效预防
软件项目组能分析并确定缺陷的发生原因,认真评价软件过程,以防止同类缺陷再现,并且能将经验告知其他项目组。
- 组织的过程能力不断提高
组织既能在现有的基础上以渐进的方式,又能以技术创新等手段,不断努力地改善过程性能。
![490ef3a7c253ce774a1dd53f582d62e1.png](https://i-blog.csdnimg.cn/blog_migrate/9734f05c0393f6a85d2bbb66faa0e543.jpeg)
关于级别的三点说明
- 从第一级提升到第二级可能需要几年时间,在其它级别间提升通常依次需要2年时间。
- 第一级组织的成功依赖于组织中人员的能力,对于所有级别的组织来说,选择、雇佣、培养和保持有能力的人员都是重要的问题,但这超出了CMM的范围
- 每个级别为以后的级别有效地和有效率地实现过程提供基础。跳过级别是达不到预期目标的
汇总
![c22e75f1740c0bad65a4ee4a87afc13b.png](https://i-blog.csdnimg.cn/blog_migrate/97d6846a0159c97588b2215f9e873c73.jpeg)
ISO9000标准
定义
质量保证体系:用于实现质量管理的组织结构、责任、规程、过程和资源;
创建质量保证体系的目的是帮助组织以符合规格说明的方式,保证组织的产品和服务满足客户的期望;应用
ISO 9000质量管理系统——基本原则和术语
ISO 9001质量管理系统——需求
ISO 9004质量管理系统——性能改善指南
ISO 19011质量和环境管理系统审计指南
ISO 9001核心过程
为了服从ISO 9001标准,公司必须记录他们的过程与这9个过程相对应
- 产品交付过程
- 业务获取
- 设计和开发
- 测试
- 生产和交付
- 服务和支持
- 支持过程
- 业务管理
- 供应商管理
- 库存管理
- 配置管理