軟件開發過程
軟件開發過程(英語:software development process),或軟件過程(英語:software process),是軟件開發的生命周期(software development life cycle),其各個階段實現了軟件的需求定義與分析、設計、實現、測試、交付和維護。軟件過程是在開發與構建系統時應遵循的步驟,是軟件開發的路線圖。[1]
軟件過程方法涉及交付(deliverables)和工件(artifacts)的預定義、軟件產品在項目團隊中的開發與維護。過程方法的應用可以完善軟件設計、產品管理和項目管理。[2]敏捷開發是現代軟件開發中被廣泛使用的範式。過程模型(英語:process models)則意圖解決軟件過程中的混亂,將軟件開發過程中的溝通、計劃、建模、構建和部署等活動(activities)有效地組織了起來。
軟件過程為軟件的開發定義了一個框架,將自動化工具、軟件開發方法和質量管理緊密結合在了一起。軟件過程構成了軟件項目管理控制的基礎,建立了一個環境以便於技術方法的採用、工作產品(模型、文檔、報告、表格等)的產生、里程碑(milestones)的建立、質量的保證、正常變更的正確管理。[1]
歷史
軟件開發方法(英語:software development methodology, SDM)框架在20世紀60年代開始出現。在信息系統的構建中,系統開發生命周期(SDLC)可被視作最早的形式化方法。SDLC的主要想法是,在採用框架時應當「以審慎、結構化和方法化的方式開發信息系統。生命周期中的每個階段,從概念提出到系統交付,都應當嚴格、依次地進行」。當時的軟件開發目標是,「在大型商業集團中開發大規模的功能性商業系統,系統需要承載大量數據處理和數據運算任務」。[3]
方法、過程和框架覆蓋範圍甚廣,包含從日常開發的步驟到為特定項目量身定製的靈活框架。一些情況下,組織會正式發布描述過程的文檔。
軟件開發方法歷史中的重要事件有:
- 1969年,結構化編程
- 1980年,結構化系統分析與設計方法(Structured Systems Analysis and Design Method, SSADM)
- 面向對象程序設計,起步於1960年代,1990年代中期成為一種主流方法
- 1991年,快速應用程序開發
- 1995年,Scrum
- 1998年,團隊軟件過程
- 1998年,由IBM維護的統一軟件開發過程
- 1999年,極限編程
- 2005年,敏捷統一過程(Agile Unified Process, AUP)
- 2010年代,基於大規模的敏捷框架(Scaled Agile Framework, SAFe)
- 2010年代,大規模Scrum(Large-Scale Scrum, LeSS)
方法
敏捷軟件開發
敏捷式開發模型的特性是能夠持續性的對軟件本體進行不斷改造以及客戶對軟件開發過程中的不斷介入。它適用於小規模的開發團隊,好讓每個成員能夠互相在開發進行時方便交流。 敏捷模型的優點在於其靈活性——經過一次次例行的開發迭代期(iterations)後,在每一次迭代期的開始時小組便會考慮向軟件引入新的特性和改變,也就不會特別跟隨原有的開發要求。
過程模型
過程模型由五個基本的框架活動組成:溝通、計劃、建模、構建和部署。他們之間線性(linear)、迭代(iterative)、演進(evolutionary)和平行(parallel)關係會產生不同的模型。常見的過程模型包括:瀑布模型、V模型、原型設計、增量模型、螺旋模型等[1]
瀑布模型
瀑布模型是經典的生命周期模型,簡單的線性過程模型。一般會依次進行以下環節:
適用於需求良定義的軟件開發工作,實際工作很難按照瀑布模型的預想進行。
V模型是瀑布模型的變種,它允許軟件過程中環節的回顧調整。在V字曲線上下行時,團隊理解需求和設計實現;在V的頂點處,可運行的軟件已經被生成;而在曲線上行則會進行諸項測試。
螺旋模型
螺旋模型最初由Barry Boehm提出,它是軟件過程的一個演進模型,為版本遞增軟件的快速開發提供了可能。其兩個主要特性是;
- 循環地增加系統定義和實現的複雜度而降低風險
- 用一組錨點里程碑(anchor point milestones)保證利益者獲得靈活和滿意的系統解決方案[4]
實踐
在軟件工程領域,項目生命周期刻畫了一個工程從起始到完成,是如何進行計劃、控制和監控的模型。在項目生命周期的早期和後期,軟件架構、需求和系統定義是一個問題:
- 系統/軟件的市場是什麼?
- 競爭對手有哪些?
- 系統/軟件的運行平台是什麼?
- 這個項目可用的時間有多少?
- 項目需要是什麼?
經過這些年,從最早也最簡單的瀑布模型開始,已經開發出了許多不同的模型。但是,隨着軟件變得更大和更複雜,這種開發方法已經出現負面影響,尤其是牽扯到有大型團隊的時候。迭代的模型得到了發展,它包括原型法、演化原型法、增量開發、螺旋模型、V模型和混沌模型。
這些模型的使用大部分都局限於項目的總體管理,但是現在認為,如果在項目的單獨部分都由最合適的模型控制,則這個項目受到了更好的控制。例如,一個項目用增量開發模型,但是在每一個增量過程,文檔是按照瀑布模型創建和管理,而代碼開發使用V模型管理。
每個項目的生命周期的正規性和複雜性受到很多因素的制約,包括預算約束,經驗,項目規模和複雜度,開發隊伍。
一些經驗豐富和很受尊敬的項目領導和程序員認為生命周期的嚴格應用是一種理論,並不能在實踐中起到好作用。Linux內核的創建者林納斯·托瓦茲(Linus Torvalds),在Linux內核的郵件列表中這樣描述:
“ | 沒有一個已經在通用市場上(相對特殊領域而言)取得成功的的較大的軟件項目曾經經歷了那些好的生命周期模型,就像在計算機科學課程裡告訴你的一樣。 | ” |
ISO 12207是為描述為一個項目選擇,執行和監控生命周期的方法而開發的國際標準。
參見
參考文獻
- ^ 1.0 1.1 1.2 Pressman, Roger S.; Maxim, Bruce R. Software Engineering: A Practitioner's Approach Eighth Edition. McGraw-Hill Education. 2015. ISBN 978-0-07-802212-8.
- ^ Centers for Medicare & Medicaid Services (CMS) Office of Information Service (2008). Selecting a development approach (頁面存檔備份,存於網際網路檔案館). Webarticle. United States Department of Health and Human Services (HHS). Re-validated: March 27, 2008. Retrieved 27 Oct 2008.
- ^ Geoffrey Elliott (2004) Global Business Information Technology: an integrated systems approach. Pearson Education. p.87.
- ^ B. Boehm. A spiral model of software development and enhancement. ACM SIGSOFT Software Engineering Notes. 1986, 11 (4): 14-24 [2018-07-06]. doi:10.1145/12944.12948. (原始內容存檔於2019-10-10).