首页 新闻 论坛 小组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 第二书店 程序员

logo

您的位置:CSDN 首页−>新闻频道−>正文

Martin Fowler主题演讲:敏捷释放软件价值

2006.06.03  来自:CSDN      共有评论(0)条 发表评论   [收藏到我的网摘]

Martin Fowler先生向中国的软件从业者介绍ThoughtWorks 公司在全球范围内取得的先进经验:如何使用敏捷开发方法在速度与质量之间取得最佳平衡,应对千变万化的业务需求,始终确保为客户提供最大价值。


Martin Fowler先生演讲

主持人:Martin Fowler先生是ThoughtWorks公司的首席科学家,现在在旁边的这位是ThoughtWorks公司的创始人和CEORoy Singham先生、Martin Fowler先生今天身体准备不是特别好,我们给他20分钟的时间,剩下的时间

Roy Singham:大家早上好,欢迎今天来参加我们这个会议。我们要谈三个方面的问题,第一个谈瀑布开发方式和敏捷开发方式的差别。然后再谈一下中国软件开发从业人员应该注意什么问题,比如说软件工厂、动态语言、以及新型的软件编程或者是公开的源码等等。中国如何应用敏捷的方式?

Martin Fowler:我赞同您的观点,今天由于不大舒服就简短一点来说。

Roy Singham:非常荣幸过去六年一直跟Martin Fowler共事。6年前我们差不多有100个软件开发人员,我们在软件开发方面犯过很多错误,Martin Fowler来了之后给ThouhtWorks以重振。他改变了过去我们30年以内的软件开发面貌,我们现在谈一下什么是敏捷,什么是瀑布?你们是不是都了解瀑布式软件开发?很多都比较清楚。很多人知道瀑布开发是先收取客户的预见,进行需求分析,然后进行逻辑设计,包括对象的建模源,然后有一些实际的模型、有需求模型、数据模型等等。项目开始之后软件工程师开始编程编程完之后测试人员测试,理论上讲如果通过这样的过程做是软件编程最好的方法。一开始所有的需求、数据、分析都有了就知道怎么编程了。现在问题是写软件的这些人,在座的各位你们是软件编程者你们实际的工作非常复杂,软件是一个工程的概念,也是一个艺术的概念。你要把一些抽象的需求变成定制的代码,这个过程中大多数情况下开发者写出的代码和你最初的预期可能有差异,也就是编程人员编出来的可能有时候跟需求分析不一样。

  90年代像Martin Fowler这样的一群人他们认为这种程序有基本的瑕疵,为什么呢?

Martin Fowler:软件在早期是一比较尴尬的角色,缺乏软件编程的效率,我也看了其他的产业如何改进自己的工作?我决定应该看一下传统的工程学,比如说土木工程他们是如何管理这些建造的?这些传统的工程式的方法我们是有一些比较严格的区分,就是把我们工程的阶段比较有高资质的和低技术建造的人分开里,工程设计期一小部分在成本方面占的份额比较少。许多软件从业人员觉得我们也应该借用传统工程学的方法来编程。也就是我们所谓的瀑布编程方法的一个特点。

Roy Singham:这是理论上谈,大多数软件项目实际上要花更多的时间和更多的金钱,比我们预期要多很多。大型软件项目80%投入最后没有创造必要的价值。Martin Fowler和他的同事们,这一群人他们在美国开了一个会,看一下软件到底出了什么问题?后来有一个关键的想法,我认为是改变了我们软件编程的面貌。我所想到的就是测试驱动型的设计,刚才我们的同事展示了,就是真正编程之前要做一个测试,这是改变了我们软件编程的过程的一个巨大的变化,也是敏捷开发的最大的特点。

Martin Fowler:毫无疑问这是一个极限编程的工作。主要是Kent Beck创新出来的。他的这种新的想法就是初期要写测试码,如果读这样的著作会发现差不多到17章才能读到测试,极限编程里面把测试是作为一个优先的软件编程的重要组成部分。测试和编程联系的更加紧密了。

Roy Singham:关于Martin Fowler最好的一个故事就是我们当时是有一个项目,我们有许多文件,没有什么编程也没有测试,Martin Fowler到我们ThouhtWorks两个礼拜之后,说他这小组有一个绿色通过的指标了,我觉得Martin Fowler太聪明了,我是想他已经找到了让我们开发人员可以测试的方法,他实际上是说服了我们的编程人员首先编写测试,我知道了这点非常高兴。那天晚上我找我们的编程人员跟Martin Fowler一起谈,当时我是老板,我觉得自己太笨了,Martin Fowler实在太聪明了。大家都可以写出非常好的根据需求、分析这样的编码,这不仅仅是一个测试,这实际上是用模拟大脑的思维方式模拟出编程人员大脑里面处理的模式,他不但编程还在测试,这样可以更好的满足客户的需求。同时也减少了缺陷率。这是软件编程非常巨大的变革,这是一个双重测试的过程。

也就是说当你把大量的程序放到源库里面必须要反复的进行检测,把所有的东西加上去,要横向和纵向的加东西,都必须要确保它们都是测试过的。我们要做很多事情都是要进行双重的检测,这也是非常重要的。也就是说,一方面通过测试进行表达,另一方面通过编码进行表达,测试的地方它可以把不同的指标从不同的角度看。很长时间以来大家在软件开发里都想有具体的指标。

Martin Fowler:指标的是很难说明的,我们做测试的时候有一个例子上一次做的测试和下一次的测试不一样,我们需要人做测试总结,很好的办法我们就是坐下来大家都讲一下,然后综合概述下一步该做什么。在不断的渐进测试中我们可以获得最终的测试。

Roy Singham:Martin Fowler在整个过程中告诉我们另外一个事情,如果我们用老的方式思考软件的话也许我们就只会看分析师、设计师,这是线性的,从上到下的过程。但是比如说有一个工作小组,有6、7个人,他们协作非常高,而且也许不会是从上到下做决定但是现在是以他们为中心,看一下开发者需求的综合,来做分析,他们是整个过程的中心。这也就体现了敏捷和在软件开发的方式。我们需要的是协作,软件开发不是靠每一个单个层面上的人或者哪个角色才能体现出来的。我们需要的就是在沟通和不断互动的过程中能够获得非常好的结果。

  第三个非常重要的,大家看到了cruisecontrol控制,我们的理论就是要不断的反馈,就是为了让我们的这种计划能够顺利的进行,我们都要进行回送式的,不断返回式的反馈,这样才能更好的适应环境的变化这也体现了我们适应性很强的特点。也就是说我们开发的软件能够体现一种非常整体有机的环境。尤其是整体不断变化的过程中,在代码出现或者在编程的过程中代码仅仅是一个库,它更重要的是能够改变自己,而且是在这个计划的过程中,这个计划的演进就是一个生动的改变过程,这个改变也会改变代码本身。

Martin Fowler:刚才讲到了反馈,反馈是整个过程中非常中心的一个价值体现。因为它必须要有一非常明确的编程过程,同时我们面临着各个层面的问题。比如测试的时候会有一些问题和故障出现,我们如果有了这样好的方法论引导的话,整个系统运作过程中我们都能快速的找到问题出在哪个层面?有些人会开玩笑的说使用者不会告诉你,他总不知道他们应该从这个系统中获得什么东西,这个概念他们实际上很模糊,他们只会说要什么,有什么需要?那么运行的过程可能会出现转变,当你把产品交给他的时候有些人可能会说不符合我要求。我们所做的工作就是在这样的一个软件开发过程中要和平的和他进行沟通,不断获得客户满意度的反馈,而且不断收集他的新需求改变我们的版本。在这样迭代的过程中也许就是会改变软件生命的走向。上一次迭代在下几个迭代周期中会得到改变。

  之后在生产或者上市这个软件的时候,即使这种反馈会让每次迭代所做的反馈不一样,但是我们可以保证每一次出现的结果都是能够基本上获得满足的。尤其是我们必须要抓住每一好的机会,因为我们每一步都必须保证价值能够得到体现。比如说从这软件中应该最大限度的获取它的价值。尤其这个软件运作开始的时候就应该不断的在改进的过程中,不断的延续,如果有新需求出现的时候,这种新的需求也是运作新的价值的一个动力。而且我们的这种软件必须要容纳性很高,也就是可以容纳新的需求的产生。敏捷它的目的就是为了适应新的需求、制造新的机会,同时如果我们进入了变化非常快速的环境,对于互联网来说,可能它出现的是不断的新的特点,我们就必须每天时时刻刻审视它的反馈是否获得了满足?我们有一群人必须要做一个测试,然后再寻求一答案。解决我们现在做的事情是否是为了一个目标而进行的。

Roy Singham:这个也就是一个活生生的有机整体,这是敏捷的观念,也是软件开发者必须要理解的一个观念。因为大多数组织他们首先就是有一系列的规则,当问题出现的时候他们才会做一个后发的工作。如果说一问题非常大,比说代码长度非常长,一旦出了问题要改动,工程是相当浩大的。而且有这么长的程序,如果做改变,也许其他的每一行代码都要改变。如果我们做的是非常短的设计一旦出现问题的话改动起来也相当的敏捷。还有就是在感情上我们也很容易接纳这观点,就是谁在开发软件过程中是有权利的。尤其是编程管理人员或者说项目的管理人员,他首先是有权利做整体规划的。但是他的工作也是做一个协调的工作,并不是从上到下发布指令的过程。我们现在所做的革命性的工作就是必须要把以前的管理观念做一个改变。也就是在整个软件开发过程中我们必须关注软件开发本身,什么是软件?首先满足客户需求,还有就是上市以后它的走向。

  我们需要的是在整个软件开发过程中所有的参与者,首先客户需求要容纳其中,这是第一要素。然后软件开发者他们的行为也是软件开发过程不可缺少的元素,所以这两者之间必须要有一个很好的沟通而且这种距离要非常接近。我们项目管理人是一个斡旋的过程,这就是我们的软件开发者或者编程人员,他知道客户需要什么,他的目标是必须满足客户的需求和软件的最终效果。当我们这个项目推进到更深层次的时候,事情不会变得更加复杂,我们是更加简化这过程。

Martin Fowler:很多技术人员认为最后就是走向管理,真正做管理的时候就是和技术脱钩,我们要请问真正不做技术了怎么能了解编程的需求呢。所以我们要让软件获得最大的价值就是每一参与的人员都必须要了解软件的本身,尤其是管理层,他必须要非常密切的关注这个软件的走向。这也是我们现在所做的工作,我们要求我们的领导人或者管理人员能够更加有效的管理。而且这种高层如何要获得尊重的话必须要能够有能力领导这个项目小组,这个项目小组所做的工作很大程度是跟技术有关。最重要的就是技术是否有价值,管理层要心知肚明。

Roy Singham:我们为什么要讲敏捷,就是因为Martin Fowler在我们非常艰难的时候给了我们生机。 我们再说一下《敏捷宣言》。

Martin Fowler:《敏捷宣言》发布以后,2001年的时候我做了一次演讲,是一平常的关于敏捷的演讲,之后我得到了很多反馈。我们应该更多的一下敏捷概念可以推广的空间,我遇到的一位女士,她阅读了我的著作,之后她又写了一些文章,之后我们又做了一些沟通和交流。Marry她之前对敏捷不是非常重要的一个角色,她现在非常关注,而且著作颇多。然后我们成了一个敏捷联盟,就是为了能更好的推广敏捷这个概念。

Roy Singham:我也建议大家读一下Marry写的一本书,她主要关注的就是在整个项目运作过程中敏捷概念都是可以得到推广的。尤其是在生产的过程中,在几百年前一个工程学家说如果大批量的生产我们不能有太多的改变。也就是说我们可以精简整个过程中的一些细节,但是这种过程是非常统一的。敏捷可能在其中有可以得到一定的体现,但是在1900年到1940年之间他的概念获得了汽车界的推崇,我们今天的敏捷实际上是把Lean改变成敏捷的方式。我们ThouhtWorks是以人为中心的工作,而不是金字塔型从上到下的阶层的模式。

  Tali主义就是你永远清楚的告诉他们必须要怎么做,他们认为设计构架师是更聪明的。Tali主义的工作就是有效的消除任何的选择,实际工作人他们没有任何选择,Lean它是认为也只是这些实际工作的人在现场才能知道如何改进工作。如果他们有权利修改工作的话大家就会有比较好的反应,这在制造业是这样的。

Martin Fowler:软件行业是非常有创造力非常有智慧性的工作,当然希望编程的这些人有及充分利用改进工作的方式。

Roy Singham:毫无疑问,我们刚才看到了两个人共同工作的展示,有些人说干嘛让两个人做同样的工作,实际上我们有时候还有6-8个人一起工作,墙上有一个信息列表,是信息密集型的他们只管小组的工作,团队人员交流交集比较多这也改变了我们团队的工作方式,也使我们人的大脑聪明智慧能够发挥出来。

  我们再谈一下这个想法对中国有什么益处?你们是不是听过一些轻量型的Java的一些工作。Java在编程上编码都太复杂,我认为应该用轻量型软件设计的方法,这些小的软件包可以使开发者能够更好的适应、了解现状。现在java已经非常复杂了,要想快速编程的话是受到其他的限制的。当你们更加了解敏捷方法论的话可能会意识到这些问题,我认为开放代码的革命对中国是比较担忧的。我5、6年前刚到中国的时候我认为重要是一个非常的国家,会改变我们开源的模式。开放源码的模式不应该仅限于Linux这样的操作系统,我们是支持其他的一些类型各种各样的工具,不能应该限于操作系统。你们作为开发者也应该参与开源项目中,我们ThouhtWorks希望中国的开发者能够更多的参与到软件开发源码的过程中来。

  另外对我们来说现在商界有两个重要的语言一个是Java一个是C#。我们认为有些规则应该更多的使用动态语言,我们现在做的一些工作不仅仅看Java,我们认为如果看一下面向对象程序的起源,实际上许多都是从smalltalk开始做的。过去6个月中我们看到有一些完全有Ruby开发的项目,开发者都认为这个编程比Java更有效率。我们认为今后五年中可能会更多的使用Ruby这样的语言,我认为不可能一个编程不可能解决所有问题。我们应该更重视动态编程的语言。Martin Fowler有一篇关于计算机语言的文章,就是所谓的语言工作台,语言工作台文章中他提到了今后五年的预测,也就是DSL领域专用语言。我们认为Ruby是DSL很好的例子,所以还是要督促大家注意一下Ruby把把作为一个很好的例子考虑一下。同时也获得一种新的编程理念。

  Ruby不仅仅是DSL,它同时也是一个空心化应用,也就是可以用一个框架在上面做应用,这个框架马上可以部署,这对软件的改变是非常重要的。我们认为像DSL发展的方向或者是所谓软件工厂的方向可能会成为5年内软件业发展的方向。

  我们非常关注中国可以提供什么、巴西可以提供什么,印度可以提供什么?中国现在有很好的机遇可以避免我们过去走过的错误的老路。我还是想敦促中国的软件开发群体,不要太过于关注CMM,但是采取CMM在其他国家做的一些人,他们是影响软件开发业的,也没有完全实现他们的承诺。我敦促中国的群体不要把CMM软件方法作为软件开发关键的方法。同时应该关注敏捷和轻量型软件开发的方式。中国的软件群体可能还没有得到大家的重视,中国要想成为一个软件重要国,我们软件开发人员必须多少社会群体的尊重。现在我们应该进一步改善软件从业人员的地位。也就是你们不应该成为软件流程的最底端,而应该成为一个平等软件开发的群体。我认为这是中国前进的方向。

  在社会方面来看你们这一代中国人对世界其他各国来说都有重要的责任,中国毫无疑问会成为未来经济的强国。至少在今后15年到200年中很可能会超过美国。作为你们这一代中国人你们是引领世界经济秩序新变革的一代人,我对你们充满乐观的期待。你们作为软件从业者应该参与软件思想的过程中,你们不应该仅仅为中国做贡献,也应该做世界做贡献。我是在美国长大的,对我们美国政府也不是特别的骄傲,美国政府有一些事情我现在并不相信,也无益于世界的和平。中国是我的老朋友,中国长期以来都是一个和谐的国家,所以我也希望中国能更多的参与国际事物作为核心和创新的源泉。

  非常感谢大家听我的发言,今天非常荣幸能够参加开发者大会。

发表评论 0条】
其他文章
相关文章
最近评论
正在载入评论列表...
热点评论

     
    网站简介广告服务网站地图帮助联系方式诚聘英才English问题报告
    北京百联美达美数码科技有限公司  版权所有  京 ICP 证 020026 号
    Copyright © 2000-2006, CSDN.NET, All Rights Reserved