敏捷式軟體開發 (Agile Software Development)和傳統軟體工程

來源:互聯網
上載者:User

標籤:simple   電腦   反饋   工作日   概要設計   構建   信任   mod   print   

一、   傳統軟體工程

從上個世紀60年代開始,人們開始逐漸認識到了確實存在著“軟體危機” 這樣一個事實軟體開發人員被諸如下列問題困擾:

  •  軟體生產不能滿足日益增長的需要
  •  軟體開發成本和開發進度估計往往不準確
  •  軟體開發人員和使用者之間資訊交流不充分,使用者對完成的軟體滿意度很低
  •  軟體價格昂貴,軟體成本在整個電腦系統中所佔的比例急劇上升,軟體已成為許多電腦系統中花錢最多的項目
  •  軟體品質難以保證
  •  軟體可維護性差,程式中的錯誤很難改正,適應性或完善性維護都極其困難

導致危機問題的一個重要原因,是由於軟體研製和維護本身是工程性的任務,但軟體人員採取的方式卻未能工程化。為克服軟體危機,人們開始考慮採用工程化方法和工程途徑來研製和維護軟體。我們以瀑布模型和螺旋模型兩個模型為例進行討論。

1、瀑布模型

在傳統的軟體工程模型中,其中瀑布模型是1970年W. Royce提出的最早的軟體開發模型,是經典的預見性軟體開發模型,直到80年代早期,它一直是唯一被廣泛採用的軟體開發模型。該模型嚴格規定各階段的任務,上一階段任務輸出作為下一階段工作輸入。其生命週期劃分為:

  • 可行性研究與計劃(策劃):對軟體進行可行性分析,估算開發費用和時間等
  • 需求分析:向使用者瞭解需求,解決“做什麼”的問題
  • 設計:分為概要設計和詳細設計。對需要解決的問題進行分析,提出解決方案,解決“怎麼做”的問題
  • 實現(編碼):按照設計的結果,採用某種程式設計語言加以實現
  • 測試:編碼結束後,要用大量的資料進行測試,找出其中隱藏的錯誤
  • 使用和維護:軟體交付使用者使用後,在運行過程中仍有可能出錯,而且使用者的需求也有可能改變,因此,軟體需要繼續修改

2、螺旋模型

螺旋模型(Spiral Model)採用一種周期性的方法來進行系統開發。該模型是快速原型法,以進化的開發方式為中心,在每個項目階段使用瀑布模型法。這種模型的每一個周期都包括需求定義、風險分析、工程實現和評審4個階段,由這4個階段進行迭代。軟體開發過程每迭代一次,軟體開發又前進一個層次。螺旋模型強調風險分析,使得開發人員和使用者對每個演化層出現的風險有所瞭解,繼而做出應有的反應,因此特別適用於龐大、複雜並具有高風險的系統。

螺旋模型沿著螺線進行若干次迭代,圖中的四個象限代表了以下活動:

  • 制定計劃:確定軟體目標,選定實施方案,弄清項目開發的限制條件;
  • 風險分析:分析評估所選方案,考慮如何識別和消除風險;
  • 實施工程:實施軟體開發和驗證;
  • 客戶評估:評價開發工作,提出修正建議,制定下一步計劃。

螺旋模型由風險驅動,強調可選方案和約束條件從而支援軟體的重用,有助於將 軟體品質作為特殊目標融入產品開發之中。

二、  敏捷開發

雖然傳統軟體工程解決了軟體危機,讓軟體開發變得結構化體系化,但軟體開發的後續依然會產生許許多多的問題,敏捷開發由此誕生。

2001年,敏捷聯盟共同簽署了“敏捷式軟體開發 (Agile Software Development)宣言”,該宣言聲明:

  • 個體和互助高於流程和工具
  • 工作的軟體高於詳盡的文檔
  • 客戶合作高於合約談判
  • 響應變化高於遵循計劃

    敏捷開發強調有效響應變化,而不是循規蹈矩的遵循制定的計劃,這是敏捷開發與傳統軟體工程最主要的不同點。此外敏捷開發將客戶作為Team Dev的成員以消除隔閡,能夠更好更快的交流合作,以期完成項目,由此敏捷開發更能適應客戶的需求變化。

敏捷聯盟為希望達到敏捷的人們定義了敏捷開發12條原則:

  • 我們最優先要做的是通過儘早的、持續的交付有價值的軟體來使客戶滿意。
  • 即使到了開發的後期,也歡迎改變需求。敏捷過程利用變化來為客戶創造競爭優勢。
  • 常性的交付可以工作的軟體,交付的間隔可以從幾周到幾個月,交付的時間間隔越短越好。
  • 在整個項目開發期間,業務人員和開發人員必須天天都在一起工作。
  • 圍繞被激勵起來的個體來構建項目。給他們提供所需要的環境和支援,並且信任他們能夠完成工作
  • 在團隊內部,最具有效果並且富有效率的傳遞資訊的方法,就是面對面的交談。
  • 工作的軟體是首要進度度量標準。
  • 敏捷過程提倡可持續的開發速度。責任人、開發人員和使用者應該能夠保持一個長期的、恒定的開發速度
  • 不斷地關注優秀的技能和好的設計會增強敏捷能力。
  • 簡單----使未完成的工作最大化的藝術----是根本的。
  • 最好的構架、需求和設計出自與自組織的團隊。
  • 每隔一定時間,團隊會在如何才能更有效地工作方面進行反省,然後相應地對自己的行為進行調整。

我們以極限編程和scrum為例進行討論。

1、極限編程(XP)

極限編程是敏捷式軟體開發 (Agile Software Development)中應用最為廣泛的一個方法,是一個輕量級的、靈巧的軟體開發方法,是一種近螺旋式的開發方法,它將複雜的開發過程分解為一個個相對比較簡單的小周期;通過積極的交流、反饋以及其它一系列的方法,開發人員和客戶可以非常清楚開發進度、變化、待解決的問題和潛在的困難等,並根據實際情況及時地調整開發過程。

極限編程的過程分為4步:

  • 策劃:傾聽使用者故事,確定軟體需要的輸入輸出及功能特徵並判斷其優先順序。
  • 設計:嚴格遵守KIS(keep it simple)原則,使用簡單的描述。
  • 編碼:團隊開發一系列用於檢測本次發布的包括所有故事的單元測試,一旦編碼完成立即進行測試來向開發人員提供反饋。
  • 測試:將個人的測試組織到一個通用測試集,每天進行整合和確認測試,最後進行驗收測試。

 

2、Scrum

Scrum 是當今被廣泛應用的敏捷開發模式之一。

Scrum 開發過程是以Sprint 為增量的反覆式開發法過程。Sprint 開始時,團隊從已按優先順序順序排列好的產品訂單中選擇適合本團隊的項目,與PO 澄清需求並產生同樣按優先順序順序排列好的Sprint 訂單,並且保證在本次Sprint 結束前做完。每個工作日團隊都要收集彙報彼此的任務進程和餘下的任務量。Sprint 結束時小組展示最終的項目果並收集來自團隊之外的反饋,用以下一個Sprint 的自我提升。

三、  二者對比

傳統軟體工程產生於軟體危機,它使得軟體的開發結構化工程化,起初的確給軟體開發帶來很大收益,但隨著時間的增加,傳統軟體工程循規蹈矩的特點給軟體開發帶來了很大的麻煩:

  • 各個階段的劃分完全固定,階段之間產生大量的文檔,極大地增加了工作量。
  • 由於開發模型是線性,使用者只有等到整個過程的末期才能見到開發成果,從而增加了開發風險。
  • 通過過多的強制完成日期和裡程碑來跟蹤各個項目階段。
  • 不適應使用者需求的變化。這也是瀑布模型最核心的缺點。

 

由此為了避免傳統軟體工程的弊端,也出現了諸如螺旋模型等軟體開發模型,降低開發風險,增強靈活性。

  • 相對於傳統軟體開發,再來看看敏捷開發的優點
  • 客戶成為Team Dev的一部分;
  • 能夠頻繁提交可以工作的中間增量產品;
  • 可以不斷更改項目的需求以適應使用者需求的變化;
  • 不需制定詳盡的不切實際的計劃和編寫冗長的文檔使得團隊更加靈活自如
  • 強調可應用的軟體,開發週期短

敏捷開發與傳統軟體工程在成本費用方面區別很大,,傳統軟體開發變更成本費隨機化的進展呈現非線性增長,隨時間的增加增長速率也在變快,而敏捷開發而不同,其變更成本費用前期隨著時間的增加,增長速率變慢,但某時間節點過後也會增長變快,但遠小於傳統軟體工程。

敏捷開發能夠帶來多方面的好處但是它並不適用於所有的項目,所有的產品,所有的人和所有的情況,也不是完全對立與傳統軟體工程實踐。敏捷開發也有其缺點:

  • 需求易變。太過重視客戶需求,可能會導致為實現一個需求從而打亂整個軟體工程的計劃。
  • 矛盾的客戶需求。客戶需求量過大可能會導致需求的矛盾。
  • 需求的非正規表示。需求很多是口頭的非正式的,不能及時發現遺漏或不一致的錯誤
  • 正規設計的缺乏。開發複雜系統時不能保證軟體體繫結構的品質和可維護性。

綜上所述,敏捷開發的確能夠在響應使用者需求上比傳統軟體工程更加合適,但並不是軟體開發的萬金油,而傳統軟體開發由於其結構化正規化的設計是的其依然能夠有一席之地。

參考資料

1、《軟體工程:實踐者的研究方法(第七版)》Roger S.Pressman

2、Scrum敏捷式軟體開發 (Agile Software Development)方法實踐中的改進和應用

     陳國棟,羅省賢 電腦技術與發展 第21卷 第12期 2011年12月

3、百度百科 瀑布模型

http://baike.baidu.com/link?url=kfptsC14xgQbv-hojxqBCp6nzel0njgl8waMDUr4E0FI27tDM0cnWS96aZFAOdj9n3KhKU51aFSCVI5j3riFRqhVcnezRUXtUkLaCN3q-blfT59btSlZ2Jb4VUPK-8zk

4、百度百科 螺旋模型

http://baike.baidu.com/link?url=Fo9hNjpfVbhGPXqGsawygcXpk97pqrmHXIth4e1SXeYqLq5FiSF-6qPEwoaXvWMfBCEDTXRYbWLhM0YJm0NVxvibwMgx86uZDAJm6Vnwnx4I0UhIkzfS1A1SmoHZ4_DV

敏捷式軟體開發 (Agile Software Development)和傳統軟體工程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.