软件工程中的“剑宗” 和 “气宗” (原作于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规范,把流程和架构一起抓,怎么实际怎么用。大有“少谈些主意,多解决问题”的意思。


Identities, Contact and the Real Person Offline

“Miscommunication” Scenarios in Daily life I want to start with some stories to illustrate miscommunication examples that happen in the real life. I am sorry that I have to mess up Bob and Jill’s life again. They are my favorite use case actor and actress since when I was in Pittsburgh. Scenario 1: Bob is…

1

A Good Example of A Bad Design

Two weeks ago, ProClub (a.k.a Microsoft gym) introduced a new lock system in the locker room, which requires inserting your member card before locking the cabinet. I left my member card inside the lock the first time I use it. I am a discipline person, left or forgot something rarely happen to me. I only…

3

Prototyping to Improve Design Accuracy

How many times we realize that the software was implemented in the way very different from the original design? It is an overused example to describe the problem we are facing every day. That’s the reason I will not call design doc review until I have implemented certain amount of the prototyping code and have…