地利——模式快速
如前所說軟件開發(fā)的過程并不是一個簡單的過程,一個軟件的開發(fā)會被分成很多步驟來實現(xiàn),每一個步驟都有自己的起點和終點。也正如此使得開發(fā)過程中的每個步驟起點和終點在不同的軟件項目中出現(xiàn)不同難度的“坎”,使其難于達(dá)到該步驟開始或是終結(jié)的條件,開發(fā)過程也就不會一帆風(fēng)順。
不同的開發(fā)模式其實就是將步驟的起點和終點重新定義,甚至重新組合排列,雖然任何一個開發(fā)模式最終目的都是完成軟件項目的開發(fā),但期間所經(jīng)歷的過程不一樣,過程步驟之間的起點和終點的的定義不同所帶來的“坎”也就不一樣,項目周期自然各不相同,因此,根據(jù)軟件項目的實際情況選擇一個適合的開發(fā)模式能減少開發(fā)周期中“坎”的出現(xiàn)次數(shù)與難度,非常大程度的縮短開發(fā)周期。
瀑布模型
在本專題開始時我們所示范的開發(fā)流程,實際就是一種典型的瀑布模型(又稱線形模型):
瀑布模型是由W.W.Royce在1970年最初提出的軟件開發(fā)模型,在瀑布模型中,開發(fā)被認(rèn)為是按照需求分析,設(shè)計,實現(xiàn),測試
(確認(rèn)), 集成,和維護(hù)堅定地順暢地進(jìn)行。
在最初的文章中,Royce提倡重復(fù)地使用瀑布模型,以一種迭代的方式。但是,大多數(shù)人并不知道這一點,一些人也不相信它能夠作為一種真實世界的過程使用。在實踐中,過程很少能夠以純線性的方式進(jìn)行。
通過回到前面的階段或改便前一階段的結(jié)果的迭代是非常普遍的。
線性模型太理想化,太單純,以至很多人認(rèn)為瀑布模型已不再適合現(xiàn)代的軟件開發(fā)模式,幾乎被業(yè)界拋棄。偶而被人提起,都屬于被貶對象,未被留一絲惋惜。但我們應(yīng)該認(rèn)識到,“線性”是人們最容易掌握并能熟練應(yīng)用的思想方法。當(dāng)人們碰到一個復(fù)雜的“非線性”問題時,總是千方百計地將其分解或轉(zhuǎn)化為一系列簡單的線性問題,然后逐個解決。一個軟件系統(tǒng)的整體可能是復(fù)雜的,而單個子程序總是簡單的,可以用線性的方式來實現(xiàn),否則干活就太累了。線性是一種簡潔,簡潔就是美。當(dāng)我們領(lǐng)會了線性的精神,就不要再呆板地套用線性模型的外表,而應(yīng)該用活它。
瀑布模型解決了軟件工程上面的基本管理需求,但是對于我們所提的軟件項目的“快速開發(fā)”瀑布模型并沒有什么優(yōu)勢。
2.RUP(Rational Unified Process
瑞理統(tǒng)一過程)
RUP是建立在非常優(yōu)秀的軟件工程原則基礎(chǔ)上的,例如迭代,需求驅(qū)動,基于結(jié)構(gòu)化的過程開發(fā)。它提供了幾個方法,例如每一次迭代產(chǎn)生一個工作原型,在每一個階段的結(jié)束決定項目是否繼續(xù),這些方法提供了對開發(fā)過程的非常直觀的管理。RUP采用了萬維網(wǎng)技術(shù),可以增強(qiáng)團(tuán)隊的開發(fā)效率,并為所有成員提供了最佳的軟件實現(xiàn)方案。
RUP處理過程為軟件開發(fā)提供了規(guī)定性的指南、模板和范例。它可以通過提供一個應(yīng)用于整個軟件開發(fā)周期的、可定制的最佳開發(fā)方案架構(gòu),RUP可以對整個開發(fā)小組的工作進(jìn)行指導(dǎo)和安排。RUP將項目管理、商業(yè)建模、需求管理、分析和設(shè)計、測試以及變更控制等,統(tǒng)一到了一個一致的、貫穿整個開發(fā)周期的處理過程。
RUP正如其名,它使團(tuán)隊中每個開發(fā)人員的見解和思想得到統(tǒng)一,使開發(fā)小組成員的溝通更為容易,而這正是任何項目要取得成功的關(guān)鍵因素;它增強(qiáng)了開發(fā)人員對軟件的預(yù)見性,最終的好處就是提高了軟件質(zhì)量,并有效縮短了軟件從開發(fā)到投放市場的時間,全面提高了開發(fā)速度。
RUP是嚴(yán)格按照行業(yè)標(biāo)準(zhǔn)UML開發(fā)的,它的特點主要表現(xiàn)為如下六個方面:
- 開發(fā)復(fù)用。減少開發(fā)人員的工作量,并保證軟件質(zhì)量,在項目初期可降低風(fēng)險。
- 對需求進(jìn)行有效管理。
- 可視化建模。
- 使用組件體系結(jié)構(gòu),使軟件體系架構(gòu)更具彈性。
- 貫穿整個開發(fā)周期的質(zhì)量核查。
- 對軟件開發(fā)的變更控制。
RUP可以縮短軟件項目的開發(fā)周期,實現(xiàn)大型項目的快速開發(fā),對于中小型項目RUP就顯的過于龐大,其需要投入的成本也很非常觀。
3.敏捷開發(fā),極限編程
2001年,為了解決許多公司的軟件團(tuán)隊陷入不斷增長的過程泥潭,一批業(yè)界專家一起概括出了一些可以讓軟件開發(fā)團(tuán)隊具有快速工作、響應(yīng)變化能力的價值觀和原則,他們稱自己為敏捷聯(lián)盟。敏捷開發(fā)過程的方法很多,主要有:SCRUM,Crystal,特征驅(qū)動軟件開發(fā)(Feature
Driven Development,簡稱FDD),自適應(yīng)軟件開發(fā)(Adaptive
Software Development,簡稱ASD),以及最重要的極限編程(eXtreme
Programming,簡稱XP)。
極限編程是一套能快速開發(fā)高質(zhì)量軟件所需的價值觀、原則和活動的集合,使軟件能以盡可能快的速度開發(fā)出來并向客戶提供最高的效益。XP在很多方面都和傳統(tǒng)意義上得軟件工程不同,同時,它也和傳統(tǒng)得管理和項目計劃得方法不同。這些方法在軟件工程和其他管理活動中都有借鑒意義。
XP具有12個過程,只有完全使用12個過程才是真正使用了XP,只是簡單使用了其中一個方法并不代表使用了XP。
- 現(xiàn)場客戶(On-site Customer)
- 計劃博弈(Planning Game)
- 系統(tǒng)隱喻(System Design)
- 簡化設(shè)計(Simple Design)
- 集體擁有代碼(Collective Code Ownership)
- 結(jié)對編程(Pair Programming)
- 測試驅(qū)動(Test-driver)
- 小型發(fā)布(Small Release)
- 重構(gòu)(Refactoring)
- 持續(xù)集成(Continous integration)
- 每周40小時工作制(40-hour Weeks)
- 代碼規(guī)范(Coding Standards)
下面是極限編程的有效實踐:
- 完整團(tuán)隊 XP項目的所有參與者(開發(fā)人員、客戶、測試人員等)一起工作在一個開放的場所中,他們是同一個團(tuán)隊的成員。這個場所的墻壁上隨意懸掛著大幅的、顯著的圖表以及其他一些顯示他們進(jìn)度的東西。
- 計劃游戲計劃是持續(xù)的、循序漸進(jìn)的。每2周,開發(fā)人員就為下2周估算候選特性的成本,而客戶則根據(jù)成本和商務(wù)價值來選擇要實現(xiàn)的特性。
- 客戶測試作為選擇每個所期望的特性的一部分,客戶可以根據(jù)腳本語言來定義出自動驗收測試來表明該特性可以工作。
- 簡單設(shè)計團(tuán)隊保持設(shè)計恰好和當(dāng)前的系統(tǒng)功能相匹配。它通過了所有的測試,不包含任何重復(fù),表達(dá)出了編寫者想表達(dá)的所有東西,并且包含盡可能少的代碼。
- 結(jié)對編程所有的產(chǎn)品軟件都是由兩個程序員、并排坐在一起在同一臺機(jī)器上構(gòu)建的。
- 測試驅(qū)動開發(fā)編寫單元測試是一個驗證行為,更是一個設(shè)計行為。同樣,它更是一種編寫文檔的行為。編寫單元測試避免了相當(dāng)數(shù)量的反饋循環(huán),尤其是功功能能驗證方面的反饋循環(huán)。程序員以非常短的循環(huán)周期工作,他們先增加一個失敗的測試,然后使之通過。
- 改進(jìn)設(shè)計隨時利用重構(gòu)方法改進(jìn)已經(jīng)腐化的代碼,保持代碼盡可能的干凈、具有表達(dá)力。
- 持續(xù)集成團(tuán)隊總是使系統(tǒng)完整地被集成。一個人拆入(Check in)后,其它所有人責(zé)任代碼集成。
- 集體代碼所有權(quán)任何結(jié)對的程序員都可以在任何時候改進(jìn)任何代碼。沒有程序員對任何一個特定的模塊或技術(shù)單獨負(fù)責(zé),每個人都可以參與任何其它方面的開發(fā)。
- 編碼標(biāo)準(zhǔn) 系統(tǒng)中所有的代碼看起來就好像是被單獨一人編寫的。
- 隱喻 將整個系統(tǒng)聯(lián)系在一起的全局視圖;它是系統(tǒng)的未來影像,是它使得所有單獨模塊的位置和外觀變得明顯直觀。如果模塊的外觀與整個隱喻不符,那么你就知道該模塊是錯誤的。
- 可持續(xù)的速度 團(tuán)隊只有持久才有獲勝的希望。他們以能夠長期維持的速度努力工作,他們保存精力,他們把項目看作是馬拉松長跑,而不是全速短跑。
極限編程是一組簡單、具體的實踐,這些實踐結(jié)合在形成了一個敏捷開發(fā)過程。極限編程是一種優(yōu)良的、通用的軟件開發(fā)方法,項目團(tuán)隊可以拿來直接采用,也可以增加一些實踐,或者對其中的一些實踐進(jìn)行修改后再采用。
4.NoahWeb"增量迭代"模式
以RUP和極限編程中的增量所不同的的是NoahWeb“增量迭代”模式僅適用于B/S軟件項目?紤]B/S項目中的人員配置、工作重心與C/S項目截然不同的特殊性,因此該模式專門針對B/S項目而提出。
從以往的很多B/S應(yīng)用開發(fā)案例來看,用戶的需求并不會在需求分析階段和原型開發(fā)階段就可以準(zhǔn)確獲得,往往在應(yīng)用系統(tǒng)接近發(fā)布時,用戶才會提出各種各樣具體的需求。
[B/S應(yīng)用開發(fā)過程中各階段中用戶需求變化圖]
導(dǎo)致這樣的原因很簡單:在需求分析階段,最終用戶不可能通過開發(fā)文檔就能想象出應(yīng)用系統(tǒng)運行時的實際情況,而系統(tǒng)接近成型時,用戶通過真實使用會感覺到系統(tǒng)存在的問題和設(shè)計缺陷。由于用戶需求在發(fā)布前頻繁變更這一特性,使用傳統(tǒng)B/S解決方案的設(shè)計人員和開發(fā)人員將會此階段面臨需求變更的各種考驗,項目周期和開發(fā)成本也會在發(fā)布階段由于需求變更急劇擴(kuò)大,有時甚至可能之前工作推倒從來。
B/S項目以往一直采用同C/S軟件項目一樣的開發(fā)模式和流程管理。但由于B/S項目同C/S項目太多的不同之處,使得B/S項目開發(fā)周期很難控制。B/S一方面要面臨著需要短時間獲取需求,需求不明確。另一方面B/S開發(fā)中美工和界面設(shè)計美化的重要性也不同于C/S項目,B/S項目往往由美術(shù)和程序兩方面的人員來決定需求并且相互制約,這些巨大區(qū)別似的不能將B/S項目等同與C/S項目來進(jìn)行管理。
NoahWeb“增量迭代”開發(fā)模式的各步驟特點如下:
設(shè)計人員關(guān)注的不是程序結(jié)構(gòu)設(shè)計,而是用戶流程,在需求分析階段就可以邀請用戶一起參與“動作分解圖”的設(shè)計,讓用戶從一開始就可以感受到軟件使用的流程,讓所開發(fā)的軟件從一開始就貼近用戶需求;
原型階段將整個軟件項目的數(shù)據(jù)輸入界面和輸出按照動作流程呈現(xiàn)給用戶,讓用戶可以直觀的從輸入輸出的具體細(xì)節(jié)體驗軟件,反饋修改意見,讓開發(fā)的軟件再次貼近需求。
在此階段,還可以讓用戶通過至少兩個階段性的演示讓用戶體會軟件的流程和真實的數(shù)據(jù)輸入輸出,體驗真實的軟件使用感覺,為項目開發(fā)團(tuán)隊反饋出更準(zhǔn)確的需求。
在發(fā)布階段軟件已經(jīng)能非常貼近最終用戶需求,即使發(fā)布后更意外的需求變更,也能輕松應(yīng)變。
使用該模式項目實施B/S項目的效果將很大程度上區(qū)別于其他模式效果。軟件項目的開發(fā)中需求分析與編碼實現(xiàn)已經(jīng)被融為一體,而且在開發(fā)的任意階段,開發(fā)人員都已經(jīng)準(zhǔn)備好應(yīng)付后續(xù)階段可能出現(xiàn)的任何變化。變化成為計劃一部分。
更多有關(guān)NoahWeb“增量迭代”開發(fā)模式的詳細(xì)介紹,可查看:
|