声明:本文已发表在《程序员》杂志,转载必须说明。
![](http://www.wwsd.com.cn/img/276277.jpg)
问题已暴露,情况很严重
“在很长一段时间里,我一直对一件事情比较困惑——那就是在大部分讨论软件开发过程的书里,所讨论的都是从零开始编辑程序。我之所以对此感到困惑,是因为在人们开始编写代码时,这并不是他们最通常所面临的情境。很多人必须从改进既有代码库开始,即使这些代码库并不是他们自己编写的。”[1]
Martin Fowler
为《软件再造》一书作序,上面就是他的第一句话——多少有些郁闷已久、不吐不快的意味。
的确如此。不是教你“从零开始”的软件开发过程,就是教你“在理想状况下”的面向对象方法……。更贴近当前业界现实的书相对来说比较少。这就是买书时“最通常所面临的情境”。
大师尚“感到困惑”,那我们呢?不少开发人员对修改别人的程序非常排斥,不知这是不是一种自我保护——由于“再工程”能力不足,干脆就“唯恐避之而不及”。
看来,问题已暴露,情况很严重。
充下电先
智者为王。
《定位》一书的两位作者艾·里斯和杰克·特劳特,无疑是这样的智者。
“七喜:不是可乐(Seven-Up: the uncola)。”在三分之二的软饮料市场被可乐类饮料占据的形势之下,七喜公司打出了这样的广告。后来,七喜的销量陡升,并成为世界销量第三的软饮料。这,就是定位思维的威力。
定位的基本方法不是创造出新的、不同的东西,而是改变人们头脑里早已存在的东西,把那些早已存在的联系重新连接到一起。[2]
不少团队都会发生问题,但人们倾向于认为,拿出一点时间来交流一下,问题自然就会消失。而定位大师进行了更加犀利的思考,他们把交流本身当成问题,从局外向内看——把交流作为研究对象——于是定位理论产生了。
为我们的工作重新定位
现实中的软件开发行业,显然没有被很好地定位。无论是大多数的书籍中,还是大多数人的头脑中,软件开发都被当作从高层抽象模型到不断具体的模型的转换过程,而这并不是我们“最通常所面临的情境”。
我们需要跳出庐山,通过“从局外向内看”来为软件开发行业重新定位。《软件再造》正是这样一本书。
本书的三位作者,揭示了软件开发中“最通常所面临的情境”——他们宣称,“如果从一个极端的观点来看,可以说每一个软件项目都是一个软件再工程项目”。这个论断,对思维的冲击和启发是巨大的,以致不能不让我这个深受定位思维影响的人,大呼定位思维的又一卓越案例产生了。
书中所展示的主题,正是每个开发人员的生活:通过逆向工程去理解,抽取出它的设计,然后通过前向工程去改变,其间还充满了测试和验证——这正是一个再工程的过程全景。图1展示了再工程的马蹄铁模型。
![](https://p-blog.csdn.net/images/p_blog_csdn_net/wakeful/re1.gif)
图1 再工程的马蹄铁模型
《软件再造》的范围、内容和形式
《软件再造:面向对象的软件再工程模式》一书的英文原版书名为《Object-Oriented Reengineering Patterns》,书名中的三个词分别刻画了本书的范围、内容和形式(参见图2)。
l
Object-Oriented
。为本书限定了范围,只专注于面向对象的软件开发。
l
Reengineering
。本书的内容围绕再工程展开,让我们意识到软件工厂并不应该成为前向工程的代名词。
l
Patterns
。本书以模式的形式,将宝贵经验归档。这种“高聚合”的形式,不仅使阅读更有针对性,也便于随时查阅参考。
![](https://p-blog.csdn.net/images/p_blog_csdn_net/wakeful/re2.gif)
图2 本书的范围、内容和形式
《软件再造》内容简介——生命周期视图
本书共十章,第一章综合介绍了软件再工程的重要性、生命周期、模式。
其余各章按照软件再工程的生命周期分为逆向工程和再工程两部分:第二章到第五章介绍生命周期的逆向工程部分;第六章到第十章介绍生命周期的再工程部分。
《软件再造》内容简介——技术视图
本书结构清晰,每一章的主题都很明确。无论是项目经理、架构师、还是敏捷设计者,都会很轻松地捕捉到他们最感兴趣的主题。
第二章是关于如何启动一个再工程软件项目的。本章想必是项目经理最感兴趣的,特别是手上正有再工程软件项目的。
第三章到第五章是关于如何理解一个大型的软件遗留系统。关于这个主题,本书是我见过的阐述最为系统、最有实际指导意义的一本。其中不少方法是我们都用过、但未必清楚地意识到的。在如今的开源时代,如果你掌握了书中介绍的自底向上的设计抽取(Design Extraction)方法,你将有可能快速成为所在领域的优秀设计师。
第六章和第七章分别关注测试和移植策略。诸如“为理解而编写测试”、“保持熟悉度”等模式都非常有启发性。另外,这两章包含了不少敏捷思想,更体现了与业界趋势的同步。
最后三章是敏捷设计者的最爱——关于重构的。可贵的是,在这里重构的语境被阐述地清清楚楚;我想,每个明白“设计的语境比设计本身更有教育意义”的开发人员,都不会放过研读这三章的机会。
合上书,却合不上思绪
本书的背景是一个名为FAMOOS的欧洲工业研究项目。访问过FAMOOS项目的Martin Fowler说:“他们在理论领域和实验室实践之间建立起了一个循环,尝试先将理论思想放入到真正的项目中检验,然后再从实验室实践中返回到理论总结。”[1]
软件产业发展到今天,已经有大量遗留软件系统需要维护和演进;
商业环境的急剧变化对软件提出了随需应变的迫切要求,软件系统变成遗留系统的周期已大大缩短;
软件产业的分工也日益细化,不断分化出更多类库、框架和平台等基础软件生产商,更是从根本上让应用开发变成了“再工程”……
总之,我们站在一个充满变化的舞台,重视实践与理论的结合、并让理论跟上实践发展的脚步,这难道不是事关生死存亡的大事吗?
我合上书,却合不上思绪。《软件再造》这本一百多页的“小书”,薄而不轻……
参考文献:
[1] Serge Demeyer
等著,莫倩等译. 软件再造:面向对象的软件再工程模式. 机械工业出版社,2004
[2]
艾·里斯等著,王恩冕等译. 定位. 中国财政经济出版社,2002