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"> |
相關文章
- 敏捷史話(十三):我被 Facebook 解僱了——Kent Beck敏捷
- Kent Beck的3X模型是什麼?模型
- 產品開發鐵人三項 - Kent Beck
- 程式設計師測試原則 - Kent Beck程式設計師
- 從Monolith到微服務:理論與實踐 - Kent BeckMono微服務
- 敏捷實踐的啟示:如何讓敏捷團隊協作更加高效敏捷
- 探究如何使用敏捷專案管理進行團隊協作?敏捷專案管理
- 多層級多部門的協作專案,還能敏捷起來麼?敏捷
- git delete and revertGitdelete
- ABAP TEST-SEAM 的使用方法
- 重新理解RocketMQ Commit Log儲存協議MQMIT協議
- Solidity中的assert()、require()與revert()SolidUI
- git reset 和 git revertGit
- Git進階命令-revertGit
- git revert與git resetGit
- Docker映象提交命令commit的工作原理和使用方法DockerMIT
- goroutine間的同步&協作Go
- 【Android Test】糟心的“Empty test suite ”異常AndroidUI
- Git reset 和 Git revert 實踐Git
- git commit後如何取消commitGitMIT
- AB test 中的AA test有什麼作用?
- 敏捷寫作:開啟高效表達之路敏捷
- 「Adobe國際認證」改進設計協作,流程的 7 種方法
- Scrum敏捷開發方法實踐Scrum敏捷
- 傻傻分不清楚系列(一):SharedPreferences的commit和apply方法MITAPP
- 訊息協作中心,在家辦公也能高效協作!
- 【git revert】使用以及理解(詳解)Git
- test
- 基於 GitHub 的敏捷學習方法之道與術Github敏捷
- Git插入新的commitGitMIT
- 敏捷設計,高效協同,凸顯設計端雲協同價值敏捷
- Git commit 之後,想撤銷 commitGitMIT
- 微服務之間的協作方式微服務
- 找回丟失的 commit 要記住不要慌 事情總有解決的方法MIT
- linux的test命令(轉)Linux
- 遠端辦公促進團隊之間高效協作的方法是什麼?
- 社群文件協作更新
- python中的一個現象,db.commit和db.commit()PythonMIT