軟考備考-系統構架師-22-幾種軟件開發方法對比

幾種軟件開發方法對比

1 綜述

  軟件開發方法是一種使用早已定義好的技術集及符號表示習慣來組織軟件生產的過程。
  本文對淨室方法、結構化方法、面向對象方法、原型法、逆向工程等方法進行梳理,並對各種開發方法特點、優點進行對比。

2 淨室方法

2.1 特點

  淨室軟件工程(Cleanroom Software Engineering, CSE)是軟件開發的一種形式化方法,可以開發較高質量的軟件。它使用盒結構規約進行分析和建模,並且將正確性驗證作爲發現和排除錯誤的主要機制,使用統計測試來獲取認證軟件可靠性所需要的信息。CSE強調在規約和設計上的嚴格性,還強調統計質量控制技術,包括基於客戶對軟件的預期使用測試。

2.2 缺點

  CSE太理論化,需要更多的數學知識。其正確性驗證的步驟比較困難且比較耗時。CSE要求採用增量式開發、採用盒子結構、採用統計測試方法,普通工程師必須經過加強訓練才能掌握。
  CSE開發小組不進行傳統的模塊測試,這是不現實的。工程師可能對編程語言和開發環境還不熟悉,而且編譯器或操作系統的bug也可能導致未預期的錯誤。
  CSE畢竟脫胎於傳統軟件工程,不可避免地帶有傳統軟件工程的一些弊端。

3 結構化方法

3.1 特點

  結構化方法的主要特點是:開發目標清晰化、開發工作階段化、開發文檔規範化和設計方法結構化。結構化方法特別適合於數據處理領域的問題,但是不適應於規模較大、比較複雜的系統開發。
由結構化分析、結構化設計、結構化程序設計組成,是一種面向數據流的開發方法。
結構化分析是根據分解與抽象的原則,按照系統中數據處理的流程,用數據流圖來建立系統的功能類型,從而完成需求分析工作。結構化方法分析模型的核心是數據字典,圍繞這個核心,有三個層次的模型,分別是數據模型、功能模型和行爲模型(也稱爲狀態模型)。在實際工作中,一般使用E-R圖表示數據模型,用DFD表示功能模型,用狀態轉換圖表示行爲模型。這三個模型有着密切的關係,它們的建立不具有嚴格的時序性,而是一個迭代的過程。
  結構化設計是根據模塊獨立性準則、軟件結構優化準則將數據流圖轉換爲軟件的結構體系,用軟件結構圖來建立系統的物理模型,實現系統的概要設計。
  結構化程序設計使用3種基本控制結構構造程序,任何程序都可以由順序、選擇和重複3種基本控制結構構造。
  自頂向下方法是一種決策策略。軟件開發涉及作什麼決策、如何決策和決策順序等決策問題。
自頂向下方法在任何時刻所作的決定都是當時對整個設計影響最大的那些決定。如果把所有決定分組或者分級,那麼決策順序是首先作最高級的決定,然後依次地作較低級的決定。同級的決定則按照隨機的順序或者按別的方法。一個決策的級別是看它距離要達到的最終目的(因此是軟件的實際實現)的遠近程度。從問題本身來看,或是由外(用戶所見的)向內(系統的實現)看,以距離實現近的決定爲低級決定,遠的爲高級決定。

3.2 缺點

  • 對系統分析和設計人員的要求較高。
  • 開發週期長,系統複雜,一般屬於一種高成本、大投資的工程。
  • 對於大系統而言,自上而下的規劃對於下層系統的實施往往缺乏約束力,
  • 從經濟角度來看,很難說自頂向下的做法在經濟上市合算的。

4 面向對象方法

4.1 特點

  面向對象方法是系統的描述及信息模型的表示與客觀實體相對應,符合人們的思維習慣,有利於系統開發過程中用戶與開發人員的交流和溝通,縮短開發週期,提高系統開發的正確性和效率。
  面向對象方法包含面向對象分析OOA、面向對象設計OOD、面向對象程序設計OOP。
  面向對象的分析模型主要由頂層架構圖、用例與用例圖、領域概念模型構成。用例建模用來描述待開發系統的功能需求,主要元素是用例和參與者。參與者是指系統以外的,需要使用系統或與系統交互的事物,包括:人或組織、設備、外部系統等,比較隱晦的參與者包括:時間、溫度;用例是對系統行爲的動態描述,用例獲取是需求分析階段的主要任務之一,用例之間的關係包括:包含、擴展、泛化。
  面向對象的設計模型則包含以包圖表示的軟件體系結構圖、以交互圖表示的用例實現圖、完整精確的類圖、針對複雜對象的狀態圖和用以描述流程化處理過程的活動圖等。在面向對象設計中,類可以分爲三種類型:實體類、邊界類和控制類。類之間的關係包括6種:關聯、聚合、組合、依賴、泛化、實現。

4.2 缺點

  類和繼承等特點使得程序會多很多指針操作來定位函數入口和自身要維護虛擬方法表等額外的工作,程序的處理效率相對要低(但程序開發效率高)。

5 原型法

5.1 特點

  原型是軟件系統的初始版本,用來演示概念並嘗試設計選擇,通常用來發現更多的問題和可能的解決方案。快速迭代式的原型開發能夠有效控制成本,根據原型與最終產品之間的關係,原型開發分爲三類:拋棄式原型開發利用原型驗證和澄清系統的需求描述,重新構造系統:演化式原型開發逐步改進和細化原型,將原型進化直至產生出目標系統;增量式原型開發在建立軟件總體設計的基礎上,採用增量開發方法,使原型成爲最終系統。
  以原型開發思想爲基礎,提出了螺旋模型、敏捷方法等。

5.2 缺點

  原型法不適用於開發大型的信息系統;系統難於維護;如果用戶合作不好,盲目糾錯,會拖延開發進程。

6 逆向工程

6.1 特點

  逆向工程與重構工程是目前預防性維護採用的主要技術。所謂軟件的逆向工程就是分析已有的程序,尋求比源代碼更高級的抽象表現形式。一般認爲,凡是在軟件生命週期內將軟件某種形式的描述轉換成更爲抽象形式的活動都可稱爲逆向工程。逆向工程導出的信息可以分爲:實現級、結構級、功能級、領域級,信息的抽象級別越高,它與代碼的距離就越遠,通過逆向工程恢復的難度亦越大,而自動工具支持的可能性相對變小,要求人蔘與判斷和推理的工作增多。

7 敏捷方法

7.1.1 Scrum

  Scrum是橄欖球比賽中“爭球”的意思,你可以腦補爭球時的敏捷、激情和你爭我奪。現在Scrum是廣泛應用於IT界的一套項目管理工具
  Scrum的核心,是把整個項目分成若干個衝刺,每次2-4周,衝完一次再來一次。
  Scrum的本質,是把一次漫長的長跑,分割成一段段全力以赴的衝刺,通過一套標準流程方法,提高效率。
  Scrum是由三個角色(產品負責人,Scrum Master,團隊成員)、四個儀式(衝刺計劃會,每日站會,衝刺評審會,衝刺回顧會)和三個物件(產品積壓,衝刺積壓,燃盡圖)組成的一套項目管理方法。
產品負責人,召開衝刺計劃會,定下三件事:衝刺目標。定下目標後,把它們從“產品積壓”,移入“衝刺積壓”。
衝刺方法。選定衝刺方法。
  分配任務。團隊成員若干人,在6個步驟中,各自主動領取任務。
  燃盡,是燒完了的意思。隨着時間推移,剩餘工作量越來越少。把計劃進度,畫成一根從左上到右下的直線。然後,把實際進度用紅線標在旁邊,看着工作量像蠟燭一樣,不斷燃盡。
  衝刺評審會,由主編負責主持,一起審閱最終交付的文章。衝刺回顧會,討論開始做什麼,停止做什麼,繼續做什麼。

7.1.2 極限編程

  XP (Extreme Programming,極限編程)在所有的敏捷型方法中,XP是最引人矚目的。它源於Smalltalk圈子,特別是Kent Beck和Ward Cunningham在20世紀80年代末的密切合作。XP在一些對費用控制嚴格的公司中的使用,已經被證明是非常有效的。

7.1.3 水晶方法

  Cockburn的水晶系列方法,水晶系列方法是由AlistairCockburn提出的。它與XP方法一樣,都有以人爲中心的理念,但在實踐上有所不同。Alistair考慮到人們一般很難嚴格遵循一個紀律約束很強的過程,因此,與XP的高度紀律性不同,Alistair探索了用最少紀律約束而仍能成功的方法,從而在產出效率與易於運作上達到一種平衡。也就是說,雖然水晶系列不如XP那樣的產出效率,但會有更多的人能夠接受並遵循它。

7.1.4 開源界的開發方法

  開放式源碼,這裏提到的開放式源碼指的是開放源碼界所用的一種運作方式。開放式源碼項目有一個特別之處,就是程序開發人員在地域上分佈很廣,這使得它和其他敏捷方法不同,因爲一般的敏捷方法都強調項目組成員在同一地點工作。開放源碼的一個突出特點就是查錯排障(debug)的高度並行性,任何人發現了錯誤都可將改正源碼的“補丁”文件發給維護者。然後由維護者將這些“補丁”或是新增的代碼併入源碼庫。

7.1.5 FDD

  Coad的功用驅動開發方法(FDD-Feature Driven Development),FDD是由Jeff DeLuca和大師Peter Coad提出來的。像其他方法一樣,它致力於短時的迭代階段和可見可用的功能。在FDD中,一個迭代週期一般是兩週。在FDD中,編程開發人員分成兩類:首席程序員和“類”程序員(classowner)。首席程序員是最富有經驗的開發人員,他們是項目的協調者、設計者和指導者,而“類”程序員則主要做源碼編寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章