回顧自己所經(jīng)歷的兩個項(xiàng)目,來對設(shè)計(jì)階段進(jìn)行了總結(jié),自己也算是個XPer,經(jīng)歷過的這兩個項(xiàng)目也基本都是采用XP的方式進(jìn)展,大家都知道,XP在設(shè)計(jì)階段推崇的是群體設(shè)計(jì),通過CRC來完成,在這里就對兩個項(xiàng)目執(zhí)行的情況做做總結(jié)。
項(xiàng)目A
一個大型項(xiàng)目,當(dāng)時(shí)的團(tuán)隊(duì)相當(dāng)于是兩個設(shè)計(jì)師加上三個高程組成,迭代會議完成用戶故事分解、CRC設(shè)計(jì)以及任務(wù)分配,典型的XP方式,項(xiàng)目開展過程中應(yīng)該是整個過程都執(zhí)行的不錯,盡管現(xiàn)在回想當(dāng)時(shí)的CRC做的并不是很好,但應(yīng)該說在整個項(xiàng)目開展過程中并沒有出現(xiàn)多少問題,項(xiàng)目需求的實(shí)現(xiàn)都還算正常,整個團(tuán)隊(duì)的提高也是非常的不錯,共同進(jìn)步。
項(xiàng)目B
一個框架型項(xiàng)目,團(tuán)隊(duì)成員是一個設(shè)計(jì)師、一個高程加上四個初程,同樣的XP方式的設(shè)計(jì),項(xiàng)目開展過程中出現(xiàn)了不少問題,設(shè)計(jì)師不得不花大量的時(shí)間在技術(shù)支持上,而且最后項(xiàng)目的結(jié)果無論是需求上還是設(shè)計(jì)上都產(chǎn)生了不小的偏差,整個團(tuán)隊(duì)的提高也沒達(dá)到期望的效果,而由于設(shè)計(jì)師過多的投入在技術(shù)支持上,使得架構(gòu)的完善一直存在偏離。
為什么同樣的過程在兩個不同的項(xiàng)目、不同的團(tuán)隊(duì)中執(zhí)行的效果會相差這么遠(yuǎn)呢?
首先從項(xiàng)目類型分析,項(xiàng)目A屬于實(shí)際項(xiàng)目,項(xiàng)目B屬于研發(fā)項(xiàng)目,兩個項(xiàng)目的關(guān)注點(diǎn)不同,項(xiàng)目A的關(guān)注點(diǎn)是客戶需求,項(xiàng)目B的關(guān)注點(diǎn)則更多的是擴(kuò)展性和二次開發(fā)的易用性,在這兩類項(xiàng)目中設(shè)計(jì)幾乎是完全不同的,項(xiàng)目A更多的是業(yè)務(wù)的復(fù)雜度,而項(xiàng)目B更多的卻是技術(shù)的復(fù)雜度,從這個方面分析下來得出的結(jié)果其實(shí)就是項(xiàng)目A更重人員的業(yè)務(wù)能力,而項(xiàng)目B更重人員的技術(shù)能力,當(dāng)時(shí)項(xiàng)目A團(tuán)隊(duì)中的人員對該項(xiàng)目的業(yè)務(wù)應(yīng)該說都屬于熟悉的那種,覺得這也是成功的原因之一,而項(xiàng)目B團(tuán)隊(duì)中的人員技術(shù)相對項(xiàng)目要求來講是不足的。
接著從項(xiàng)目成員本身分析,項(xiàng)目A中的幾個成員基本都屬于能夠獨(dú)當(dāng)一面的人,而項(xiàng)目B中的成員水平參差不齊,覺得這也是在兩個項(xiàng)目中執(zhí)行效果不同的原因之一。
而最重要的一點(diǎn)問題我認(rèn)為出在設(shè)計(jì)階段上了,XP在設(shè)計(jì)階段更多的是發(fā)揮群體智慧,在設(shè)計(jì)時(shí)基本是群體參與,而形成的CRC盡管已經(jīng)詳細(xì),但通常都沒有一個良好的記錄,在項(xiàng)目A中由于團(tuán)隊(duì)成員個人的能力即使在實(shí)現(xiàn)的過程中出現(xiàn)一些問題也能獨(dú)立解決,所以沒有暴露出什么問題,同時(shí)由于團(tuán)隊(duì)成員能力的相當(dāng),在CRC設(shè)計(jì)討論的時(shí)候大家基本能做到充分的交流,對于大家的提升都很明顯,而在項(xiàng)目B中則由于團(tuán)隊(duì)成員能力的參差不齊,導(dǎo)致在CRC設(shè)計(jì)時(shí)基本沒有討論,都是設(shè)計(jì)師主導(dǎo),而且最終由于沒形成足夠的文檔,在實(shí)現(xiàn)時(shí)團(tuán)隊(duì)成員仍然是出現(xiàn)不少的問題,而需要設(shè)計(jì)師不斷的去指導(dǎo),最終導(dǎo)致設(shè)計(jì)師在架構(gòu)上投入的不足,同時(shí)也導(dǎo)致團(tuán)隊(duì)成員在實(shí)現(xiàn)時(shí)仍然出現(xiàn)不少問題;在設(shè)計(jì)階段的第二個問題則是由于在XP中實(shí)行簡單設(shè)計(jì),當(dāng)然,簡單不等于簡陋,但這個時(shí)候的設(shè)計(jì)更多的其實(shí)是需要通過重構(gòu)去不斷完善的,在項(xiàng)目A的團(tuán)隊(duì)中成員在完成任務(wù)后都會對自己的任務(wù)進(jìn)行一定的重構(gòu)完善設(shè)計(jì),而在項(xiàng)目B中卻沒法做到這一點(diǎn),導(dǎo)致最后的實(shí)現(xiàn)在設(shè)計(jì)上出現(xiàn)過多不完善的地方。
在這樣的分析下,認(rèn)為設(shè)計(jì)階段需要充分結(jié)合團(tuán)隊(duì)情況而考慮開展方式,對于水平都相當(dāng)并且具有一定設(shè)計(jì)能力的團(tuán)隊(duì)而言,群體設(shè)計(jì)的方式無疑會大大超過個體設(shè)計(jì),對于整個團(tuán)隊(duì)的協(xié)作、水平提升都會起到極佳的作用,而且這時(shí)我覺得也沒必要在設(shè)計(jì)上過多的追求,而應(yīng)該采用能想到的最簡單的解決方案,在成員實(shí)現(xiàn)解決方案的過程中成員可根據(jù)經(jīng)驗(yàn)不斷的進(jìn)行重構(gòu)完善設(shè)計(jì),在這樣的情況下沒必要開始形成規(guī)范的設(shè)計(jì)文檔,可在一定的階段如迭代完成前的設(shè)計(jì)穩(wěn)定時(shí)形成規(guī)范的設(shè)計(jì)文檔,其實(shí)同樣,在這樣的團(tuán)隊(duì)中沒有明顯的設(shè)計(jì)師和開發(fā)人員的區(qū)別,在這樣的團(tuán)隊(duì)中對于需求的變化是可以快速進(jìn)行響應(yīng)的,不用糾纏于規(guī)范的文檔格式,而可以通過代碼來表達(dá)出足夠的設(shè)計(jì)思想;而對于水平參差不齊的團(tuán)隊(duì)而言,個人認(rèn)為團(tuán)隊(duì)中的系統(tǒng)設(shè)計(jì)師這時(shí)要充分擔(dān)當(dāng)設(shè)計(jì)師的職責(zé),對于任務(wù)提供出詳細(xì)的設(shè)計(jì)文檔,通常來說,為了方便整個團(tuán)隊(duì)的理解,需要形成規(guī)范性質(zhì)的文檔,而且在做設(shè)計(jì)時(shí),設(shè)計(jì)師應(yīng)該盡量的考慮齊全,不能過多的去依賴后期的重構(gòu)來完善設(shè)計(jì),同時(shí),在將設(shè)計(jì)交由開發(fā)人員進(jìn)行實(shí)現(xiàn)時(shí)要加強(qiáng)Code Review以及開發(fā)指導(dǎo),在這樣形式的團(tuán)隊(duì)中,自動生成代碼的形式以及開發(fā)代碼的模板會起到很好的幫助,或者設(shè)計(jì)師可以通過依賴設(shè)計(jì)工具如rose等的強(qiáng)大支持,將設(shè)計(jì)模型轉(zhuǎn)化為開發(fā)模型,從一定程度上限定和規(guī)范開發(fā)人員的開發(fā),當(dāng)然,最佳的就是提供框架和框架的IDE,在這樣的方式下,就要求設(shè)計(jì)師對于設(shè)計(jì)有充分的把握能力和預(yù)見能力,否則在需求出現(xiàn)變化時(shí)會難以應(yīng)付,呵呵,就僅僅在規(guī)范的文檔格式方面都要投入不少時(shí)間,在這樣的情況下,設(shè)計(jì)師和開發(fā)人員的職責(zé)一定要界定清楚,設(shè)計(jì)師需要首先對架構(gòu)進(jìn)行完善,在完善后開始詳細(xì)設(shè)計(jì)并交由開發(fā)人員實(shí)現(xiàn),在這個過程中設(shè)計(jì)人員更多的是需要承擔(dān)起開發(fā)指導(dǎo)和設(shè)計(jì)Review的角色。
by the way:其實(shí)也可以看出,需要充分的對團(tuán)隊(duì)成員進(jìn)行了解來制定相應(yīng)的軟件過程,想做到流水線式的開發(fā)是要付出巨大的前期努力的。
ps:后續(xù)一文:系統(tǒng)設(shè)計(jì)方法和工具(爭取在年前完成),^_^