课上讨论的答案
并非老师在课上的标答。而是后来用大模型生成的,看起来相对合理的答案。
软件过程的历史演变和经典工作
如何理解 CMMI 是过程改进模型而非软件过程或者软件过程模型?
首先,软件过程是:
为了实现一个或者多个事先定义的目标的一组实践的集合。
比如需求分析、设计、编码、测试等等。
而软件过程模型是指对软件过程的通用化、标准化描述,是“过程的模板”,指导如何组织这些活动。用课上的语言描述就是:定义了软件过程的先后顺序,作为一个整体来实现事先定义的一个或多个目标。
而 CMMI 是一个用于衡量和改进组织过程能力的框架。目标是评估软件过程模型:
- 有没有过程?
- 过程可否执行?可重复?
- 有无度量数据支撑改进?
- 在组织层面有无标准化、优化的手段?
说白了,这是一个评估、改进软件过程的方法论。软件过程、软件过程模型是为了实现“事先定义的目标”,比如质量、成本、工期,的方法集合与建模。
如何理解CMMI不是过程优劣的标准,也不适合用作公司之间的能力比较?
最重要和本质的一点是:CMMI 是软件过程“成熟度”模型。目标是评估成熟度,以及为提升成熟度指明方向。
什么是成熟度?你的过程是否定义明确、可重复、可度量、可持续改进。
所以问题变成了:成熟度不是过程优劣的标准,也不适合用作公司之间的能力比较。
第一,优劣的标准是什么?这一点不太好回答,过于主观了。不过一般来说,软件过程的优劣应该是和软件过程要完成的目标直接挂钩的。
而过程是否成熟,与目标没有绝对的关系(回忆一下,目标一般是成本、质量、工期)。成熟的过程不一定适用于所有目标。
举例子,开发一个小型开源软件,直接个人英雄主义式的开发就行了。成本低、质量也还行、工期短。让一个成熟度 Lv5 的地表最强软件部门来做,质量确实高,但是已经到边际效应了。而成本、工期反而会高很多。
第二,为什么不适合用作公司之间的比较?上面基本答的差不多了。公司之间能力比较 = 业务能力比较 = 软件过程目标完成得好 != 成熟度高。结束。
用比喻来总结,CMMI 只管你穿没穿衣服、穿没穿裤子鞋子。而不会管你穿得时不时尚、合不合身。问这个问题和穿着西装打篮球、穿着背心走T台是没有区别的。