软件工程中的“剑宗” 和 “气宗” (原作于2005年12月)
声明本人向来不看武侠小说,也从未看全过任何一部武侠连续剧。偶尔无聊时,陪着朋友看过一两集,只是图个乐和。窃认为金庸的小说可用几个字概括:好人真好,坏人真坏;一有打架,动手前一大堆废话,还有一大堆旁观者在站着评论,树上或房顶上还会藏两个。管中窥豹,大家见笑了啦!述归正传,有一集给我留下的深刻印象。我忘了戏名,只记得武当两派打架。一派主张剑术,称作“剑宗”;另一派主张内功,称作“气宗”。本来是文斗,后来改为武斗。打得不可开交很是热闹。剧情大体这样,却让我联想起在软件工程领域中也有着类似的派别之争。
按照历史先后顺序,先来说说软件工程中的“剑宗”——经验论(Empiristic)。“剑宗”提倡软件流程(Software Process)为主导。其实我在本科所学到所有软件工程知识都是关于软件流程。例如:瀑布模型,螺旋模型等等。不知道现在高校课程是否还停留在这里。软件流程主张针对复杂的软件开发过程进行模式化,定义行为规范,监控实施细节,量化管理。以保证软件开发的可预见性(Predicability)可重复性(Repeatability)。软件流程所定义内容深广,从需求分析(Requirement Elicitation),设计(Design),实现(Implementation),测试(Testing),到维护(Maintanence)。“剑宗”一位重要人物当属Watt Humphrey,著作有Personal Software Process, Team Software Process还有国内IT人人皆知的CMM模型。其同事Mark Paulk主导完成了CMMI的模型定义。
在说一说“气宗”——科学论(Scientific)。“气宗”提倡软件架构(Software Architecture)为主导。软件架构是介于软件需求分析(Requirement Elicitation)和软件高层设计(High Leve Design)之间的一个环节。不能简单等同于UML的类图。软件架构应该贯穿于整个软件开发流程,从需求分析到质量保证和维护。如同现实中建筑蓝图(Blue Print)一样的角色。我们对软件架构又很高的期待,只可惜到现在为止,为没有一个人能清楚的定义到底什么是软件架构。“气宗”鼻祖当属Mary Shaw,曾是软件工程学院(SEI)的首席科学家,最早提出软件架构的概念。尔后便是David Garlan,一直试图利用Formal Method描述软件架构。两人合作的一本书Software Architecture(中译本为“软件体系结构”)堪称最早关于软件架构的教科书。
好了看看两派如何出招的吧!“剑宗”认为软件流程是当前软件危机最有效的解决方案。Jim Tomayko曾经引用飞机机翼制造作为一个例子:先前在流体动力学还没有产生的时候,工程师就已经可以设计出非常合理的机翼了。虽然流体动力学后来提供有力佐证,但是工业界不必非要等到科学理论的成熟。当前软件工程中的科学理论,还远未成熟。软件工程师因该着力于从实际工作中,总结软件开发经验,而不是探究公式推倒。
“气宗”认为软件架构是答案。因为任何一门领域,只有当理论基础夯实的时候,才可以有质的飞跃。我曾问过David Garlan一个问题:“软件流程模型虽然非常详尽,但是对于软件高层设计却没有提供方法支持。可是软件高层设计,人为因素很大,不确定性很高,关乎软件成败,怎能简简单单用流程来描述?”我这个问题问得很好,或者可以说马屁拍得的好,正中David下怀!他笑说:“是啊,有些人花了10多年才明白这个道理”
其实每个人都知道软件流程与架构都是不可或缺,相辅相成。软件流程在10余年里,逐渐得到人们的肯定CMM的认可足以说明这点。而软件架构在近些年里,也得到很多的重视,尽管还没有确切的定义。我很有幸在CMU了解两派的观点。随着对软件工程的认识积累,我也逐渐由“剑宗”转化为“气宗”。其实,不论“剑宗“还是“气宗”,都是学术上的问题。在软件行业领域里,并没有太大的分歧。例如Rational的UML规范,把流程和架构一起抓,怎么实际怎么用。大有“少谈些主意,多解决问题”的意思。