CMMI总架构师Ron Lear问了三个问题,他是希望通过思考问题从而帮助大家更深层次的理解CMMI 2.0中II和GOV两个实践域。
其实这三个问题远远超出了II和GOV的范畴,直击CMMI的灵魂。
你的答案决定了CMMI的定位、价值和导入。
我收到一些朋友对这三个问题的理解,我自己也做了一点总结。
挑选了一些罗列出来,希望也给大家开拓一些思考角度。
1. Why do we think processes are so important? 你为什么认为软件过程重要?
2. Are all processes created equal? 所有软件过程都一样重要吗?
3. How repeatable, consistent and persistent shouldprocesses be? 你觉得一致、可重复、坚持不懈的软件过程应该是什么样的?
- 方便团队达成共识
- 为了优而不是及格
- 过程是生产软件的一系列步骤,没有过程就没有软件产品。
- 软件项目成功的比例还不是非常高,对于成功的项目,我们不仅要说清楚项目为什么成功了,更要说清楚项目是怎么成功的,有什么经验可以借鉴,有什么过程可以萃取,固化,重复以保证下次也能更大概率的成功。
- 软件的成功看结果,但结果的好坏难以控制,需要动态管理。
如果把软件的结果比喻为骨架,那软件的过程就是血液了,整个血液循环给我们开发带来稳定的能量,还有各种应急预案的执行,并有机策应了整个公司的生命健康。
- 通过过程质量保证产品质量,这应该是质量管理的基本原理和共同认知。
软件是复杂且无形的高科技产品,如果不进行过程管控,其研制过程将会看不见,摸不着,软件质量完全依靠个人能力,有问题也难以及时发现,到后期交付时再发现严重问题也难以更改,可能就会导致项目失败。
软件的过程管理,相比于硬件来讲,显得更为重要。
- 一句话,过程好了,结果坏不到哪去。
- 中国有句古语,“不以规矩,不能成方圆”。
它强调做任何事都应该遵循一定的规范,否则难以成事。
软件开发何能例外。
软件过程就是软件开发应当遵循的一系列规范,而这些规范实际上来自于前人经验教训的总结。
如果你不遵守这些规范,就会走前人已经走过的弯路,就会流前人已经流过的汗,甚至是血。
- 有了过程,就可以协同多人一起工作,并且有了衡量的尺子,可以不断优化,提升绩效。
否则难以有一定的概率,去按时、按质,完成系统性工程开发。
- 没有过程,工作无序,混乱。
回答:
- 不一样,要视被实施的组织情况。
- 离产品越近的过程越重要。
产品的实现过程,即需求,设计,编码,测试,是核心步骤,与这四个步骤越相关,就越重要。
- 所有过程都是相互依赖,相互影响的,所以说所有的过程都非常重要。
重要程度取决于我们对于某一个过程或步骤失败所带来的影响或风险的承受能力。
比如,我们不会把所有过程都做成高成熟度;敏捷和devops追求的是快速反馈,在过程中它允许快速失败,然后快速试错,但有的解决方案他试错的成本太高,那我们就不允许这么做,需要把DAR级别做高。
- 不一样,性质决定部分特有过程,例如是军工软件开发重视机密、点菜软件重视大众可接受。
还有社会责任、资源投入、安全要求、原始架构等部分也决定了软件过程的不一样。
- 不是所有软件过程都一样重要,比如项目策划过程显然比决策分析过程更为重要。
不同项目关注点不一样,过程的重要程度也不一样;
- 不是所有过程都一样重要,我认为核心的策划、需求、设计、编码、测试以及质量保证最为重要,需求、设计、编码、测试的重要是显而易见,而质量保证是立定过程规范后监督执行的重要机制。
- 软件过程的重要性是基于软件项目追求的目标而言的,对于不同的目标,不同的软件过程的重要性是不一样的。
比如很多互联网公司的软件项目追求的是尽快地将一个新的创意上线抢先占领市场,为了抢先占领市场,存在一些不影响主要功能的Bug都是可以接受的,它对验证和确认过程的要求会降低;而军用软件项目追求的主要目标是软件安全、可靠,它对验证和确认过程要求会很高。
我们在推进GJB5000A的时候,遇到的阻力之一是开发人员感受不到实施GJB5000A给他们带来什么帮助,感受不到给软件质量带来什么改善。
造成这个后果的原因之一是我们推进GJB5000A时,把有限的资源平均分配到各个过程上了,结果整体效果不显。
这也从另外一个角度说明了软件过程的重要性不是一样的。
有一句话叫“解决问题出成效”,就是希望实施GJB5000A时可以重点抓几个过程,解决组织迫切需要解决的问题。
- 具体那些过程的重要性,要看对总体目标的影响度。
例如目标是快速打造一款产品去验证市场,那么配置管理、代码评审、测试等可以大幅简化。
如果要保证100%数据正确性,那么代码评审和测试的工作,就要做得非常非常认真,决策分析、配置管理就相对不那么重要。
如果人员大幅流动、或者要维护多个发行版本,配置管理就变得格外重要。
组织过程需要跟进业务目标,动态调整,有弹性,才是好的。
- 说所有软件过程都一样重要,是太绝对了。
根据实际情况选择需要的过程,而不是为了避免什么做出的选择。
回答:
- 经过适当裁剪,充分本地化,被团队认可的过程。
- 不断改进的过程。
- 这个不易定义,因为不同的组织形式,不同的软件产品,其过程差异很大,但是有个原则,就是优秀的软件过程一定是与组织特点和产品特点契合度最高的那个。
- 一致可重复的,坚持不懈的软件过程是能提高软件开发成功的概率,但这个过程肯定不是一成不变的,它应该随着内外部环境在不断的演变、提升的。
这就是我们为什么要经常去维护我们的流程,一个流程如果长时间没有修改,那这个流程肯定不是一个很好的流程。
- 坚持不懈、一致、可重复的过程是个不断进化的过程。
- 一致、可重复的过程,应该是文档化的、规定清晰明确,可一致理解无歧义的过程。
不懈改进的软件过程,可以得到很好的执行,主动识别新情况、新问题,一旦发现不适,及时进行改进,保持良性循环的过程。
- 过程规范必须根植于公司的业务特点、团队的特色来制定,应该是接地气的过程。
过程不是一成不变的,随着公司的发展,团队的成长,过程必有不适宜的地方,需要与时俱进的调整以适应公司的发展,也就是CMMI 强调的持续改进、优化。
- 一个组织要有这样的软件过程,首先它一定是本地化的、适合组织的、独特的。
软件过程虽然有它的规律可循,但到了具体实施的细节层面,它一定是独特的,它不可能是千篇一律的。
其次,这样的软件过程一定是一个不断优化的过程。
随着组织环境的变化、随着新技术、新工具的涌现,软件过程必然要随之优化和改进,否则,它也难以持续下去。
- 首先应该是支持实现业务目标,其次是能够提升组织战斗力和可持续性。
每次的软件迭代,都给客户带来使用价值,从而为组织带来投资回报,使得组织越来越有资源,如滚雪球一样,不断成长。
过程的可重复性更深一层的含义是过程的有效性。
屠呦呦得诺贝尔奖是因为她把清高素的提取过程做成重复的有效的,稳定的过程。
- 吸纳、创新、调整、适合、高效的过程。