转:福勒重构软件开发
Posted by Admin L in Thinking in Programming & Software on 10-12-2011.
作者:不详
原文地址:不详
_____________________________________
福勒重构软件开发
Martin Fowler Re-establishes Software Development Effects
软件开发最终是要从业务运用方面获得肯定,但长久以来,使用软件的人,大多无力对软件本身有过多的研究
Software development will be evaluated by its application。Yet for a long time,people spare little efforts on studying the software they use
马丁•福勒有点虚弱
英国人马丁•福勒Martin Fowler)尽管在美国扎了根,却没有变得像普通美国人那样阳光外向。不但如此,连肠胃都显得比较娇气,抵京前两日,福勒在日本闹了肚子,准备好的演讲差点不能如期举行.可是,日程安排得比好莱坞巨星还满.耽搁一次活动,接下来将是一连串的改变,最后,福勒先生还是登上了”第10届北京国际软件博览会”的讲坛,却不得不坐着发表了20分钟演讲。
次日一早接受采访,马丁•福勒依然病殃殃地歪着,小脸在一部浓密的络腮胡里扛满了官司。不过.最上镜小姐“肤白脸小身段苗条“的八字真言放在科学家身上同样适用,还没开始拍片,大家就在偷偷庆幸此君”拍下来肯定不让人失望“。
倘若人是一个和谐的体系,某方面的突出,必然对应着另外一方面的缺陷,不然无法保持系统的整体平衡。所以牛顿在门上挖了一大一小两个洞分别供狗和猫进出,不但没有被嘲笑,还被善意地赞美着。马丁•福勒的缺陷也很明显——不太善于探讨技术之外的问题。
被要求按照杂志的封面人物风格扎上领带时,福勒颇有些不乐意.一再坚持:我从来都不打领带,从来都是这样很随意很轻松。
当然.最后他还是把脖子伸了出来,任由思特沃克(ThoughtWorks)公司的驻华总经理给他系上了领带。
非常具有反讽意义的是,马丁•福勒所倡导的敏捷软件开发,强调的却是互动:充分考虑用户感受.最大化激发软件的价值……
也许.他并不是不知道自己所不擅长的也叫缺点,只是改不掉罢了。无论如何.这点小问题并不掩盖他的光芒。何况他一面对镜头,立马神采奕奕,一开始的矫情早巳烟飞云散.令拍摄现场充满了欢声笑语。
马丁•福勒在许多软件开发的国际性会议上做过演讲。他还是OOPSLA、软件开发委员会。UML世界、XP2001.TOOLS等几个协会的会员。同时.做着”分布式运算”杂志的专栏作家。现在.他又为”软件开发”杂志做顾问,同时还为“IEEE软件”写一个设计专栏。
作为敏捷开发的鼻祖,他的中国之行在IT行业引起了广泛关注,以至于一些和IT全不相干的人都知道了这一”盛事”。
被软件格式化的生活
在过去三四十年里.软件行业是非常成功的一个行业,软件开发人员成为和平年代的英雄。程序员出身的比尔•盖茨成了全球首富.并因此改变了无数人的命运。当微软宣布比尔•盖茨将在2008年7月前结束他在微软的日常工作。把更多的时间和精力放在盖茨基金会(Bill&Melinda GatesFoundation)的健康和教育工作上,全世界范围内有没有话语权的人都在忙着品头论足。
我们在运用许多软件将自己的生活进行完格式化之后,还对软件开发员感恩戴德……•是的,连发表一些感概,也必须借助软件,大部分人离开电脑,都已经无法再写出一个完整的句子来表达自己的意思了。
上世纪六十年代末北约组织了一次软件工程学的大会,他们在会议上提出了“软件危机“这个概念。与会者感到软件已经变得十分复杂,以至于不能以十分有效的方式来管理。会议倡议使用一种更加有纪律性的软件开发的方法,从传统的工程学里面借鉴一些概念,把它应用到软件开发过程当中来,所谓的”软件工程学”诞生。
此后.从七十年代到九十年代,软件开发方法始终围绕着所谓的“工程学“打转。软件的应用通常被理解为聪明人想出一个妙招,替傻瓜开启看世界的大门。
但是,也是在这段时间,很多的软件从业人员开始怀疑工程学为基础的方法到底适不适合软件开发。
举一个简单的例子,如果你想造一座桥,你开始会把所有造桥的事情都想清楚,预测即将出现什么问题。这项工作由专门的设计人员来完成,交付的东西是一系列图纸;以图象为基础描述桥到底.怎么建,既包括建好以后桥是什么样子.其间还有足够的细节,阐述如何一步一步搭建这个桥梁.花多少时间、多少成本。需要什么材料,等等。任何一个具备资质的施工单位拿到这些图纸.按部就班即可把桥建好。
传统的工程设计图纸在软件行业里应该是什么样的东西呢?有人认为在软件行业当中,工程学对应的构建的阶段就是编程。所以,在软件行业就应该先用图象的方式把整个设计的方案表达出来,然后交给真正编程的人。这种以计划驱动的软件开发方法是整个建立在需求不会更改的基础之上的。如果这种基础、这种假设不成立,整个开发方法都会出现问题。
简单地说.这种氛围下的软件开发就是用户提出需求.付钱.等上半年,程序员拿出一个东西来交差.好不好用,另说。
事实上.即使在项目的开始阶段能够想象出来项目的需求是什么样,但是业务本身肯定会变的,在项目需求确定以后还会继续变化,从而导致需求的变化。
不顾及需求的变化,业务部门对软件频繁抱怨,很多公司出现昂贵的软件豆腐渣工程。婆婆嫌媳妇不中用.媳妇恨婆婆太麻烦,纠纷不断,永远没有结果。
开发人员继续一厢情愿地假设用户需求固定,但是被服务的对象需求越来越高。连以看电视打发时间的闲人们都不满于充当被动的“沙发土豆”.何况为软件掏了大钱的企业。
“敏捷联盟”揭竿起义
大约从九十年代开始,很多人尝试使用一些和工程学不同的方法来开发软件.比较有名的方法有Scrum,Crystal.特征驱动软件开发(Feature Driven Development.简称FDD),自适应软件开发(Adaptive Software Development,简称ASD),1998年.由Smalltalk社群中的大师级人物KentBeck首先倡导的极限编程(eXtreme Programming,简称XP),更是捕获了无数人的心。
2001年,为了解决许多公司的软件团队陷入不断增长的过程泥潭,一批业界专家一起概括出了一些可以让软件开发团队具有快速工作、响应变化能力的价值观和原则,他们称自己为“敏捷联盟”.极限编程等新方法被统称为“敏捷开发”。
马丁•福勒是“敏捷宣言”的缔造者之一也是敏捷方法的第一鼓吹手。他四处演讲,推广敏捷开发的好处:传统开发以预测性为主。这种方法在项目开始的初期,就已经做好了各种设计,规划好整个项目的流程。整个项目阶段被分成两个:设计过程与实施过程,建筑设计师(软件架构师)与建筑工人(程序员,coder)分别负责这两个过程。这样的开发方法.抗拒需求的变化。
敏捷开发是以适应性为主的开发,这种开发方法强调的是人与人的交换,使流程适合人,重视人,是一种演进式的设计。项目通过一些小迭代,当可随时处于健康状态,可以随时修改,适应需求的变化。
软件开发的全部艺术就是权衡:在简单与复杂之间权衡.在一种方案与另一种方案之间权衡。如果把每个问题、每个权衡的利弊都考虑得清清楚楚,恐1,6开发一个应用程序的成本会高得惊人。 •
所以,很难找到任何一种方法来统御整个软件开发领域,但敏捷方法,正在被越来越多的人接受。
即使给软件加一个工程学.并不意味着软件和其他工程学有类似的地方。很多人花了很多的时间来想.也许真正的工程学不是一个对软件最佳的描述.也许有其他的方法更好的描述软件开发的过程。
马丁•福勒认为,大公司律师之间协商一个合同过程更像软件开发的过程。”说到最后.工程学只是一个比喻,用它形象地来描述软件开发.我们最后应该研究软件开发自己的问题.而不是一定要和工程学去比较。”
如果把敏捷开发比喻为市政建设,可以得到安慰的是:随着车辆的日益增加,几年前规划的道路已经明显不够宽,没关系,你可以扩建。尽管扩建的过程有些繁琐,却比传统方法导致整个路桥全部报废要经济实惠得多。
作为软件开发圈子里最著名的“传教土”,马丁•福勒有一种常人所不及的归纳总结、提纲挈领的能力。很多“古已有之”的技术都是经过他的点石成金,才真正在开发者的芸芸众生中流行起来。
软件开发当中一个非常有趣的现象是,没有办法绝对的客观衡量开发方法的有效性。开发团队唯一能做的就是非常诚恳、非常准确地描述我们自己的经验,使得其他有兴趣的人做类似的事情,大家一起来探讨开发的极限在哪里。
马丁•福勒现在与他的妻子Cindy一起住在Melrose一一马萨诸塞州波士顿市城郊的一个镇上。他的妻子Cindy是一个建筑工程师。闲暇的时候.他们喜欢外出旅游:夏天他们会骑车出行,冬天他们则去滑雪。
大约是因为妻子从事建筑行业.马丁•福勒非常喜欢用建桥修路去和软件开发做比较,并从中发现它们之间的重大差异。
计算机工业喜欢创造词汇.以及拉伸压缩词义。2001年,马丁•福勒首次提及”重构”.而敏捷开发的实质,落到实处便是”重构”这两个字。
重构的意思是.程序写好了,功能实现了,反过头来修改程序代码,改善它的设计结构,不增加新的功能,让程序的设计结构更好,让以后的工作更容易进行。
许多人认为•之所以需要反复修改,是因为专业人员与非专业人员之间的沟通存在偏差:唯一一个能够准确描述方案的语言不是文档,而是源代码本身。但很多决策者大多属于非专业人士,为了得到他们的许可.必须在文档中使用自然语言描述某软件是什么,如何设计,实现何种需求.等等。不同的人对同一个文档可以有不同的理解,更多的决策者或者管理者看了文档之后自以为看懂了,实际上是误解了……
目前,许多人试图从技术上找到一条捷径.让代码既保持原有的精确性,又更容易被人阅读,从而减少对文档的需要。马丁,福勒正致力于Dsl研究。Dsl是领域专用语言(domain specific language),简单说,它也是一种编程语言,但它写的东西看起来不像计算机程序,而像是在用自然语言描述问题领域。
软件开发最终是要从业务运用方面获得肯定,但长久以来.使用软件的人.大多无力对软件本身有过多的研究。一旦马丁•福勒的Dsl研究取得重要成果,软件开发或许就不再神秘,到那时.也许软件用户吃完鸡蛋,还可以了解那只下蛋的母鸡.