技术开发 频道

传统软件工程最后的经典

    最后的经典

    所有学过“软件工程”这门课程的人都知道上世纪60 年代的软件危机、1968 年的NATO会议、以及著名的瀑布模型。从某种意义上来说,所有的传统软件方法都派生自瀑布模型和结构化软件开发方法。正如我在前面说过的,它们有一个共同的特点——强调前期的需求分析、不鼓励后期的需求变化。这一类的软件工程方法实际上带有建筑学方法的影子:先分析、再设计、最后实现;各个步骤有严格的区分,彼此之间不回溯或很少回溯;假设用户需求可以预先完全获取,并且很少变化;等等。
    很可惜,开发软件与盖房子有着本质上的区别。在软件开发的世界里,你很难预先捕捉到用户所有的需求,并且用户需求也常常发生变化。甚至有这样一种说法:在软件的世界里,唯一不变的就是变化[Sha, 02]。可是传统软件工程方法偏偏不能很好的应对变化,这就成了它们的致命伤。尽管传统软件工程方法也有许多发展,用各种不同的方式来应对需求的变化,但是这些方法都更多的采用“预先准备”的方法。所以,在需求变化越来越快、开发周期越来越短的今天,传统软件工程方法一方面发展到了极致,创造了非常大的生产力;另一方面也已积重难返,走到了生命的尽头。
    本书也是一样:一方面,它是传统软件工程的集大成者;另一方面,它也直接反映出了传统软件工程的致命弱点。下面是来自本书第19 章,“变更设计”的一个例子:“变更的设计”并不是指一种单一的设计方法学,而是一种能够使软件设计灵活的一系列设计活动。下面列出了一些这样的活动:
    *** 识别可能发生变更的区域
    *** 采用隐藏信息的方法
    *** 制定变更的计划
    *** 定义程序族
    *** 采用面向对象的设计方法
    看上去很美。但是,仅此而已。在传统的开发环境下,你没有准确识别变化需求的高层分析工具(现在仍然没有),也没有能快速应对变化的低层开发手段,所以这种方法实际上并不具有可操作性。也许一直到重构(refactoring)[Fow, 99]这种强大的代码级方法出现之后,这种“变更的设计”才真正有了实现的可能——但是,由于重构实在太强大、太方便了,程序员们干脆只在项目开始的时候做非常简单的设计,然后在后续的过程中用重构来改进系统的结构。这正是许多敏捷方法的做法。
    但是,尽管已经日暮西山、尽管已经老态龙钟,传统软件工程仍然对软件开发有着非常重要的指导意义,尤其是在项目管理方面。本书中的一些技术细节已经过时颇多,但是管理思想却是极其先进而且独到的。毕竟项目管理不象编程技术那样日新月异。所以对于项目经理和团队领导者来说,本书会很有价值;而如果你是想学习建模方法和软件设计方法,本书很可能会让你失望。
    前面已经提到过,《快速软件开发》成书于1995 年。在那以后,再没有一本传统软件工程方法的重量级著作问世,软件工程界的焦点也转移到了Rational 公司的UML这种建模工具上。随着敏捷方法的迅速崛起,软件工程方法的朝代更替已是近在眉睫。所以,这本集传统软件工程之大成的书,很可能也就是传统软件工程最后的经典了。

    好书,好译

    我必须承认,已经有好几年没有读到这么好的译本了(侯老师的翻译风格自成一派,而且又是“外来客”,且不拿他做比较)。最近两年,大家公认潘爱民老师的译文质量很高。但是我读潘老师译文,仍能直接联想到原文。而在《快速软件开发》中,我的确很少感觉到原文的味道,读来酣畅淋漓。对于许多句式、词汇,译者都做了精心的处理,让读者感觉是在看中文,而不是“透过汉字看英文”。以我个人之见,撇开对技术的掌握不谈,本书的翻译水平当在潘老师之上。注1
    不过,本书的翻译工作也有一些缺陷。由于本书是多人合译,所以在各个章节之间能明显感觉到语言风格的差异,甚至使用的术语也有差异。而且在第42 章中,译者将“User Interface”译为“用户接”,我觉得译为“用户界面”更贴切,不知道译者是否会采纳我的意见。瑕不掩瑜,这本《快速软件开发》仍然是近几年国内罕见的高质量计算机图书。尽管译本比原本晚了六、七年的时间,但是几位译者以如此负责的态度为我们翻译了如此精彩的图书,在此谨向他们致以崇高的敬意。
    一本在AMAZON上得到五颗星的书,一群肯下功夫的译者,一家有着优良传统的出版社。
    我有理由相信,《快速软件开发》是一本真正的好书。


    参考书目
    *[Bec, 00] Kent Beck, eXtreme Programming Explained: Embrace Change, AddisonWesley Longman, 2000.
    * [Fow, 99] Martin Fowler, Refactoring: Improving the Design of Existing Code, AddisonWesley Longman, 1999.
    * [GoF, 95]Eric Gamma, etc. Design Patterns: The Element of Reusable Object-OrientedSoftware, Addison Wesley, 1995.
    * [Sha, 02] Alan Shalloway, James Trott, Design Patterns Explained, Addison Wesley,2002.

0
相关文章