軟體開發中常見的開發模型
軟體開發模型是指軟體開發全部過程、活動和任務的結構框架。軟體開發包括需求、設計、編碼和測試等階段,有時也包括維護階段。軟體開發模型能清晰、直觀地表達軟體開發全過程,明確規定了要完成的主要活動和任務,用來作為軟體專案工作的基礎。對於不同的軟體系統,可以採用不同的開發方法、使用不同的程式設計語言以及各種不同技能的人員參與工作、運用不同的管理方法和手段等,以及允許採用不同的軟體工具和不同的軟體工程環境。
瀑布模型
瀑布模型要求軟體開發嚴格按照計劃 → 需求分析 → 設計 → 編碼 → 測試 → 執行維護
的階段進行,每一個階段都可以定義明確的產出物和驗證準則。瀑布模型在每一個階段完成後都可以組織相關的評審和驗證,只有在評審通過後才能夠進入到下一個階段。
特點:
- 軟體開發的各項活動嚴格按照線性方式進行。
- 當前活動接受上一項活動的工作結果。
- 當前活動的工作結果需要進行驗證。
缺點:
- 由於開發模型是線性的,增加了開發的風險。
- 早期的錯誤可能要等到開發後期的階段才能發現。
- 產生大量的文件
快速原型模型
快速原型模型需要迅速建造一個可以執行的軟體原型 ,以便理解和澄清問題,使開發人員與使用者達成共識,最終在確定的客戶需求基礎上開發客戶滿意的軟體產品。快速原型模型允許在需求分析階段對軟體的需求進行初步而非完全的分析和定義,快速設計開發出軟體系統的原型,該原型向用戶展示待開發軟體的全部或部分功能和效能;使用者對該原型進行測試評定,給出具體改進意見以豐富細化軟體需求;開發人員據此對軟體進行修改完善,直至使用者滿意認可之後,進行軟體的完整實現及測試、維護。
特點:
- 實現客戶與系統的互動。
- 進一步細化待開發軟體需求。
- 開發人員可以確定客戶的真正需求是什麼。
缺點:
- 開發週期長。
- 開發會受到需求的各種影響。
螺旋模型
首先螺旋模型是遵從瀑布模型的。螺旋模型是一種演化軟體開發過程模型,它兼顧了快速原型的迭代的特徵以及瀑布模型的系統化與嚴格監控。螺旋模型最大的特點在於引入了其他模型不具備的風險分析,使軟體在無法排除重大風險時有機會停止,以減小損失。同時,在每個迭代階段構建原型是螺旋模型用以減小風險的途徑。螺旋模型更適合大型的昂貴的系統級的軟體應用。
螺旋模型的六個步驟:
- 決定目標,替代方案和約束。
- 識別和解決專案的風險。
- 評估技術方案和替代解決方案。
- 開發本次迭代的交付物和驗證迭代產出的正確性。
- 計劃下一次迭代。
- 提交下一次迭代的步驟和方案。
特點:
- 螺旋模型是將瀑布模型與快速原型模型結合起來。
- 強調了其他模型所忽視的風險分析。
- 每一次螺旋包括4個步驟:制定計劃、風險分析、實施工程、客戶評估。
缺點:
- 很難讓使用者確信這種演化方法的結果是可以控制的。
- 建設週期長。
敏捷開發
是一些小公司用的最多的開發模式。敏捷開發以使用者的需求進化為核心,採用迭代、循序漸進的方法進行軟體開發。在敏捷開發中,軟體專案在構建初期被切分成多個子專案,各個子專案的成果都經過測試,具備可視、可整合和可執行使用的特徵。換言之,就是把一個大專案分為多個相互聯絡,但也可獨立執行的小專案,並分別完成,在此過程中軟體一直處於可使用狀態。
特點:
- 短週期開發。
- 增量開發。
- 由程式設計師和測試人員編寫的自動化測試來監控開發進度。
- 通過口頭溝通、測試和原始碼來交流系統的結構和意圖。
- 編寫程式碼之前先寫測試程式碼。也叫做測試先行。
缺點:
- 團隊組建困難,對每個成員的要求都很高。
- 對測試員要求完全掌握各種指令碼語言程式設計,會單元測試。
增量模型
增量模型是把待開發的軟體系統模組化,將每個模組作為一個增量元件,從而分批次地分析、設計、編碼和測試這些增量元件。運用增量模型的軟體開發過程是遞增式的過程。相對於瀑布模型而言,採用增量模型進行開發,開發人員不需要一次性地把整個軟體產品提交給使用者,而是可以分批次進行提交。
特點:
- 將待開發的軟體系統模組化,可以分批次地提交軟體產品,使使用者可以及時瞭解軟體專案的進展。
- 以元件為單位進行開發降低了軟體開發的風險。一個開發週期內的錯誤不會影響到整個軟體系統。
- 開發順序靈活。開發人員可以對元件的實現順序進行優先順序排序,先完成需求穩定的核心元件。當元件的優先順序發生變化時,還能及時地對實現順序進行調整。
缺點:
- 容易退化為邊做邊改模型,從而使軟體過程的控制失去整體性。
- 如果增量包之間存在相交的情況且未很好處理,則必須做全盤系統分析。
- 對介面要求很高。
噴泉模型
噴泉模型是一種以使用者需求為動力,以物件為驅動的模型,主要用於描述面向物件的軟體開發過程。該模型認為軟體開發過程自下而上週期的各階段是相互迭代和無間隙的特性。
特點:
- 噴泉模型不像瀑布模型那樣,需要分析活動結束後才開始設計活動,設計活動結束後才開始編碼活動。
- 該模型的各個階段沒有明顯的界限,開發人員可以同步進行開發。
- 可以提高軟體專案開發效率,節省開發時間,適應於面向物件的軟體開發過程。
缺點:
- 由於噴泉模型在各個開發階段是重疊的,因此在開發過程中需要大量的開發人員,因此不利於專案的管理。
- 此外這種模型要求嚴格管理文件,使得稽核的難度加大,尤其是面對可能隨時加入各種資訊、需求與資料的情況。
適用範圍
**瀑布模型:**在開發時間內需求不變化或很少變化。分析設計人員對此領域非常熟悉。低風險專案。使用者使用環境穩定(如系統軟體,工具軟體)。
**快速原型模型:**需求不明確或複雜系統。使用者無法自主提出應用需求。
**螺旋模型:**系統龐大,風險高。需求不太明確。
**增量模型:**系統容易拆分。開發人力比較少。特別適用於商業軟體。
噴泉模型:.面向物件的軟體開發過程。