UML软件工程组织

软件教父的心灵鸡汤
作者:刘磊

“中国正处在自己软件开发历史上的十字路口。”世界五大软件开发大师之一,面向对象技术、软件模式、UML架构构件语言、重构以及敏捷式软件开发这几方面公认的领导者之一、曾经影响了一代软件工程师的巨著—《重构》、《UML提炼》的作者—马丁.福勒(Martin Fowler),这样评价目前中国软件开发所处的位置。

中国市场是目前世界上变化最快、增长最快的市场。在这种情况下,企业级软件自然也要应对适应迅速变化的要求,于是,在中国,软件开发所面临的挑战不是比别人低,而是更高:开发成本太高,需求变化又频繁,如何在这种情况下保证软件的质量?为了解答这一问题,以及由此而来的一系列人才培养、方法论、工具选择等困惑,中国计算机报执行总编卢山与世界软件开发领域的教父马丁.福勒,进行了一次促膝长谈。

采访人:《中国计算机报》

执行总编 卢山

受访人:软件开发大师 马丁·福勒

采访地点:中国计算机报社

采访时间:2005年6月6日

什么是决定软件成败的因素

在一场ERP研讨会上,专家们对如何定义ERP的成功与失败争论不休。由于软件开发的不可预知性,软件的成败难以用一种标准来衡量,在软件教父的眼里,软件的成败,在开发阶段就已经注定了。

卢山:您说过,“软件产业既是一个成功的行业,又是一个失败的行业。”那在您看来,决定软件成败的因素是什么?是人,是开发工具,还是方法论,或是其他?

马丁:决定成败的原因远远不止一个,但我认为,最重要的一个原因,就是在开发过程中,开发团队与用户之间的沟通不够。

卢山:但是沟通会带来需求的不断变化,沟通越多,需求越多,变化也会越多,这样是不是会加剧软件开发的难度?

马丁:的确,软件开发过程中的不可预知性,是我们无法预测软件成功与否的原因。随着需求的变化,软件总是处在变化当中。正是为了软件开发的不可预知性,我们想出了各种各样的技术、工具以及流程,希望软件开发的过程变得越来越可以控制、预测。

卢山:那这样的方法是否已经被找到?

马丁:在其他的产业里,可以用简单的办法评价项目的进程及有效性,但是对于软件开发过程,很难用一种标准来衡量它的进度和有效性。正是由于很难有效判断哪种办法更好,使得软件技术、工具以及流程方面的很多讨论都被不断提出的概念所左右。上世纪60年代末期北约一个软件开发室提出了软件工程学,从电子工程学、技术工程学中提炼出方法,使得软件开发的流程更有预测性。但近年来有人发现,软件工程学里的一些基本假设是不正确的。他们使用了一些新的开发方法,也就是敏捷式开发。

只有变化才是不变的

现在看来,软件开发过程在不断地发生变化,但软件工程师所孜孜追求的,却是要掌握这些看似无序的变化当中不变的联系。是追寻不变之处,还是寻找适应变化的方法?也许,只有变化才是不变的。

卢山:尽管软件开发无法避免变化,但这些变化是否能够通过一些方法来进行预测,并且加以克服?

马丁:只有变化本身是不变的。一个项目在开发过程中,需求一定会出现变化,而需求的变化就从根本上推翻了软件工程学方法所建立的基础。软件工程学的拥护者们试图尽量减少或者控制系统将来发生变化的可能,但越这样做问题就越容易出现。既然我们没办法避免变化的发生,那么我们就应该找到一种新的方法,更有效地适应这种变化。

卢山:这种方法就是敏捷开发?

马丁:的确,这是敏捷式开发方法所希望达到的效果。正是由于对待变化的不同态度,敏捷式开发采用适应性方法,而传统的软件工程学采用预测性方法。

适应性和预测性的区别存在于软件工程学对软件开发过程的描述中。在传统的工程学里,设计过程和构建过程一开始就分开进行,于是在最先开始的设计阶段,所有跟软件设计相关的重要决定就已做出了。但开发过程中不断发生的变化,使得这样的设计没法发挥作用。

而敏捷开发使用的是一种迭代式、循序渐进的软件开发方法。软件的构建过程是由小量的迭代过程组成的,在这个过程中软件一直处于可使用状态。这种短周期的循环,使终端客户可以及时、快速地看到他们花钱构建的软件是一个什么样的结果,也使得客户可以更有效地参与到软件开发的过程中来。

敏捷开发与CMM

“是证书化毁了CMM”,谈起目前国内软件企业热衷于通过的CMM认证,马丁给了一个令人吃惊的评语。同样作为提升软件企业开发能力的模型及方法,对CMM,马丁显然有着不同的看法。

卢山:软件开发所遵循的模型、方法论有不少,比如CMM,比如RUP,比如敏捷开发,您如何评价?

马丁:CMM刚开始是一个很好的想法,但是当它朝着证书化的方向发展,就偏离了原来的方向,我跟很多CMM的创始人探讨过,他们也觉得证书化在一定程度上扭曲了最初的CMM思想。

卢山:但是现在中国有很多企业都在积极通过CMM认证,或者说准备通过CMM认证。他们如果引入敏捷开发方法,会不会影响他们的CMM评级?

马丁:这取决于给企业做CMM测试的人。如果他们对CMM的态度是友善的,那么我们可以做下去;但有些做测试的人并不友善,那我们就会比较辛苦。

卢山:既然您说证书化毁了CMM,那么在敏捷开发不断发展的过程当中,要如何避免它也被证书化呢?

马丁:这种可能性的确存在,而且一旦证书化,敏捷开发也一定会像CMM那样被损害。但是我相信,作为一种开放式的开发方法,敏捷开发永远不会被某一种标准禁锢住,别人也不需要根据某个公司的标准来做事情。

西方模式在中国

敏捷开发与中国软件产业旧有环境的碰撞,远远不止CMM认证这么简单,这样一种在西方也算先进的理念,在中国能否适用?敏捷开发又能否解决中国企业面临的种种问题?

卢山:您所说的“变化”是世界范围内的软件开发问题。在中国,软件开发难度高、研制周期长,周期性难保证。敏捷开发能否适用于中国的市场环境?

马丁:实际上,对于发展变化非常快的国家,比如中国,敏捷开发方法的好处是显而易见的。正如我之前所说,迭代式的开发过程使软件一直处于可使用状态,因此客户的需求变化引起的变化,可以在开发过程中不断满足。客户对软件开发过程的参与也可以大大提高软件的成功率。

卢山:您说过,中国软件产业能否发展起来,关键就是要以足够快的速度走过西方软件产业发展走过的道路。您觉得要怎样做到这一点,少走弯路?

马丁:西方软件开发历史上最大的错误,就是在软件开发过程中将编程与设计分割开来,先做设计再编程。一直到今天,这样的错误还在延续。但是在中国,有很好的机会不去犯同样的错误。

卢山:也就是说使用敏捷开发方式开发软件,就可以保证不再犯错?

马丁:没有肯定不会犯错误的东西,我们要做的,只是不要再犯以前犯过的错误,要犯就犯新的错误。


版权所有:UML软件工程组织