再议CMMI高成熟度的硬伤

去年我投了两篇文章给CMMI研究院2017年年会,一篇是通过引入质量债务管理的方法建立非传统的量化管理模式,另一篇则是质疑复杂软件开发环境下,CMMI高成熟度实施的两个问题:一个是六西格玛的影响,另一个是对变异量(variation)的偏见。前面的文章很快被会议组接受,后者则被挂起。但我认为这两个问题是任何一家希望通过引入CMMI高成熟度达到真正改进的软件组织不可回避的困惑,虽然因为文章的挑战性让会议组毙掉,但我想借助这个平台和大家做些简单分享。

我一直认为造成各种软件开发问题的根源之一源于长期以来借鉴了不合适的产品开发模式——制造业中流水线式的开发模式。但不知道各位是否琢磨过,生产一个水杯的过程是百分百可预测和重复的,过程中不存在任何不确定性的。而我们的软件开发过程呢?却往往充满了需求、技术、人员等等不确定性。前者中,过程的任何变异都会导致缺陷,而后者变异对结果的影响则没有那么简单。所以盲目将可重复流水线开发模式应用到软件过程建设改进中,将所有变异都视为洪水猛兽是片面的、错误的。


可预测和重复的流水线开发模式

当年六西格玛在传统行业获得巨大成功,多年来它一直主导CMMI高成熟度的实施。在量化管理上,CMMI很大程度上照搬了制造业的统计过程控制(SPC)方法。记得2007年初,我参加了SEI组织的高成熟度培训,培训老师居然是一个没有任何软件开发背景的六西格玛专家。针对一些重要的统计应用概念,我希望能看到一些成功的软件应用例子,可惜在4天的培训中,我没有看到一个实实在在的软件案例。


消灭变异是六西格玛的重要原则

从2007年起,大约有3年的时间,SEI对CMMI四级、五级评估进行了不同程度的审核,其中一个审核要点是正确统计方法的使用及对变异量的管理。我经历了多次审核,所采用的量化体系及方法得到当时SEI的Quality Audit团队的认可,也曾在SEI会议上做过几次介绍,但回头看总觉得有些地方过于理想化。近年来,我看到的一些高成熟度的实施也有玩数据游戏之嫌,仅仅是因为有数据,许多未必重要的替代指标充斥在量化体系当中,而真正的经济指标则无从体现。可以验证我的这个结论的重要依据是,许多组织在通过了评估后,就将所建的所谓过程性能模型束之高阁,不在后续的项目中使用。当然我也能理解这种做法,没有人会花精力做一些低价值或无价值的工作,这些模型的再现身往往是在下一个复评中。相信这绝不是SEI当年的初衷,我投给研究院年会文章的目的就是希望能引起大家的重视,开始一些有益的探索。

在制造开发过程中,差异往往意味着就是缺陷,通过消灭差异减少浪费从而带来了很好的经济价值。在统计学中,我们用标准差(也就是σ,即西格玛)来表示变异量,到目前为止,大部分CMMI四、五级改进都是以追求标准差的缩小为重要目的之一。但许多人没有意识到:当产品开发过程存在不确定时,变异量不能和缺陷问题划等号,关注点必须移到变异成本上面去,而变异成本是由变异带来的经济效益决定的。


新的知识是软件开发重要产出之一

前面也提过制造业开发和软件开发的一个重要区别是,制造业开发的经济价值是由所开发出的产品决定的,重复开发出的每个合格产品都会带来回报,都有价值。而软件开发的价值是知识、是信息、是做菜的菜谱。如果你创造两个同样的菜谱,第二个是零价值。从某种意义上来讲,只有通过创新,或者难听的说法是引入不确定性,我们才有可能软件开发中增加新的价值点。正如Elon Musk说的:“失败是可以接的,没有失败往往意味着没有创新。”




创新的失败是有价值的

很明显,创新很可能带来更大变异量。但在一定场景下,增加的变异量会带来潜在的经济价值。

如果你是个短线股民的话,你是喜欢股市波动的,因为只有波动才能给你带来更大价值。举个例子,假如你有10万元钱投资,钱放在银行里,一年利息3%,你的回报是3000元,但是零风险。如果你买腾讯的股票,假设可能的回报是20%,但这个概率只有50%,你应该选什么呢?从预期回报来看,选择银行是3000元,但选择买腾讯股票的预期回报则是1万元。虽然后者波动大,变异高,但这个波动带来的经济价值远远大于没有波动的银行选项。所以大多数人会选择有风险的选项。


机遇和风险并存

既然我们把软件开发活动看作是创造知识信息的过程,那么变异量低的活动所含新的信息量就少,而变异量高的活动则更有可能产生出新的信息。以软件测试为例,这个活动不应该仅仅看作是确认设计的活动,它也可能是产生新信息的活动。特别是对不确定性高的项目(如研发项目),测试不应该过度追求测试通过率(低缺陷率),因为有时发现的缺陷会带来新的信息,价值更大。

CMMI四级的核心要求是过程性能模型(process performance model)的建立及其在开发改进中的应用,在具体实践中一个很大的问题是如何跳出数据泥潭,让模型真正发挥出模型预期的作用。很多CMMI四级、五级团队反映,他们使用的模型并没有带来真正有价值的预测。很多模型预测的也是意义不大的替代指标,可控因子也基本都脱离不了人等几个考虑。这些模型并没有真正揭示问题背后的故事,所以问题或异常处理模式和CMMI三级没什么区别。


复杂的软件开发过程可以通过一个简单回归模型预测吗?

我认为新一代精益对变异管理的新理念对如何完善CMMI高成熟度有革命性的扩展。仅从过程性能模型角度来讲,我们可以更加关注响应时间的预测,而待制品(WIP)的个数,等待队列规模,任务规模等都是很好的可控因子的候选项。它们和响应时间的关系及预测对软件开发过程有显而易见的价值。

在一定前提下,降低变异量也是十分重要的。当变异量的增加会带来负面经济效益时,我们则需要控制降低变异量。如何将变异可能带来的代价最小化、价值最大化应该是CMMI量化管理追求的目标。由于不确定性的存在,变异是软件开发的必然产出物。不要把它当成是洪水猛兽,我们应该关注后果把它作为一个创造价值的工具。

我在“知行合一:实现价值驱动的敏捷和精益开发”最后一章中,提出了一些变异管理的可操作原则以及一些有效的减低变异量方法,这些原则和方法完全可以映射到软件开发中去。


希望每一个中国实施CMMI四级或五级组织都能建立维护一套适应本身特点、可操作和体系自然融合、性价比高的量化体系。适用的项目在使用它不是因为评估要求,而是它带来的价值。

GJB5000A即将开展四级评估,我们优秀的军工质量团队可以做些有创意的尝试,在软件新研项目的量化管理方面做出自己的贡献。CMMI自诩是业界经过验证的优秀实践的集合,而最初的高成熟度的内容并没有经过软件实践验证。中国软件行业应该借助CMMI2.0这场及时雨,通过自己的实践让CMMI高成熟度更加适合软件项目的特点,让它变得自然合理,在CMMI模型改进方面做出中国的贡献。


再议CMMI高成熟度的硬伤》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.hashtobe.com/247.html