*** 以失去控制和削弱公司内部的开发能力换来降低成本和提高开发速度。
作何感想?在需要决定是否将某部分开发任务外包的时候,这个表可以帮助你迅速理清思
路、作出判断;如果你和你的同事都看过本书,在谈起“外包”的时候,你们俩就会同时意
识到“这意味着可能失去对进度的控制”。是的,作者凭借丰富的经验,对各种软件工程方
法进行了有效的归纳、整理和评价,让读者可以快速掌握这些方法的精要,为读者提供极具
表现力的词汇表,使读者可以很方便地将软件工程方法结合到自己的项目中来,而不是把软
件工程看成象牙塔中不可触及的圣物。
此外,在本书的第一、二部分中,作者围绕着“有效控制与完成进度计划”这个核心问题,
将传统软件工程的方方面面都做了阐述,内容涵盖了软件开发中的基本原则、典型错误、风
险管理、生命期计划、估算、进度计划、激励机制、团队合作、生产率工具、项目修复等等
方面。熟悉传统软件工程的读者将会发现:从瀑布模型到面向对象,从COCOMO模型到快
速原型,你学过的东西在本书中都有自己的位置。但是经过作者的组织,这些曾经让你感到
如此抽象如此困难的东西却都变得如此触手可及、如此轻而易举。古诗有云“不识庐山真面
目,只缘身在此山中”。而这本书则正是站在传统软件工程的最高点,高屋建瓴,自能给读
者耳目一新的感觉。
本书完稿于1995 年。经过多年的喧嚣和沉淀之后,传统软件工程在那个时候已经发展到了
极致。而作为微软的高级顾问,作者McConnell 最擅长的就是“站在巨人的肩膀上”。所以,
我可以放心的说:《快速软件开发》这本书堪称传统软件工程的经典。
最后的经典
所有学过“软件工程”这门课程的人都知道上世纪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, Addison
Wesley Longman, 2000.
* [Fow, 99] Martin Fowler, Refactoring: Improving the Design of Existing Code, Addison
Wesley Longman, 1999.
* [GoF, 95]Eric Gamma, etc. Design Patterns: The Element of Reusable Object-Oriented
Software, Addison Wesley, 1995.
* [Sha, 02] Alan Shalloway, James Trott, Design Patterns Explained, Addison Wesley,
2002.
文章来源于领测软件测试网 https://www.ltesting.net/