軟體開發過程
軟體開發過程(英語: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).