XP的分析設(shè)計(jì)比起RUP會(huì)少很多,因?yàn)槊恳淮蔚牧6炔惶?,每個(gè)階段的分析與設(shè)計(jì)相對(duì)簡(jiǎn)單一些,并且在迭代的過(guò)程中可以逐步改進(jìn)。隱喻是極限編程方法學(xué)中的重要概念。但隱喻比較晦澀,它表示什么意思?在項(xiàng)目中如何應(yīng)用?這值得我們深入探討。
最近閱讀了《代碼大全》其中的一章“隱喻”,對(duì)隱喻在項(xiàng)目管理中的應(yīng)用有了一定體會(huì):它能夠促進(jìn)分析人員、設(shè)計(jì)人員、開(kāi)發(fā)人員之間的溝通與對(duì)項(xiàng)目業(yè)務(wù)的理解。
一、項(xiàng)目規(guī)模決定規(guī)劃
首先,軟件工程是從建筑領(lǐng)域引申進(jìn)來(lái)的,“設(shè)計(jì)模式”便是起源于建筑大師亞歷山大所寫(xiě)的《建筑的永恒之道》一書(shū)。我們可以把一個(gè)開(kāi)發(fā)項(xiàng)目比喻成建造房子。很明顯,建造摩天大廈和建造一層樓的準(zhǔn)備工作是截然不同的。建造摩天大廈需要前期經(jīng)過(guò)非常仔細(xì)的規(guī)劃,比如成本核算、時(shí)間核算、設(shè)計(jì)模型、設(shè)計(jì)圖紙等。
因?yàn)槿绻捌诓灰?guī)劃好,我們不可能建到一半推倒重建,它的成本太高了。這就是我們軟件工程里面“瀑布模型”的由來(lái)。其實(shí)這和軟件開(kāi)發(fā)項(xiàng)目是一一對(duì)應(yīng)的,項(xiàng)目也要經(jīng)過(guò)類似的成本時(shí)間估算、分析模型、設(shè)計(jì)模型這些過(guò)程。而建造一層樓就不同了,因?yàn)樗婕暗某杀靖?,前期所做的?guī)劃肯定簡(jiǎn)單一些。但不管如何,必要的成本核算、時(shí)間核算、設(shè)計(jì)模型、設(shè)計(jì)圖紙等前期規(guī)劃還是需要的。那么再更進(jìn)一步,如果想建一個(gè)狗窩,我們會(huì)去做仔細(xì)的規(guī)劃嗎?我想不會(huì)。在項(xiàng)目開(kāi)發(fā)中,我們同樣必須根據(jù)項(xiàng)目的規(guī)模大小,去衡量我們所需要做的前期規(guī)劃的詳細(xì)程度。
其次,無(wú)論建造什么房子—摩天大廈也好,一棟樓房也好,在前期核算、設(shè)計(jì)等準(zhǔn)備工作完成以后,必須先打地基,只有扎實(shí)的地基,才能支撐起整棟房子。程序開(kāi)發(fā)也同樣如此。在編碼構(gòu)建階段開(kāi)始的時(shí)候,我們必須在CVS上先搭建好整個(gè)開(kāi)發(fā)環(huán)境,確定整個(gè)系統(tǒng)的代碼目錄結(jié)構(gòu),確定接口、類、方法、參數(shù)的名稱以及它們之間的交互關(guān)系。如果采用UML統(tǒng)一建模語(yǔ)言來(lái)描述,設(shè)計(jì)階段必須產(chǎn)生包關(guān)系圖、類關(guān)系圖這兩種制品。我們?cè)诰幋a初始階段必須根據(jù)這兩種制品產(chǎn)生相應(yīng)的代碼骨架,為接下來(lái)的構(gòu)建打下堅(jiān)實(shí)的基礎(chǔ)。我們以前開(kāi)發(fā)的時(shí)候就吃過(guò)這樣的虧,在設(shè)計(jì)階段和編碼初始階段,沒(méi)有定義好這些程序架構(gòu),先由各程序員自行定義,后來(lái)重新定義的時(shí)候要耗費(fèi)大量的人力物力進(jìn)行代碼遷移。因此無(wú)論是建房子還是程序開(kāi)發(fā),打地基都是相當(dāng)重要的。
再次,建造房子的時(shí)候,經(jīng)過(guò)前面所說(shuō)的核算、設(shè)計(jì)、打地基,接下來(lái)會(huì)一層一層地建造房子,建造每一層之前我們可能會(huì)進(jìn)一步細(xì)化、優(yōu)化這一層的設(shè)計(jì)藍(lán)圖。這個(gè)過(guò)程就類似于軟件開(kāi)發(fā)過(guò)程的迭代開(kāi)發(fā),先集中精力對(duì)若干個(gè)特征或功能點(diǎn)進(jìn)行詳細(xì)設(shè)計(jì)和代碼構(gòu)建。這次開(kāi)發(fā)完成以后,再過(guò)渡到另外的若干個(gè)功能點(diǎn),形成一次一次的迭代。
二、迭代粒度的奧秘
從上面可以看到,迭代對(duì)軟件開(kāi)發(fā)來(lái)講是非常重要的,其實(shí)程序算法中的“分治法”也是這個(gè)道理。毫無(wú)疑問(wèn),RUP(Rational Unified Process,統(tǒng)一軟件開(kāi)發(fā)過(guò)程)和XP(eXtreme Programming,極限編程)都是強(qiáng)調(diào)迭代的,但為什么XP更輕量級(jí)、更加不注重詳細(xì)的分析與設(shè)計(jì),而RUP更加重量級(jí),需要各種文檔和詳細(xì)的分析設(shè)計(jì)呢?同樣是建造一棟摩天大廈,在RUP開(kāi)發(fā)方法學(xué)里面,它是從一次建造一層樓的粒度來(lái)進(jìn)行迭代開(kāi)發(fā)的,因此每一次迭代仍然需要相對(duì)詳細(xì)的分析與設(shè)計(jì)。而XP的方法則不同。它會(huì)以一套房子或者以一個(gè)房間的粒度去建造整棟摩天大廈,每一次迭代開(kāi)發(fā)的功能點(diǎn)不會(huì)太多,因此所需要做的前期規(guī)劃自然要少得多。軟件大師Robert C.Martin在他的《敏捷軟件開(kāi)發(fā)—原則、模式與實(shí)踐》中提到,XP