CMM等软件过程标准最初是由于印度软件提供商的积极采纳而为人们所熟知的,印度软件厂商也最先达到最高的一致性标准——CMM 5,他们让市场认为CMM(特别是CMM 5)就意味着能够可靠、可预测地交付高质量的商业软件。加上印度极具优势的劳动力价格和大量受过训练的程序员,特别是印度的软件公司还是流程方面的天才,使得软件开发项目潮水般地涌入印度,让印度软件公司很快成为软件开发、软件维护、系统集成与运营等与软件相关的各种项目的主角。然而,最近几年CMM这一软件过程遭到了挑战。
印度软件模式的困境
CMM由于其提高交付成功率的办法而大受青睐。CMM注重过程、度量标准以及可重复性,从某种意义上说它确实让交付变得更可预测,并且在某些特定情况下,一些变更造成的影响也变得更可预测。但在CMM管理下的“瀑布模型”给软件开发带来高度纪律性的同时,用户对软件开发的满意度并未提高。
问题的根源在于: 业务需求的变化促使企业不断调整它们的软件功能。在CMM模式下,瀑布式开发过程虽然已经很清楚地定义了需求变更的处理过程,但需求变更的成本非常高,即使很小的变更也需要大量的流程变更和返工。因此企业经常会陷入两难的境地: 要么重新制定关键项目的计划并接受延期发布,要么将新需求推迟到下次软件发布再完成。而当今的商业环境瞬息万变,几个月的拖延往往意味着市场机会的丧失。
在一些项目中,印度的软件公司引发了客户事后的强烈不满,因为交付的软件并不符合客户当前的需求。更让客户难以接受的是,CMM 5的严格让客户无话可说,因为交付的软件已经做到了合同中规定的一切。有些西方买家开始讽刺CMM,他们把CMM叫做“Costs More Money”(花更多的钱)。
事实上,按阶段方式定义流程(瀑布模型)的基础是一个假设,即客户知道他们将来需要什么,意味着客户必须在分析阶段就决定具体功能的内容。实际情况是,在项目的某些时间点,客户可能对变更的需求非常强烈,以至于要求项目必须适应这些变更。这时客户能做的选择少得可怜: 交付时间延期,付更多的费用,或者开始考虑第二个版本。
现在再看人们常说的“让开发软件如同建设桥梁”这句话也值得商榷。建桥所用的过程是为建设一个坚固耐用的产品而设计的,这种产品一旦建好就能用很多年。而对于重要的软件而言,在当前版本完成以后,它还有必要随着需求的变化而改变,正是由于这方面的原因,那些建立在工程学原理之上的软件过程方法无法很好地适应变化就毫不令人惊讶了。因为适应变化根本就不是其关注的东西。
解决之道
那么,如何破解软件开发目前的困境呢?精益管理模式下的敏捷开发过程提供了一个诱人的替代方案: 软件系统总是被持续地交付,并且改变需求的代价也很合理。这种开发过程是通过如下三个主要的技术手段来实现的:
1. 关注软件持续交付的软件生产技术。这些技术被统称为“敏捷”。它们的一个关键特性是更容易适应变化,并且使任何以后可能会被废弃的大型设计或架构所需的投资最小化。这些技术极大地减少了产品上市所需要的时间。
2. 管理软件持续生产和发布的软件开发管理过程。精益管理来自于制造业,早期被称为JIT(Just-In-Time)。精益管理关注反馈周期以及利用不同训练等级的工作者来更快速地交付更高质量的产品。一般而言,精益管理过程能够降低50%的制造成本,降低事务性流程(订单处理)90%的成本。
3. 将所有(或者几乎所有)的重复劳动自动化,包括软件产品的生产、测试和集成。把计算机的能力应用到这些事情上,在缩短反馈周期的同时使工作者把精力放在生产性任务上。比如在传统开发过程中,可能一个月会将所有软件模块集成一两次,但是在敏捷项目中,这样的构建过程每天都要做很多次。
敏捷和精益过程所产生的影响是极具震撼性的。人们分析了一系列的敏捷项目,其结果表明,产品上市时间平均减少了69%,成本降低了57%。此外,质量也同样令人印象深刻: 致命缺陷平均减少了80%,普通缺陷减少了60%。这些结果与精益管理过程取代传统方式方法时所取得的进步是一致的。既然结果如此令人振奋,或许大多数人会认为敏捷方法应该早被广泛采用了。事实并非如此,主要原因是支持敏捷的软件开发技术和语言直到近十年(Java、C#)才出现,同时,制造业的JIT式生产过程还没有往其他领域移植,让过程自动化的大规模计算能力还不存在或者因为太昂贵而在应用上受到限制。此外,敏捷和精益过程需要引入完全不同于瀑布模型的组织结构和运作方式:
1. 瀑布模型中的进度是分阶段标记在甘特图上的; 而敏捷中的进度则是通过当前实际开发的软件来度量的。
2. 瀑布模型的管理关注大化每个工作者的最生产力; 精益管理则关注优化整个过程的产出。
3. 在瀑布式开发过程中,发现问题的办法通常是在过程中添加额外的检查或权衡; 而在精益管理中,问题是通过缩短反馈周期或者去除冗余步骤来发现的。
4. 瀑布模型鼓励发展出超级专家(比如,Web UI 架构师); 而精益管理推崇能有效率地完成多种任务的工作者,在不同任务之间来回移动以优化整体产出。
5. 瀑布模型鼓励创建和管理专业化的部门,每个部门负责流程一个阶段的所有工作; 敏捷和精益管理则鼓励创建跨技能领域的工作环境,让所有工作者都可以在其中学习所有必要的技能。
从瀑布模型转移到敏捷和精益管理的影响是重大而深远的。这种改变需要时间,特别是对于那些瀑布式分阶段模型已根深蒂固的组织而言。但这种改变是不可避免的。由于自身令人窒息的组织结构而不采用敏捷和精益管理的印度企业,将会面对世界上那些采用了敏捷和精益管理方法的公司的激烈竞争。
中国特色的
软件发展之路
印度软件企业是以瀑布式过程来组织的。它们设立与此模型相适应的工作职责和组织结构,采用与瀑布式过程相一致的形式化过程(CMM5),并通过推销瀑布模型、CMM以及可预测的交付获得商业上的成功。
中国应该追求并效仿印度的软件公司吗,比如把它们的组织结构和做事方式都照搬过来?这里的建议是“不”。印度的软件业建立在外包业务的基础上,而中国软件企业有一个更为广大的内需市场。相比用完全可预测的提前计划来保护自己的既得利益,中国更为重要的应该是为快速发展的中国经济提供适应变化的IT支持,从而创造更大的价值。
正在日益发展壮大的中国软件公司应该拥抱敏捷的开发方法和精益管理的行事方式以及一种不同于以往的软件开发者能力模型。笔者相信,通过采用敏捷与精益,这些公司将有能力更快速地交付低成本、高客户满意度的软件产品,并在市场上凸显出中国公司的与众不同。这也是一条可以同印度软件公司竞争的发展之路。