軟件開發(fā)管理者思維的變化
軟件開發(fā)是一種對(duì)人類智慧的管理,對(duì)人大腦思維的“工廠化”管理。人是有感情的、有情緒的、變化的、相對(duì)獨(dú)立的工作單元,這與冰冷的機(jī)器是不可比的,所以在中國(guó)的歷史上,管理人是最難的工作;“學(xué)而優(yōu)則仕”的觀點(diǎn)就是讓最聰明的人應(yīng)該選出來(lái)做官,做官就是管理人的。軟件開發(fā)不僅是代碼編程,而是人員的有效組織,如何既發(fā)揮人的主觀能動(dòng)性,避免情緒變化對(duì)工作的影響,又可以讓大家有效的交流,讓多個(gè)大腦的思路統(tǒng)一,快速完成目標(biāo)呢?多年來(lái)軟件企業(yè)的管理者一直在不斷地探索。
另外有一個(gè)問(wèn)題一直是軟件開發(fā)管理人員的心?。很浖枪ぞ撸_發(fā)的是客戶業(yè)務(wù)的應(yīng)用,但客戶不了解軟件,開發(fā)者不了解業(yè)務(wù),如何有效溝通是軟件質(zhì)量的重大障礙。把開發(fā)者變成客戶業(yè)務(wù)的專家是個(gè)沒(méi)有辦法的辦法,讓軟件企業(yè)付出的代價(jià)也是昂貴的。
瀑布模型、極限編程、敏捷開發(fā)是有代表性的開發(fā)模式,在對(duì)開發(fā)者、客戶、最終的產(chǎn)品的關(guān)注上的變化,體現(xiàn)了軟件開發(fā)管理者在管理模式上的變化。
一、瀑布開發(fā)
瀑布模型(Waterfall Model)是Royce在1970年提出的,他把大型軟件開發(fā)分為:分析與編程,象工廠流水線一樣把軟件開發(fā)過(guò)程分成各種工序,并且每個(gè)工序可以根據(jù)軟件產(chǎn)品的規(guī)模、參與人員的多少進(jìn)一步細(xì)分成更細(xì)的工序。該模型非常符合軟件工程學(xué)的分層設(shè)計(jì)思路,所以成為軟件開發(fā)企業(yè)使用最多的開發(fā)模型。
瀑布模型的特點(diǎn):
1、 強(qiáng)調(diào)文檔,前一個(gè)階段的輸出就是下一個(gè)階段的輸入,文檔是個(gè)階段銜接的唯一信息。所以很多開發(fā)人員好象是在開發(fā)文檔,而不是開發(fā)軟件,因?yàn)橐介_發(fā)的后期,才可以看到軟件的“模樣”。
2、 沒(méi)有迭代與反饋。瀑布模型對(duì)反饋沒(méi)有涉及,所以對(duì)變化的客戶需求非常不容易適應(yīng),瀑布就意味著沒(méi)有回頭路。
3、管理人員喜歡瀑布模型的原因是把文檔理解為開發(fā)的速度,可以方便地界定不同階段的里程碑。
瀑布模型的用戶很多,也有一些反對(duì)的意見:
第一、瀑布模型不適合客戶需求不斷變化的軟件開發(fā),尤其是客戶的業(yè)務(wù)管理的軟件,業(yè)務(wù)隨著市場(chǎng)變化,而軟件初期的設(shè)計(jì)可能已經(jīng)大大變化,而后期的需求更改成本是開始的10倍基數(shù)。在ERP盛行的軟件市場(chǎng)里,一方面市場(chǎng)帶動(dòng)需求變化,另一方面初期客戶對(duì)需求描述不清楚,都為瀑布模型的使用團(tuán)隊(duì)帶來(lái)困難。
第二、瀑布模型是一種軟件文檔的開發(fā),把開發(fā)者變成流水線上的機(jī)器,大量重復(fù)性的工作讓編程人員提不起興趣,工作很枯燥,沒(méi)有激情,編程成了一種沒(méi)有創(chuàng)意的機(jī)械勞動(dòng),這讓一向以高科技為標(biāo)志的高級(jí)程序人員大為惱火。
在這種背景下,極限編程(extreme Programming, XP)帶來(lái)了新鮮的空氣。
二、極限編程
極限編程誕生于一種加強(qiáng)開發(fā)者與用戶的溝通需求,讓客戶全面參與軟件的開發(fā)設(shè)計(jì),保證變化的需求及時(shí)得到修正。要讓客戶能方便地與開發(fā)人員溝通,一定要用客戶理解的語(yǔ)言,先測(cè)試再編碼就是先給客戶軟件的外部輪廓,客戶使用的功能展現(xiàn),讓客戶感覺到未來(lái)軟件的樣子,先測(cè)試再編碼與瀑布模型顯然是背道而馳的。同時(shí),極限編程注重用戶反饋與讓客戶加入開發(fā)是一致的,讓客戶參與就是隨時(shí)反饋軟件是否符合客戶的要求。有了反饋,開發(fā)子過(guò)程變短,迭代也就很自然出現(xiàn)了,快速迭代,小版本發(fā)布都讓開發(fā)過(guò)程變成更多的自反饋過(guò)程,有些象更加細(xì)化的快速模型法。當(dāng)然極限編程還加入了很多激勵(lì)開發(fā)人員的“措施”,如結(jié)隊(duì)編程、40小時(shí)工作等。
極限編程是一種開發(fā)管理模式,它強(qiáng)調(diào)的重點(diǎn)是:
1、角色定位:極限編程把客戶非常明確地加入到開發(fā)的團(tuán)隊(duì)中,并參與日常開發(fā)與溝通會(huì)議??蛻羰擒浖淖罱K使用者,使用是否合意一定以客戶的意見為準(zhǔn)。不僅讓客戶參與設(shè)計(jì)討論,而且讓客戶負(fù)責(zé)編寫擁護(hù)故事(User Story),也就是功能需求,包括軟件要實(shí)現(xiàn)的功能以及完成功能的業(yè)務(wù)操作過(guò)程。用戶在軟件開發(fā)過(guò)程中的責(zé)任被提到與開發(fā)者同樣的重要程度。
2、敏捷開發(fā):敏捷開發(fā)追求合作與響應(yīng)變化。迭代就是縮短版本的發(fā)布周期,縮短到周、日,完成一個(gè)小的功能模塊,可以快速測(cè)試、并及時(shí)展現(xiàn)給客戶,以便及時(shí)反饋。小版本加快了客戶溝通反饋的頻率,功能簡(jiǎn)單,在設(shè)計(jì)、文擋環(huán)節(jié)大大簡(jiǎn)化。極限編程中文擋不再重要的原因就是因?yàn)槊總€(gè)版本功能簡(jiǎn)單,不需要復(fù)雜的設(shè)計(jì)過(guò)程。極限編程追求設(shè)計(jì)簡(jiǎn)單,實(shí)現(xiàn)客戶要求即可,無(wú)需為擴(kuò)展考慮太多,因?yàn)榭蛻舻男滦枨箅S時(shí)可以添加。
3、追求價(jià)值:極限編程把軟件開發(fā)變成自我與管理的挑戰(zhàn),追求溝通、簡(jiǎn)單、反饋、勇氣,體現(xiàn)開發(fā)團(tuán)隊(duì)的人員價(jià)值,激發(fā)參與者的情緒,最大限度地調(diào)動(dòng)開發(fā)者的積極性,情緒高漲,認(rèn)真投入,開發(fā)的軟件質(zhì)量就大大提高。結(jié)對(duì)編程就是激發(fā)隊(duì)員才智的一種方式。
極限編程把軟件開發(fā)過(guò)程重新定義為聆聽、測(cè)試、編碼、設(shè)計(jì)的迭代循環(huán)過(guò)程,確立了測(cè)試->編碼->重構(gòu)(設(shè)計(jì))的軟件開發(fā)管理思路。
極限編程的12個(gè)實(shí)踐是極限編程者總結(jié)的實(shí)踐經(jīng)典,是體現(xiàn)極限編程管理的原則,對(duì)極限編程具有指導(dǎo)性的意義,但并非一定要完全遵守12個(gè)實(shí)踐,主要看它給軟件過(guò)程管理帶來(lái)的價(jià)值。
1、小版本。為了高度迭代,與客戶展現(xiàn)開發(fā)的進(jìn)展,小版本發(fā)布是一個(gè)可交流的好辦法,客戶可以針對(duì)性提出反饋。但小版本把模塊縮得很小,會(huì)影響軟件的整體思路連貫,所以小版本也需要總體合理的規(guī)劃。
2、規(guī)劃游戲。就是客戶需求,以客戶故事的形式,由客戶負(fù)責(zé)編寫。極限編程不講求統(tǒng)一的客戶需求收集,也不是由開發(fā)人員整理,而是采取讓客戶編寫,開發(fā)人員進(jìn)行分析,設(shè)定優(yōu)先級(jí)別,并進(jìn)行技術(shù)實(shí)現(xiàn)。當(dāng)然游戲規(guī)則可進(jìn)行多次,每次迭代完畢后再行修改??蛻艄适率情_發(fā)人員與客戶溝通的焦點(diǎn),也是版本設(shè)計(jì)的依據(jù),所以其管理一定是有效的、溝通順暢的。 [NextPage]
3、現(xiàn)場(chǎng)客戶。極限編程要求客戶參與開發(fā)工作,客戶需求就是客戶負(fù)責(zé)編寫的,所以要求客戶在開發(fā)現(xiàn)場(chǎng)一起工作,并為每次迭代提供反饋。
4、隱喻。隱喻是讓項(xiàng)目參與人員都必須對(duì)一些抽象的概念理解一致,也就是我們常說(shuō)的行業(yè)術(shù)語(yǔ),因?yàn)闃I(yè)務(wù)本身的術(shù)語(yǔ)開發(fā)人員不熟悉,軟件開發(fā)的術(shù)語(yǔ)客戶不理解,因此開始要先明確雙方使用的隱喻,避免歧異。
5、簡(jiǎn)單設(shè)計(jì)。極限編程體現(xiàn)跟蹤客戶的需求變化,既然需求是變化的,所以對(duì)于目前的需求就不必過(guò)多地考慮擴(kuò)展性的開發(fā),講求簡(jiǎn)單設(shè)計(jì),實(shí)現(xiàn)目前需求即可。簡(jiǎn)單設(shè)計(jì)的本身也為短期迭代提供了方便,若開發(fā)者考慮“通用”因素較多,增加了軟件的復(fù)雜度,開發(fā)的迭代周期就會(huì)加長(zhǎng)。簡(jiǎn)單設(shè)計(jì)包括四方面含義:1、通過(guò)測(cè)試。2、避免重復(fù)代碼。3、明確表達(dá)每步編碼的目的,代碼可讀性強(qiáng)。4、盡可能少的對(duì)象類和方法。由于采用簡(jiǎn)單設(shè)計(jì),所以極限編程沒(méi)有復(fù)雜的設(shè)計(jì)文檔要求。
6、重構(gòu)。重構(gòu)是極限編程先測(cè)試后編碼的必然需求,為了整體軟件可以先進(jìn)行測(cè)試,對(duì)于一些軟件要開發(fā)的模塊先簡(jiǎn)單模擬,讓編譯通過(guò),到達(dá)測(cè)試的目的。然后再對(duì)模塊具體“優(yōu)化”,所以重構(gòu)包括模塊代碼的優(yōu)化與具體代碼的開發(fā)。重構(gòu)是使用了“物理學(xué)”的一個(gè)概念,是在不影響物體外部特性的前提下,重新優(yōu)化其內(nèi)部的機(jī)構(gòu)。這里的外部特性就是保證測(cè)試的通過(guò)。
7、測(cè)試驅(qū)動(dòng)開發(fā)。極限編程是以測(cè)試開始的,為了可以展示客戶需求的實(shí)現(xiàn),測(cè)試程序優(yōu)先設(shè)計(jì),測(cè)試是從客戶實(shí)用的角度出發(fā),客戶實(shí)際使用的軟件界面著想,測(cè)試是客戶需求的直接表現(xiàn),是客戶對(duì)軟件過(guò)程的理解。測(cè)試驅(qū)動(dòng)開發(fā),也就是客戶的需求驅(qū)動(dòng)軟件的開發(fā)。
8、持續(xù)集成。集成的理解就是提交軟件的展現(xiàn),由于采用測(cè)試驅(qū)動(dòng)開發(fā)、小版本的方式,所以不斷集成(整體測(cè)試)是與客戶溝通的依據(jù),也是讓客戶提出反饋意見的參照。持續(xù)集成也是完成階段開發(fā)任務(wù)的標(biāo)志。
9、結(jié)對(duì)編程。這是極限編程最有爭(zhēng)議的實(shí)踐。就是兩個(gè)程序員合用一臺(tái)計(jì)算機(jī)編程,一個(gè)編碼,一個(gè)檢查,增加專人審計(jì)是為了提供軟件編碼的質(zhì)量。兩個(gè)人的角色經(jīng)常變換,保持開發(fā)者的工作熱情。這種編程方式對(duì)培養(yǎng)新人或開發(fā)難度較大的軟件都有非常好的效果。
10、代碼共有。在極限編程里沒(méi)有嚴(yán)格文檔管理,代碼為開發(fā)團(tuán)隊(duì)共有,這樣有利于開發(fā)人員的流動(dòng)管理,因?yàn)樗械娜硕际煜に械木幋a。
11、編碼標(biāo)準(zhǔn)。編碼是開發(fā)團(tuán)隊(duì)里每個(gè)人的工作,又沒(méi)有詳細(xì)的文檔,代碼的可讀性是很重要的,所以規(guī)定統(tǒng)一的標(biāo)準(zhǔn)和習(xí)慣是必要的,有些象編碼人員的隱喻。
12、每周40小時(shí)工作。極限編程認(rèn)為編程是愉快的工作,不輕易加班,今天的工作今天做,小版本的設(shè)計(jì)也為了單位時(shí)間可以完成的工作安排。
三、敏捷開發(fā)
極限編程的思想體現(xiàn)了適應(yīng)客戶需求的快速變化,激發(fā)開發(fā)者的熱情,也是目前敏捷開發(fā)思維的重要支持者。
2001年,17名編程大師分別代表極限編程、Scrum(“棒球”團(tuán)隊(duì)開發(fā)模式)、特征驅(qū)動(dòng)開發(fā)、動(dòng)態(tài)系統(tǒng)開發(fā)方法、自適應(yīng)軟件開發(fā)、水晶方法、實(shí)用編程等開發(fā)流派,發(fā)表“敏捷軟件開發(fā)”宣言。敏捷軟件開發(fā)是一個(gè)開發(fā)軟件的管理新模式,用來(lái)替代以文件驅(qū)動(dòng)開發(fā)的瀑布開發(fā)模式。敏捷方式也稱輕量級(jí)開發(fā)方法。敏捷軟件開發(fā)宣言內(nèi)容:
個(gè)體和交互勝過(guò)過(guò)程和工具
可以工作的軟件勝過(guò)面面具到的文檔
可戶合作勝過(guò)合同談判
響應(yīng)變化勝過(guò)遵循計(jì)劃
敏捷開發(fā)集成了新型開發(fā)模式的共同特點(diǎn),它重點(diǎn)強(qiáng)調(diào):
1. 以人為本,注重編程中人的自我特長(zhǎng)發(fā)揮。
2. 強(qiáng)調(diào)軟件開發(fā)的產(chǎn)品是軟件,而不是文檔。文檔是為軟件開發(fā)服務(wù)的,而不是開發(fā)的主體。
3.客戶與開發(fā)者的關(guān)系是協(xié)作,不是合約。開發(fā)者不是客戶業(yè)務(wù)的“專家”,要適應(yīng)客戶的需求,是要客戶合作來(lái)闡述實(shí)際的需求細(xì)節(jié),而不是為了開發(fā)軟件,把開發(fā)人員變成客戶業(yè)務(wù)的專家,這是傳統(tǒng)開發(fā)模式或行業(yè)軟件開發(fā)企業(yè)的最大面臨問(wèn)題。
4.設(shè)計(jì)周密是為了最終軟件的質(zhì)量,但不表明設(shè)計(jì)比實(shí)現(xiàn)更重要,要適應(yīng)客戶需求的不斷變化,設(shè)計(jì)也要不斷跟進(jìn),所以設(shè)計(jì)不能是“閉門造車”、“自我良好”,能不斷根據(jù)環(huán)境的變化,修改自己的設(shè)計(jì),指導(dǎo)開發(fā)的方向是敏捷開發(fā)的目標(biāo)。
敏捷開發(fā)避免了傳統(tǒng)瀑布方式的弊端,主要是吸收了各種新型開發(fā)模式的“動(dòng)態(tài)”特性,關(guān)注點(diǎn)從文檔到開發(fā)者,管理方式也從工廠的流水線到團(tuán)隊(duì)的自我放松式的組織??偨Y(jié)敏捷開發(fā)與瀑布模式的不同,主要是下面幾個(gè)“敏捷”的關(guān)注點(diǎn):
迭代。軟件的功能是客戶的需求,界面的操作是客戶的“感覺”,對(duì)迭代的強(qiáng)調(diào)是縮短了軟件版本的周期
客戶參與。以人為本,客戶是軟件的使用者,是業(yè)務(wù)理解的專家,沒(méi)有客戶的參與,開發(fā)者很難理解客戶的真實(shí)需求
小版本??焖俟δ艿恼宫F(xiàn),看似簡(jiǎn)單,但對(duì)于復(fù)雜的客戶需求,合理地分割與總體上的統(tǒng)一,要很好地二者兼顧是不容易的。
敏捷就是“快”,快才可以適應(yīng)目前社會(huì)的快節(jié)奏;要快就要發(fā)揮個(gè)人的個(gè)性思維多一些,個(gè)性思維的增多,雖然通過(guò)結(jié)隊(duì)編程、代碼共有、團(tuán)隊(duì)替補(bǔ)等方式減少個(gè)人對(duì)軟件的影響力,但也會(huì)造成軟件開發(fā)繼承性的下降,因此敏捷開發(fā)是一個(gè)新的思路,但不是軟件開發(fā)的終極選擇。對(duì)于長(zhǎng)時(shí)間、人數(shù)眾多的大型軟件應(yīng)用的開發(fā),文檔的管理與銜接作用還是不可替代的。如何把敏捷的開發(fā)思路與傳統(tǒng)的“流水線工廠式”管理有機(jī)地結(jié)合,是軟件開發(fā)組織者面臨的新課題。
另外有一個(gè)問(wèn)題一直是軟件開發(fā)管理人員的心?。很浖枪ぞ撸_發(fā)的是客戶業(yè)務(wù)的應(yīng)用,但客戶不了解軟件,開發(fā)者不了解業(yè)務(wù),如何有效溝通是軟件質(zhì)量的重大障礙。把開發(fā)者變成客戶業(yè)務(wù)的專家是個(gè)沒(méi)有辦法的辦法,讓軟件企業(yè)付出的代價(jià)也是昂貴的。
瀑布模型、極限編程、敏捷開發(fā)是有代表性的開發(fā)模式,在對(duì)開發(fā)者、客戶、最終的產(chǎn)品的關(guān)注上的變化,體現(xiàn)了軟件開發(fā)管理者在管理模式上的變化。
一、瀑布開發(fā)
瀑布模型(Waterfall Model)是Royce在1970年提出的,他把大型軟件開發(fā)分為:分析與編程,象工廠流水線一樣把軟件開發(fā)過(guò)程分成各種工序,并且每個(gè)工序可以根據(jù)軟件產(chǎn)品的規(guī)模、參與人員的多少進(jìn)一步細(xì)分成更細(xì)的工序。該模型非常符合軟件工程學(xué)的分層設(shè)計(jì)思路,所以成為軟件開發(fā)企業(yè)使用最多的開發(fā)模型。
瀑布模型的特點(diǎn):
1、 強(qiáng)調(diào)文檔,前一個(gè)階段的輸出就是下一個(gè)階段的輸入,文檔是個(gè)階段銜接的唯一信息。所以很多開發(fā)人員好象是在開發(fā)文檔,而不是開發(fā)軟件,因?yàn)橐介_發(fā)的后期,才可以看到軟件的“模樣”。
2、 沒(méi)有迭代與反饋。瀑布模型對(duì)反饋沒(méi)有涉及,所以對(duì)變化的客戶需求非常不容易適應(yīng),瀑布就意味著沒(méi)有回頭路。
3、管理人員喜歡瀑布模型的原因是把文檔理解為開發(fā)的速度,可以方便地界定不同階段的里程碑。
瀑布模型的用戶很多,也有一些反對(duì)的意見:
第一、瀑布模型不適合客戶需求不斷變化的軟件開發(fā),尤其是客戶的業(yè)務(wù)管理的軟件,業(yè)務(wù)隨著市場(chǎng)變化,而軟件初期的設(shè)計(jì)可能已經(jīng)大大變化,而后期的需求更改成本是開始的10倍基數(shù)。在ERP盛行的軟件市場(chǎng)里,一方面市場(chǎng)帶動(dòng)需求變化,另一方面初期客戶對(duì)需求描述不清楚,都為瀑布模型的使用團(tuán)隊(duì)帶來(lái)困難。
第二、瀑布模型是一種軟件文檔的開發(fā),把開發(fā)者變成流水線上的機(jī)器,大量重復(fù)性的工作讓編程人員提不起興趣,工作很枯燥,沒(méi)有激情,編程成了一種沒(méi)有創(chuàng)意的機(jī)械勞動(dòng),這讓一向以高科技為標(biāo)志的高級(jí)程序人員大為惱火。
在這種背景下,極限編程(extreme Programming, XP)帶來(lái)了新鮮的空氣。
二、極限編程
極限編程誕生于一種加強(qiáng)開發(fā)者與用戶的溝通需求,讓客戶全面參與軟件的開發(fā)設(shè)計(jì),保證變化的需求及時(shí)得到修正。要讓客戶能方便地與開發(fā)人員溝通,一定要用客戶理解的語(yǔ)言,先測(cè)試再編碼就是先給客戶軟件的外部輪廓,客戶使用的功能展現(xiàn),讓客戶感覺到未來(lái)軟件的樣子,先測(cè)試再編碼與瀑布模型顯然是背道而馳的。同時(shí),極限編程注重用戶反饋與讓客戶加入開發(fā)是一致的,讓客戶參與就是隨時(shí)反饋軟件是否符合客戶的要求。有了反饋,開發(fā)子過(guò)程變短,迭代也就很自然出現(xiàn)了,快速迭代,小版本發(fā)布都讓開發(fā)過(guò)程變成更多的自反饋過(guò)程,有些象更加細(xì)化的快速模型法。當(dāng)然極限編程還加入了很多激勵(lì)開發(fā)人員的“措施”,如結(jié)隊(duì)編程、40小時(shí)工作等。
極限編程是一種開發(fā)管理模式,它強(qiáng)調(diào)的重點(diǎn)是:
1、角色定位:極限編程把客戶非常明確地加入到開發(fā)的團(tuán)隊(duì)中,并參與日常開發(fā)與溝通會(huì)議??蛻羰擒浖淖罱K使用者,使用是否合意一定以客戶的意見為準(zhǔn)。不僅讓客戶參與設(shè)計(jì)討論,而且讓客戶負(fù)責(zé)編寫擁護(hù)故事(User Story),也就是功能需求,包括軟件要實(shí)現(xiàn)的功能以及完成功能的業(yè)務(wù)操作過(guò)程。用戶在軟件開發(fā)過(guò)程中的責(zé)任被提到與開發(fā)者同樣的重要程度。
2、敏捷開發(fā):敏捷開發(fā)追求合作與響應(yīng)變化。迭代就是縮短版本的發(fā)布周期,縮短到周、日,完成一個(gè)小的功能模塊,可以快速測(cè)試、并及時(shí)展現(xiàn)給客戶,以便及時(shí)反饋。小版本加快了客戶溝通反饋的頻率,功能簡(jiǎn)單,在設(shè)計(jì)、文擋環(huán)節(jié)大大簡(jiǎn)化。極限編程中文擋不再重要的原因就是因?yàn)槊總€(gè)版本功能簡(jiǎn)單,不需要復(fù)雜的設(shè)計(jì)過(guò)程。極限編程追求設(shè)計(jì)簡(jiǎn)單,實(shí)現(xiàn)客戶要求即可,無(wú)需為擴(kuò)展考慮太多,因?yàn)榭蛻舻男滦枨箅S時(shí)可以添加。
3、追求價(jià)值:極限編程把軟件開發(fā)變成自我與管理的挑戰(zhàn),追求溝通、簡(jiǎn)單、反饋、勇氣,體現(xiàn)開發(fā)團(tuán)隊(duì)的人員價(jià)值,激發(fā)參與者的情緒,最大限度地調(diào)動(dòng)開發(fā)者的積極性,情緒高漲,認(rèn)真投入,開發(fā)的軟件質(zhì)量就大大提高。結(jié)對(duì)編程就是激發(fā)隊(duì)員才智的一種方式。
極限編程把軟件開發(fā)過(guò)程重新定義為聆聽、測(cè)試、編碼、設(shè)計(jì)的迭代循環(huán)過(guò)程,確立了測(cè)試->編碼->重構(gòu)(設(shè)計(jì))的軟件開發(fā)管理思路。
極限編程的12個(gè)實(shí)踐是極限編程者總結(jié)的實(shí)踐經(jīng)典,是體現(xiàn)極限編程管理的原則,對(duì)極限編程具有指導(dǎo)性的意義,但并非一定要完全遵守12個(gè)實(shí)踐,主要看它給軟件過(guò)程管理帶來(lái)的價(jià)值。
1、小版本。為了高度迭代,與客戶展現(xiàn)開發(fā)的進(jìn)展,小版本發(fā)布是一個(gè)可交流的好辦法,客戶可以針對(duì)性提出反饋。但小版本把模塊縮得很小,會(huì)影響軟件的整體思路連貫,所以小版本也需要總體合理的規(guī)劃。
2、規(guī)劃游戲。就是客戶需求,以客戶故事的形式,由客戶負(fù)責(zé)編寫。極限編程不講求統(tǒng)一的客戶需求收集,也不是由開發(fā)人員整理,而是采取讓客戶編寫,開發(fā)人員進(jìn)行分析,設(shè)定優(yōu)先級(jí)別,并進(jìn)行技術(shù)實(shí)現(xiàn)。當(dāng)然游戲規(guī)則可進(jìn)行多次,每次迭代完畢后再行修改??蛻艄适率情_發(fā)人員與客戶溝通的焦點(diǎn),也是版本設(shè)計(jì)的依據(jù),所以其管理一定是有效的、溝通順暢的。 [NextPage]
3、現(xiàn)場(chǎng)客戶。極限編程要求客戶參與開發(fā)工作,客戶需求就是客戶負(fù)責(zé)編寫的,所以要求客戶在開發(fā)現(xiàn)場(chǎng)一起工作,并為每次迭代提供反饋。
4、隱喻。隱喻是讓項(xiàng)目參與人員都必須對(duì)一些抽象的概念理解一致,也就是我們常說(shuō)的行業(yè)術(shù)語(yǔ),因?yàn)闃I(yè)務(wù)本身的術(shù)語(yǔ)開發(fā)人員不熟悉,軟件開發(fā)的術(shù)語(yǔ)客戶不理解,因此開始要先明確雙方使用的隱喻,避免歧異。
5、簡(jiǎn)單設(shè)計(jì)。極限編程體現(xiàn)跟蹤客戶的需求變化,既然需求是變化的,所以對(duì)于目前的需求就不必過(guò)多地考慮擴(kuò)展性的開發(fā),講求簡(jiǎn)單設(shè)計(jì),實(shí)現(xiàn)目前需求即可。簡(jiǎn)單設(shè)計(jì)的本身也為短期迭代提供了方便,若開發(fā)者考慮“通用”因素較多,增加了軟件的復(fù)雜度,開發(fā)的迭代周期就會(huì)加長(zhǎng)。簡(jiǎn)單設(shè)計(jì)包括四方面含義:1、通過(guò)測(cè)試。2、避免重復(fù)代碼。3、明確表達(dá)每步編碼的目的,代碼可讀性強(qiáng)。4、盡可能少的對(duì)象類和方法。由于采用簡(jiǎn)單設(shè)計(jì),所以極限編程沒(méi)有復(fù)雜的設(shè)計(jì)文檔要求。
6、重構(gòu)。重構(gòu)是極限編程先測(cè)試后編碼的必然需求,為了整體軟件可以先進(jìn)行測(cè)試,對(duì)于一些軟件要開發(fā)的模塊先簡(jiǎn)單模擬,讓編譯通過(guò),到達(dá)測(cè)試的目的。然后再對(duì)模塊具體“優(yōu)化”,所以重構(gòu)包括模塊代碼的優(yōu)化與具體代碼的開發(fā)。重構(gòu)是使用了“物理學(xué)”的一個(gè)概念,是在不影響物體外部特性的前提下,重新優(yōu)化其內(nèi)部的機(jī)構(gòu)。這里的外部特性就是保證測(cè)試的通過(guò)。
7、測(cè)試驅(qū)動(dòng)開發(fā)。極限編程是以測(cè)試開始的,為了可以展示客戶需求的實(shí)現(xiàn),測(cè)試程序優(yōu)先設(shè)計(jì),測(cè)試是從客戶實(shí)用的角度出發(fā),客戶實(shí)際使用的軟件界面著想,測(cè)試是客戶需求的直接表現(xiàn),是客戶對(duì)軟件過(guò)程的理解。測(cè)試驅(qū)動(dòng)開發(fā),也就是客戶的需求驅(qū)動(dòng)軟件的開發(fā)。
8、持續(xù)集成。集成的理解就是提交軟件的展現(xiàn),由于采用測(cè)試驅(qū)動(dòng)開發(fā)、小版本的方式,所以不斷集成(整體測(cè)試)是與客戶溝通的依據(jù),也是讓客戶提出反饋意見的參照。持續(xù)集成也是完成階段開發(fā)任務(wù)的標(biāo)志。
9、結(jié)對(duì)編程。這是極限編程最有爭(zhēng)議的實(shí)踐。就是兩個(gè)程序員合用一臺(tái)計(jì)算機(jī)編程,一個(gè)編碼,一個(gè)檢查,增加專人審計(jì)是為了提供軟件編碼的質(zhì)量。兩個(gè)人的角色經(jīng)常變換,保持開發(fā)者的工作熱情。這種編程方式對(duì)培養(yǎng)新人或開發(fā)難度較大的軟件都有非常好的效果。
10、代碼共有。在極限編程里沒(méi)有嚴(yán)格文檔管理,代碼為開發(fā)團(tuán)隊(duì)共有,這樣有利于開發(fā)人員的流動(dòng)管理,因?yàn)樗械娜硕际煜に械木幋a。
11、編碼標(biāo)準(zhǔn)。編碼是開發(fā)團(tuán)隊(duì)里每個(gè)人的工作,又沒(méi)有詳細(xì)的文檔,代碼的可讀性是很重要的,所以規(guī)定統(tǒng)一的標(biāo)準(zhǔn)和習(xí)慣是必要的,有些象編碼人員的隱喻。
12、每周40小時(shí)工作。極限編程認(rèn)為編程是愉快的工作,不輕易加班,今天的工作今天做,小版本的設(shè)計(jì)也為了單位時(shí)間可以完成的工作安排。
三、敏捷開發(fā)
極限編程的思想體現(xiàn)了適應(yīng)客戶需求的快速變化,激發(fā)開發(fā)者的熱情,也是目前敏捷開發(fā)思維的重要支持者。
2001年,17名編程大師分別代表極限編程、Scrum(“棒球”團(tuán)隊(duì)開發(fā)模式)、特征驅(qū)動(dòng)開發(fā)、動(dòng)態(tài)系統(tǒng)開發(fā)方法、自適應(yīng)軟件開發(fā)、水晶方法、實(shí)用編程等開發(fā)流派,發(fā)表“敏捷軟件開發(fā)”宣言。敏捷軟件開發(fā)是一個(gè)開發(fā)軟件的管理新模式,用來(lái)替代以文件驅(qū)動(dòng)開發(fā)的瀑布開發(fā)模式。敏捷方式也稱輕量級(jí)開發(fā)方法。敏捷軟件開發(fā)宣言內(nèi)容:
個(gè)體和交互勝過(guò)過(guò)程和工具
可以工作的軟件勝過(guò)面面具到的文檔
可戶合作勝過(guò)合同談判
響應(yīng)變化勝過(guò)遵循計(jì)劃
敏捷開發(fā)集成了新型開發(fā)模式的共同特點(diǎn),它重點(diǎn)強(qiáng)調(diào):
1. 以人為本,注重編程中人的自我特長(zhǎng)發(fā)揮。
2. 強(qiáng)調(diào)軟件開發(fā)的產(chǎn)品是軟件,而不是文檔。文檔是為軟件開發(fā)服務(wù)的,而不是開發(fā)的主體。
3.客戶與開發(fā)者的關(guān)系是協(xié)作,不是合約。開發(fā)者不是客戶業(yè)務(wù)的“專家”,要適應(yīng)客戶的需求,是要客戶合作來(lái)闡述實(shí)際的需求細(xì)節(jié),而不是為了開發(fā)軟件,把開發(fā)人員變成客戶業(yè)務(wù)的專家,這是傳統(tǒng)開發(fā)模式或行業(yè)軟件開發(fā)企業(yè)的最大面臨問(wèn)題。
4.設(shè)計(jì)周密是為了最終軟件的質(zhì)量,但不表明設(shè)計(jì)比實(shí)現(xiàn)更重要,要適應(yīng)客戶需求的不斷變化,設(shè)計(jì)也要不斷跟進(jìn),所以設(shè)計(jì)不能是“閉門造車”、“自我良好”,能不斷根據(jù)環(huán)境的變化,修改自己的設(shè)計(jì),指導(dǎo)開發(fā)的方向是敏捷開發(fā)的目標(biāo)。
敏捷開發(fā)避免了傳統(tǒng)瀑布方式的弊端,主要是吸收了各種新型開發(fā)模式的“動(dòng)態(tài)”特性,關(guān)注點(diǎn)從文檔到開發(fā)者,管理方式也從工廠的流水線到團(tuán)隊(duì)的自我放松式的組織??偨Y(jié)敏捷開發(fā)與瀑布模式的不同,主要是下面幾個(gè)“敏捷”的關(guān)注點(diǎn):
迭代。軟件的功能是客戶的需求,界面的操作是客戶的“感覺”,對(duì)迭代的強(qiáng)調(diào)是縮短了軟件版本的周期
客戶參與。以人為本,客戶是軟件的使用者,是業(yè)務(wù)理解的專家,沒(méi)有客戶的參與,開發(fā)者很難理解客戶的真實(shí)需求
小版本??焖俟δ艿恼宫F(xiàn),看似簡(jiǎn)單,但對(duì)于復(fù)雜的客戶需求,合理地分割與總體上的統(tǒng)一,要很好地二者兼顧是不容易的。
敏捷就是“快”,快才可以適應(yīng)目前社會(huì)的快節(jié)奏;要快就要發(fā)揮個(gè)人的個(gè)性思維多一些,個(gè)性思維的增多,雖然通過(guò)結(jié)隊(duì)編程、代碼共有、團(tuán)隊(duì)替補(bǔ)等方式減少個(gè)人對(duì)軟件的影響力,但也會(huì)造成軟件開發(fā)繼承性的下降,因此敏捷開發(fā)是一個(gè)新的思路,但不是軟件開發(fā)的終極選擇。對(duì)于長(zhǎng)時(shí)間、人數(shù)眾多的大型軟件應(yīng)用的開發(fā),文檔的管理與銜接作用還是不可替代的。如何把敏捷的開發(fā)思路與傳統(tǒng)的“流水線工廠式”管理有機(jī)地結(jié)合,是軟件開發(fā)組織者面臨的新課題。
本文標(biāo)簽:軟件開發(fā)管理者思維的變化
* 由于無(wú)法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報(bào)酬未能及時(shí)支付,在此深表歉意,請(qǐng)《軟件開發(fā)管理者思維的變化》相關(guān)權(quán)利人與機(jī)電之家網(wǎng)取得聯(lián)系。










