CMMI模型高成熟度的硬伤
2019-08-23 14:08:06 - 行业资讯

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

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

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

从2007年起,大约有3年的时间,SEI对CMMI四级、五级评估进行了不同程度的审核,其中一个审核要点是正确统计方法的使用及对变异量的管理。我总觉得有些地方我们在玩数据游戏,在盲目追逐替代指标,而非真正的经济指标。可以验证我的这个结论的重要依据是,许多组织在通过了评估后,就将所建的模型束之高阁,不在后续的项目中使用。当然我也能理解这种做法,没有人会花精力做一些低价值或无价值的工作,这些模型的现身往往是在下一个复评中。相信这绝不是SEI当年的初衷,我们也应该努力改变这种状况。

在制造开发过程中,差异往往意味着就是缺陷,通过消灭差异减少浪费从而带来了很好的经济价值。在统计学中,我们用标准差(也就是σ,即西格玛)来表示变异量,到目前为止,大部分CMMI四、五级改进都是以追求标准差的缩小为目的。当产品开发过程存在不确定时,变异量远没有变异成本重要,而变异成本是由变异带来的经济效益决定的。

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

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

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

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

作为精益软件过程改进的一个原则,我们不应仅仅关注减少变异量,更重要的是关注变异量变化可能带来的经济价值,追求价值最大化是我们的目标。这一点会对软件现有理念有巨大的冲击,也会要求我们回过头来重新审视CMMI高成熟度在软件中的应用。

CMMI四级的核心要求是过程性能模型(processperformance model)的建立及其在开发改进中的应用,在具体实践中一个很大的问题是如何跳出数据泥潭,让模型真正发挥出模型预期的作用。很多CMMI四级、五级团队反映,他们使用的模型并没有带来真正有价值的预测。很多模型预测的也是意义不大的替代指标,可控因子也基本都脱离不了人。

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

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

在我即将出版的新书“知行合一:实现价值驱动的敏捷和精益开发”章节中,我提出了一些变异管理的可操作原则以及一些有效的减低变异量方法,这些原则和方法完全可以映射到软件开发中去。 希望每一个CMMI四级或五级组织都能建立维护一套适应本身特点、可操作和体系自然融合、性价比高的量化体系。适用的项目在使用它不是因为评估要求,而是它带来的价值。我们应该让CMMI在我们的实践中不断完善,从而实现我们的初心,让经济价值最大化。

作者:丛斌博士