已經有很多介紹什麼是敏捷開發的文章了,為什麼還要寫一篇呢。我最近也在思考中,主要有2個原因:
現在找到的文章,介紹敏捷開發非常簡短,不夠詳細
甚至有一些文章,沒有介紹出敏捷的本質
作為一名 Scrum培訓師(CST),有必要為大家澄清一下什麼是敏捷開發。
敏捷開發調查介紹敏捷之前,先了解一下背景。這是一份敏捷開發2020年問卷調查結果。在這份報告中,我們可以看出:
Scrum仍然是大趨勢,SAFe也得到了更廣泛的應用(Bob認為SAFe雖然解決了問題,但也帶來了更多的問題,持有保留態度)。
更多詳情,可以點擊查看問卷調查。
什麼是敏捷開發敏捷一詞來源於2001年初美國猶他州雪鳥滑雪聖地的一次敏捷方法發起者和實踐者(他們發起組成了敏捷聯盟)的聚會。
迭代和增量式軟體開發方法可以追溯到1957年。進化式項目管理和適應性軟體開發出現在1970年代初期。在1990年代,因針對重量級的軟體開發方法的批評,而發展了許多輕量化的軟體開發方法、項目與細微化開發管理。包含了,從1991年開始的快速應用程式開發(RAD)、從1994年開始的統一進程與動態系統開發法(DSDM)、從1995年的Scrum、從1996年的水晶清透法(Crystal Clear)與極限編程法(eXtreme Programming)、1997年的功能驅動開發(Feature Driven Development)。雖然那些開發法都起源于敏捷開發宣言之前,但都統稱為敏捷軟體開發法。在此同時,製造業與航空業也遭遇相同變化。
在2001年,十七名軟體開發人員在猶他州的雪鳥度假村會面,討論這些輕量級的開發方法,並由Jeff Sutherland,Ken Schwaber和Alistair Cockburn發起,一同發布了"敏捷軟體開發宣言"。
在2005年,由Alistair Cockburn和Jim Highsmith領導的小組編寫了一份項目管理原則的附錄,即"相互依存聲明",以便根據敏捷軟體開發方法來指導軟體項目管理。
在2009年,羅伯特-C-馬丁(Robert C Martin)編寫了軟體開發原則的擴展,即軟體工藝宣言(Software Craftsmanship Manifesto),根據職業行為和掌握程度來指導敏捷軟體開發。
在2011年,敏捷聯盟創建了敏捷實踐指南(2016年更名為"敏捷詞彙")、敏捷實踐、術語和元素工作定義的演化開放式彙編,以及來自敏捷從業者社區的經驗指南。
了解了上面的背景後,我們能看出敏捷中絕大部分是有關於Scrum的,敏捷當中除了Scrum還有很多的一些流派(分支),那到底什麼是敏捷開發呢?這個我們要回到2001年,十七名軟體開發人員他們在一起進行了一次聚會,努力去解救程式設計師這個群體。在這次聚會當中他們提出了敏捷軟體開發宣言。敏捷開發最早確實就是軟體開發,甚至於只是軟體開發行業的總結。針對於軟體開發的宣言下面我們來詳細解讀什麼是敏捷軟體開發宣言
敏捷開發的特點敏捷開發相對於傳統的瀑布式開發,有其特點:
迭代開發 - 敏捷開發的特點迭代或衝刺指的都是固定時間盒(時間段),通常持續一到四周。每個迭代都具有跨職能的團隊,包含了規劃、分析、設計、程序編碼、單元測試和驗收測試所有的活動。在迭代結束時,將工作產品向利益相關者展示。透過上述方式讓整體風險降至最低,並使產品能夠快速適應變化。迭代的方式,可能不會一次增加足夠的功能來保證可立即發布使用,但是目標是在每次迭代結束時,有一個可用的發行版(最小化程序缺點)。因此完整產品的發布或新功能可能需要多次迭代。
迭代更深層次的含義是在固定時間盒內,不斷的重複,重構,改進。
增量開發 - 敏捷開發的特點敏捷開發中的每個框架,都提倡將軟體(產品)切分成很多的小塊,來進行增量的開發。即每次只開發其中的一小塊,不斷的累加。通過增量的方式,可以讓客戶(或最終用戶)儘早看到軟體功能,儘早的體驗到部分的應用,以儘早獲取反饋。
價值驅動 - 敏捷開發的特點這是一句"廢話",正確的"廢話"。每個產品都號稱是有價值的,但是作為開發團隊是否真正問了以下的問題:
這個產品解決的問題是什麼
這個問題發生的頻率如何
這個問題客戶(或用戶)現在是怎麼解決的
你的產品為客戶帶來了哪些不同的體驗
如果能想清楚以上的問題,並且有清晰的答案,那麼你的產品價值自然會體現出來。
敏捷軟體開發宣言我們一直在實踐中探尋更好的軟體開發方法,身體力行的同時也幫助他人,由此我們建立了如下價值觀:
個體和互動高於 流程和工具 工作的軟體高於 詳盡的文檔 客戶合作 高於 合同談判 響應變化 高於 遵循計劃
也就是說儘管右項有其價值,我們更重視左項的價值
個人和交互:自我組織和動機是重要的,像坐在一起辦公和結對編程開發,這樣的模式中的溝通是重要的。創建一個良好的溝通和協作的開發團隊,優於一個孤立運行的專家團隊。溝通是一個基本的概念。
工作的軟體:工作軟體比在會議中向客戶呈現文檔更有用並更受歡迎。最好的做法是和代碼一起評審,保持外部文檔的輕量化,而不是沉重的文檔,後者需要花費很大的精力,且很快就會過時。
客戶合作:在軟體開發周期的初始階段,需求無法完全收集,所以最好直接涉及到付費客戶、最終用戶或者代理,以便在反饋的基礎上逐步闡述和調整詳細的需求。
響應變化:敏捷軟體開發方法的重點是快速響應變化和持續改進。
一些軟體開發者組織了敏捷聯盟,為非營利組織,根據宣言的價值觀和原則促進軟體開發。吉姆-海史密斯(Jim Highsmith)代表敏捷聯盟(Agile Alliance)介紹宣言:
"敏捷運動並不是反方法論,實際上我們很多人都想恢復對方法論的可信度。我們想恢復平衡。我們接受建模,但不是為了在塵土飛揚的企業存儲庫中提交一些圖表。我們擁抱文檔,而不是數百頁從未維護和很少使用的文檔。我們計劃,但要認識到動蕩環境下的規劃極限。那些將XP或SCRUM或者其他敏捷方法的支持者稱為"黑客"的人對於黑客術語的方法和原始定義都是無知的。"
敏捷宣言遵循的原則我們遵循以下原則:
我們最重要的目標,是通過持續不斷地及早交付有價值的軟體使客戶滿意。
欣然面對需求變化,即使在開發後期也一樣。為了客戶的競爭優勢,敏捷過程掌控變化。
經常地交付可工作的軟體,相隔幾星期或一兩個月,傾向於採取較短的周期。
業務人員和開發人員必須相互合作,項目中的每一天都不例外。
激發個體的鬥志,以他們為核心搭建項目。提供所需的環境和支援,輔以信任,從而達成目標。
不論團隊內外,傳遞信息效果最好效率也最高的方式是面對面的交談。
可工作的軟體是進度的首要度量標準。
敏捷過程倡導可持續開發。責任人、開發人員和用戶要能夠共同維持其步調穩定延續。
堅持不懈地追求技術卓越和良好設計,敏捷能力由此增強。
以簡潔為本,它是極力減少不必要工作量的藝術。
最好的架構、需求和設計出自自組織團隊。
團隊定期地反思如何能提高成效,並依此調整自身的舉止表現。
敏捷軟體開發框架敏捷軟體開發框架最常見的是 Scrum,極限編程和看板,但除此以外還有很多框架(有人叫它們是方法,但方法並不能很好的描述了最初的設計和想法。框架 vs. 方法)。有的專注於實踐(例如,極限編程、敏捷建模),而有的專注於管理工作流程(例如Scrum,看板),有的支持需求規範和開發(例如FDD)的活動,而另一些則試圖涵蓋整個開發生命周期(例如DSDM,RUP)。
常見敏捷軟體開發框架包括(但不限於):
敏捷建模
動態系統開發法(DSDM)
極限編程(XP)
特性驅動開發(FDD)
精益軟體開發
看板
Scrum
更多的敏捷軟體開發框架(方法)
敏捷的精髓在2020年我曾經寫過一篇重溫Scrum精髓 - Scrum的核心到底是什麼,在這篇文章中我重點提出了3個要點:
Scrum精髓 Part1 - 解決客戶問題
Scrum精髓 Part2 - 關係
Scrum精髓 Part3 - 反思
查看具體詳情
更加廣泛意義的敏捷開發敏捷宣言的提出已經有20年了,隨著時間的推移敏捷遠遠不止在軟體開發領域進行應用。比如敏捷宣言除了最初版本之外,還有:
Manifesto for Agile HR Development
Agile Marketing Manifesto
Manifesto for Agile Hardware
在如此廣泛的領域中應用敏捷,敏捷的含義也發生了一些變化。而其最根本的2點不變:
持續學習持續學習,終身學習。中國有句古話,"活到老,學到老"說的就是這個道理。
持續改進持續改進,日語中有一個對應的詞是 Kaizen。它的含義不是改進1次,10次,100次,而是針對一個流程一個方法改進至少1000次。仔細體會一下這個改進的含義。
針對于敏捷開發,你還有什麼疑問嗎?歡迎留言。
參考資料敏捷軟體開發維基百科
敏捷軟體開發宣言
敏捷宣言遵循的原則
Scrum聯盟
Agile聯盟
Agile123