軟件開發(fā)教父與國(guó)內(nèi)高手論道實(shí)錄全文

2010-08-28 10:46:49來(lái)源:西部e網(wǎng)作者:

  2005年6月,來(lái)自信息產(chǎn)業(yè)部、北京市科委、中國(guó)軟件行業(yè)協(xié)會(huì)的領(lǐng)導(dǎo),北大、北郵軟件學(xué)院的院長(zhǎng)們齊聚一堂,和世界五大軟件開發(fā)教父之一的matin(馬丁-福勒)先生一起,就目前西方軟件開發(fā)領(lǐng)域的新趨勢(shì),以及其在中國(guó)的應(yīng)用展開了熱烈的討論。

  以下為本次會(huì)議文字實(shí)錄全文:
 
  主持人:

  首先感謝大家來(lái)參加這次由賽迪集團(tuán)協(xié)助,ThoughtWorks公司主辦的軟件開發(fā)模式研討會(huì),我是ThoughtWorks公司在中國(guó)的副總經(jīng)理,我是郭曉。今天我們研討的主題是成熟應(yīng)用、敏捷開發(fā)。我們都知道中國(guó)市場(chǎng)是現(xiàn)在世界上變化最快、增長(zhǎng)最快的市場(chǎng)。在這種情況下軟件市場(chǎng)也有對(duì)適應(yīng)迅速變化的要求。這面臨著挑戰(zhàn),開發(fā)成本太高,需求變化又頻繁,如何在這種情況下提高軟件的質(zhì)量,做不到這點(diǎn)會(huì)影響軟件業(yè)本身的發(fā)展,如果大家找到一個(gè)很好的辦法解決這個(gè)問(wèn)題,無(wú)論對(duì)用戶還是軟件企業(yè)都是很好的事。今天我們?nèi)菪业卣?qǐng)到了世界上最有名的五大軟件開發(fā)專家之一馬丁.福勒先生,給我們分享一下西方軟件發(fā)展趨勢(shì)。同時(shí)邀請(qǐng)到了中國(guó)軟件協(xié)會(huì)陳沖理事長(zhǎng)、科技部火炬中心軟件處李冰副處長(zhǎng)、北大軟件學(xué)院的陳鐘院長(zhǎng),北郵軟件學(xué)院的宋茂強(qiáng)院長(zhǎng)、北航軟件學(xué)院的原倉(cāng)周博士、中國(guó)計(jì)算機(jī)報(bào)的高級(jí)副總編郭曉女士,CCID的曹方博士和顧建萍處長(zhǎng)。

  下面首先請(qǐng)Martin Fowler和Sidney G.Pinney簡(jiǎn)單介紹一下我們公司。

  Sidney G.Pinney:

  首先非常感謝大家,今天非常容幸有機(jī)會(huì)和大家見面。我的名字是Sidney G.Pinney,我是思特沃克中國(guó)公司的總經(jīng)理。主要是兩件事,首先我想簡(jiǎn)單介紹一下ThoughtWorks公司,接下來(lái)會(huì)介紹一下馬丁.福勒過(guò)去所做的事情,便于大家的了解。

  ThoughtWorks公司成立于1993,公司唯一的目標(biāo)就是創(chuàng)建具有創(chuàng)新性的、實(shí)用的定制軟件,同時(shí)我們也希望能夠成為世界上所有對(duì)軟件有興趣的人才最向往的公司之一。我們主要是做三件工作,第一是咨詢類,客戶主要是全球一千家大公司,給他們做一些架構(gòu)分析、方法研究等等方面的工作。另外一些主要的工作是幫助其他公司在內(nèi)部實(shí)現(xiàn)敏捷開發(fā)的方式,斯坦福大學(xué)最近想進(jìn)行敏捷開發(fā)就找到我們公司幫助他們做這件事。最后是我們公司最主要的業(yè)務(wù),就是軟件開發(fā)本身,我們通過(guò)敏捷開發(fā)的辦法可以在最少的時(shí)間里,用最小的努力,把最高質(zhì)量的軟件交付給客戶。我們今天有幸請(qǐng)到了馬丁.福勒先生就我們最主要的題目跟大家探討一下敏捷開發(fā)方面的問(wèn)題。

  雖然我們公司很小,但在世界范圍內(nèi)知名很高,一些世界知名咨詢公司經(jīng)常把我們一些大公司進(jìn)行比較,我們過(guò)去的增長(zhǎng)在50%以上,過(guò)去兩年我們公司增長(zhǎng)了兩倍。我們公司的總部原來(lái)在芝加哥,陸續(xù)在澳大利亞、加拿大、英國(guó)、印度、中國(guó)開設(shè)了分公司。我們公司有很多軟件開發(fā)人員,馬丁.福勒先生是我們最優(yōu)秀的開發(fā)人員之一,稍候他也會(huì)做主題發(fā)言。

  大家經(jīng)常會(huì)問(wèn)我兩個(gè)問(wèn)題,我提前回答一下。一是為什么選擇進(jìn)入中國(guó)?二是為什么選擇現(xiàn)在這個(gè)時(shí)機(jī)。我們認(rèn)為中國(guó)現(xiàn)在正處于軟件開發(fā)歷史上非常有意思的十字路口上。我們公司定位于以全球?yàn)榛A(chǔ)的高端軟件交付公司。我們這種敏捷式的開發(fā)方法,對(duì)中國(guó)現(xiàn)在來(lái)說(shuō)可以非常有效解決現(xiàn)在面臨的很多問(wèn)題,可以以很小的代價(jià)快速開發(fā)出高質(zhì)量的軟件,這也是我們現(xiàn)在選擇中國(guó)作為投資方向的原因。中國(guó)人非常聰明,目標(biāo)高遠(yuǎn),有開放性的思想,這個(gè)時(shí)候把我們公司的產(chǎn)品帶進(jìn)來(lái),會(huì)有非常好的成果。非常有機(jī)會(huì)來(lái)到這里跟大家交流,希望馬丁.福勒先生把敏捷開發(fā)這個(gè)觀點(diǎn)給大家解釋一下,看看對(duì)中國(guó)軟件開發(fā)有什么好處。

  我知道你們今天不是來(lái)看我的,而是聽馬丁.福勒演講。很容幸我跟馬丁.福勒先生有六年的合作時(shí)間,很多人都有這個(gè)問(wèn)題,馬丁.福勒先生在公司具體做什么工作。可以說(shuō)馬丁.福勒先生給我們公司產(chǎn)生的影響是所有人中最大的,他把很多非常聰明的軟件人才吸引到公司,建立了一個(gè)合作又充滿競(jìng)爭(zhēng)的環(huán)境。

  下面我簡(jiǎn)單介紹一下馬丁.福勒先生最近的成果。首先馬丁.福勒先生在面向?qū)ο蠹夹g(shù)領(lǐng)域是世界上知名的科學(xué)家之一,他是世界上面向?qū)ο蠹夹g(shù)、軟件模式、UML架構(gòu)構(gòu)件語(yǔ)言、重構(gòu)以及敏捷式軟件開發(fā)這幾方面大家公認(rèn)的領(lǐng)導(dǎo)者之一,同時(shí)馬丁是很多知名IT業(yè)雜志的編委。馬丁是模式領(lǐng)域的主要科學(xué)家,主要研究方向是企業(yè)應(yīng)用及架構(gòu)方面。在敏捷式開發(fā)、極限編程等方面是最具影響力的專家之一,敏捷式開發(fā)有一個(gè)敏捷開發(fā)宣言,他是當(dāng)時(shí)提出這個(gè)宣言的幾位科學(xué)家之一,是敏捷聯(lián)盟組織的創(chuàng)始者和主持者之一。在很多場(chǎng)合做過(guò)各種演講,各種會(huì)議都希望可以請(qǐng)他來(lái)做主題演講。今年晚些時(shí)候他會(huì)在“面向技術(shù)”的大會(huì)上做一個(gè)主題演講。

  簡(jiǎn)單介紹一下馬丁.福勒出過(guò)的書和文章

  《分析模式》、與人合著的《計(jì)劃極限編程》

  另外《分析和比較分析面向?qū)ο蟆穼?duì)面向技術(shù)設(shè)計(jì)理念進(jìn)行綜合總結(jié)。

  《UML提煉》,是第一本描述UML語(yǔ)言的一本書。

  寫過(guò)《重構(gòu)》這個(gè)技術(shù)是馬丁.福勒先生提出的,對(duì)于軟件業(yè)尤其是軟件開發(fā)方面產(chǎn)生了很大的影響。最近寫了一本書叫做企業(yè)級(jí)應(yīng)用架構(gòu)模式》。去年被Serve .COM網(wǎng)站把馬丁.福勒先生評(píng)為“方片尖”,他同時(shí)也為微軟做了一些工作,是微軟架構(gòu)委員會(huì)的成員之一。此類介紹再說(shuō)幾個(gè)小時(shí)也沒有問(wèn)題,馬丁先生在過(guò)去幾年為我們公司的發(fā)展做出了巨大的貢獻(xiàn),今天很容幸請(qǐng)到馬丁.福勒先生跟大家交流,包括西方軟件開發(fā)方面的經(jīng)驗(yàn)。我們非常容幸可以請(qǐng)到各位、專家領(lǐng)導(dǎo)來(lái)到會(huì)場(chǎng),希望可以共同分享我們所想到的西方的經(jīng)驗(yàn)?zāi)軐?duì)中國(guó)帶來(lái)的好處和影響。

  謝謝大家!

  Martin Fowler:

  可能Sidney先生把我說(shuō)得太好了,我有點(diǎn)不敢當(dāng)了。如果大家感到失望的話,請(qǐng)?jiān)徫。我今天想把主要的精力放在探討敏捷式開發(fā)方面。

  軟件開發(fā)行業(yè)目前同時(shí)存在兩種情況,它既是一個(gè)非常成功的又是具有很多問(wèn)題的行業(yè)。一方面軟件已變成我們?cè)谌粘I钪胁豢扇鄙俚牟糠帧S行┛赡懿皇欠浅C黠@,直至有問(wèn)題出現(xiàn)的時(shí)候才發(fā)現(xiàn)。一個(gè)非常有名的例子就是幾年前有家航空公司的計(jì)算機(jī)系統(tǒng)有一天不能正常工作,結(jié)果造成了很大的混亂和巨大的經(jīng)濟(jì)損失。我并不是要仔細(xì)分析問(wèn)題的所在,只是想指出軟件在各個(gè)行業(yè)中扮演的角色越來(lái)越重要,互聯(lián)網(wǎng)的使用已極大地改變了人們的生活、工作方式。在西方,普通客戶購(gòu)買東西的過(guò)程中,經(jīng)常把決策的過(guò)程使用在互聯(lián)網(wǎng)上。所有這些軟件所帶來(lái)的影響,對(duì)于三、四十年前的人來(lái)說(shuō)幾乎是不可想象的。

  盡管有成功的方面,但軟件開發(fā)過(guò)程中還是經(jīng)常會(huì)遇到一些問(wèn)題,很多企業(yè)在軟件方面花了大量的金錢和經(jīng)歷,但并不是很清楚軟件到底能給他們帶來(lái)什么。一些調(diào)查發(fā)現(xiàn)世界上很多軟件項(xiàng)目其實(shí)都失敗了,也許這是因?yàn)樵谲浖_發(fā)過(guò)程中,很難定義成功與失敗這兩個(gè)不同的概念。我們?cè)谲浖缇褪亲⒅卦趺搭A(yù)見軟件開發(fā)的不可預(yù)知性,我們想象出了各種各樣的技術(shù)、工具以及流程使得軟件開發(fā)的過(guò)程變得越來(lái)越可以控制、預(yù)測(cè)。這種方法有一個(gè)很大的問(wèn)題就是無(wú)法有效評(píng)估軟件開發(fā)過(guò)程的有效性。在很多其他的產(chǎn)業(yè)界,可以用簡(jiǎn)單的辦法評(píng)價(jià)過(guò)程的進(jìn)程及有效性,但是對(duì)于軟件開發(fā)過(guò)程,很難用一種標(biāo)準(zhǔn)來(lái)衡量它的進(jìn)度和有效性。一個(gè)結(jié)果就是很難有效判斷兩種有效的方法哪種更好,使得軟件技術(shù)、工具以及流程方面的很多討論都被這種現(xiàn)象所左右。軟件開發(fā)的過(guò)程中有各種問(wèn)題,并不是新提出的概念。在六十年代末期的時(shí)候北約一個(gè)軟件開發(fā)室提出了軟件危機(jī)的概念,因此他們提出了非常有紀(jì)律性的方法即軟件工程學(xué),試圖從電子工程學(xué)、技術(shù)工程學(xué)提煉出一些東西來(lái)用于軟件工程學(xué),他們想從中提煉出一種方法,使得軟件開發(fā)的流程更有預(yù)測(cè)性。過(guò)去三、四年間這種工程學(xué)的方法一直為大家普遍使用。但軟件業(yè)的人在做軟件的過(guò)程中發(fā)現(xiàn)這些方法并沒有減少軟件開發(fā)過(guò)程中遇到的問(wèn)題,對(duì)于這種現(xiàn)象有很多解釋。近年來(lái)有人發(fā)現(xiàn)軟件工程學(xué)里一些基本的假設(shè)是不正確的,并使用了一些新的開發(fā)方法,我們將其統(tǒng)稱為敏捷式開發(fā)。

  敏捷式開發(fā)有很多特色,今天我主要集中介紹兩方面的特色,我會(huì)重點(diǎn)介紹一下它就軟件開發(fā)文化有什么樣的影響。前不久我在我的網(wǎng)頁(yè)上發(fā)表了一篇文章“新方法”解釋我對(duì)敏捷式開發(fā)的看法。下面我介紹一下敏捷式開發(fā)與傳統(tǒng)開發(fā)相比最具特色的兩點(diǎn)。

  敏捷式開發(fā)采用適應(yīng)性方法,而傳統(tǒng)的軟件工程學(xué)采用的是預(yù)測(cè)性方法。敏捷式開發(fā)是以人為主的,而傳統(tǒng)的工程學(xué)是以過(guò)程為主的。我下面詳細(xì)地介紹這兩方面:

  適應(yīng)性和預(yù)測(cè)性的區(qū)別存在于軟件工程學(xué)對(duì)軟件開發(fā)過(guò)程的描述中。在傳統(tǒng)的工程學(xué)里,核心的概念就是把設(shè)計(jì)和構(gòu)建這兩個(gè)過(guò)程分開進(jìn)行。最開始一個(gè)階段叫設(shè)計(jì)階段,在這個(gè)階段所有跟軟件設(shè)計(jì)相關(guān)的重要決定就已做出了,而且以完整的形式描述出來(lái)。這項(xiàng)工作通常是由一小部分非常專業(yè)的人來(lái)做的,而且他們所花的時(shí)間和精力在整個(gè)項(xiàng)目中占著很小的一部分。這項(xiàng)工作完成以后,這些設(shè)計(jì)的結(jié)果,從建筑學(xué)的角度就被“建筑公司”拿去,按照設(shè)計(jì)的結(jié)果一步步構(gòu)建。在描述清晰的設(shè)計(jì)圖紙的基礎(chǔ)上,你就可以據(jù)此對(duì)構(gòu)建過(guò)程進(jìn)行詳細(xì)的規(guī)劃,并進(jìn)行成本的預(yù)測(cè)。但是現(xiàn)在大家對(duì)這種過(guò)程是否非常適合軟件開發(fā)行業(yè)存在著爭(zhēng)議。這里經(jīng)常會(huì)問(wèn)到一個(gè)問(wèn)題,就是這個(gè)過(guò)程要花多長(zhǎng)時(shí)間,對(duì)于這個(gè)問(wèn)題有各種不同的回答。在傳統(tǒng)的工程學(xué)中設(shè)計(jì)過(guò)程在整個(gè)項(xiàng)目開發(fā)過(guò)程中只占10%左右的時(shí)間,但是很多軟件開發(fā)權(quán)威機(jī)構(gòu)都認(rèn)為軟件設(shè)計(jì)過(guò)程在整個(gè)開發(fā)過(guò)程中占百分之四、五十的時(shí)間,它明顯告訴我們這里有些東西是不對(duì)的。在軟件開發(fā)的過(guò)程中,我們很難想象,如何真正把設(shè)計(jì)和編程完全區(qū)分過(guò)來(lái)。軟件工程學(xué)領(lǐng)域,所有在這里從事工作的人員,都把設(shè)計(jì)的過(guò)程想象成用圖表、圖象的方式來(lái)描述結(jié)果的過(guò)程。很多人都有這樣的經(jīng)驗(yàn),沒有經(jīng)過(guò)編程而是直接想象出的設(shè)計(jì),在進(jìn)入編程階段有很多地方是錯(cuò)誤的,需要改正。而且從我的觀點(diǎn)來(lái)看,幾乎沒辦法進(jìn)行有效的設(shè)計(jì)。還有一個(gè)更重要的問(wèn)題就是說(shuō),軟件本身的需求是在變化的。一個(gè)項(xiàng)目在開發(fā)過(guò)程中需求會(huì)出現(xiàn)變化,需求的變化從根本上推翻了工程學(xué)方法所建立的一個(gè)基礎(chǔ)。當(dāng)工程學(xué)的人盡量減少或者控制系統(tǒng)將來(lái)發(fā)生變化的可能,他越這樣做問(wèn)題就越容易出現(xiàn)。既然我們沒辦法避免變化的發(fā)生,那么我們就想找到一種新的方法能夠更有效地適應(yīng)這種變化現(xiàn)象。這也就是敏捷式開發(fā)方法所要達(dá)到的效果。

  最開始的時(shí)候,軟件開發(fā)的過(guò)程,我們應(yīng)該想到軟件開發(fā)和其他的工程學(xué)是完全不同的學(xué)科。首先我們想象一種疊蓋式、循序漸進(jìn)的軟件開發(fā)方法。軟件的構(gòu)建過(guò)程中是以小量的疊蓋過(guò)程增加,而在這個(gè)過(guò)程中軟件一直處于可使用狀態(tài)。我們ThoughtWorks在軟件開發(fā)的過(guò)程中每?jī)芍芏紩?huì)得到一個(gè)可以工作的軟件。這種非常短的循環(huán),使終端客戶可以及時(shí)、快速地看到他們花錢構(gòu)建的軟件是一個(gè)什么樣的結(jié)果。使得客戶可以更有效地參與到軟件開發(fā)的過(guò)程中來(lái)。這同時(shí)也解決了軟件開發(fā)中非常重要的問(wèn)題,就是開發(fā)人員和終端客戶交流的問(wèn)題。這也使得軟件開發(fā)本身可以更有效地適應(yīng)業(yè)務(wù)本身需求的變化。對(duì)于一個(gè)發(fā)展變化非?斓膰(guó)家,比如中國(guó)這種方法的好處是顯而易見的。這個(gè)方法從理論上講并非更簡(jiǎn)單,需要在實(shí)踐的過(guò)程中學(xué)習(xí)如何使用疊蓋式的開發(fā)。這種東西就是當(dāng)你真正學(xué)會(huì)如何使用疊蓋式開發(fā)的時(shí)候,才能發(fā)現(xiàn)它真正能帶來(lái)的好處。如果真正在軟件開發(fā)過(guò)程中實(shí)現(xiàn)疊蓋式的開發(fā),同時(shí)需要軟件行業(yè)本身,以及業(yè)務(wù)部門本身共同的努力。如果可以實(shí)現(xiàn)軟件開發(fā)部門和業(yè)務(wù)部門的緊密合作,本身就可以避免西方軟件業(yè)發(fā)展過(guò)去所犯下的一些錯(cuò)誤。另外一方面敏捷式開發(fā)是以人為核心的方法,而不是像過(guò)去工程學(xué)是以過(guò)程為核心的方法。這種現(xiàn)象是過(guò)去一些人專門研究軟件開發(fā)的過(guò)程專門有一些實(shí)踐。經(jīng)常發(fā)現(xiàn)一個(gè)現(xiàn)象,軟件項(xiàng)目開發(fā)的成功最核心的因素是這個(gè)軟件團(tuán)隊(duì)里有非常優(yōu)秀的人才的協(xié)作。這既意味著團(tuán)隊(duì)中有非常優(yōu)秀的個(gè)人,又意味著團(tuán)隊(duì)中的人能有效地進(jìn)行協(xié)作。這種協(xié)作方式通常情況下是跟這些人如何處理他們之間的關(guān)系有關(guān)而不是采用什么樣的過(guò)程。工程學(xué)當(dāng)中他們所采用的過(guò)程是盡量減少人在這個(gè)過(guò)程中所扮演的角色。在敏捷式開發(fā)中,提出的觀點(diǎn)就是人在整個(gè)軟件開發(fā)當(dāng)中是最重要的因素,至于在這個(gè)開發(fā)過(guò)程中使用什么樣的方法是次要的因素。這對(duì)于軟件開發(fā)文化來(lái)說(shuō)意味著什么呢?首先它意味著在提高軟件開發(fā)效能中最重要的一點(diǎn)就是如何提高個(gè)人的能力,其中教育扮演著非常重要的角色。這也同時(shí)意味著軟件開發(fā)團(tuán)隊(duì)在這個(gè)過(guò)程中是被如何對(duì)待的。很重要的一件事是如何為軟件開發(fā)人員提供一個(gè)有效的環(huán)境,讓他們?yōu)檐浖_發(fā)行業(yè)做出最大的、有效的貢獻(xiàn)。而且還要提供這種環(huán)境使軟件開發(fā)人員與終端客戶進(jìn)行有效的交流、合作。

  我在ThoughtWorks工作發(fā)現(xiàn)這種方式可以造就一種特別的企業(yè)文化,在西方擅長(zhǎng)軟件開發(fā)的人員往往都是一些怪才,這些人是真正喜歡軟件、喜歡編程的。他與其他的人往往有不同的想法和對(duì)生活的追求,很多程序開發(fā)人員和客戶進(jìn)行交流過(guò)程中,遇到的困難真正的核心所在就是文化上的差異。我不知道這種文化上的差異在中國(guó)是否也出現(xiàn),在印度已出現(xiàn)了這種情況。非常重要的一點(diǎn)就是認(rèn)識(shí)到軟件開發(fā)人員和終端客戶之間交流問(wèn)題的所在。就像剛剛提到的,沒有一個(gè)真正可以衡量到底不同的軟件開發(fā)方法哪種好、哪種不好。這就是因?yàn)槲覀儾荒芊浅S行У,以一個(gè)非常公正的標(biāo)準(zhǔn)來(lái)衡量軟件開發(fā)哪個(gè)更有效。包括我在內(nèi),從事敏捷開發(fā)的人員,會(huì)發(fā)現(xiàn)在軟件開發(fā)過(guò)程中敏捷開發(fā)是非常有效的方法。西方軟件業(yè)敏捷開發(fā)還是非常少數(shù)的團(tuán)隊(duì),但其增長(zhǎng)速度非常快。

  我們希望在新的軟件開發(fā)環(huán)境里,這種新的方法可能有更快的增長(zhǎng)。如果能在軟件開發(fā)過(guò)程中有效地避免開發(fā)客戶和開發(fā)團(tuán)隊(duì)交流的問(wèn)題,那么你就可以避免很多在西方軟件開發(fā)中遇到的各種問(wèn)題,當(dāng)然同時(shí)也會(huì)發(fā)現(xiàn)一些其他新的問(wèn)題。

  我就簡(jiǎn)單介紹到這里,下面跟各位領(lǐng)導(dǎo)、專家進(jìn)行討論。

  (討論階段)

  陳鐘:

  馬丁做了一個(gè)精采的報(bào)告。在中國(guó)軟件發(fā)展階段,引起了全球各行各業(yè)的矚目,包括全球軟件業(yè)的一些方法,以及軟件公司的發(fā)明人、創(chuàng)始人、傳播人都紛至沓來(lái)。在最近不到一年的時(shí)間里,包括馬丁在內(nèi),一些世界級(jí)的大師我都有機(jī)會(huì)見到。今年國(guó)際軟件工程大會(huì)已開了29屆,從95年我們就開始參加這個(gè)會(huì)議,十年間我們討論的問(wèn)題,短短的一年內(nèi)很多大師紛紛來(lái)到中國(guó),中國(guó)企業(yè)級(jí)人士也逐步關(guān)注、參與進(jìn)來(lái)。大家經(jīng)常提到高長(zhǎng)難問(wèn)題,軟件開發(fā)難度高、研制周期長(zhǎng),周期性難保證。現(xiàn)在講軟件工程的時(shí)候,大家也面對(duì)這個(gè)問(wèn)題,剛剛馬丁也提到這樣的問(wèn)題,我們現(xiàn)在有大量成功的案例,也有大量失敗的案例,不斷出于新需求的發(fā)展、出于技術(shù)的進(jìn)步,出于改善陷在改進(jìn)我們?cè)械南到y(tǒng),F(xiàn)在軟件工程要由手工作坊式變成工業(yè)化的方式生產(chǎn)。

  馬丁剛剛講敏捷式開發(fā)更注重人,這對(duì)傳統(tǒng)工程學(xué)是一種叛逆,從個(gè)人角度我是贊同的,但這里又有一些困惑,成功、偉大的軟件總是有一個(gè)偉大的設(shè)計(jì)師?梢耘e出很多的例子,包括應(yīng)用軟件、定制軟件開發(fā),很難相信一個(gè)沒有經(jīng)驗(yàn)的人可以一下做成。一個(gè)成功的軟件跟一個(gè)優(yōu)秀的軟件設(shè)計(jì)者是聯(lián)系在一起的。但軟件工程學(xué)確實(shí)有很多原理要告訴大家,做軟件不是很隨意的。前面設(shè)計(jì)上的一點(diǎn)點(diǎn)缺陷,就可能帶來(lái)今后非常大的損失,有很多被驗(yàn)證過(guò)的軟件工程的原理。那么到底軟件的構(gòu)造是藝術(shù)還是工程?馬丁也講到了人非常重要,教育體系也是非常重要的,那么這個(gè)過(guò)程中是教大家把它作為藝術(shù)看待,還是把它作為工程來(lái)看待。希望馬丁就這個(gè)問(wèn)題再深入闡述一下他的觀點(diǎn)。

  馬丁.福勒:

  首先我同意在軟件開發(fā)過(guò)程中軟件設(shè)計(jì)過(guò)程是非常核心的部分,敏捷開發(fā)社區(qū)當(dāng)中的所有人都同意這個(gè)觀點(diǎn)!睹艚菪浴分杏惺䝼(gè)基本點(diǎn),這個(gè)觀點(diǎn)是其中之一。有一個(gè)最核心的問(wèn)題,就是到底設(shè)計(jì)要和編程同時(shí)進(jìn)行。這也是我的觀點(diǎn),也是很多其他人的觀點(diǎn),就是兩者是結(jié)合在一起的。對(duì)設(shè)計(jì)活動(dòng)本身有一些不同的觀點(diǎn),比如說(shuō)敏捷開發(fā)人員他們認(rèn)為設(shè)計(jì)是不斷進(jìn)行的一項(xiàng)活動(dòng),這就使得我本身受到了很多影響。我把注意力放在重構(gòu)概念上,是因?yàn)槲艺J(rèn)為軟件設(shè)計(jì)是在編程進(jìn)行到一定程度后然后再進(jìn)行設(shè)計(jì)活動(dòng),這也是從事敏捷開發(fā)人員所關(guān)注的一點(diǎn),想開發(fā)出這種技術(shù),讓設(shè)計(jì)概念能夠不斷演變。在不同的技術(shù)中最核心的一點(diǎn)就是測(cè)試概念,這是從極限編程中提煉出來(lái)的概念。很多從事極限編程人員,發(fā)現(xiàn)在實(shí)際的操作中概念測(cè)試系統(tǒng)開發(fā)使得系統(tǒng)的設(shè)計(jì)可以不斷演變,在這個(gè)過(guò)程中扮演了很重要的角色,這也是我們ThoughtWorks內(nèi)部開發(fā)軟件過(guò)程中所發(fā)現(xiàn)的一點(diǎn)。如果說(shuō)從哲學(xué)的角度上講,到底軟件設(shè)計(jì)是藝術(shù)還是一項(xiàng)工程呢?我很難清晰地說(shuō)都是或者都不是。我已經(jīng)參與過(guò)很多類似的爭(zhēng)論,到底用什么樣的比喻來(lái)形容軟件開發(fā)。也許我們要用一種比喻的方式形容軟件開發(fā),而把軟件開發(fā)本身當(dāng)做一個(gè)獨(dú)立的東西來(lái)對(duì)待。

  陳鐘:

  馬丁在報(bào)告中多次提到“變化”,而且他也講到與其說(shuō)我們不能夠保證他不變,我們應(yīng)該找到一個(gè)方法去適應(yīng)這個(gè)變化。實(shí)際上這個(gè)變化確實(shí)使得我們現(xiàn)在這個(gè)世界非常豐富多彩,所以我們希望變化。但是控制變化無(wú)論是從工程學(xué)還是藝術(shù)角度講都是非常重要的。馬丁也提到開發(fā)人員跟用戶的溝通有很多方面與變化管理相關(guān)。我還想問(wèn)馬丁一個(gè)哲學(xué)問(wèn)題,世界在變,不同的方法學(xué)也在變,到底有什么是不變的,讓軟件從業(yè)人員活得越老位有價(jià)值。而不是五年、十年以后,什么東西一變,他就完全沒有價(jià)值了。讓教育系統(tǒng)發(fā)揮作用,只要教他一個(gè)什么東西,他以后就越來(lái)越有價(jià)值,薪水也越來(lái)越高。

  馬丁.福勒:

  我上個(gè)星期在西安做演講的時(shí)候,有一個(gè)西安交大的學(xué)生就問(wèn)到一個(gè)類似的問(wèn)題。當(dāng)時(shí)我做了一個(gè)類似的回答,對(duì)學(xué)生來(lái)講,教給他們最重要的東西就是從業(yè)生涯中要不斷地學(xué)習(xí)。教給學(xué)生怎么真正地掌握這些變化的核心因素所在,使得學(xué)生可以有效地根據(jù)變化利用新的技術(shù)做這些事。我不知道怎樣解釋,變化是一個(gè)絕對(duì)的過(guò)程,但是這個(gè)問(wèn)題我非常有興趣,因?yàn)槲易龅乃泄ぷ髦泻苤匾囊稽c(diǎn)就是在變化中找到一些部變的東西。我做這件事是出于一種非常自私的原因,因?yàn)樽鳛樽髡,我希望自己寫的書可以長(zhǎng)時(shí)間熱銷。這也就是我為什么集中精力做一些設(shè)計(jì)模式方面的工作,把設(shè)計(jì)當(dāng)中的一些概念以模式的方式提煉出來(lái),這些模式可以運(yùn)用于不同的編程語(yǔ)言中。這也就是我為什么也在尋找設(shè)計(jì)的方法,使得它能夠在不同的技術(shù)環(huán)境下重復(fù)使用。比如我個(gè)人認(rèn)為面向?qū)ο笤O(shè)計(jì)技術(shù)在軟件界很長(zhǎng)時(shí)間內(nèi)將會(huì)處于核心位置,測(cè)試開發(fā)技術(shù)也將在很長(zhǎng)時(shí)間內(nèi)存在。對(duì)學(xué)生來(lái)說(shuō)很重要的是讓學(xué)生經(jīng)歷各種各樣不同的技術(shù)。比如在敏捷開發(fā)過(guò)程中,人是第一位的,過(guò)程是第二位的,所以作為一個(gè)個(gè)人來(lái)說(shuō),應(yīng)該可以找到各種不同的過(guò)程,找到真正適合自己的過(guò)程。因?yàn)槲覀儧]有非?陀^的對(duì)軟件開發(fā)有效性進(jìn)行衡量的標(biāo)準(zhǔn),只能是遵循軟件開發(fā)人員認(rèn)為最有效的方法。比如對(duì)學(xué)生來(lái)說(shuō)很重要的一項(xiàng)技能,就是快速、有效地測(cè)試、評(píng)估各種不同的方法,從而找到最適合自己的方法。

  陳鐘:

  我第三個(gè)問(wèn)題是敏捷開發(fā)現(xiàn)在還是“少數(shù)民族”,盡管在教學(xué)中分配了一定的時(shí)間向?qū)W生介紹這種方法的存在,但尚未形成系統(tǒng)教育。在大家用得不夠普遍的情況下,馬丁說(shuō)這個(gè)方法非常有效,但對(duì)方法度量沒有客觀標(biāo)準(zhǔn),你希望更多人采用敏捷開發(fā)的方法,要采用什么方式來(lái)說(shuō)明其有效性?把這個(gè)方法用好,把軟件開發(fā)做得很好,與人的關(guān)系是很大的。我們知道在傳統(tǒng)的軟件工程領(lǐng)域中,我們也會(huì)注意到一個(gè)人生產(chǎn)率的高低跟它的一些素質(zhì)、背景有很大的關(guān)系。敏捷開發(fā)方法掌握與否是否也跟個(gè)人的個(gè)性和生產(chǎn)力有很大的關(guān)系?在這種情況下,馬丁是什么樣的觀點(diǎn)?一個(gè)人是否適合掌握這種方法,是否適合做軟件開發(fā),是否可以通過(guò)他的IQ或EQ值告訴他一輩子做軟件或者說(shuō)你不適合你就別做了。

  馬丁.福勒:

  先討論第一個(gè)問(wèn)題,就是如何說(shuō)服其他人敏捷開發(fā)是一種有效的方法,在軟件開發(fā)過(guò)程中沒辦法絕對(duì)地判斷一個(gè)方法比另一個(gè)方法好,就是因?yàn)槲覀儧]辦法有效測(cè)量軟件開發(fā)本身,只能依賴我這樣的人,從我主管的角度來(lái)說(shuō)這個(gè)方法好在哪里。我說(shuō)的東西跟他們經(jīng)歷的經(jīng)驗(yàn)有類似的地方。有些人可能會(huì)對(duì)我剛剛說(shuō)的一些想法有興趣,想去試試,這就是方法傳播的過(guò)程。我們看極限編程發(fā)展的過(guò)程,在最開始的時(shí)候是兩個(gè)人在描述他們的一些心得和經(jīng)驗(yàn),有些人看了這些東西發(fā)現(xiàn)這些想法有道理,就逐漸嘗試他們介紹的東西。當(dāng)然并非所有嘗試的人都成功了,但成功的那些人就會(huì)把自己的心得和體驗(yàn)介紹給其他人。這種傳播方法乍一聽可能很遺憾,如果有一種客觀的測(cè)量方法當(dāng)然更好。但我們必須意識(shí)到軟件開發(fā)過(guò)程是很獨(dú)特的,軟件并不是唯一一個(gè)難以用絕對(duì)方式測(cè)量的行業(yè),商業(yè)、教育業(yè)都面臨同樣的問(wèn)題。在其他行業(yè)即使沒有一個(gè)客觀的衡量標(biāo)準(zhǔn),人類在這方面也有很大的進(jìn)步。當(dāng)然這不及有一個(gè)客觀、有效的測(cè)量方法好,但并不意味著沒有一個(gè)良好的發(fā)展方向。怎么衡量作為一個(gè)個(gè)人是否適合軟件開發(fā),我可以簡(jiǎn)單介紹一下ThoughtWorks公司是怎么做這件事的。我們將其作為業(yè)務(wù)衡量中非常重要的過(guò)程,我們從不同的角度和層次來(lái)衡量個(gè)人軟件開發(fā)的能力。首先就是看他們是怎樣編程。我們也通過(guò)其他的測(cè)試方法測(cè)試他們的邏輯能力以及其他方面的能力。還有很重要的一點(diǎn)就是測(cè)試、衡量他們與其他同事進(jìn)行合作的能力。在軟件開發(fā)行業(yè)中,非常重要的能力就是怎樣在一個(gè)團(tuán)隊(duì)中與其他人進(jìn)行協(xié)作。這既意味著與其他技術(shù)人員進(jìn)行合作也意味著與終端客戶進(jìn)行合作。對(duì)于新來(lái)到這個(gè)環(huán)境中的人,很難對(duì)他做出一個(gè)非常正確、客觀的評(píng)價(jià),就像我們做其他事一樣,我們盡最大的努力去做。至少?gòu)哪壳暗慕Y(jié)果來(lái)看,公司里的人大部分是符合軟件開發(fā)過(guò)程的人。我擔(dān)心的是沒有進(jìn)入到我們公司的其他人其實(shí)也可以進(jìn)行有效的軟件開發(fā)的。一個(gè)非常有意思的現(xiàn)象,計(jì)算機(jī)專業(yè)背景對(duì)于軟件開發(fā)人員來(lái)說(shuō)并不是非常重要的環(huán)節(jié)。我們公司最高層的開發(fā)人員都是其他學(xué)科的背景,像郭曉過(guò)去在北大學(xué)的是化學(xué)而不是計(jì)算機(jī)。最終的衡量方法是看一個(gè)人在一個(gè)項(xiàng)目上的開發(fā)過(guò)程是如何進(jìn)行的。

  陳沖:

  什么方法對(duì)我們的軟件開發(fā)更便捷?中國(guó)應(yīng)用敏捷開發(fā)的時(shí)機(jī)是否成熟?下一步軟件開發(fā)會(huì)往什么方向走?因?yàn)楝F(xiàn)在軟件開發(fā)原代碼越來(lái)越長(zhǎng),質(zhì)量也難以控制。以前我們控制過(guò)程,使其越來(lái)越規(guī)范,我們現(xiàn)在基本講的還是軟件開發(fā)的過(guò)程。軟件工程是控制人員,但軟件開發(fā)人員是最難控制的,而且還不能消磨了軟件開發(fā)人員的創(chuàng)新性,而這兩者是相矛盾的,如何協(xié)調(diào)?

  馬丁.福勒:

  第一個(gè)案例請(qǐng)郭曉講一下。

  郭曉:

  我們公司之所以做敏捷開發(fā)是五、六年前我們公司有一個(gè)非常大的項(xiàng)目,給一個(gè)租賃公司做一個(gè)邏輯軟件,我們用傳統(tǒng)的方式做了半年的時(shí)間,但是客戶有很多新的需求,這個(gè)項(xiàng)目正處于失敗的邊緣,如果這個(gè)項(xiàng)目做砸了,我們公司也就完了。這個(gè)時(shí)候我們請(qǐng)到了馬丁.福勒先生,用敏捷開發(fā)、極限編程來(lái)做。當(dāng)時(shí)我們印象里敏捷開發(fā)都是在二、三十人的團(tuán)隊(duì)實(shí)施,我們公司可以說(shuō)是第一個(gè)將敏捷開發(fā)用于大團(tuán)隊(duì)的開發(fā),我們把文檔全部扔掉,采用敏捷開發(fā)方式,只用6個(gè)月的時(shí)間客戶就看到一個(gè)核心軟件。我們公司現(xiàn)在大小有上百個(gè)項(xiàng)目,小到二個(gè)人的項(xiàng)目,大到幾百個(gè)人的項(xiàng)目,都是用敏捷開發(fā)的方法做的,成功的案例有很多,我們可以挑出一個(gè)來(lái)做進(jìn)一步的探討。

  馬丁.福勒:

  我補(bǔ)充一點(diǎn),大家手里的資料中有一個(gè)CD,里面有一篇文章進(jìn)行相關(guān)的介紹。關(guān)于第二個(gè)問(wèn)題,我認(rèn)為中國(guó)沒有很大的歷史包袱,在很大程度上對(duì)敏捷開發(fā)是一個(gè)優(yōu)點(diǎn)。一些大的公司存在很多歷史性的問(wèn)題,而在沒有很多歷史包袱的情況下,采用疊蓋式開發(fā)是非常容易執(zhí)行的。各個(gè)不同的國(guó)家和機(jī)構(gòu)軟件開發(fā)的歷史對(duì)其到底能否使用敏捷開發(fā)沒有什么影響。我看過(guò)一個(gè)研究報(bào)告,其中指出測(cè)試驅(qū)動(dòng)開發(fā)對(duì)于一些經(jīng)驗(yàn)不多的軟件開發(fā)人員更為有效,在新的環(huán)境中使用新的方法可能更好。比如印度它在CIF方面做得很成功,如果我們不想出一些新的方法就很難超越他們。通過(guò)一些新方法不會(huì)總是處于跟隨狀態(tài),而是可能超越過(guò)去。關(guān)于第三個(gè)問(wèn)題,下一步我們會(huì)做哪些工作。首先要認(rèn)識(shí)到如何進(jìn)行有效的軟件開發(fā),事實(shí)上在這方面存在眾多不同的觀點(diǎn),沒有人真正知道或者回答哪個(gè)是最有效的方法。我的這些觀點(diǎn)是從我過(guò)去的經(jīng)驗(yàn)和個(gè)性總結(jié)出的一些東西。而且是建立于其他一些從事敏捷開發(fā)的人的經(jīng)驗(yàn)的基礎(chǔ)上。我們過(guò)去得到的最重要的教訓(xùn),就是不要把所有的精力都集中于一個(gè)方法上。我認(rèn)為其中最主要的成功因素,就是使各種不同的方法都可以實(shí)施,讓他們之間互相競(jìng)爭(zhēng)來(lái)實(shí)際找到最好的方法。過(guò)去很多人是通過(guò)其他人的成功應(yīng)用來(lái)找到最適合自己的方法,從外部來(lái)看這可能是一個(gè)非常混亂的方法。從人類歷史來(lái)看,競(jìng)爭(zhēng)、合作同時(shí)存在的多元體系通常情況下可以得到最好的結(jié)果。中國(guó)是一個(gè)非常大的國(guó)家,有能力嘗試各種不同的東西,這對(duì)我們來(lái)說(shuō)是一個(gè)很好的條件。所以我的建議是在聽我說(shuō)的同時(shí)也聽一些與我不同的意見。

  宋茂強(qiáng):

  去年《軟件工程師》介紹過(guò)馬丁先生的方法,我個(gè)人非常感興趣。我有十多年的軟件開發(fā)經(jīng)驗(yàn),我本人也喜歡使用自己的方法開發(fā)軟件,而不愿意受死規(guī)矩的約束。我覺得敏捷開發(fā)是一種比較好的開發(fā)方法,敏捷開發(fā)可能適合于定制軟件,因定制軟件客戶對(duì)需求不明確或者在開始時(shí)不夠明確,因此敏捷開發(fā)比較適用。如果我們開發(fā)要求明確的系統(tǒng)軟件,敏捷開發(fā)可能就不是最優(yōu)的選擇。所以我們的軟件企業(yè)在選擇的時(shí)候要根據(jù)自己的特點(diǎn)。中國(guó)目前定制軟件的需求非常大,尤其在信息化進(jìn)程下,很多人不知道自己要做成什么樣,但他又需要信息化,敏捷開發(fā)是我們可以參考的方法,不要墨守成規(guī)。國(guó)內(nèi)很多企業(yè)要通過(guò)CIM認(rèn)證,我有一個(gè)看法是看企業(yè)本身從事什么樣的開發(fā),如果是從事定制軟件的開發(fā),那種方式成本太高,而且也很困難。我想提一個(gè)建議,這個(gè)方法要想讓更多人使用,能不能把這種方法帶到課堂中,作為課程向?qū)W生教授。因?yàn)楸编]的學(xué)生出來(lái)之后大量地面臨定制軟件的開發(fā)。

  馬丁.福勒:

  簡(jiǎn)單回答是的,其他一些大學(xué)已經(jīng)在講敏捷開發(fā),我們ThoughtWorks本身也在做類似的工作。我們公司在印度有一個(gè)分公司,與印度一些大學(xué)合作教授敏捷開發(fā)的課程,有一位主要教授課程的富蘭克.喬治先生現(xiàn)在正在上海。富蘭克.喬治也在北卡羅來(lái)納大學(xué)教授過(guò)類似的課程。除我們公司以外,還有其他一些人在做類似的工作,比如約翰先生在大學(xué)里教類似的課程。我的建議是請(qǐng)相關(guān)人員跟你談?wù)勑牡谩?/P>

  李冰:

  我有一個(gè)問(wèn)題,現(xiàn)在敏捷開發(fā)是一種比較新的方法。它有幾個(gè)比較關(guān)鍵的地方,如果要做好一件事,各方面都要做好,一個(gè)方面的失敗就可能導(dǎo)致全盤失敗,那么使用敏捷開發(fā)方法要注意哪些方面?

  馬丁.福勒:

  我認(rèn)為在敏捷開發(fā)的過(guò)程中不光是包括敏捷開發(fā),在其他所有軟件開發(fā)過(guò)程中如何有效地與客戶進(jìn)行交流是非常重要的因素。比如敏捷開發(fā)中采用疊蓋式的方法,就是快速地把軟件交給終端客戶,讓他們不斷地看到開發(fā)結(jié)果。使用這種疊蓋式方法最大的優(yōu)點(diǎn)可以很早地看到項(xiàng)目開發(fā)中的風(fēng)險(xiǎn)所在。因?yàn)槟隳軌虿粩嗟氐玫娇墒褂玫能浖,并交給客戶使用,這個(gè)時(shí)候就可以判斷軟件使用過(guò)程中質(zhì)量如何,有效性如何,是否是客戶真正需要的。敏捷開發(fā)使用更短的循環(huán)方式,提高反饋的效果。在ThoughtWorks我們一般是使用一周到二周的疊蓋循環(huán)。對(duì)于軟件交付成功最重要的一點(diǎn)是交到客戶手中的軟件是否是其所需要的,從而不斷得到客戶的反饋。

  曹方:

  我有兩個(gè)問(wèn)題,第一在中國(guó)軟件產(chǎn)業(yè)市場(chǎng)中最具有生命力的市場(chǎng)是電信、金融、證券服務(wù)、網(wǎng)絡(luò)游戲。敏捷式開發(fā)方法在這些市場(chǎng)占有率非常高的行業(yè)中鮮為人知,那么如何解決市場(chǎng)認(rèn)知、應(yīng)用?軟件技術(shù)有一個(gè)很重要的發(fā)展趨勢(shì),就是面向構(gòu)建的開發(fā)方法,面向構(gòu)建的開發(fā)方法和敏捷式的開發(fā)方法,交匯點(diǎn)和本質(zhì)的區(qū)別是什么?

  馬丁.福勒:

  無(wú)論是敏捷開發(fā)使用還是其他方法的發(fā)展過(guò)程中,很多時(shí)候剛開始只能找到少數(shù)人愿意嘗試。通常情況下他們使用這些方法的原因就是在一些人介紹后他們發(fā)現(xiàn)其中的一些道理與他們所想的是一致的。他如果通過(guò)這些方法真正解決了所面臨的問(wèn)題,那么他身邊的人才會(huì)愿意使用這種方法來(lái)解決他們所遇到的問(wèn)題。西方敏捷開發(fā)的傳播基本是以這種方式實(shí)現(xiàn)的。對(duì)面向構(gòu)建的設(shè)計(jì)來(lái)說(shuō),最主要的是我們到底怎么看待構(gòu)建是如何出現(xiàn)的。在構(gòu)建過(guò)程或者服務(wù)過(guò)程現(xiàn)在有兩種最主要的意見。我所見過(guò)的第一種方法就是先把基礎(chǔ)搭好,然后在這些構(gòu)建的基礎(chǔ)上建立新的應(yīng)用。第二是收獲的方式,就是先把應(yīng)用搭建起來(lái),從中再提煉出有用的構(gòu)建。包括我在內(nèi)很多從事敏捷開發(fā)的人都比較傾向于第二種方法。我看到過(guò)很多采用構(gòu)建方式的失敗案例,很多構(gòu)建搭建起來(lái)后發(fā)現(xiàn)它不能被有效使用,當(dāng)發(fā)生這種事的時(shí)候,之前所做的一切都沒有意義了。而收獲的方式,當(dāng)你知道它在這種情況下已有效地使用了一次,從而知道以后能否從中提煉出構(gòu)建以備以后的使用的,即使提煉失敗,至少這個(gè)項(xiàng)目也是成功的。

  宋茂強(qiáng):

  我的學(xué)生也做過(guò)在使用中提煉構(gòu)建,這是一個(gè)非常好的方法,最近我有一個(gè)學(xué)生剛寫完一個(gè)軟件。

  原倉(cāng)周:

  我國(guó)多是中小企業(yè)采用的軟件多是定制,所以敏捷式開發(fā)的確很適合中國(guó)。敏捷開發(fā)的方法是以人為中心,對(duì)人的能力沒有一個(gè)準(zhǔn)確的評(píng)價(jià)方法,中小企業(yè)人員流動(dòng)非常大,如果把過(guò)程放在第二位,當(dāng)人員發(fā)生變動(dòng),如何用其他人來(lái)頂替?

  馬丁.福勒:

  我在西方也見到過(guò)很多類似的問(wèn)題,因?yàn)槊艚蓍_發(fā)是以人為主的過(guò)程,這個(gè)過(guò)程本身就有問(wèn)題,你怎么找到合適的人,怎么留住合適的人做這樣的事。有一個(gè)最基本的問(wèn)題就是問(wèn)自己為什么這些做得非常有效的人要離開這個(gè)地方呢?無(wú)論使用什么樣的方法和技術(shù),作為一個(gè)企業(yè)來(lái)說(shuō)如果不能留住人,無(wú)論如何是不能成功的。這個(gè)過(guò)程中最主要的一點(diǎn)不是找到什么樣的人,而是找到人員離開的原因,把人員留住才是真正有效的方法。這種現(xiàn)象背后肯定有很多具體原因,而這個(gè)原因每個(gè)具體項(xiàng)目都不同,所以很難做出很普遍的回答。我經(jīng)常遇到一個(gè)問(wèn)題,我發(fā)現(xiàn)在這個(gè)過(guò)程中如果把一個(gè)人作為隨時(shí)可替代的單元,通常會(huì)加劇人員流動(dòng)的現(xiàn)狀。

  謝騰翔:

  馬丁先生今天給我們帶來(lái)了一些新的知識(shí)。在中國(guó)從軟件工程的角度,在某些程度上已落后于某些國(guó)家,與印度來(lái)說(shuō)我們也相對(duì)有一個(gè)落后,今天我聽到你講了敏捷開發(fā),我想做一個(gè)總結(jié),只是個(gè)人之見可能不一定對(duì)。目前中國(guó)企業(yè)要開發(fā)軟件首先是要占據(jù)市場(chǎng),有效地管控其成本和費(fèi)用,對(duì)軟件開發(fā)企業(yè)來(lái)講,這是一個(gè)根本。您剛剛講到敏捷開發(fā)與傳統(tǒng)的軟件工程相比,在快速占領(lǐng)市場(chǎng)和節(jié)約成本費(fèi)用方面能否有一個(gè)較大的提高,有一個(gè)比較明顯的推進(jìn)作用,那么這個(gè)比例跟傳統(tǒng)相比能提高多少?中國(guó)一些企業(yè)也在做敏捷開發(fā),微軟的開發(fā)模式也是疊蓋的,這是敏捷開發(fā)最核心的部分。我原來(lái)的公司是做開發(fā),現(xiàn)在我們做測(cè)試,我覺得中國(guó)公司說(shuō)是遵從軟件工程,其實(shí)是靈活應(yīng)用,在某些方面也是遵從了軟件開發(fā)的理論,我們說(shuō)軟件開發(fā)是過(guò)程控制,不到一個(gè)階段是不能跨越下一階段的。我不知道印度的情況如何,中國(guó)很多企業(yè)在需求變化過(guò)程中也是在不斷重構(gòu),實(shí)際上它也是疊蓋,我們經(jīng)常開發(fā)一個(gè)原型,再不斷開發(fā)新的功能補(bǔ)充進(jìn)去。傳統(tǒng)軟件工程和敏捷開發(fā)是否有特別本質(zhì)的區(qū)別?有必要將兩者明確地區(qū)分開來(lái)嗎?是否可以說(shuō)兩者是軟件工程中不同方法的選擇或者改進(jìn)?

  馬丁.福勒:

  很難有一個(gè)定量的衡量,軟件開發(fā)企業(yè)最難的就是衡量過(guò)程。工程學(xué)和敏捷開發(fā)之間的區(qū)別,所有的方法學(xué)之間都有一個(gè)量(度)的區(qū)別,雖然是疊蓋式方法有很多類似的地方,但工程學(xué)和敏捷開發(fā)有兩個(gè)核心的不同點(diǎn),第一對(duì)于變化觀點(diǎn)是控制還是接受,第二對(duì)于人在這個(gè)過(guò)程中起到作用的評(píng)價(jià)。如果從傳統(tǒng)開發(fā)和敏捷開發(fā)有一個(gè)過(guò)渡的曲線,過(guò)渡期間有一個(gè)突變的過(guò)程,就是對(duì)變化的態(tài)度和對(duì)人的態(tài)度,這兩點(diǎn)是非常重要的變化。

  郭旭:

  剛剛講了很多敏捷開發(fā)的優(yōu)勢(shì),我們也確實(shí)認(rèn)識(shí)到在中國(guó)的環(huán)境中對(duì)敏捷開發(fā)的需求非常大,但它有沒有什么缺陷?比如在軟件交付之后我們用傳統(tǒng)的方法開發(fā)軟件,里面有很多文檔,用戶可以接過(guò)來(lái)。而敏捷開發(fā)是以人為核心的,那么如果人員發(fā)生變動(dòng)以后,是否對(duì)客戶造成影響?

  馬丁.福勒:

  傳統(tǒng)來(lái)說(shuō),任何新出現(xiàn)方法的最大問(wèn)題就是找不到問(wèn)題所在,實(shí)際上很多缺陷都是在直接使用過(guò)程中發(fā)現(xiàn)的。比如傳統(tǒng)上在幾年前,很多人認(rèn)為敏捷開發(fā)有一些缺陷,但近幾年發(fā)現(xiàn)事實(shí)并非如此。比如說(shuō)過(guò)去有些人認(rèn)為敏捷開發(fā)不適用于大項(xiàng)目,而我們公司在大項(xiàng)目上使用這種方法證明這種缺陷是不存在的。我們想可能還需要一段時(shí)間進(jìn)行探索,才能知道敏捷開發(fā)的缺陷在哪里。關(guān)于交付以后文檔的問(wèn)題敏捷開發(fā)要盡量減少這些文檔的存在。傳統(tǒng)方法交付出的那些文檔到底有多大作用?我們ThoughtWorks的一項(xiàng)工作就是給遇到麻煩無(wú)法進(jìn)行下去的項(xiàng)目提供幫助,我們?cè)诎胪具M(jìn)入項(xiàng)目以后,發(fā)現(xiàn)他們制作出的文檔實(shí)際上對(duì)理解這個(gè)項(xiàng)目沒有什么幫助。大部分的文檔不是沒有完成就是非常過(guò)時(shí)無(wú)法描述現(xiàn)在項(xiàng)目的狀態(tài)。實(shí)際上在很多時(shí)候我們發(fā)現(xiàn)很多文檔對(duì)于不是使用這種文檔的人心理上是一種安慰,但有效性并不一定非常高。

  以下為媒體問(wèn)答實(shí)錄

  賽迪網(wǎng)記者:敏捷開發(fā)對(duì)軟件跨平臺(tái)的移植、升級(jí)的需求能否適應(yīng)?敏捷開發(fā)是測(cè)試驅(qū)動(dòng)的開發(fā)思路,現(xiàn)在還有模型驅(qū)動(dòng)開發(fā)思路與之競(jìng)爭(zhēng),您作為測(cè)試驅(qū)動(dòng)的倡導(dǎo)者,如何看待模型測(cè)試思路?

  馬丁.福勒:對(duì)于跨平臺(tái)的移植來(lái)說(shuō)通常存在兩種情況。最核心的一點(diǎn)就是從功能角度講,移植前后是否一致。我自己經(jīng)歷過(guò)很多移植性項(xiàng)目,很多時(shí)候雖說(shuō)只是做一個(gè)移植,但功能本身也會(huì)做很大的變化。通常情況下,很多時(shí)候客戶會(huì)發(fā)現(xiàn)在過(guò)去的系統(tǒng)中有些功能是不需要的,而有些功能并不存在。在這種情況下敏捷開發(fā)的方式是很適合于功能變化的移植。移植前后所有功能是完全一樣的,確實(shí)不一定是傳統(tǒng)敏捷開發(fā)能夠真正適應(yīng)的。一些敏捷開發(fā)中的最佳實(shí)踐也是可以使用的,比如你可以把所有的需求以測(cè)試的方式提煉出來(lái)。很多項(xiàng)目都是使用這種方式而且非常成功。而且使用這種疊蓋式方式,也能夠從項(xiàng)目進(jìn)程的角度看移植進(jìn)程有多快。如果說(shuō)這個(gè)過(guò)程中你只是純粹重復(fù)以前的功能,沒有加入新功能的話,確實(shí)跟客戶交流的方面就不是那么重要了。

  記者:您剛剛說(shuō)面向?qū)ο蟮募夹g(shù)將在未來(lái)很長(zhǎng)一段時(shí)間存在,為什么?

  馬丁.福勒:首先從我個(gè)人以及很多其他人的工作經(jīng)驗(yàn),OO是一種非常有效的設(shè)計(jì)、實(shí)施軟件的技術(shù)。從另一方面,這些新出現(xiàn)的主流語(yǔ)言比如JAVA等等其核心都是使用OO技術(shù)。事實(shí)上我們?cè)贠O技術(shù)使用過(guò)程中還處于非常原始的階段。雖然以O(shè)O為基礎(chǔ)的語(yǔ)言已經(jīng)不斷地出現(xiàn),而且成為主流編程語(yǔ)言,但在使用這些語(yǔ)言進(jìn)行編程的時(shí)候,很多人還是以面向過(guò)程的方式來(lái)使用。

  IT經(jīng)理世界:敏捷開發(fā)是否對(duì)做外包的企業(yè)有幫助?

  馬丁.福勒:在印度外包是非常普遍的,我們?cè)谟《扔幸粋(gè)分公司,專門做歐美外包。我們跟其他公司的區(qū)別是即使在做外包的過(guò)程中也基本使用敏捷式開發(fā)。我們?cè)趯?shí)踐中發(fā)現(xiàn)敏捷式開發(fā)對(duì)外包也是非常有效的方法。如果有機(jī)會(huì)一定要跟我們富蘭克.喬治談一下,他有一個(gè)案例來(lái)說(shuō)明使用敏捷開發(fā)與不使用敏捷開發(fā)的區(qū)別。在跟客戶溝通的過(guò)程中,我們?cè)陂_發(fā)成本和時(shí)間上都比競(jìng)爭(zhēng)對(duì)手少三分之一,我們贏得這個(gè)項(xiàng)目,并成功交付。這個(gè)公司對(duì)外包流程非常熟悉,他覺得我們是否估計(jì)錯(cuò)了。因?yàn)椴皇强陀^的標(biāo)準(zhǔn),他們用CIM對(duì)這個(gè)項(xiàng)目進(jìn)行了重新估算,得到的結(jié)論是他確實(shí)需要這么多時(shí)間和人做這個(gè)項(xiàng)目。就是說(shuō)實(shí)踐中敏捷式開發(fā)比他們估算的方法更快,而且用的人要少一些。

  記者:現(xiàn)在中國(guó)有很多典型的外包企業(yè),拿到的是設(shè)計(jì),他要做的就是編碼,那么把設(shè)計(jì)和編碼融合在一起的敏捷開發(fā)模式如何應(yīng)用?

  馬丁.福勒:一個(gè)最簡(jiǎn)單的回答,在這種情況下沒辦法真正使用敏捷開發(fā),因?yàn)槟銓?duì)這個(gè)項(xiàng)目沒有真正的控制權(quán)。最重要的一個(gè)錯(cuò)誤已經(jīng)犯下了,所以在這個(gè)時(shí)候你沒辦法修改過(guò)程。雖然這個(gè)項(xiàng)目不能真正地使用敏捷開發(fā)的方法,但敏捷開發(fā)的方法有很多最佳實(shí)踐,從根本理念上有一些方法,有些是從編程中,比如持續(xù)集成,測(cè)試驅(qū)動(dòng)開發(fā)等等。敏捷式開發(fā)跟其他方法不同的在于它不光是一個(gè)方法學(xué),還是編程中如何提高質(zhì)量的具體操作,在極限編程里提出的,這些東西都是可以借鑒的。它跟設(shè)計(jì)沒有什么太大的關(guān)系,但你在使用過(guò)程中可以真正地提高程序的質(zhì)量,并非要么是敏捷要么不是敏捷。在實(shí)際開發(fā)的過(guò)程中,你還是可以使用疊蓋式的方法進(jìn)行內(nèi)部的開發(fā),雖然你不能對(duì)設(shè)計(jì)進(jìn)行大的修改,但是疊蓋式的方法還是為提高你的質(zhì)量,加快速度提供很多幫助。

  主持人:由于時(shí)間的關(guān)系,我們的媒體提問(wèn)就到這里,再次感謝馬丁.福勒先生做的精采演講。謝謝大家!

 

關(guān)鍵詞:軟件開發(fā)

贊助商鏈接: