DDD彌補了瀑布和敏捷兩個方法的不足之處! - 47 North Labs
該文比較了軟體工程中敏捷和瀑布兩個方法,主要是分析了敏捷方法,指出敏捷方法的致命問題:我們們在系統開始時使用敏捷確實節省了分析和定義整個資料模型的時間,但經過一段時間、一年或更長時間後,我們將花費相同或更多的時間來處理糟糕的資料模型或大資料重構。
如果我們在實現需求之前再新增一個階段,那麼可以很容易地避免我們將來可能遇到的這些問題,而不是從一開始就強制完全極端地敏捷。花點時間分析,定義和建模,涵蓋專案中的主要重要史詩故事epic stories ,這更其實類似於瀑布式方法+DDD了。
敏捷的方式
現在,每個軟體開發人員都知道敏捷宣言中提供的敏捷基礎知識,宣言中這些想法可能更抽象,但從現實生活經驗看,我們可以定義十二個原則:
- 透過早期和持續交付有價值的軟體實現客戶滿意度
- 歡迎不斷變化的需求,甚至是開發後期
- 經常提供可執行的軟體(是數週時間而不是數月)
- 業務專家和開發人員之間的密切,日常合作
- 專案是圍繞有動力的個人建立的,他們應該受到信任
- 面對面交談是最好的溝通方式(共址)
- 可執行的軟體是前進的主要衡量標準
- 可持續發展,能夠保持穩定的步伐
- 不斷關注技術卓越和良好的設計
- 簡單性 - 最大化未完成工作量的藝術 - 至關重要
- 最好的架構,要求和設計來自自組織團隊
- 通常,團隊會反思如何提高效率並相應調整
基於敏捷的最常用的方法是scrum,專案應該在一系列迭代的小步驟中完成,這些步驟稱為衝刺sprint。一個衝刺應該有一個月的最長期限。最常見的是兩週。Scrum的主要目標 - 敏捷是逐步開發軟體的,將所有需求分成較小的需求,並在每個sprint上處理其中的一些需求。提出一些小的需求,以便有幾個可以適合在一個衝刺sprint中完成。每次衝刺sprint後,都會有一個版本釋出,並將其提交給PO進行稽核(功能錯誤等)。
瀑布的方式
瀑布的基本模型流程包含以下幾個階段:
- 軟體要求
- 分析
- 系統設計
- 編碼和實施
- 測試和驗證
- 操作和維護
正確實施敏捷的方法
比較這兩種方式,我們可以發現使用敏捷而不是瀑布會更好更可靠。我們不必等待很長一段時間,才能驗證我們做的是正確的,透過每次迭代都讓客戶逐步接受專案。
但是問題來了:由於不喜歡花時間分析和定義整個資料域,提前滿足所有需求,以根據專案的實際需求建立整個架構,因為這將耗費他們的時間和金錢。所有需求故事都只在專案開始後定義。將它們分成小的需求,這可以在一個衝刺期間完成,沒有無用的工作和努力。
將根據每個新要求,每個新功能或某些錯誤來定義和建立資料模型。一開始,資料模型將很好地執行服務,需求可以快速完成,因為不存在建立新實體並將其引用到現有實體的問題。而我們實現DDD時,首先是定義資料模型然後實現程式碼。
經過一段時間以後,透過沖刺建立了一些資料模型,這時需要更改模型的新需求來了,我們將面臨越來越多的困難,需要使現有的資料模型適應新的需求。在一瞬間,我們將不得不在模型中做出更大的改變。這樣做的主要原因是,當我們實施這些需求時,我們只關注我們在上一個故障單、故事等處理過程中對sprint的需求,而我們並不知道模型對特徵需求的需求。
兩個解決方案:
- 繼續嘗試研究我們現在製作的模型。這將使實施我們的新變更更加困難,並且更加耗時。
- 或者在某一時刻停止使用新功能並花時間在資料模型的大型重構上。這需要很長時間才能在專案中使用新功能進行任何高效工作,只需重構。
在這兩種情況下,我們的生產力都會低於我們的預期。
如果我們回顧一下我們所做的事情,我們會看到我們在開始時節省了分析和定義整個資料模型的時間,但經過一段時間,一年或更長時間後,我們將花費相同或更多的時間來處理糟糕的資料模型或大資料重構。
如果我們在實現需求之前再新增一個階段,那麼可以很容易地避免我們將來可能遇到的這些問題,從一開始就花時間分析,定義和建模我們必須在專案中涵蓋的主要重要的史詩故事,這更類似於瀑布式方法中的DDD。
相關文章
- 亞馬遜的向後工作法可以彌補敏捷不足 -hbr亞馬遜敏捷
- 瀑布模型和敏捷開發模型敏捷
- 填坑利器?Redis如何彌補傳統MySQL架構的不足RedisMySql架構
- [精選]當PHP遇上Go會怎樣?GO語言彌補了PHP的不足,然後。。。PHPGo
- 幽默:瀑布、敏捷、看板和Scrum以及精益等工程方法比較敏捷Scrum
- 【1分鐘知識點】利用「佔位塊」彌補 space-between 的不足
- 瀑布式開發和敏捷開發的區別敏捷
- 瀑布 敏捷與現實敏捷
- 瀑布和迭代可混合:敏捷定義者Martin Fowler定義瀑布法敏捷
- 淺談軟體開發模型之瀑布開發和敏捷開發模型敏捷
- 【PM】關於敏捷,瀑布流,文件敏捷
- 幽默:兩個沒有使用DDD的幽默
- 影像資料不足時的處理方法
- Linux記憶體不足的處理方法Linux記憶體
- 牛客周賽47 (待補F和思路)
- DMN決策模型的不足之處 - brcommunity模型Unity
- AI是如何彌補技術鴻溝的?AI
- sqli-labs————Less-47(procedure alalyse\lines terminated by利用)SQL
- 用css實現兩端對齊text-align: justify有什麼不足之處?CSS
- 寫一個方法,當給定數字位數不足8位時,則在左邊補充0以補足8位數的方法
- oracle rac 打PSU補丁30805461兩個問題(Java版本及空間不足導致失敗)OracleJava
- Redpoint報告:彌補消費體驗的鴻溝
- 敏捷和 Scrum 之間的區別敏捷Scrum
- 如何利用員工個人資料監控來彌補安全漏洞
- Python求兩個list的交集、並集、差(補)集、對稱差集的方法Python
- DDD之4聚合和聚合根
- JS實現圖片的淡入和淡出的兩種方法,如有不足,還請前輩多多指導^-^~JS
- pt-osc使用增量資料觸發器的不足之處總結和推薦觸發器
- 兩個簡單的擴充套件方法:TrimPrefix和TrimSuffix套件
- ORACLE打補丁的方法和案例Oracle
- Java中Stream的teeing()方法用於處理合並兩個Collector - foojayJava
- 實現兩個視窗通訊方法之postMessage
- 微軟釋出補丁:修復了遠端桌面元件中存在的兩個高危漏洞微軟元件
- DDD提出者Eric Evans承認不足,希望DDD語言不斷改進 - infoQ
- 用敏捷的DevOps拳打研發低效、腳踢管控不足敏捷dev
- 刷了兩遍LeetCode之後,我拿了9個offerLeetCode
- python之建立類的兩種方法Python
- 記 Codes 研發管理平臺 —— 瀑布與敏捷模式融合的創新實現敏捷模式