Kent Beck的test && commit || revert 敏捷協作方法
Kent Beck在Facebook七年期間,目睹Facebook團隊從700人擴充套件到5000多人,如果100,000名工程師如何在同一系統上工作?
Facebook的軟體工程工作流程相當傳統:
1.建立差異。
2.獲得稽核和批准。
3.把它投入生產。
4.監控意外後果。
與許多程式碼審查批准工作流程一樣,稽核步驟引入了不可預測的延遲,導致:
1.較大的差異
2.累計巨大差異
3.多工處理
關鍵問題是如何在一份程式碼上合併多個程式設計師的差異?這個問題其實有點類似技術上分散式事務,如何在多個伺服器上覆制一樣的狀態?關鍵是每個伺服器的狀態都在變化?
人們程式碼提交越頻繁,越容易發生程式碼衝突,程式碼結構如同一個樹形結構,某個分支不同,導致後續非常不同,這是不是有些類似區塊鏈,區塊鏈是透過嚴格控制區塊號的順序實現的,但是在程式碼協作中,人不是機器,無法排隊領號,或者搖號。這會阻止人們的創造精神。
Kent Beck系統找到一種透過減少合併程式碼變化並提高變化傳播的速度和範圍來擴充套件軟體專案協作的策略。人們能夠越頻繁提交,同時將自己的改變快速擴充套件到其他人程式碼中,他借用Limbo歌曲中一句話:
How low can you go? 命名這種策略為Limbo。
他提出一個test && commit || revert的具體做法實現Limbo策略:
作為容易操作Limbo策略一部分,我們發明了一種新的程式設計工作流程。我介紹了“test && commit|| revert”,程式碼每次執行測試程式碼正確後都會被提交,如果測試失敗,則程式碼返回到測試最後透過的狀態。
Limbo透過立即傳播微小變化來擴充套件技術協作。而傳統TDD測試驅動開發將無法在Limbo中執行,在自己的程式碼變化傳播給其他人之前,所有測試都必須透過。
在Git中實際命令是:
有人做了一個JS開源專案limbo-js:
Facebook的軟體工程工作流程相當傳統:
1.建立差異。
2.獲得稽核和批准。
3.把它投入生產。
4.監控意外後果。
與許多程式碼審查批准工作流程一樣,稽核步驟引入了不可預測的延遲,導致:
1.較大的差異
2.累計巨大差異
3.多工處理
關鍵問題是如何在一份程式碼上合併多個程式設計師的差異?這個問題其實有點類似技術上分散式事務,如何在多個伺服器上覆制一樣的狀態?關鍵是每個伺服器的狀態都在變化?
人們程式碼提交越頻繁,越容易發生程式碼衝突,程式碼結構如同一個樹形結構,某個分支不同,導致後續非常不同,這是不是有些類似區塊鏈,區塊鏈是透過嚴格控制區塊號的順序實現的,但是在程式碼協作中,人不是機器,無法排隊領號,或者搖號。這會阻止人們的創造精神。
Kent Beck系統找到一種透過減少合併程式碼變化並提高變化傳播的速度和範圍來擴充套件軟體專案協作的策略。人們能夠越頻繁提交,同時將自己的改變快速擴充套件到其他人程式碼中,他借用Limbo歌曲中一句話:
How low can you go? 命名這種策略為Limbo。
他提出一個test && commit || revert的具體做法實現Limbo策略:
作為容易操作Limbo策略一部分,我們發明了一種新的程式設計工作流程。我介紹了“test && commit|| revert”,程式碼每次執行測試程式碼正確後都會被提交,如果測試失敗,則程式碼返回到測試最後透過的狀態。
Limbo透過立即傳播微小變化來擴充套件技術協作。而傳統TDD測試驅動開發將無法在Limbo中執行,在自己的程式碼變化傳播給其他人之前,所有測試都必須透過。
在Git中實際命令是:
git commit -am working git reset --hard <p class="indent"> |
有人做了一個JS開源專案limbo-js:
import { exec } from 'child_process' while (true) { await exec('git pull --rebase -q') try { await exec('npm test') await exec('git add -A && git commit -q') } catch { await exec('git reset --hard -q && git clean -fdq') } await exec('git push -q') } <p class="indent"> |
相關文章
- Kent Beck談敏捷開發的應用和價值觀敏捷
- 敏捷史話(十三):我被 Facebook 解僱了——Kent Beck敏捷
- Kent Beck的3X模型是什麼?模型
- 程式設計師測試原則 - Kent Beck程式設計師
- 產品開發鐵人三項 - Kent Beck
- 從Monolith到微服務:理論與實踐 - Kent BeckMono微服務
- Kent Beck 的《測試驅動開發》(TDD) Money示例Ruby版
- 敏捷實踐的啟示:如何讓敏捷團隊協作更加高效敏捷
- 多團隊敏捷開發的組織架構和協作模式敏捷架構模式
- JavaScript test() 方法JavaScript
- 探究如何使用敏捷專案管理進行團隊協作?敏捷專案管理
- 產品研發團隊Scrum敏捷開發協作流程Scrum敏捷
- 如何作java專案的function test?JavaFunction
- 多層級多部門的協作專案,還能敏捷起來麼?敏捷
- git delete and revertGitdelete
- 最流行的敏捷方法敏捷
- 【Git】Git reset/revert的應用Git
- git reset 和 git revertGit
- git revert與git resetGit
- Git進階命令-revertGit
- Solidity中的assert()、require()與revert()SolidUI
- 重新理解RocketMQ Commit Log儲存協議MQMIT協議
- SharedPreferences中的commit和apply方法MITAPP
- goroutine間的同步&協作Go
- 敏捷教練 V 形六步法實戰:從布朗運動到深度協作敏捷
- 敏捷-新方法論敏捷
- UP還是敏捷方法?敏捷
- 敏捷測試的方法與實踐敏捷測試
- Git reset 和 Git revert 實踐Git
- 敏捷開發方法綜述敏捷
- 解惑:提升開發者與設計師協作有哪些方法呢?
- javascript的正規表示式的test()方法簡單介紹JavaScript
- 敏捷寫作:開啟高效表達之路敏捷
- 微服務之間的協作方式微服務
- 【Android Test】糟心的“Empty test suite ”異常AndroidUI
- 【git revert】使用以及理解(詳解)Git
- 資料庫設計中的敏捷方法 (轉)資料庫敏捷
- 您的團隊為什麼不用敏捷方法?敏捷