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