常用開發(fā)模式 一、瀑布式開發(fā) 瀑布式開發(fā)是在1970年提出的軟件開發(fā)模型,是一種較老的計算機軟件開發(fā)模式,也是典型的預(yù)見性的開發(fā)模式,在瀑布式開發(fā)中,開發(fā)嚴格遵循預(yù)先計劃的需求分析、設(shè)計、編碼、集成、測試、維護的步驟進行,步驟的成果作為衡量進度的方法。瀑布式開發(fā)最早強調(diào)系統(tǒng)開發(fā)應(yīng)有完整的周期,且必須完成完整地經(jīng)歷每個周期內(nèi)的每個階段,并系統(tǒng)化地考量分析所設(shè)計的技術(shù)、時間與資源等。 瀑布式開發(fā)的主要問題是它嚴格分級導(dǎo)致自由度降低,在需求不明確并且在項目進行過程中可能有變化的情況下基本上是不可行的。 (瀑布式開發(fā)模式圖) 二、迭代式開發(fā) 迭代式開發(fā)也稱迭代增量式開發(fā),是一種與瀑布式開發(fā)相反的軟件開發(fā)過程,它彌補了瀑布式開發(fā)方式的一些弱點,有更高的成功率。在迭代式開發(fā)中,整個開發(fā)工作被組織成一系列短小的、固定長度的小項目,每次迭代都包括需求分析、設(shè)計、實現(xiàn)與測試。采用迭代式開發(fā)時,工作可以在需求被確定之前啟動,并在一次迭代中完成系統(tǒng)的一部分功能或業(yè)務(wù),再通過客戶的反饋來細化需求,并開始新一輪的迭代。 (迭代式開發(fā)模式圖) 迭代式開發(fā)有以下的特點: 1)每次只設(shè)計和實現(xiàn)產(chǎn)品的一部分 2)一步一步地完成 3)每次設(shè)計和實現(xiàn)一個階段,這叫作迭代 三、螺旋式開發(fā) 螺旋式開發(fā)兼顧了快速原型的迭代特征及瀑布模型的系統(tǒng)化和嚴格監(jiān)控,其最大的特點是引入了其他模型不具備的風(fēng)險分析,使軟件在無法排除重大風(fēng)險時有機會停止,以減少損失。同時,在每個迭代階段構(gòu)建原型是螺旋模型用來減少風(fēng)險的方法。螺旋模型更適合大型的高昂的系統(tǒng)級的軟件開發(fā),一開始應(yīng)用的規(guī)模很小,當項目被定義得更好、更穩(wěn)定時逐漸展開。其核心在于不需要在剛開始時就把所有的事情都定義清楚,可以先定義最重要的功能去實現(xiàn),然后聽取客戶的意見再進行下一個階段,如此不斷循環(huán)、重復(fù),直到得到滿意的產(chǎn)品。螺旋模型在很大程度上是一種風(fēng)險驅(qū)動的方法體系,因為在每個階段及經(jīng)常發(fā)生的循環(huán)之前,都必須先進行風(fēng)險評估。 (螺旋模型圖) 螺旋模型具有如下的特點: 1)制定計劃:確定軟件目標,選定實施方案,搞清楚項目開發(fā)的限制條件 2)風(fēng)險分析:分析、評估所選方案,考慮如何識別和消除風(fēng)險 3)實施工程:實施軟件開發(fā)和驗證 4)客戶評估:評價開發(fā)工作,提出修正意見。制定下一步計劃 四、敏捷軟件開發(fā) 敏捷軟件開發(fā)又成敏捷開發(fā),是一種從1990年開始逐漸引起人們廣泛關(guān)注的新型軟件開發(fā)方式,具有應(yīng)對快速變化的需求的軟件開發(fā)能力,相對于非敏捷開發(fā),更強調(diào)程序員團隊與業(yè)務(wù)專家之間的緊密協(xié)作及面對面溝通,比單純通過書面文檔溝通更有效,能更頻繁地交付新的軟件版本,使自我組織、自我約束的團隊能夠更好地適應(yīng)需求的變化,也更關(guān)注軟件開發(fā)過程中人的作用。 敏捷軟件開發(fā)有如下特點: 1)首要任務(wù)是盡早地、持續(xù)地交付可評價的軟件,使得客戶滿意 2)樂于接受需求變更,即使在開發(fā)后期也是如此,敏捷軟件開發(fā)能夠駕馭需求的變化,從而為客戶贏得競爭優(yōu)勢 3)頻繁交付可使用的軟件,交付的間隔越短越好,可以從幾個月縮減到幾個星期 4)在整個項目開發(fā)期間,業(yè)務(wù)人員和開發(fā)人員必須朝夕工作在一起 5)圍繞那些有推動力的人們來構(gòu)建項目。給予他們所需的環(huán)境和支持,并且相信他們能夠把工作做好 6)可使用的軟件是進度的主要衡量指標 7)提倡可持續(xù)發(fā)展 8)為了增強敏捷能力,應(yīng)持續(xù)關(guān)注技術(shù)上的杰出成果和良好的設(shè)計 9)簡潔,最小化那些沒有必要投入的工作量是至關(guān)重要的 10)最好的架構(gòu)、需求和設(shè)計都源于自我組織的團隊 對比以上4種開發(fā)模式,總結(jié)如下: 1)瀑布式開發(fā):在從需求到設(shè)計、從設(shè)計到編碼、從編碼到測試、從測試到提交的每個開發(fā)階段都要做到最好,特別是在前期階段設(shè)計得越完美,提交后的損失就越少。然而現(xiàn)在的系統(tǒng)很復(fù)雜且多變,所以很難在現(xiàn)實中應(yīng)用瀑布式開發(fā)。 2)迭代式開發(fā):不要求每個階段的任務(wù)都做到最好,可以容忍一些不足,先不去完善它,將主要功能先搭建起來,以最短的時間及最少的損失完成一個不完美的成果直至提交,然后通過客戶或用戶的反饋,在這個不完美的成果上逐步進行完善。 3)螺旋開發(fā):在很大程度上是一種風(fēng)險驅(qū)動的方法體系,因為在每個階段及經(jīng)常發(fā)生的循環(huán)之前,都必須先進行風(fēng)險評估。 4)敏捷開發(fā):和迭代式開發(fā)相比,兩者都強調(diào)在較短的開發(fā)周期內(nèi)提交軟件,但是敏捷開發(fā)的周期可能更短且更強調(diào)隊伍中的高度協(xié)作。敏捷方法有時被誤認為是無計劃性和紀律性的方法,實際上更確切的說法是敏捷方法強調(diào)適應(yīng)性而非預(yù)見性,適應(yīng)性的方法主要用于快速適應(yīng)需求的變化。當項目的需求有變化時,團隊能夠迅速應(yīng)對新的需求 。 在一般公司里,采用敏捷開發(fā)和不斷迭代開發(fā)的方式較多,而且效率高、效果明顯。因為之前做的系統(tǒng)業(yè)務(wù)單一、邏輯簡單、用戶量少,項目團隊的規(guī)模一般在10-30人,現(xiàn)在的系統(tǒng)要面對不同用戶的定制化開發(fā),業(yè)務(wù)變得越來越復(fù)雜,功能越來越多,如果整個系統(tǒng)耦合在一起,必定會牽一發(fā)而動全身,導(dǎo)致系統(tǒng)維護困難,同時每個公司面臨著人員的頻繁流動、系統(tǒng)文檔不完善或多次轉(zhuǎn)手丟失等情況,以至于新來的人員很難快速上手。因而,人們開始思考如何高效地解決復(fù)雜的大型系統(tǒng)開發(fā)模式。 說明: 1、參考書籍:《分布式服務(wù)架構(gòu):原理、設(shè)計與實戰(zhàn)》《微服務(wù)架構(gòu)與實踐》 2、如有不合適的地方請反饋。綜合后更改。 |
|