UML软件工程组织

理解CMM
整理:温昱 选自:松耦合空间

 类型:笔记 + 心得

整理:温昱

感谢:《软件能力成熟度模型》一书的作者何新贵、王纬、王方德等,中华管理网

----------------------------------前言----------------------------

直到198x年,人们还错误地认为,“只要有好的SE方法/工具,就可以开发出高质量的软件,就可以提高软件生产率”。

现在,人们认识到,“如果软件开发组织不能良好地定义/管理其软件过程,它就往往不能从SE中充分获益,从而也得不到预期的结果”。

温昱注:即只重SE方法/工具,不重SE管理,不行。有句名言叫“拥有工具的傻子还是傻子”(呵呵,还有句名言叫“格言总是情绪的”,因此认为自己SE意识不强的朋友,不要认为这句话是骂你的哟),用来说明重视SE管理的重要性。

软件过程 = 工程过程 + 管理过程

软件工程学 = 方法/技术+工具/环境+标准/规范+管理/控制

前二者关注工程过程,后二者关注管理过程。

----------------------------------定义----------------------------

过程:“为实现给定目标所执行的一系列步骤”。

软件过程:“人们用以开发/维护软件及其相关产品的一系列活动,包括〖软件工程活动〗和〖软件管理活动〗,自然,其中一定会涉及有关的方法/技术”。其中“相关产品”指项目计划、设计文档、代码、测试用例等,它们在CMM中常被称为“软件工作产品”。

提示:软件过程 = 工程过程 + 管理过程

温昱注:这里提〖软件过程〗“一定会涉及有关的方法/技术”。我曾见过〖CMM〗“和具体方法/技术无关”的提法。于是,应该这样理解,即“CMM本身不是特定软件过程的定义”,CMM只是建议如何“一步一个台阶”地改进〖软件过程〗。

软件过程能力:〖软件开发组织/项目组〗通过执行其〖软件过程〗能够实现〖预期结果〗的〖程度〗。

软件过程性能:〖软件开发组织/项目组〗通过执行其〖软件过程〗所得到的〖实际结果〗。

提示:软件过程能力是〖最可能的预期结果〗,可对〖软件开发组织/项目组〗而言。软件过程性能是〖已得到的实际结果〗,可对〖软件开发组织/项目组/某个软件项目〗而言。

软件过程成熟度:一个特定软件过程被明确/有效地定义/管理/测量/控制的程度。

----------------------------------标准----------------------------

CMM侧重于软件开发组织中的有关软件过程的宏观管理,for软件开发组织。

PSP侧重于软件开发组织中的个体软件过程的微观优化,for软件开发个人(和小型群组)。

温昱注:为什么把个人和小型群组并列呢?因为它们的共同实质是“合作的规模小”。个人开发也需要“合作”哟,你把需求分析做完向自己交接,自己和自己“合作”嘛。

CMM和PSP二者相互补充/相互支持,因为如果众多个体没有好的过程意识和高的过程能力,整个开发组织的软件能力成熟度也不可能高。

从事纯粹的软件开发的组织,其实是比较少的,这些组织,往往还进行软件采办业务/系统工程产品开发业务等,于是出现了一种将系统工程、软件工程、软件采办等集成在一起的CMM——它就是CMMI。

----------------------------------CMM----------------------------

1. 初始级(initial)

2. 可重复级(Repeatable)

3. 已定义级(Defined)

4. 已管理级(Managed)

5. 优化级(Optimizing)

----------------------------------CSCMM----------------------------

我国的SE专家基于CMM 1.1,参照CMM2.0和有关资料,提出了符合我国国情的CSCMM。

CSCMM与CMM的主要区别:在等级1和等级2之间插入了一个“基本级”,使成熟度等级更加均匀。

意义:以免软件开发组织长时间达不到2级,会是之失去信心。

0. 初始级。没有定义软件过程。

1. 基本级。定义了软件过程但执行可能不一致。

2. 可重复级。定义了软件过程且执行基本一致。

3. 已定义级。工程过程/管理过程都明确/妥善定义,并且文档化/标准化,成为软件开发组织的〖标准软件过程〗。组织内所有软件开发项目均采用该〖标准软件过程〗的〖经批准的剪裁版本〗。

4. 定量管理级。在开发过程中,能详细采集软件过程/软件产品的度量数据,从而对〖成本/进度/质量〗定量预测/定量控制。(可见,“定量管理级”这个名字比“已管理级”更传神。)

5. 优化级。能根据〖实践总结/新的技术〗,对〖标准软件过程〗不断改进。

温昱注:上面体现的“定量”比“定性”更难更高级的思想,和数学/化学倒是一样的。另外,〖标准软件过程〗由开发组织来定,CMM并不对“用什么方法/技术”做建议。其实,既然优化级就是“能根据〖实践总结/新的技术〗对〖标准软件过程〗不断改进”,更能看出CMM是独立于任何老技术/新技术的。呵呵,永不失效。

----------------------------------实施----------------------------

在软件开发组织中,软件过程要规范化/具体化。

在软件开发组织中,要通过正式文档/文件和培训,将其软件过程准确无误地告知所有员工,新员工要进行特别培训。

CMM的组织结构:它推荐在最高领导之下设立SEPG(软工过程组)、SQA(质量保证组)、SEG(软工组)。

提示:三个组构成了软件开发中的“立法”、“监督”、“执法”体系,体现了西方文化的法治观念。

----------------------------------来自中华管理网----------------------------

CMM(Capability Maturity Model 软件能力成熟度模型)为软件企业的过程能力提供了一个阶梯式的进化框架,它基于过去所有软件工程成果的过程改善的框架,吸取了以往软件工程的经验教训。它指明了一个成熟的软件组织在软件开发方面需要管理的那些主要工作、这些工作之间的关系、以及以怎样的先后次序一步一步的做好这些工作,使软件组织走向成熟。是目前国际上最流行也是最实用的软件生产过程标准,理解CMM需要注意以下几点:

1.他仅指明该做什么,而没有指明如何做,他不是方法论(温昱注1:见后),但我们在学习CMM时,可以从中学到分析问题的方法。

2.他仅指明该做的关键内容,他仅描述软件过程的本质属性,而并非面面俱到。抓问题的主要方面的思想贯穿在整个CMM模型中。

3.软件过程是指软件工程过程、软件管理过程和软件组织的过程三者的有机结合(温昱注2:见后)。软件工程过程是我们理解的常规的软件的需求分析、设计、编码、测试等过程,软件管理过程是指为使软件过程顺利进行而进行和管理活动的集合。上述两个过程是以软件工程组为主的活动。软件组织的过程是企业级的对软件的组织活动,是以企业为主的活动。

4.他是从软件过程的角度考虑问题,而并非关注软件开发工具。这与框架软件生存周期无关,也与所采用的开发技术(温昱注1:见后)无关。

5.CMM为改善整个企业的软件过程提供了指南,而并非针对某个具体项目。SW-CMM并不能保证在这个过程框架下,产品开发百分之百的成功。产品的成功是多种因素的组合,例如市场等因素。

6.CMM1.1是针对大型软件企业(500人以上)的,对小型的软件企业(50人以下)需要裁减。

7.SW-CMM的过程的不断改进基于许多小的、进化的步骤而不是革命性的创新。

8.基于CMM的过程改善投资力度大、周期长,而技术投资则可能在短期内有较快回报。单独依靠技术改进可能在短期内有较快回报,但最终可能一无所获。

温昱注1:方法论是通过一组选定的〖方法〗和〖技术〗,来解决问题的策略。方法论=方法(们)+技术(们)。因此,这里提CMM“不是方法论”,“与所采用的开发技术无关”,是正确的。我见过有人提“CMM是方法论”,不对。当然,软件过程和方法/技术有关哟。





温昱注2:软件工程 = 工程过程 + 管理过程。软件工程学 = 方法/技术+工具/环境+标准/规范+管理/控制。前二者关注工程过程,后二者关注管理过程。但是,这里却提“软件过程是指软件工程过程、软件管理过程和软件组织的过程三者的有机结合”。我认为它和前一观点并不矛盾,后一观点只是把〖管理过程〗分成了〖软件工程组的管理过程〗和〖整个企业的管理过程〗,又换了个名字叫“组织过程”而已。

温昱注:自由源于对规律的认识,灵活来自对本质的掌握。共勉。

 

版权所有:UML软件工程组织