一文讀懂軟件開發流程的演變過程(軟件開發經歷的三個演變過程)
自20世紀70年代開始,隨著信息技術的迅速發展,以及人們對于軟件的需求變大,軟件生產走向規模化,“工程化”思維開始進入軟件開發流程。相繼出現Waterfall(瀑布式)、Agile(敏捷)以及DevOps開發流程模式。
Waterfall(瀑布式)開發的優勢是什么?為什么很多傳統企業還在選擇Waterfall(瀑布式)開發?而互聯網公司為什么會采用敏捷(Agile)的開發模式?DevOps開發的理念又是怎樣的?本文將為各位讀者梳理關于軟件開發流程的“前世今生”。
一、Waterfall開發模式
Waterfall開發模式,在國內一般稱為瀑布式開發模式,是一種屬于預測型生命周期的傳統開發方法。它開始流行于20世紀70年代,是由軟件開發大師W.Royce最初提出的軟件開發模型。該開發方法屬于研發項目管理的預測型生命周期的情況,是最典型的預見性的開發方法,嚴格遵循從需求分析、架構設計、編碼、測試和維護等可預見性的步驟按順序進行。
(一)瀑布式開發的基本準則
(1)通常采用分階段的開發實踐,即軟件開發過程中分為固定的幾個階段,具體的階段名稱可以參考上圖所示的內容;
(2)采用階段式評審方式,即每個階段結束時由上到下進行相應地評審,評審通過后方可進入下一階段。典型的評審有需求評審和架構設計評審等。
(二)瀑布式開發的優勢
(1)在理論上只要在產品評審階段前將所有產品細節確認并完善,且后期很少或不再更改需求,更加方便研發團隊為超大型及復雜項目制定相應地開發計劃;
(2)在理論上瀑布式開發的每個階段都會由對應的負責人員提供相對完善翔實的文檔及其它書面材料,這會讓項目在開發過程中保持很強的安全感,項目的每個階段都經過了所有人的深思熟慮才會進行相應的推進。
(三)瀑布式開發的劣勢
(1)產品驗證滯后 。是瀑布式開發過程中最讓使用軟件的需求部門頭疼的部分,需求部門的人員必須等到項目進入收尾階段的時候才可以對軟件產品的功能性需求與非功能性需求進行驗證。驗證滯后導致在整個開發生命周期積壓了大量的風險和不確定性,這就意味著在研發生命周期中所有階段都不能出現任何紕漏,否則將導致整體項目變得不可控。
(2)需求變更困難。在瀑布式開發過程中,任何對之前階段的重大決策的修改與調整都將打亂原本的開發流程,大量已完成的工作需要重新評估,此間過程的推進將嚴重耗費整個團隊的精力。
(3)難以適應變化的市場。瀑布式開發過程中的所有工作都嚴重依賴于階段的交付物和文檔,比如架構設計階段就嚴重依賴需求分析階段針對需求的評審結果。每個階段的任何一點改動都會牽一發而動全身,這大大降低了產品能夠快速適應市場變化的適應力。
終上所述,采用瀑布式開發是有前提條件的,那就是瀑布式開發適合在軟件開發項目中需求比較確定并且技術解決方向比較確定的情況,瀑布式開發過于理想化,需要產品研發團隊在開始的時候就預見到所有的問題,全面地把握需求,這往往是不可能實現的。所以Agile開發模式就應運而生。
二、Agile(敏捷)開發模式
從21世紀初, Agile(敏捷)開發方法逐步走到了歷史舞臺的中央。尤其是在2001年很多不同流派的創始人或業界大咖共同組建敏捷聯盟后,敏捷聯盟所一致推崇的敏捷宣言、敏捷原則和敏捷價值觀更加深入人心,大有成為業界目前主流開發理論和方法實踐之勢。目前Agile(敏捷)開發的門派很多,但是他們都共同遵循敏捷宣言、敏捷原則和敏捷價值觀。
敏捷遵循的原則共十二條及關鍵要點如下:
1、我們最重要的目標,是通過持續不斷地及早交付有價值的軟件使客戶滿意。
關鍵要點:交付價值
2、欣然面對需求變化,即使在開發后期也一樣。善于掌控變化,幫助客戶獲得競爭優勢。
關鍵要點:擁抱變化
3、經常地交付可工作的軟件,相隔幾星期或一兩個月,傾向于采取較短的周期。
關鍵要點:持續交付
4、業務人員和開發人員必須相互合作,項目中的每一天都不例外。
關鍵要點:合作
5、激發個體的斗志,以他們為核心搭建項目。提供他們所需的環境和支持,相信他們能夠達成目標。
關鍵要點:人本思想
6、不論團隊內外,傳遞信息效果最好效率也最高的方式是面對面的交談。
關鍵要點:面對面溝通
7、可工作的軟件是進度的首要度量標準。
關鍵要點:可工作軟件
8、敏捷過程倡導可持續開發。責任人、開發人員和用戶要能夠共同維持其步調穩定延續。
關鍵要點:節奏
9、對技術精益求精,對設計不斷完善,將提高敏捷能力。
關鍵要點:精益
10、以簡潔為本,極力減少不必要工作量。
關鍵要點:簡潔
11、最好的架構、需求和設計出自于自組織的團隊。
關鍵要點:自組織
12、團隊定期地反思如何能提高成效,并依此調整團隊的行為。
關鍵要點:自省
總之,敏捷開發方法是傳統瀑布式開發方法的合理補充,是應對未來市場或需求多變場景的良好實踐。敏捷開發方法仍然可以借鑒瀑布式開發關于需求管理和架構設計的一些實踐,比如界面原型的設計與評審,針對關鍵的問題的架構決策等內容。
三、DevOps開發模式
當下開發運維一體化的實踐DevOps進一步繼承Agile開發模式的良好實踐,確保每次迭代的可工作軟件能夠快速而成功的發布到生產環境,進而快速獲得客戶關于軟件新特性的價值反饋。
《阿里巴巴 DevOps 實踐》認為,從價值的角度,開發加運維才構成相對完整的 IT 價值鏈。而 DevOps 的誕生,正是為了解決 IT 價值鏈的最突出問題 —— 開發和運維之間的問題。根據微軟云計算 Azure,DevOps 的獨特之處在于開發、IT 運營、質量工程和安全團隊協同工作,在發布新產品、版本或更新所涉及的所有任務中創造效率。其中,DevOps 的主要表現形式包括持續集成、持續交付和連續部署。
在現實操作中,DevOps 也不乏實現工具。比如中國原創的SoFlu 軟件機器人,其出發點是想讓 DevOps 真正的落地,而實現 “落地”,首先重點要解決的就是開發的問題, 包括開發的品質、安全和效率等,再逐步解決測試和運維問題。SoFlu 軟件機器人通過可視化拖拽方式以及參數配置實現等同于編寫復雜代碼的業務邏輯,在設計業務邏輯時就完成了微服務應用開發,做到“業務即圖,圖即代碼”,極大降低軟件開發門檻,實現軟件開發,十倍效能的提升,從而全面提升企業科技生產力。除了SoFlu 軟件機器人,幫助 DevOps 實現組織落地的工具不在少數,其中還包括開源的 CI/CD 服務器 Jenkins、容器平臺 Docker 等等。