众所周知,软件工程(SoftwareEn鄄gineering)一词是1968年北大西洋公约组织软件工程会议之后广泛使用的。软件工程作为一个学科,也是在此之后才开始大发展,并逐渐建立起来。时至今日,软件系统的规模已经到了惊人的程度,软件工程的重要性,因此毋庸多言。相对日新月异的具体开发技术和平台,软件工程的方法和原则显然生命期要长得多。几十年发展下来,软件工程图书不断积累,已经渐成汗牛充栋之势。在Amazon上搜索“SoftwareEngineer鄄ing”,可以得到4300多条纪录。
国内的情况则颇为耐人寻味。在一家专业图书网站上搜索“软件工程”,所得到的记录是,2000年出版只有4种,2001年是7种,而到2002年就增加到83种,2003年和2004年更是保持在230种以上。好像是突然之间兴起的一股淘金热,出版和写作的热情都迅速高涨。但是进入2005年这个数目又有骤减的趋势。这其中移译西书占了很大部分,应该说几年下来,比较重要的国外相关著作都已经引进。
然而,软件工程虽发展多年,但是各种最佳实践、原则、工具和方法在真实软件开发环境中的应用却仍然很难令人满意―――Sommerville在《软件工程》一书新版前言中就提到,在20多年前该书初版时已经认识到有缺陷的瀑布模型,到2003年底仍然有40%以上的公司在使用。这两方面一正一反,俨然形成一个增长的闭环。这也是为什么近来各种新的方法还是层出不穷的原因。与此相对应的是,无论国内国外,软件工程类图书在总的计算机图书市场中只占有很小的市场份额(还不如Flash一个软件)。这里的矛盾是非常惊人的。
这种情况为我们的专栏带来了两方面的影响。有利之一端,可以选择的对象非常丰富,不至于有巧妇无米的尴尬。不利之一端呢,软件工程学科庞杂之极,而且主流的、有定论的东西并不多,选择的难度很大,要想没有争议或者少争议,几乎是不可能的。
真正着手选书,就会发现,寻找一个合适的框架就很不容易。一个不错的起点当然是IEEE计算机学会组织编制的《软件工程知识体系》(SoftwareEngi鄄neeringBodyofKnowledge,简称SWEBOK),这个体系可谓雄心勃勃,目的是定义软件工程学科,厘清其内容和范畴,确立知识和推荐实践,并为高校课程体系和职业认证体系的制定和评估提供基础。所覆盖的10个知识领域(KnowledgeArea,简称KA)似乎就可以作为我们行文的标题。
但是,遗憾的是,这个集数百位业内专家10余年(最早启动于1993年)心血的体系本身的问题和因此而饱受的非议,显然已经严重损害了其应有的权威性。最重要的目标―――叙述共识远远没有达到。最能说明问题的是两个主办组织之一ACM的中途退出(ACM的评估报告说“该文件的制定方法和结果都存在根本的缺陷”),而在0.7版的一次投票中,参与其事的500多名专家(本来广泛性就很可疑)中只有370名参加投票,不同意的人中就有GradyBooch这样在业界一言九鼎的人物。
在我看来,SWEBOK的主要问题源于编制者更多来自教育界、培训界以及部分性质特殊的软件开发企业(比如波音这样的大公司和军工企业),因此出发点是主流的几本高校教材和已经不那么合时宜的IEEE标准,整体方法是学院派的、传统的,对工业界实际采用的各种最新实践和理念吸收不够,许多结论是教育界和学术界沿袭多年的然而已经被新的实践所抛弃的。最明显的,是完全没有反映2000年以来兴起的敏捷方法及其一些行之有效的实践,比如测试驱动开发。虽然最新发布的2004版在此方面有一些改进,但更多意义上只是打打补丁,没有解决大问题。
既然没有现成的公认标准,我最终决定按照开发现场的实际来组织本文,不把求全作为目标。毕竟,我们的目的是对读者选书能够有所助益。软件工程本身最终还是要服务于软件开发的(正如微软开发新一代操作系统的口号―――“justworks”),而不是为了研究人员写论文和高头讲章而设,我个人以为,这才是正确的方向。全文的顺序将是:总论,综合,UML与面向对象,需求,设计模式,软件架构,测试,敏捷方法,CMM与软件过程,项目管理,其他。
总论
本节中所列翻译图书,正是SWE鄄BOK所倚重的标准教材。事实上,几乎SWEBOK每一章的推荐参考书中都有这三本书。需要强调的是,它所参考的均是老版本,而三本书都已经或者即将出版新版本,改动较大的部分就是吸收敏捷方法和新的开发实际(比如Web工程)。
与C 、Java图书中都有双峰峙立的情形一样,名气上软件工程类综述性的巨著也有两种:软件工程:实践者的研究方法(第5版)作者 RogerS.Pressman译者:梅宏机械工业出版社定价:59.00软件工程(英文版・第7版)作者 (英)IanSommerville机械工业出版社定价:75.00
巧合的是,两本书的作者都是SWEBOK工业顾问委员会的委员(共三位,另一位是SteveMcConnell),这从另外一个方面说明了SWEBOK学院气的根源。某种意义上讲,两本书都有多年历史(初版在20世纪80年代早期),对于软件工程学科的形成,尤其是在教育界和学术界影响极大。相对而言,Pressman一书在国内因为引介较早,名气更大。在国外两者倒是基本在伯仲之间,教材方面采用大致是对半开,都属于标准教材。Pressman据说有几百个学校采用,而Sommerville的销量已经超过40万。两本书的优点都是覆盖比较全面而且征引丰富,加上支持网站有更加丰富的资源链接,甚至可以当成百科全书来用。
Pressman一书虽然冠名为“实践者方法”,但是学术气息似乎更浓。看看目录(第6版)就能知道:几个部分由过程(指令性过程和敏捷过程)、软件工程实践(包括系统工程、需求工程、分析建模、设计工程、架构设计、组件、用户界面和测试)、Web工程、项目管理和高级主题(形式化方法、净室软件工程、基于组件的软件工程和再工程)组成(第5版将软件工程实践分为传统和面向对象讲述),十足是学报一般。
另外的一个问题是,作者既要照顾教材需求(而且针对MIS,CS等不同专业),又想适合专业人士和研究人员阅读―――这几乎是一个不能完成的任务,其结果是书的内容取材过于庞杂,而且组织不善(多个版次不断在改变组织方式就是证据)。以我和周围朋友的经验来看,此书用于开拓眼界,全面了解软件工程之涯际甚好,对于攻读软件工程的研究生乃至从事软件工程学科研究工作(个人感觉目前学界与产业界隔阂较大,国内尤深)的读者更是必备,但是用于指导实践则并不合适,每一章节要真有所得,必须去读其参考文献―――换句话说,本书并不真正解决问题,某些章节浅尝辄止,而某些章节几乎就是完全的掉书袋,将几段引用的话加在一起。对于课堂,做主教材其实并不甚合适,至少对讲者要求极高,必须配套大量实践环节和补充讲解,方能使就学者不至于读起来如政治课本。从这个意义上讲,本书更应该用作背景泛读参考书。请读者注意的是,本书原版已经有第6版了,更新幅度较大,基本上以讲述面向对象方法为主,UML和敏捷方法等分量明显增大,Web工程也从一章扩展为三章组成的部分。但中文版应该尚未出版。
比较起来,Sommerville一书更加适合教学需求,与国内现状也更加接近,但是广度上与Pressman有差距。全书总体分为:简介、需求工程、设计、软件开发、验证和管理几个部分,我认为要比Pressman清晰简明得多。当然在软件开发中放入迭代、重用、CBSE(基于组件的软件工程)等内容,显得有些怪异。书中有不少专门章节讲述关键性系统开发,是一大特色。在行文上,Sommerville也比较干净利落,没有Pressman中的那么多引语和有废话之嫌的拖沓文字。当然,对于国内读者而言,本书相对于Pressman最大的优势应该是版本上的,新版的影印版出得非常快。本书还有第6版的中文版(机械工业出版社,49元),但是翻译比较一般。软件工程:理论与实践(第2版)作者 ShariLawrencePfleeger译者:吴丹史争印唐忆清华大学出版社定价:54.00
本书也是SWEBOK主要参考文献。Pfleeger是IEEETransactionsonSoft鄄wareEngineering的副主编,而且有不少优秀著作问世。全书基本上也是按照过程―管理―需求―设计―编码―测试―交付―维护的顺序讲解的。优点在于有两个大项目贯穿始终,而且每章之后有分别针对普通读者、专业人员和研究人员的回顾。原版应该会在今年有新版更新。软件工程导论(第四版)作者:张海藩清华大学出版社定价:33.00
本书是国产综合类教材的典型代表,好像得过不少奖,各高校使用很广。粗看起来,本书体系很完善,涵盖了形式化方法,也有配套的项目以及学习辅导。遗憾的是,本书仍然没有避免国产教材的通病―――与实际相去较远(国内的诸多)。书中实际上是将传统方法与面向对象分开讲述,怪的是作者竟然更加偏重前者。诸如面向数据流的方法、Warnier图、Jackson方法,现在实际开发中还有没有应用,实在是个大问题,这些内容仍然大讲特讲,并用来去考核学生,却不涉及真正有用的最佳实践、现实,学生到工作岗位上又如何面对实际环境呢?
综合
本类我想推荐的是不好归入其他子类的书。人月神话作者 FrederickP.Brooks译者:UMLChina翻译组汪颖清华大学出版社定价:29.80
也许本书放入总论更加合适。实际上,如果只允许我推荐一本软件工程图书的话,这本图灵奖得主的著作应该是我首先会考虑的三四本书之一。本书的缺陷是文章所处语境离现在太远,而且是文集性质,不够系统,但是重要的软件工程思想都能在本书中找到,而且论述深刻。按照现在的形势,也许再过十年,本书仍然会在书店畅销。在国外高校,有些比较用功或者有实力的教授会用此书而不是Pressman或者Sommerville作为教材授课,虽然这样要做很多备课工作,讲义也成了大负担,但是教学效果往往极佳。最后期限作者 TomDeMarco译者:UMLChina翻译组熊节清华大学出版社定价:20.00
本书很适合在茶余饭后甚至枕边厕上阅读。能有大师用小说的方式讲解项目管理,我们真是够幸运的。要是软件工程方面的各个主题能够都有这样的著作,大概没有人会对软件工程再心存畏惧了。人件(第2版)作者 TomDeMarco,TimothyLister译者:UMLChina翻译组清华大学出版社定价:29.80程序开发心理学(银年纪念版)作者 GeraldM.Weinberg译者:邓俊辉清华大学出版社定价:39.00
我个人的经验表明,有些时候,非技术性的因素比技术因素要重要得多。近来软件工程的实践和研究都开始更加重视人的积极性而非纪律―――敏捷方法本质上就是一种人本方法。其实,这些理念大师们早就教导我们多年了。这两本书应该是讨论软件开发中人的因素的最佳著作。UML与面向对象
将UML放在技术类别的第一位,只不过是为了强调。在现代软件开发企业里,如果你连UML都没有掌握,可能会寸步难行。掌握UML,可不是背记几种图的画法那么简单。UML与面向对象技术是不可分割的表里关系。因此,本类图书其实讲的都是一样的主题。UML基础、案例与应用:第3版作者 JosephSchmuller译者:李虎赵龙刚人民邮电出版社定价:42.00
本书是我所见到的UML入门最佳读物,新版已经覆盖了UML2.0。在国外本书的名气不如MartinFowler的《UMLDistilled》,但是在国内由于翻译上的差距和思维方式的原因,本书显然更加受欢迎。事实上,本书作为教材也相当不错。尤为可贵的是,本书并不单纯就事论事,而是紧密结合应用领域,而且讲述了不少设计模式,在颇受非议的“TeachYourself”系列中绝对是罕见的佳作。UML用户指南作者 GradyBooch,JamesRumbaugh,IvarJacobson译者:邵维忠张文娟孟祥文机械工业出版社定价:48.00
UML之父们教授你怎么使用UML建模。与上一本书相比,本书可能不那么易读,翻译的流畅性也稍差,但是学习大师们怎么思考问题,其效果是不能同日而语的。建议读者作为第二本UML书。面向对象软件开发教程(原书第2版)作者 ScottW.Ambler译者:车皓阳刘锐机械工业出版社定价:39.00
本书的英文版名气很大,ObjectPrimer是也,中文版的名字有些使它泯然众人了。作者是加拿大人,长期为《SoftwareDevelopment》杂志撰稿,处在业界的最前沿,而且有丰富的软件开发和咨询经验,文章风格多样,思维敏捷。这些在本书中都得到了集中体现。阅读本书时,我常有这样的想法,如果自己求学时能在软件工程课堂中使用这样的教材,将会得到多么高的起点和多么好的效果。作者完全是一种现身说法的方式,从需求开始一直讲到实现和测试,最后才是过程的介绍,其中业界最佳实践、相关的概念和技术无不信手拈来,比如CRC、设计模式、用户界面设计等等,这种方式在国内教材中是很少见到的。遗憾的是,本书翻译有不少问题。原版已经进行了更新,但是主要的修改是大幅度融入了敏捷实践(谁让作者的专栏名称叫AgileEdge呢),这样一来,却未必适应国内现状了。UML和模式应用(原书第2版)作者 CraigLarman译者 方梁机械工业出版社定价:59.00
MartinFowler曾称本书为面向对象技术最佳入门书。本书与上一本有异曲同工之妙,只是方法和涵盖不同:将UML、面向对象、模式、统一过程都融合在一个范例系统的设计过程中,非常精彩,而且非常逼真于实际的开发场景,连持久存储和故障恢复都考虑到了。其中的GRASP模式是作者扬名业界的原创。