软件工程-五 过程
做过程不是做工程
软件工程这个概念被提出的时候大概是在20个世纪60年代末。它作为成熟的概念的标志是软件工程的瀑布模型的提出。
瀑布模型将软件开发的过程分成需求、分析、设计、开发和测试五个主要阶段,其主要环节关系表现为如下的这样一种形态
在瀑布模型之后,很多人开始研究过程模型的问题。很多从实际工程中提炼出来的过程模型都是值得称道的,例如RAD(Rapid Application Development,快速应用开发)模型、螺旋模型和现在常被提及的RUP(Rational Unified Process,Rational统一开发过程)模型。
模型就是“样子”。人家拿出一个东西来说:这是模型。其言下之意就是要你按照这个样子来做。过程被描述为可重复的模型,实施的结果却可能演变成为相当尴尬的局面,如图所示。
我们看到,按照模型所描述的这个“样子”,做完过程的每一个阶段,并不等于做完了工程。或者说,工程并不是这样就可以做成功的。
换而言之,无论是用RAD模型还是RUP模型来做工程,即使是亦步亦趋,也做不好工程。
如果工程可以那样做成的话,只需要有瀑布模型就足够了。因此“做过程”并不是做工程的精义。
做过场
前面那张图就是一个过场。尽管那是一张用来描述“沟通问题”的经典图例
如果每一遍(或者用RUP的那个术语“迭代”)都只是“过场”的话,项目将只是一场无休止的演出而已。
最终呢?观众受不了,就交钱走人;演员受不了,就下台散伙。戏目和项目的结局,竟如此的相似。
实现,才是目的
很多人把问题的本质给忘掉了。从最开始,从我们编程开始,我们的目的就是实现一个东西。无论这个东西是小到称手的一个工具,还是大到千万的一个工程,我们的目标,都是要“实现”它。
工程只是一种实现的途径。最初做开发的前辈们,不用什么工程或者过程,也一样编出了程序,也一样解决了问题,也一样实现了目的。
工程不是做的,是组织的
不能“做”工程,而是要“组织”工程。项目经理的工作,就是要去组织这个工程中的各个角色,使得分工明确,步调一致,共同地完成这个项目。
大道至简:软件工程实践者的思想 第五章 失败的过程也是过程