關(guān)于敏捷軟件開(kāi)發(fā)新的理解
前兩天,在一次聊天中,我問(wèn)了問(wèn)未來(lái)開(kāi)發(fā)組的組長(zhǎng):眼看設(shè)計(jì)過(guò)程就要結(jié)束了,項(xiàng)目啟動(dòng)到現(xiàn)在進(jìn)行了3個(gè)月的時(shí)間,想一想,前一階段我們所做的工作中,有百 分之多少是對(duì)后面的工作有意義的?開(kāi)發(fā)組長(zhǎng)無(wú)奈的苦笑了一下。顯然大家心里面都有數(shù),這個(gè)比例很不理想。尤其是設(shè)計(jì)文檔中的模塊設(shè)計(jì)部分,大量的工作量, 完全是為了設(shè)計(jì)文檔能夠評(píng)審?fù)ㄟ^(guò)。
對(duì)于敏捷軟件開(kāi)發(fā),目前理解其最重要的目的是識(shí)別軟件過(guò)程中沒(méi)有必要的任務(wù)或者是性能低下的任務(wù),然后去除之或者改進(jìn)之?;谶@個(gè)出發(fā)點(diǎn)回顧一下目前的情況:
需求分析。***不變的就是變化。項(xiàng)目的早期集中時(shí)間進(jìn)行需求分析然后確認(rèn)基線,再等到真正動(dòng)手開(kāi)發(fā)某一模塊的時(shí)候可能已經(jīng)過(guò)去了一段時(shí)間,并且需求已經(jīng)發(fā)生了變化。這樣還需要對(duì)新的需求進(jìn)行再次分析。在這樣的情況下,前后的需求分析則存在工作量的浪費(fèi)。
敏捷過(guò)程則是需求分析存在與整個(gè)項(xiàng)目的始終。細(xì)節(jié)的需求分析工作盡在真正開(kāi)始代碼之前才進(jìn)行。雖然以后仍然有可能發(fā)生變化,但起碼針對(duì)上面的情況做了優(yōu)化。
軟件設(shè)計(jì)。目前的項(xiàng)目,設(shè)計(jì)階段需要的交付物有:架構(gòu)設(shè)計(jì),概要設(shè)計(jì),詳細(xì)設(shè)計(jì),物理模型設(shè)計(jì),接口設(shè)計(jì)等等。設(shè)計(jì)的目的當(dāng)然是為了能夠知道開(kāi)發(fā)。這一部分工作顯然是必須的,但是能否優(yōu)化呢?
敏捷過(guò)程典型的對(duì)策是
1.僅僅做足夠的設(shè)計(jì);
2.測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。
系統(tǒng)的架構(gòu)設(shè)計(jì)是需要的。但是針對(duì)某一功能來(lái)講,僅僅在開(kāi)發(fā)之前才做相應(yīng)的詳細(xì)設(shè)計(jì)。設(shè)計(jì)僅僅做到能夠指導(dǎo)開(kāi)發(fā)的程度,對(duì)文檔的格式要求比較寬松。
傳統(tǒng)的UML設(shè)計(jì)包括類(lèi)圖、順序圖、協(xié)作圖、活動(dòng)圖、狀態(tài)圖等等。這個(gè)敏捷過(guò)程一般沒(méi)有強(qiáng)制要求。XP過(guò)程中推薦以TDD和CRC分析來(lái)代替。其中CRC分 析基本上是UML協(xié)作圖的替代物,但是更加強(qiáng)調(diào)團(tuán)隊(duì)共同完成。而TDD則是在保證了測(cè)試自動(dòng)化的同時(shí)還能夠?qū)浖O(shè)計(jì)進(jìn)行指導(dǎo),做一件事達(dá)到兩個(gè)效果,體現(xiàn)其高效率。
界面原型。我前面說(shuō)過(guò),希望能夠在需求分析階段就能夠?qū)ο到y(tǒng)的界面進(jìn)行確認(rèn),還找了一些專(zhuān)業(yè)做頁(yè)面原 型的輔助工具?,F(xiàn)在看來(lái),其實(shí)也存在浪費(fèi)。其實(shí)更高效的做法是以最快的速度拿出開(kāi)發(fā)出的成品或者半成品讓用戶進(jìn)行確認(rèn)(這樣一來(lái),***的問(wèn)題是你能有多 快?;-) )。界面草圖有的時(shí)候是需要的,但是它變成了非常不正式的中間產(chǎn)物,不必要進(jìn)行存檔。
重構(gòu)。仔細(xì)想想,其實(shí)重構(gòu)的工作對(duì)于任何一個(gè)項(xiàng)目來(lái)講都是必須的。而現(xiàn)實(shí)是,如果沒(méi)有采取全面的自動(dòng)化測(cè)試的話,傳統(tǒng)的軟件開(kāi)發(fā)項(xiàng)目沒(méi)有能力也不敢進(jìn)行深度的重構(gòu)。而相反基于TDD的XP團(tuán)隊(duì)則更有勇氣對(duì)軟件進(jìn)行徹底重構(gòu)。
集成。集成的工作量無(wú)法節(jié)省。敏捷過(guò)程的做法是持續(xù)集成——將工作量分散到整個(gè)軟件生命周期。這樣能夠及時(shí)發(fā)現(xiàn)問(wèn)題,并從感受上減少工作量。
我有一個(gè)朋友,看他上網(wǎng)打橋牌的時(shí)候,經(jīng)常發(fā)現(xiàn)他的搭檔在抱怨他發(fā)生了失誤。而實(shí)際的情況是怎么樣的呢?我的朋友是全國(guó)***橋牌賽事的前四名獲得者。那些被抱怨失誤的牌都是由于他的搭檔的水平不夠,對(duì)于他的精妙招數(shù)無(wú)法理解。
在軟件開(kāi)發(fā)領(lǐng)域,其實(shí)我們也正在處于我的朋友的搭檔的水平。經(jīng)歷的項(xiàng)目越多,越會(huì)發(fā)現(xiàn)業(yè)內(nèi)大師的很多理論的精妙之處。很多情況是:如果大師們的理論你認(rèn)為有很大問(wèn)題的話,其實(shí)是因?yàn)槟愕膶哟芜€不夠。
【編輯推薦】