軟件過程模型(軟件開發模型)


軟件過程模型也稱為軟件開發模型,它是軟件開發全部過程、活動和任務的結構框架。典型的軟件過程模型有瀑布模型、增量模型、演化模型(原型模型、螺旋模型)、噴泉模型、基於構件的開發模型、形式化方法模型、統一過程(UP)模型、敏捷方法等。

1、瀑布模型(Waterfall Model)

瀑布模型是將軟件生存周期中各個活動規定為依線性順序連接的若干階段的模型,包括需求分析、設計、編碼、測試、運行與維護。它規定了由前至后、相互銜接的固定次序,如同瀑布流水逐級下落。如下圖所示。

瀑布模型為軟件的開發和維護提供了一種有效的管理模式,根據這一模式來制訂開發計划,進行成本預算,組織開發力量,以項目的階段評審和文檔控制為手段有效的對整個開發過程進行指導,因此它是以文檔為驅動,適合於軟件需求很明確的軟件項目的模型。

優點是容易理解,管理成本低;強調開發的階段性早期計划及需求調查和產品測試。

缺點是客戶必須完整、正確和清晰的表達他們的需要,而這往往又不可能;在后期很難評估項目的進度狀態;對項目的風險控制能力弱。

2、增量模型(Incremental Model)

增量模型融合了瀑布模型的基本成分和原型實現的迭代特征,它假設可以將需求分段為一系列增量產品,每一增量可以分別開發。該模型采用隨着日程時間的進展而交錯的線性序列,每一個線性序列產生軟件的一個可發布的“增量”,如下圖所示。當使用增量模型時,第一個增量往往是核心的產品。客戶對每個增量的使用和評估都作為下一個增量發布的新特征和功能,這個過程在每一個增量發布后不斷重復,直到產生了最終的完善產品。增量模型強調每一個增量均發布一個可操作的產品。

增量模型作為瀑布模型的一個變體,具有瀑布模型的所有優點。此外還具有如下優點:

  • 第一個可交付版本所需要的成本和時間很少;
  • 開發由增量表示的小系統所承擔的風險不大;
  • 由於很快發布了第一個版本,因此可以減少用戶需求的變更;
  • 運行增量投資,即在項目開始時,可以僅對一個或兩個增量投資。

增量模型有如下不足之處:

  • 如果沒有對用戶的變更要求進行規划,那么產生的初始增量可能會造成后來增量的不穩定;
  • 如果需求不像早期思考的那樣穩定和完整,那么一些增量就可能需要重新開放,重新發布;
  • 管理發生的成本、進度和配置的復雜性可能會超出組織的能力。

3、演化模型(Evolutionary Model)

軟件類似於其他復雜的系統,會隨着時間的推移而演化。在軟件開發過程中,常常會面臨以下情形:

  • 商業和產品需求經常發生變化,直接導致最終產品難以實現;
  • 嚴格的交付時間使得開發團隊不可能圓滿的完成軟件產品,但是必須交付功能有限的版本以應對競爭或商業壓力;
  • 很好的理解了核心產品和系統需求,但是產品或系統擴展的細節問題卻沒有定義。

演化模型是迭代的過程模型,使得軟件開發人員能夠逐級開發出更完整的軟件版本。演化模型特別適用於對軟件需求缺乏准確認識的情況。典型的演化模型有原型模型和螺旋模型等。

1)原型模型(Prototype Model)

並非所有的需求都能預先定義,大量的實踐表明,在開發初期很難得到一個完整的、准確的需求規格說明。這主要是由於客戶往往不能准確的表達對未來系統的全面要求,開發者對要解決的應用問題模糊不清,以至於形成的需求規格說明常常是不完整的、不准確的,有時甚至是有歧義的。此外,在整個開發過程中,用戶可能會產生新的要求,導致需求的變更。而瀑布模型難以適應這種需求的不確定性和變化,於是出現了快速原型(Rapid Prototype)這種新的開發方法。原型方法比較適用於用戶需求不清、需求經常變化的情況。當系統規模不是很大也不太復雜時,可以采取該方法。

原型是預期系統的一個可執行版本,反映了系統性質的一個選定的子集。一個原型不必滿足目標軟件的所有約束,其目的是能快速、低成本的構建原型。當然,能夠采用原型方法是因為開發工具的快速發展,使得能夠迅速的開發出一個讓用戶看得見、摸得着的系統框架。這樣,對於計算機不是很熟悉的用戶就可以根據這個框架提出自己的需求。開發原型系統首先確定用戶需求,開發初始原型,然后征求用戶對初始原型的改進意見,並根據意見修改原型。原型模型如下圖所示。

原型模型開始於交流溝通,其目的是定義軟件的總體目標,標識需求,然后快速制訂原型開發計划,確定原型的目標和范圍,采用快速射擊的方式對其進行建模,並構建原型。

根據使用原型的目的不同,原型可以分為探索型原型、實驗型原型和演化型原型3種。

  • 探索型原型的目的是要弄清楚目標的要求,確定所希望的特性,並探討多種方案的可行性。
  • 實驗型原型的目的驗證方案或算法的合理性,是在大規模開發和實現前,用於考查方案是否合適、規格說明是否可靠等。
  • 演化型原型的目的是將原型作為目標系統的一部分,通過對原型的多次改進,逐步將原型演化成最終的目標系統。

2)螺旋模型(Sprial Model)

對於復雜的大型軟件,開發一個原型往往達不到要求。螺旋模型將瀑布模型和演化模型結合起來,加入了兩種模型均忽略的風險分析,彌補了這兩種模型的不足。

螺旋模型將開發過程分為幾個螺旋周期,每個螺旋周期大致和瀑布模型相符合,如下圖所示。

每個螺旋周期又分為如下4個步驟。

(1)制訂計划。確定軟件的目標,選定實施方案,明確項目開發的限制條件。

(2) 風險分析。分析所選的方案,識別風險,消除風險。

(3) 實施工程。實施軟件開發,驗證階段性產品。

(4) 用戶評價。評價開發工作,提出修正建議,建立下一個周期的開發計划。

螺旋模型強調風險分析,使得開發人員和用戶對每個演化層出現的風險有所了解,從而做出應有的反應。因此螺旋模型特別適用於龐大、復雜並且具有高風險的系統。

與瀑布模型相比,螺旋模型支持用戶需求的動態變化,為用戶參與軟件開發的所有關鍵決策提供了方便,有助於提高軟件的適應能力,並且為項目管理人員及時調整管理決策提供了便利,從而降低了軟件開發的風險。在使用螺旋模型進行軟件開發時,需要開發人員具有相當豐富的風險評估經驗和專門知識。

4、噴泉模型(Water Fountain Model)

噴泉模型是一種以用戶需求為動力,以對象作為驅動的模型,適合於面向對象的開發方法。它克服了瀑布模型不支持軟件重用和多項開發活動集成的局限性。噴泉模型使開發過程具有迭代性和無間隙性,如下圖所示。

迭代意味着模型中的開發活動常常需要重復多次,在迭代過程中不斷的完善軟件系統。無間隙是指開發活動(如分析、設計、編碼)之間不存在明顯的邊界,也就是說它不像瀑布模型那樣,在需求分析活動結束后才開始設計活動,在設計活動結束后才開始編碼活動,而是允許各開發活動交叉、迭代的進行。

噴泉模型的各個階段沒有明顯的界線,開發人員可以同步進行。其優點是可以提高軟件項目的開發效率,節省開發時間。由於噴泉模型在各個開發階段是重疊的,在開發過程中需要大量的開發人員,不利於項目的管理。此外這種模型要求嚴格管理文檔,使得審核的難度加大。

5、基於構件的開發模型(Component-based Development Model)

基於構件的開發是指利用預先包裝的構件來構造應用系統。構件可以是組織內部開發的構件,也可以是商品化成品軟件構件。基於構件的開發模型具有許多螺旋模型的特點,它本質上是演化模型,需要以迭代方式構建軟件。其不同之處在於,基於構件的開發模型采用預先打包的軟件構件開發應用系統。

一種基於構件的開發模型如下圖所示,它包括領域工程和應用系統工程兩部分。

領域工程的目的是構建領域模型、領域基准體系結構和可復用構件庫。為達到此目的,首先要進行領域分析,分析該領域中各種應用系統的公共部分或相似部分,構建領域模型和領域基准體系結構,表示領域的候選構件,對候選構件進行可變性分析以適應多個應用系統的需要,最后構建可復用構件,經嚴格測試和包裝后存入可復用構件庫。

應用系統工程的目的是使用可復用構件組裝應用系統。首先進行應用系統分析,設計應用系統的體系結構,標識應用系統所需的構件,然后在可復用構件庫中查找合適的構件(也可以購買第三方構件),這些選取的構件需進行特化,必要時做適當修改,以適應該應用系統的需要。對於那些未找到合適構件的應用部分,仍需要單獨開發,並將其與特化修改后的構件組裝成應用系統。在此過程中,還需要對可復用構件的復用情況進行評價,以改進可復用構件,同時對新開發的部分進行評價,並向領域工程推薦候選構件。

6、統一過程(UP)模型

統一過程模型是一種“用例和風險驅動,以架構為中心,迭代並且增量”的開發過程,由UML方法和工具支持。迭代的意思是將整個軟件開發項目划分為多個小的“袖珍項目”,每個“袖珍項目”都包含正常軟件項目的所有元素:計划、分析和設計、構造、集成和測試,以及內部和外部發布。

統一過程定義了4個技術階段及其制品:

1)起始階段(Inception Phase)

起始階段專注於項目的初創活動,產生的主要工作產品有構想文檔(Visio Document)、初始用例模型、初始項目術語表、初始業務用例、初始風險評估、項目計划(階段及迭代)、業務模型以及一個或多個原型。

2)精化階段(Elaboration Phase)

精化階段在理解了最初的領域范圍之后進行需求分析和架構演進,產生的主要工作產品有用例模型、補充需求(包括非功能需求)、分析模型、軟件體系結構描述、可執行的軟件體系結構原型、初步的設計模型、修訂的風險列表、項目計划(包括迭代計划、調整的工作流、里程碑和技術工作產品)以及初始用戶手冊。

3)構建階段(Construction Phase)

構建階段關注系統的構建,產生實現模型,產生的主要工作產品有設計模型、軟件構件、集成的軟件增量、測試計划及步驟、測試用例以及支持文檔(用戶手冊、安裝手冊和對於並發增量的描述)。

4)移交階段(Transition Phase)

移交階段關注於軟件提交方面的工作,產生軟件增量,產生的主要工作產品有提交的軟件增量、β測試報告和綜合用戶反饋。

每次迭代產生包括最終系統的部分完成的版本和任何相關的項目文檔的基線,通過逐步迭代基線之間相互構建,直到完成最終系統。

在每個迭代中有5個核心工作流:

  • 捕獲系統應該做什么的需求工作流;
  • 精化和結構化需求的分析工作流;
  • 在系統架構內實現需求的設計工作流;
  • 構造軟件的實現工作流;
  • 驗證實現是否如期望那樣工作的測試工作流。

統一過程的典型代表是RUP(Rational Unified Process)。RUP是UP的商業擴展,完全兼容UP,但比UP更加完整、更詳細。

7、敏捷方法(Agile Development)

敏捷開發的總體目標是通過“盡可能早的、持續的對有價值的軟件的交付”使客戶滿意。通過在軟件開發過程中加入靈活性,敏捷方法使用戶能夠在開發周期的后期增加或改變需求。

敏捷過程的典型方法有很多,每一種方法都基於一套原則,這些原則實現了敏捷方法所宣稱的理念。

1)極限編程(XP)
XP是一種輕量級(敏捷)、高效、低風險、柔性、可預測的、科學的軟件開發方式。它由價值觀、原則、實踐和行為4個部分組成,彼此相互依賴、關聯,並通過行為貫穿於整個生存周期。

  • 4大價值觀:溝通、簡單性、反饋和勇氣。

  • 5個原則

    • 快速反饋;
    • 簡單性假設;
    • 逐步修改;
    • 提倡更改;
    • 優質工作。
  • 12個最佳實踐

    • 計划游戲(快速制訂計划、隨着細節的不斷變化而完善);
    • 小型發布(系統的設計要能夠盡可能早的交付);
    • 隱喻(找到合適的比喻傳達信息);
    • 簡單設計(只處理當前的需求,使設計保持簡單);
    • 測試先行(先寫測試代碼,然后在編寫程序);
    • 重構(重新審視需求和設計,重新明確的描述它們以符合新的和現有的需求);
    • 結隊編程;
    • 集體代碼所有制;
    • 持續集成(可以按日甚至按小時為客戶提供可運行的版本);
    • 每周工作40個小時;
    • 現場客戶;
    • 編碼標准。

2)敏捷統一過程(AUP)
敏捷統一過程(Agile Unified Process,AUP)采用“在大型上連續”以及在“小型上迭代”的原理來構建系統。采用經典的UP階段性活動(初始、精化、構建和轉換),提供了一系列活動,能夠使團隊為軟件項目構想出一個全面的過程流。在每個活動里,一個團隊迭代使用敏捷,並將有意義的軟件增量盡可能快的交付給最終用戶。每個AUP迭代執行以下活動:

  • 建模。建立對商業和問題域的模型表述,這些模型“足夠好”即可,以便團隊繼續前進。
  • 實現。將模型翻譯成源代碼。
  • 測試。像XP一樣,團隊設計和執行一系列的測試來發現錯誤以保證源代碼滿足需求。
  • 部署。對軟件增量的交付以及獲得最終用戶的反饋。
  • 配置及項目管理。着眼於變更管理、風險管理以及對團隊的任一制品的控制。項目管理追蹤和控制開發團隊的工作進展並協調團隊活動。
  • 環境管理。協調標准、工具以及適用於開發團隊的支持技術等過程基礎設施。

以上內容來自於中級軟件設計師學習教程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM