如何選擇正確的軟件開發(fā)模型?
譯文【51CTO.com快譯】軟件開發(fā)模型最早在上世紀50年代至60年代引入軟件開發(fā)社區(qū)。在那個時候,將一切都集中起來是一個很好的做法,而編程是必須規(guī)劃的過程之一。
如今,這個過程在日常的項目管理中非常必要,因為如果沒有特定的事件流,項目開發(fā)可能會非?;靵y。因此,從項目規(guī)劃到發(fā)布和維護的任何活動都有一個所有人都需要使用的概念框架。
因此,很多組織表示:
- 與未定義的軟件開發(fā)過程作斗爭。
- 缺乏有關項目管理技術的某些知識。
- 尋求優(yōu)化和構建開發(fā)階段的方法。
- 希望加快交付過程。
- 降低項目風險。
- 縮短項目時間和過多的成本。
本文將定義軟件開發(fā)生命周期,概述七個最常用的軟件開發(fā)模型,并找出它們在項目開發(fā)中的差異和好處。此外還將對軟件工程中的軟件模型進行比較,以幫助組織找到最適合的模型。
為什么需要軟件項目開發(fā)模型?
每個軟件外包公司都有自己的軟件開發(fā)生命周期(SDLC),它通常包含以下應用程序開發(fā)階段:
- 需求分析
- 設計
- 開發(fā)和測試
- 執(zhí)行
- 文檔
- 維護
這些階段標志著軟件項目開發(fā)的通常過程,從收集客戶需求到推出具有全天候支持的成熟產(chǎn)品。很多組織通常更喜歡個性化的工作流程和方法,因此有一些包含這些開發(fā)階段的概念模型。這些模型具有預先編寫和建立的關鍵原則、基本流程和時間表,因此將其稱為方法論。
以下是各具特色的七種軟件開發(fā)模型,它們分別是:
- 瀑布模型
- 迭代和增量模型
- 螺旋模型
- V型模型
- 原型模型
- 敏捷模型
- DevOps模型
軟件開發(fā)過程模型的價值在于過程優(yōu)化,以及作為團隊績效提升的最終因素。每個模型都非常具體,并且組織在實施時應該專注于它們的技術、愿景、使命和節(jié)奏。這就是為什么有這么多人來尋求適合其組織的軟件開發(fā)模型的原因。
根據(jù)調研機構Statista公司的調查,全球最常用的軟件工程過程模型是DevOps模型,占到36%;緊隨其后的是敏捷模型,將近32%;排名第三的是看板(Kanban)模型,全球有13%的IT社區(qū)都在使用。
那么,軟件開發(fā)模型有哪些?當今組織使用的軟件工程模型的類型是什么?
什么是軟件開發(fā)模型以及它們如何工作?
1.瀑布模型
瀑布模型是軟件開發(fā)領域引入的第一個軟件項目開發(fā)模型。它也被稱為線性模型,因為該模型意味著在進入下一個階段之前要完成以上所有階段。因此,該模型逐步地線性運行,不可能與任何階段重疊。其原理如下圖所示:
確實,該模型類似于現(xiàn)實中的瀑布,它有起點和終點,就像水流從懸崖上落下,沒有任何中斷或改變。
(1)哪些因素有助于選擇瀑布方法?
- 短期項目。
- 明確、固定且記錄良好的要求。
- 可理解的靜態(tài)技術。
- 穩(wěn)定的產(chǎn)品定義。
- 各種產(chǎn)品支持資源。
- 產(chǎn)品負責人參與度低。
- 嚴格設定的時間表。
- 無法更改的固定預算。
而在所有其他情況下,可以選擇其他模型來進行項目開發(fā)。
瀑布模型的主要優(yōu)點是該模型在執(zhí)行的任務及其時間表方面有嚴格的順序。由于順序是固定的,很多任務可以很容易地在軟件部門之間進行劃分,并監(jiān)控任務完成情況??蛻艨赡軙l(fā)現(xiàn)瀑布模型是一種可靠的方法,因為他們會事先了解從開始到結束的整個過程。當然瀑布模型也有一些缺點。例如瀑布模型很難對任務進行修改,這是因為應用程序開發(fā)越深入到另一個階段,就越難返回并更改其概念基礎或文檔。
(2)瀑布模型的優(yōu)缺點
2.迭代和增量模型
在迭代和增量模型中,開發(fā)從實現(xiàn)幾個小需求開始,然后通過多次迭代(增量)增強產(chǎn)品。增強過程以增量(迭代)的方式進行,直到應用程序功能完成并準備部署為止。只開發(fā)軟件的一小部分是一種明智的方法,因為可以輕松查看已完成的工作,快速確定進一步的要求,并繼續(xù)實施或對應用程序進行一些更改,然后再繼續(xù)下一步。無論采用哪種方式,組織都將從這些解決方案中受益,因為每次新的迭代都會帶來一個新的、更好的軟件版本。
與瀑布模型不同,迭代模型允許一次執(zhí)行多次迭代并同時接收產(chǎn)品輸出。該模型提供的成功關鍵在于驗證軟件的版本,并根據(jù)要求對其進行測試。這樣可以更好地了解團隊在項目中所處的位置、產(chǎn)品的功能驗證,以及對產(chǎn)品成功的信心。
(1)迭代模型適用于軟件開發(fā)的哪些地方?
- 系統(tǒng)要求得到明確定義和充分理解。
- 隨著時間的推移,可能會出現(xiàn)其他要求。
- 當團隊學習新技術并同時處理項目時。
- 僅在合同規(guī)定的特定迭代需要時才使用特定資源。
- 由于高風險特性,未來業(yè)務目標可能會發(fā)生變化。
迭代模型的最大優(yōu)點是它允許在開始開發(fā)軟件時發(fā)現(xiàn)功能和設計的缺陷。在迭代中工作并驗證每個開發(fā)周期將產(chǎn)生無風險的產(chǎn)品,能夠添加或刪除功能,以及改變最終產(chǎn)品的成本和時間表。而除了這些優(yōu)點之外,還應該討論存在的一些缺點。
(2)迭代模型的優(yōu)缺點
3.螺旋模型
螺旋模型是迭代模型和瀑布模型的組合。從迭代方法出發(fā),它采用了循環(huán)開發(fā)方法;而從瀑布方法出發(fā),它借用了一種系統(tǒng)的方法和控制過程的能力。螺旋模型的重點在于風險分析。此外,它還以迭代的方式交付項目,并圍繞其中心螺旋形旋轉。
螺旋模型分為4個階段設計。開發(fā)中的產(chǎn)品在其迭代過程中都經(jīng)過這些階段,在此方法中也稱為螺旋。這些階段包括:
- 識別
- 設計
- 構建
- 評估(風險分析)
識別是收集業(yè)務需求的最佳階段。這是在一個基本的螺旋中完成的。螺旋模型確定了系統(tǒng)、子系統(tǒng)和單元要求。除了收集需求之外,這個階段還涉及客戶和系統(tǒng)分析師之間的溝通,以了解部署所需的內容。
設計也從概念設計的基本螺旋開始,包括隨后的構建設計、模塊邏輯設計、物理產(chǎn)品設計和最終設計的螺旋。
構建階段是在每一個螺旋模型中開發(fā)實際軟件產(chǎn)品。在基本螺旋中,當概念需要根據(jù)其可行性進行評估時,組織應該開發(fā)一個POC(概念證明)并嘗試獲得有價值的客戶反饋。
了解所有要求和設計細節(jié)后,可以生成一個編號的軟件工作模型(構建)版本。客戶審查所有構建并提供反饋。
評估(風險分析)是識別、估計和監(jiān)控技術可行性和管理風險的過程。例如,計劃逾期和成本超支。
在客戶評估構建之后,下一次迭代就會出現(xiàn)。這將遵循線性方法,以確??蛻籼峁┑姆答伒玫綄嵤\浖_發(fā)生命周期(SDLC)實際上包括這些螺旋迭代,直到其最終確定。
(1)什么時候使用螺旋模型?
當需要隨著產(chǎn)品的成熟度學習時:
- 有預算限制,需要預見風險。
- 有一個中等或高風險的項目需要執(zhí)行。
- 有一個長期項目可能會發(fā)生變化。
- 對客戶而言,要求不明確。
- 由于其復雜性,要求需要更加明確。
- 主要產(chǎn)品必須分幾個階段發(fā)布才能獲得有價值的客戶反饋。
- 希望在軟件開發(fā)生命周期(SDLC)期間對產(chǎn)品進行重大更改。
基于螺旋模型的適用性,以下來了解其優(yōu)缺點。該模型的主要優(yōu)點是可以將元素添加到產(chǎn)品中,以防它們可用或已知。此外,螺旋模型在產(chǎn)品開發(fā)的早期階段就讓用戶參與進來,這允許接收建設性的反饋。
(2)螺旋模型的優(yōu)缺點
4.V型模型
V型模型允許按照V形順序執(zhí)行項目。該模型的另一個名稱是驗證和確認模型,因為它基于瀑布模型。然而在軟件開發(fā)生命周期(SDLC)中,每個開發(fā)階段也包括測試。因此,執(zhí)行一個階段,完成之后,再進行測試,然后才能進入下一個階段,該階段的結構與前一個階段相同。
在V型模型中,開發(fā)階段與測試階段相對應,它們并行進行。這意味著可以在圖像的一側看到驗證階段,在另一側看到確認階段。這些方面正在與編碼階段相結合。
根據(jù)上圖,有4個驗證階段,分別是:
- 需求分析
- 系統(tǒng)設計
- 架構設計
- 模塊設計
驗證階段還包括4個階段:
- 單元測試
- 集成測試
- 系統(tǒng)測試
- 驗收測試
如上圖所示,編碼階段將其他兩個階段結合在一起,形成V形。
V形模型與瀑布模型具有相同的適用性。必須從軟件開發(fā)生命周期(SDLC)的一開始就明確定義要求,因為返回并進行更改會增加產(chǎn)品開發(fā)成本。該模型最適合醫(yī)療保健行業(yè)。
(1)什么時候使用V型模型?
- 有明確定義、記錄在案且穩(wěn)定的要求。
- 使用的技術也很穩(wěn)定,項目團隊對其有充分的了解。
- 所有要求都非常明確。
- 該項目是短期的,并不復雜。
V型模型的最大優(yōu)點是可以在軟件開發(fā)生命周期(SDLC)中輕松理解、應用和管理它。然而與其相反,當變更即將發(fā)生時,該模型缺乏靈活性,并且客戶實施這些變更的成本非常高,因為它們會引發(fā)額外的開發(fā)成本。
(2)V型模型的優(yōu)缺點
5.原型模型
原型模型是軟件應用程序原型的創(chuàng)建,它顯示了不完整產(chǎn)品的最小功能的可視化表示。這有助于在開發(fā)階段的早期了解客戶需求,并獲得有價值的反饋。該模型包括:
- 確定基本要求
- 初始原型開發(fā)
- 原型審查
- 原型修訂和增強
如今有不同類型的軟件原型,分別是:
- 快速原型設計——在理解需求的基礎上構建系統(tǒng),更清楚地理解用戶需求。
- 漸進式原型——基于理解的需求開發(fā)功能有限的功能原型,并在過程中添加其他需求。
- 增量原型設計——構建大量功能原型形成一個系統(tǒng),并將它們組合在一起。
- 增量原型設計——它是一個具有三個階段的Web開發(fā)領域:HTML中的基本原型、原型服務層、在最終原型中實現(xiàn)和集成。
(1)原型模型何時何地適用?
原型設計適用于具有高水平用戶交互的在線軟件系統(tǒng)開發(fā)。例如:
- 要求用戶填寫表格的系統(tǒng)。
- 需要大量數(shù)據(jù)處理的軟件。
原型模型也有其優(yōu)點和缺點。當然,它們取決于組織的需求,并在選擇這一模型之前加以考慮。
(2)原型模型的優(yōu)缺點
6.敏捷模型
敏捷模型基于迭代和增量模型,但它更具適應性,并以更快的速度交付工作軟件。由于滿足了客戶的需求并且非常靈活,敏捷模型帶來了更高客戶滿意度。敏捷項目傾向于將生產(chǎn)過程分解為增量構建,或者稱之為迭代。每個迭代都有一個1到3周的時間表,包括同時在不同項目領域工作的不同團隊。這可以減少生產(chǎn)時間,并降低生產(chǎn)成本。
每次迭代都由相同的過程組成,它們是:
- 規(guī)劃
- 需求分析
- 設計
- 編碼
- 單元測試
- 驗收測試
在每次迭代結束時,都會得到提供給客戶的產(chǎn)品,以了解應用程序是否是根據(jù)客戶的要求構建的,并接收有關正在完成的工作的反饋。
敏捷模型分為幾種方法,它們都有自己的原則。例如,
- 軟件統(tǒng)一過程(RUP)
- Scrum
- 看板(Kanban)
- ScrumBan
- 極限編程(XP)
- ScrumXP
- 迭代開發(fā)
- 精益軟件開發(fā)
(1)什么時候使用敏捷模型?
- 在中小型軟件項目中。
- 生產(chǎn)所需的多種產(chǎn)品。
- 當需要將開發(fā)過程分解為更小的部分時。
- 當需要軟件交付加速時。
- 當團隊需要靈活改變優(yōu)先級時。
- 何時需要提高軟件質量、生產(chǎn)力和交付的可預測性。
- 促進降低項目風險,并實現(xiàn)降低成本的可能性。
- 有效管理項目中的分布式團隊。
與其他模型一樣,敏捷模型也有優(yōu)缺點。例如下圖。
(2)敏捷模型的優(yōu)缺點
7.DevOps模型
DevOps模型具有促進自動化和團隊協(xié)作的獨特原則。因此,該模型的主要重點是增強由順序反饋驅動的團隊之間的協(xié)作。DevOps模型類似于敏捷模型,但由于DevOps團隊成員和管理人員之間的協(xié)作重點而有所不同,而敏捷模型則側重于客戶參與。
(1)DevOps模型執(zhí)行什么任務?
- 持續(xù)集成和交付
- 微服務
- 基礎設施即代碼
- 監(jiān)控和記錄
- 溝通與協(xié)作
(2)什么時候使用DevOps模型?
- 在復雜的項目中。
- 需要質量保證和測試的項目。
- 包括來自多個部門的大型團隊的項目。
DevOps模型也有一些優(yōu)點和缺點。這取決于組織計劃采用此模型的項目以及是否已為艱難的采用曲線做好準備。
(3)DevOps模型的優(yōu)缺點
最常用的軟件開發(fā)模型比較
由于全球最常用的軟件開發(fā)模型是DevOps模型、敏捷模型(Scrum和看板)和)和瀑布模型,以下是對這些軟件開發(fā)模型比較的研究。
這張表格顯示了交付各種模型的所有顯著特征。
2020年,62%的團隊在為滿足組織需求而采用DevOps模型進行開發(fā)。然而,采用敏捷模型與DevOps模型也可以降低生產(chǎn)成本,而采用敏捷模型的組織的數(shù)量與DevOps模型不相上下。
至于瀑布模型,其成功率為26%。所以如果比較瀑布模型和敏捷模型哪個更好,顯然敏捷模型在比較中獲勝。
如何選擇最適合組織的軟件開發(fā)生命周期(SDLC)模型?
組織可以通過幾個重要步驟來選擇正確的軟件開發(fā)模型:
(1)步驟1:查看所有現(xiàn)有的軟件開發(fā)模型,以了解哪一種更接近組織的信念和原則以及業(yè)務需求。
(2)步驟2:是否首先聽取利益相關者的任何需求?組織需要聽取每個利益相關者的意見,因為可以對其最終決定產(chǎn)生影響。
(3)步驟3:考慮驗收標準,并嘗試回答以下問題:
- 模型是否適合團隊的規(guī)模和他們的技能?
- 模型是否適合項目中使用的技術?
- 模型是否適合客戶和利益相關者?
- 模型是否適合項目規(guī)模及其復雜性?
- 如果選擇這種模式,是否存在項目風險?
- 產(chǎn)品開發(fā)過程中是否會有任何變化?
- 需求是固定的還是靈活的,并且可能在生產(chǎn)過程中出現(xiàn)?
(4)步驟4:確定哪種模型適合意圖。
(5)步驟5:根據(jù)項目優(yōu)化模型。
現(xiàn)在已經(jīng)了解了所有軟件開發(fā)模型的細微差別,相信組織可以找到提高其性能的模型,并繼續(xù)進行產(chǎn)品開發(fā)。
結語
軟件工程模型是一種很好的做法,因為它可以確保產(chǎn)品開發(fā)的最佳質量。軟件工程模型比較是最有用的工具之一,允許根據(jù)組織的需求選擇模型。項目活動依賴于規(guī)劃良好的方案,團隊根據(jù)該計劃工作得越好,軟件處理就越好。組織要根據(jù)其內部的軟件開發(fā)生命周期(SDLC)選擇其軟件模型,需要了解每個模型代表什么,然后定義最適合的模型。如今大部分的開發(fā)人員管理和使用DevOps模型、敏模模型(Scrum和看板)和瀑布模型。所有這些模型都根據(jù)其流程而不同,但它們的共同點是產(chǎn)品開發(fā)的戰(zhàn)略方法,因此在輸出方面取得了成功。
原文標題:7 Software Development Models: How to Choose the Right One?,作者:Nazar Kvartalnyi
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】