做过程不是做工程,失败的过程也是过程。软件工程这个概念是上个世纪60年代末被提出的概念,成熟的标志是软件工程的瀑布模型的提出。瀑布模型将软件开发的过程分成需求、分析、设计、开发和测试等5个主要阶段,其主要环节关系表现为如下这样一种形态:
计划 可行性研究
需求分析
系统设计
程序设计
编码与模块测试
组合与系统测试
运行&维护
之后,很多人研究过模型问题,很多人从实际工程中提炼出来的过程模型都是值得称道的。例如RAD模型、螺旋模型和现在常被提及的RUP模型就是让你按照做的样子。
按照模型的样子,做完每一个阶段,并不等于做工程。用模型来做工程即使亦步亦趋也做不好工程。如果可以那样做,只需要瀑布模型就足够了。因此做过程并不是做工程的精义和目的。
存在这样的问题原因:就像四川的“走过场”一样,没有什么实质内容。每一个节角色都把自己的环节当成一个“过场”。如同演戏一样,从A做到Z,就一切都完成了。但是如果永远这样做下去,项目将是一场无休止的演出。最终,观众受不了就走人,演员受不了就散伙,戏目与项目竟如此相似。
很多人把本质给忘掉了。从最开始,我们编成的目的就是实现一个东西,无论他的大小,我们的目标是“实现”他。然而,工程只是实现他的一种途径。最初的前辈并没有用什么工程的字眼去标注,却一样解决了问题,而如今,我们把它论为工程项目,还讲究方法的时候却什么也做不出来了。是不是很奇怪。因为工程被当作我们的借口,掩盖了“实现”的目的,导致最后工程的每一个过程都做完了,却没实现每一个目标。为了工程而工程的人,都迷失在项目中。
过程不是死模型。试着跳出大师们的身影,仔细研究一下那所谓的“经典”,不过是一些变形。但是很多人却不以为然,如果只知道其表里就和买椟还珠的人无两样。我们要理解更深层次的实质性的东西,我们要考虑模型变化的真实意图。在一个不断的回顾和确认的模型中需要把它放进工程外包的背景里去考虑就明白了。项目成果阶段性考察是他们的第一要务,这直接决定了何时、如何,以及由谁来进入下一个环节。正因为如此,这个模型才会如此实用。既节省人力又可以保障工程质量。相对于瀑布模型,他更源于实际的需要,把测试与审评阶段抽取出来。
古人也有训诫,学习敦厚谨慎,不要效仿豪侠仗义,但适量就可以。以得失而论,学习瀑布模型不成着,可思过程的本质,学习后者不成者,可的文字的架子。越是简单的东西,往往越是接近于本质。真正真实的东西是实实在在的东西。