RUP的過程改進(jìn),倡導(dǎo)針對(duì)不同類型項(xiàng)目進(jìn)行適當(dāng)?shù)牟眉?,?shí)際上這也是一種靈活適應(yīng)的方式、隨需而變的思想。我對(duì)此是理解并贊同的,但是我對(duì)RUP卻一直保持一種相對(duì)謹(jǐn)慎的態(tài)度。
對(duì)于RUP來說,首先,我認(rèn)為它過于理想化和理論化,RUP 是過程組件、方法以及技術(shù)的框架,你可以將其應(yīng)用于任何特定的軟件項(xiàng)目,由用戶自己限定 RUP 的使用范圍。對(duì)于各種類型的軟件項(xiàng)目,RUP并未給出具體的自身裁減及實(shí)施策略,總有些無依據(jù)可循的感覺。你既可以說它能解決任何問題,也可以說它什么都不是;其次,RUP從本質(zhì)來說還是一個(gè)強(qiáng)調(diào)設(shè)計(jì)和規(guī)范的軟件方法,從這個(gè)角度來講,與傳統(tǒng)的瀑布模型沒有太大差別,它的靈活性較之敏捷方法還是相對(duì)較弱的。在一些小型軟件項(xiàng)目、特別是不可預(yù)測(cè)的軟件項(xiàng)目開發(fā)中,面臨著各種緊急需求、面臨著時(shí)間壓力,沿用RUP是很難應(yīng)付自如的。但是在另一方面,RUP強(qiáng)調(diào)對(duì)知識(shí)的收集、整理和加工定義,強(qiáng)調(diào)在軟件開發(fā)的時(shí)候要有好的體系結(jié)構(gòu)。所以它還是很有利于知識(shí)的積累和共享的。
相比RUP ,敏捷方法如XP則更為靈活,倡導(dǎo)盡早的、持續(xù)的交付有價(jià)值的軟件滿足用戶需要。用交流溝通取代詳盡的文檔,強(qiáng)調(diào)團(tuán)隊(duì)的主動(dòng)、自律、自我組織和自發(fā)管理。而XP也是以代碼為核心的一種方法,這里有很多的東西是未知的,知識(shí)只存在于兩個(gè)地方:開發(fā)者的頭腦和最后的代碼。對(duì)于項(xiàng)目管理者來說,他們會(huì)認(rèn)為敏捷開發(fā)方法弱化了知識(shí)管理的概念,而實(shí)際上敏捷開發(fā)注重的是最有價(jià)值的知識(shí)的積累和沉淀。
如何靈活應(yīng)對(duì)各種項(xiàng)目風(fēng)險(xiǎn)、如何化優(yōu)先滿足用戶價(jià)值、又如何能夠有效的控制項(xiàng)目開發(fā)過程、如果做好項(xiàng)目過程中的知識(shí)管理,是每一個(gè)軟件項(xiàng)目管理者都需要深入思考的問題。RUP的倡導(dǎo)者一直強(qiáng)調(diào)RUP裁剪,實(shí)際上我認(rèn)為RUP不僅僅是需要自身的裁剪,還需要學(xué)會(huì)融合。在RUP裁剪的同時(shí),適宜的融合敏捷開發(fā)的各種實(shí)踐。不要認(rèn)為RUP與XP是矛盾的,其實(shí)不然,它們具有不同的原理、具有不同的應(yīng)用領(lǐng)域。在 RUP 中融合了 XP 技術(shù)時(shí),才會(huì)得到過程的正確量,既滿足了項(xiàng)目所有成員的需要,又解決了所有主要的項(xiàng)目風(fēng)險(xiǎn)問題。對(duì)于一個(gè)工作于高信任環(huán)境中的小型項(xiàng)目團(tuán)隊(duì),其中用戶是團(tuán)隊(duì)的一部分,那么 XP 完全可以勝任。對(duì)于團(tuán)隊(duì)越來越分散,代碼量越來越大,或者構(gòu)架沒有很好定義的情況,您需要做一些其他工作。在用戶交互具有"契約"風(fēng)格的項(xiàng)目中,僅有 XP 是不夠的。RUP 是一個(gè)框架,可以從 RUP 出發(fā),在必要時(shí)以一組更健壯的技術(shù)來擴(kuò)展 XP。
RUP實(shí)踐包括:
1. 迭代開發(fā): RUP的開發(fā)過程建立在一系列迭代之上,每次迭代都有一個(gè)固定的時(shí)間限制(例如四個(gè)星期),稱為"時(shí)間盒",每次迭代結(jié)束的時(shí)候都發(fā)布一個(gè)穩(wěn)定的小版本,該版本是最終系統(tǒng)的子集。"時(shí)間盒"是迭代開發(fā)中的關(guān)鍵概念:它意味著迭代周期的期限是固定的,如果目標(biāo)沒有完成,則放棄本次迭代的需求,而不是延長(zhǎng)迭代的時(shí)間。
2. 管理需求
3. 使用基于組件的構(gòu)架
4. 可視建模
5. 持續(xù)的質(zhì)量驗(yàn)證
6. 控制變更
關(guān)于RUP階段的一個(gè)簡(jiǎn)潔和準(zhǔn)確的描述:
1.初始-開發(fā)系統(tǒng)的業(yè)務(wù)用例;要求探索少量但是重要的需求(大約10%),以便獲得范圍、關(guān)鍵風(fēng)險(xiǎn)的尺度,并且決定是否進(jìn)入細(xì)化階段。
2.細(xì)化-迭代地構(gòu)建核心體系結(jié)構(gòu)和解決技術(shù)風(fēng)險(xiǎn)。構(gòu)建體系結(jié)構(gòu)意味著真正的編程、集成及測(cè)試-這不是紙上談兵或者丟棄原型。細(xì)化階段,我們需要迭代地詳細(xì)地探索大部分需求(大約80%),同時(shí)實(shí)現(xiàn)系統(tǒng)的核心風(fēng)險(xiǎn)部分。在整個(gè)細(xì)化階段需求都可能是變化的,通過不斷的"反饋-適應(yīng)"循環(huán),評(píng)估已實(shí)現(xiàn)的部分。
可以看到,這與傳統(tǒng)的瀑布風(fēng)格的需求定義不同,其大部分需求是在開發(fā)核心體系結(jié)構(gòu)的同時(shí)細(xì)化得到的,并且其從實(shí)際的開發(fā)中得到反饋。我們也能夠以此為據(jù)來決定是否繼續(xù)此項(xiàng)目。
3.構(gòu)造-迭代地構(gòu)建細(xì)化階段沒有做的元素;迭代地集成和進(jìn)行質(zhì)量保證;準(zhǔn)備部署。由于大部分需求的不穩(wěn)定性已經(jīng)在細(xì)化階段澄清,所以在構(gòu)造階段需求的變化較少。
4. 發(fā)布-完成&beta測(cè)試,確定版本,部署系統(tǒng)。RUP規(guī)則推薦"迭代周期的長(zhǎng)度是2-6周"。 迭代開發(fā)和RUP的本質(zhì)是采取小步驟,對(duì)于可能不完美的實(shí)現(xiàn),迅速集成,質(zhì)量保證,測(cè)試,及時(shí)獲得反饋,然后根據(jù)反饋,調(diào)整需求、設(shè)計(jì)和實(shí)現(xiàn)。小步驟、反饋和調(diào)整是核心概念。
迭代方法允許我們邊學(xué)邊走;隨著迭代的進(jìn)行,我們得到越來越多的真實(shí)的需求,更加客觀的風(fēng)險(xiǎn),以及完成該項(xiàng)目的更加準(zhǔn)確的能力估計(jì)。簡(jiǎn)言之,經(jīng)驗(yàn)使我們成為更好的計(jì)劃者。
12 個(gè) XP 實(shí)踐包括:
有計(jì)劃的開發(fā):通過結(jié)合使用優(yōu)先級(jí)"故事"和技術(shù)估算,確定下一版本的功能
小版本:以小的增量版本經(jīng)常向客戶發(fā)布軟件
隱喻:隱喻是一個(gè)簡(jiǎn)單、共享的"故事"或描述,說明系統(tǒng)如何工作
簡(jiǎn)單設(shè)計(jì):通過保持代碼簡(jiǎn)單從而保證設(shè)計(jì)簡(jiǎn)單。不斷的在代碼中尋找復(fù)雜點(diǎn)并且立刻進(jìn)行移除
測(cè)試驅(qū)動(dòng)開發(fā):用戶編寫測(cè)試內(nèi)容以對(duì)"故事"進(jìn)行測(cè)試。程序員編寫測(cè)試內(nèi)容來發(fā)現(xiàn)代碼中的任何問題。在編寫代碼前先編寫測(cè)試內(nèi)容
重構(gòu):這是一項(xiàng)簡(jiǎn)化技術(shù),用來移除代碼中的重復(fù)內(nèi)容和復(fù)雜之處
結(jié)對(duì)編程:團(tuán)隊(duì)中的兩個(gè)成員使用同一臺(tái)計(jì)算機(jī)開發(fā)所有的代碼。一個(gè)人編寫代碼或者驅(qū)動(dòng),另一個(gè)人同時(shí)審查代碼的正確性和可理解性
集體代碼所有權(quán):任何人都擁有所有的代碼。這就意味這每個(gè)人都可以在任何時(shí)候變更任何代碼
持續(xù)集成:每天多次創(chuàng)建和集成系統(tǒng),只要任何實(shí)現(xiàn)任務(wù)完成就要進(jìn)行
每周 40 個(gè)小時(shí):程序員在疲勞時(shí)無法保證效率。連續(xù)兩周加班是絕對(duì)不允許的
現(xiàn)場(chǎng)客戶:一名真實(shí)的客戶全時(shí)工作于開發(fā)環(huán)境中,幫助定義系統(tǒng)、編寫測(cè)試內(nèi)容并回答問題
編碼標(biāo)準(zhǔn):程序員采用一致的編碼標(biāo)準(zhǔn)證
RUP與XP的融合,是各自特點(diǎn)的相互補(bǔ)充,也是軟件開發(fā)方法的平衡之道。而對(duì)軟件技術(shù)平衡的思考也可以說是技術(shù)成熟的開始吧。
最后,再闡明我對(duì)軟件項(xiàng)目開發(fā)的理解。在軟件項(xiàng)目開發(fā)過程中,應(yīng)該能夠識(shí)別、分析不同軟件項(xiàng)目的特點(diǎn),采用相對(duì)適合的開發(fā)實(shí)踐來適應(yīng)軟件開發(fā)過程,保證對(duì)軟件開發(fā)的有效支持,以便能夠創(chuàng)造出&ldquo足夠好的&rdquo軟件。而這個(gè)足夠就是對(duì)進(jìn)度、成本、質(zhì)量之間的平衡,化滿足客戶需要的實(shí)現(xiàn)。
對(duì)于RUP來說,首先,我認(rèn)為它過于理想化和理論化,RUP 是過程組件、方法以及技術(shù)的框架,你可以將其應(yīng)用于任何特定的軟件項(xiàng)目,由用戶自己限定 RUP 的使用范圍。對(duì)于各種類型的軟件項(xiàng)目,RUP并未給出具體的自身裁減及實(shí)施策略,總有些無依據(jù)可循的感覺。你既可以說它能解決任何問題,也可以說它什么都不是;其次,RUP從本質(zhì)來說還是一個(gè)強(qiáng)調(diào)設(shè)計(jì)和規(guī)范的軟件方法,從這個(gè)角度來講,與傳統(tǒng)的瀑布模型沒有太大差別,它的靈活性較之敏捷方法還是相對(duì)較弱的。在一些小型軟件項(xiàng)目、特別是不可預(yù)測(cè)的軟件項(xiàng)目開發(fā)中,面臨著各種緊急需求、面臨著時(shí)間壓力,沿用RUP是很難應(yīng)付自如的。但是在另一方面,RUP強(qiáng)調(diào)對(duì)知識(shí)的收集、整理和加工定義,強(qiáng)調(diào)在軟件開發(fā)的時(shí)候要有好的體系結(jié)構(gòu)。所以它還是很有利于知識(shí)的積累和共享的。
相比RUP ,敏捷方法如XP則更為靈活,倡導(dǎo)盡早的、持續(xù)的交付有價(jià)值的軟件滿足用戶需要。用交流溝通取代詳盡的文檔,強(qiáng)調(diào)團(tuán)隊(duì)的主動(dòng)、自律、自我組織和自發(fā)管理。而XP也是以代碼為核心的一種方法,這里有很多的東西是未知的,知識(shí)只存在于兩個(gè)地方:開發(fā)者的頭腦和最后的代碼。對(duì)于項(xiàng)目管理者來說,他們會(huì)認(rèn)為敏捷開發(fā)方法弱化了知識(shí)管理的概念,而實(shí)際上敏捷開發(fā)注重的是最有價(jià)值的知識(shí)的積累和沉淀。
如何靈活應(yīng)對(duì)各種項(xiàng)目風(fēng)險(xiǎn)、如何化優(yōu)先滿足用戶價(jià)值、又如何能夠有效的控制項(xiàng)目開發(fā)過程、如果做好項(xiàng)目過程中的知識(shí)管理,是每一個(gè)軟件項(xiàng)目管理者都需要深入思考的問題。RUP的倡導(dǎo)者一直強(qiáng)調(diào)RUP裁剪,實(shí)際上我認(rèn)為RUP不僅僅是需要自身的裁剪,還需要學(xué)會(huì)融合。在RUP裁剪的同時(shí),適宜的融合敏捷開發(fā)的各種實(shí)踐。不要認(rèn)為RUP與XP是矛盾的,其實(shí)不然,它們具有不同的原理、具有不同的應(yīng)用領(lǐng)域。在 RUP 中融合了 XP 技術(shù)時(shí),才會(huì)得到過程的正確量,既滿足了項(xiàng)目所有成員的需要,又解決了所有主要的項(xiàng)目風(fēng)險(xiǎn)問題。對(duì)于一個(gè)工作于高信任環(huán)境中的小型項(xiàng)目團(tuán)隊(duì),其中用戶是團(tuán)隊(duì)的一部分,那么 XP 完全可以勝任。對(duì)于團(tuán)隊(duì)越來越分散,代碼量越來越大,或者構(gòu)架沒有很好定義的情況,您需要做一些其他工作。在用戶交互具有"契約"風(fēng)格的項(xiàng)目中,僅有 XP 是不夠的。RUP 是一個(gè)框架,可以從 RUP 出發(fā),在必要時(shí)以一組更健壯的技術(shù)來擴(kuò)展 XP。
RUP實(shí)踐包括:
1. 迭代開發(fā): RUP的開發(fā)過程建立在一系列迭代之上,每次迭代都有一個(gè)固定的時(shí)間限制(例如四個(gè)星期),稱為"時(shí)間盒",每次迭代結(jié)束的時(shí)候都發(fā)布一個(gè)穩(wěn)定的小版本,該版本是最終系統(tǒng)的子集。"時(shí)間盒"是迭代開發(fā)中的關(guān)鍵概念:它意味著迭代周期的期限是固定的,如果目標(biāo)沒有完成,則放棄本次迭代的需求,而不是延長(zhǎng)迭代的時(shí)間。
2. 管理需求
3. 使用基于組件的構(gòu)架
4. 可視建模
5. 持續(xù)的質(zhì)量驗(yàn)證
6. 控制變更
關(guān)于RUP階段的一個(gè)簡(jiǎn)潔和準(zhǔn)確的描述:
1.初始-開發(fā)系統(tǒng)的業(yè)務(wù)用例;要求探索少量但是重要的需求(大約10%),以便獲得范圍、關(guān)鍵風(fēng)險(xiǎn)的尺度,并且決定是否進(jìn)入細(xì)化階段。
2.細(xì)化-迭代地構(gòu)建核心體系結(jié)構(gòu)和解決技術(shù)風(fēng)險(xiǎn)。構(gòu)建體系結(jié)構(gòu)意味著真正的編程、集成及測(cè)試-這不是紙上談兵或者丟棄原型。細(xì)化階段,我們需要迭代地詳細(xì)地探索大部分需求(大約80%),同時(shí)實(shí)現(xiàn)系統(tǒng)的核心風(fēng)險(xiǎn)部分。在整個(gè)細(xì)化階段需求都可能是變化的,通過不斷的"反饋-適應(yīng)"循環(huán),評(píng)估已實(shí)現(xiàn)的部分。
可以看到,這與傳統(tǒng)的瀑布風(fēng)格的需求定義不同,其大部分需求是在開發(fā)核心體系結(jié)構(gòu)的同時(shí)細(xì)化得到的,并且其從實(shí)際的開發(fā)中得到反饋。我們也能夠以此為據(jù)來決定是否繼續(xù)此項(xiàng)目。
3.構(gòu)造-迭代地構(gòu)建細(xì)化階段沒有做的元素;迭代地集成和進(jìn)行質(zhì)量保證;準(zhǔn)備部署。由于大部分需求的不穩(wěn)定性已經(jīng)在細(xì)化階段澄清,所以在構(gòu)造階段需求的變化較少。
4. 發(fā)布-完成&beta測(cè)試,確定版本,部署系統(tǒng)。RUP規(guī)則推薦"迭代周期的長(zhǎng)度是2-6周"。 迭代開發(fā)和RUP的本質(zhì)是采取小步驟,對(duì)于可能不完美的實(shí)現(xiàn),迅速集成,質(zhì)量保證,測(cè)試,及時(shí)獲得反饋,然后根據(jù)反饋,調(diào)整需求、設(shè)計(jì)和實(shí)現(xiàn)。小步驟、反饋和調(diào)整是核心概念。
迭代方法允許我們邊學(xué)邊走;隨著迭代的進(jìn)行,我們得到越來越多的真實(shí)的需求,更加客觀的風(fēng)險(xiǎn),以及完成該項(xiàng)目的更加準(zhǔn)確的能力估計(jì)。簡(jiǎn)言之,經(jīng)驗(yàn)使我們成為更好的計(jì)劃者。
12 個(gè) XP 實(shí)踐包括:
有計(jì)劃的開發(fā):通過結(jié)合使用優(yōu)先級(jí)"故事"和技術(shù)估算,確定下一版本的功能
小版本:以小的增量版本經(jīng)常向客戶發(fā)布軟件
隱喻:隱喻是一個(gè)簡(jiǎn)單、共享的"故事"或描述,說明系統(tǒng)如何工作
簡(jiǎn)單設(shè)計(jì):通過保持代碼簡(jiǎn)單從而保證設(shè)計(jì)簡(jiǎn)單。不斷的在代碼中尋找復(fù)雜點(diǎn)并且立刻進(jìn)行移除
測(cè)試驅(qū)動(dòng)開發(fā):用戶編寫測(cè)試內(nèi)容以對(duì)"故事"進(jìn)行測(cè)試。程序員編寫測(cè)試內(nèi)容來發(fā)現(xiàn)代碼中的任何問題。在編寫代碼前先編寫測(cè)試內(nèi)容
重構(gòu):這是一項(xiàng)簡(jiǎn)化技術(shù),用來移除代碼中的重復(fù)內(nèi)容和復(fù)雜之處
結(jié)對(duì)編程:團(tuán)隊(duì)中的兩個(gè)成員使用同一臺(tái)計(jì)算機(jī)開發(fā)所有的代碼。一個(gè)人編寫代碼或者驅(qū)動(dòng),另一個(gè)人同時(shí)審查代碼的正確性和可理解性
集體代碼所有權(quán):任何人都擁有所有的代碼。這就意味這每個(gè)人都可以在任何時(shí)候變更任何代碼
持續(xù)集成:每天多次創(chuàng)建和集成系統(tǒng),只要任何實(shí)現(xiàn)任務(wù)完成就要進(jìn)行
每周 40 個(gè)小時(shí):程序員在疲勞時(shí)無法保證效率。連續(xù)兩周加班是絕對(duì)不允許的
現(xiàn)場(chǎng)客戶:一名真實(shí)的客戶全時(shí)工作于開發(fā)環(huán)境中,幫助定義系統(tǒng)、編寫測(cè)試內(nèi)容并回答問題
編碼標(biāo)準(zhǔn):程序員采用一致的編碼標(biāo)準(zhǔn)證
RUP與XP的融合,是各自特點(diǎn)的相互補(bǔ)充,也是軟件開發(fā)方法的平衡之道。而對(duì)軟件技術(shù)平衡的思考也可以說是技術(shù)成熟的開始吧。
最后,再闡明我對(duì)軟件項(xiàng)目開發(fā)的理解。在軟件項(xiàng)目開發(fā)過程中,應(yīng)該能夠識(shí)別、分析不同軟件項(xiàng)目的特點(diǎn),采用相對(duì)適合的開發(fā)實(shí)踐來適應(yīng)軟件開發(fā)過程,保證對(duì)軟件開發(fā)的有效支持,以便能夠創(chuàng)造出&ldquo足夠好的&rdquo軟件。而這個(gè)足夠就是對(duì)進(jìn)度、成本、質(zhì)量之間的平衡,化滿足客戶需要的實(shí)現(xiàn)。

