SlideShare ist ein Scribd-Unternehmen logo
1 von 8
  1	
  
多個敏捷團隊之間的版本控制(4)
http://www.infoq.com/articles/agile-­‐version-­‐control	
  
	
  
Version	
  Control	
  for	
  Multiple	
  Agile	
  Teams	
   	
  
Posted	
  by	
  Henrik	
  Kniberg	
  on	
  Mar	
  31,	
  2008	
  
縱觀全局
好的, 現在我已經給出一個的相當詳細範例, 讓你了解到如何使用這個模式. 讓
我們退後一點, 來看看整個的全局吧.
在主線 (mainline) 模型中, 一個分支被稱為是一條 codeline (實際上, 分支
可以被視為是一條 codeline 的實現). 有時候也叫做 streams.
一條 codeline 的父親 (也就是 codeline 的原先出處) 叫做它的基線
(baseline), 主線是沒有基線的 codeline.
所以上面的例子, 我們可以歸納出:
• 主幹是我們的主線. 它沒有父親, 不是嗎?
• 其他所有 codeline(發布版本 1.0, 團隊 A 的工作分支, 團隊 B 的工作分支)
都是以主幹作為其基線.
這裡有、一個更複雜的例子:
  2	
  
這個圖形告訴我們:
• 專案 X 的 codeline 衍生自主線. 目前此專案已完成, 所以分支已經結束.
• 團隊 A 有一個作用中的工作分支, 它衍生自主線.
• 團隊 A 還有一個進行中的 spike 分支, 他則是衍生自團隊 A 的工作分支
• 發布版本 2.3 已關閉,因為 2.3 已經不在上線的系統, 並且不再被維護
每條 codeline 有一個相對其基線的堅固水平, 也就是說, 每條 codeline 要不
就比其基線更堅固, 要不就沒有基線堅固(比較柔軟)
• 一條堅固的 codeline 是穩定的, 徹底測試過的, 很少變更, 並且接近可以發
佈
• 一條柔軟的 codeline 是不穩定, 很少測試, 經常變更, 遠離可以發佈有點距
離
在繪製 codeline 時,堅固的 codeline 分支向上, 而柔軟的代碼線分支向下.
所有觀看上面圖形, 我們可以歸納出:
• 發佈版本 2.3 比主線更堅固
• 團隊 A 的工作分支比主線更柔軟
• 團隊 A 的 spike 比團隊 A 的工作分支更柔軟
  3	
  
利用上面的方式來繪製圖表, 來說明分支的歷史是很有用. 但是如果同時有很多
分支存在, 可能就會有點混亂. 這裡有一個更清晰的格式, 只顯示了目前存在的
codeline 以及它們的衍生自於哪裡.
我建議你使用這個格式去繪製你的分支關係, 並起把它掛到團隊所在房間的牆
上. 當在討論整合的問題時, 看看這個圖表真的很有幫助.
這裡有一條重要的規則, 所有的變更都應沿著所在的線發展! 所以不能直接從團
隊 A 的工作分支向團隊 B 的工作分支去合併程式, 這會造成很多混亂. 反之, 在
團隊 A 工作分支中發生的變更, 應該流回到主線中, 然後再向下進入到團隊 B 的
工作分支中.
任何在主線之上面的 codeline 都可以叫做發佈 codeline, 也就是意味著這是
一個比主線更堅固的 codeline.
任何在主線下面的 codeline 都可以稱作是開發中 codeline (或工作
codeline), 這意味著它是一個比主線更柔軟的 codeline.
協作的黃金規則:
- 總是接受穩定的變更
- 絕不強制使用會導致不穩定的變更
  4	
  
那麼這對於不同類型的 codeline 代表什麼意思呢?
上圖以顏色的方式說明了:
• 在發佈 codeline 上, 每當有任何的變更, 都應該立即合併到其基線中, 並發
佈到主線上。
o 範例: 在 2.4.2 版本中修復了一個 bug, 應該立即合併到 2.4 版本中, 並且
將其合併到主線上。
• 一個發佈 codeline 永遠不要從其基線接受變更
o 範例: 有新的程式被 check-in 到主線中, 但是這個變更不應該進入 2.3
版本和 2.4 版本.
• 變更應持續從基線流入到開發 codeline 中
o 範例: 任何針對主線的變更, 應該儘快往下流到團隊 A 和團隊 B 中, 以及
從團隊 A 往下流到團隊 A 的 spike 中.
• 開發中 codeline 的變更只有在穩定時, 才能發佈到基線中
o 範例: 只有當一個故事完成, 並且通過測試後, 團隊 B 才能向主線合併
它.
無論變更何時放到 codeline 及其基線,有些合併是需要做的. 因為程式合併是
一個很容易犯錯的操作, 我們希望在兩條 codeline 中稍柔軟的一條上進行, 一
  5	
  
旦這個合併完成並且通過驗證, 我們可以把合併的程式, 複製回比較堅固的
codeline.
根據我們畫圖的慣例, 堅固的 codeline 要畫得比柔軟的 codeline 高, 所以我
們可以推出一個簡單的規則:
規則: 向下合併, 向上複製
範例:團隊 A 注意到主線已經被更新了, 他們將變更向下合併到自己的開發中
codeline, 並且修復任何衝突. 只要團隊 A 的開發中 codeline 達到一個穩定的
狀態, 他們會將程式複製回主線. 當然啦, 他們同時必須檢查主線上沒有發生任
何變更.
模型的變型
“版本控制模式”一節中, 描述了一個如何實施主線模型的範例.
“縱觀全局”一節中, 則以更一般化的方式描述了主線模型.
本節中, 我將對如何實踐該模式提出一些典型的變型.
“完成”的定義不必一定是“可發佈的“
先決定“完成”的定義, 然後確保有一個分支可以容納根據該定義已經“完成”
的故事. 不過, 要小心有些重要的內容沒到做完的定義裡. 例如, 整合測試沒有
包括在“完成”中, 那什麼時候你才要做整合測試呢?
主幹(Trunk)不必是主線(Mainline)
這個模型需要一條主線才能運作, 不過不需要是主幹(雖然在大部分的情形下,
使用主幹是很自然的選擇)
團隊不一定必須有自己的分支
你當然可以有多個團隊共享同一個分支, 或是甚至直接在主線上工作, 只要你遵
循分支的方針即可.
通常, 團隊希望有自己的分支, 避免未完成的故事造成其他個團隊的困擾.
  6	
  
不需要每次都建立一個全新的發佈分支
你可以決定使用同樣的發布分支, 而不是在每個 sprint 結束後都建立一個新分
支. 那個發佈分支可以稱為“最新上線的版本”或是其他類似的名字. 如果同時
間, 在上線的系統中只有一個版本, 這當然是很好的模型.
不需要在每個 sprint 結束後都進行發佈
你可以在每個故事完成後進行發佈, 或者每三個 sprint 完成後發佈一次. 選擇你
自己的步調.
不需要對每個故事都運行回歸測試
如果在你的環境中,回歸測試或是整合測試很難做到, 那麼可以在 sprint 接近尾
聲的時候進行, 這樣你就可以批次對一堆故事進行測試和整合的工作. 不過這是
你要承擔的風險. 如果回歸測試和整合是包括在 “完成”的定義, 這可能意味
如果你在 sprint 尾聲時遇到問題, 可能會有沒有任何故事完成的風險.
FAQ
持續集成(CI)如何整合到這個模式中?
CI 伺服器應該對哪個分支作處理? 這要根據實際狀況而定. 不過以下是一個好
的起點.
假定主幹的方針是“完成而且可發佈”, 而每個工作分支的方針是“通過單元
測試”:
• 對每個工作分支來說, CI 伺服器會自動且持續地檢查構建和通過所有單元測試
o 如果有任何東西沒過, 就會發出一個紅色警告, 讓機器冒煙.
• 對每個工作分支來說, CI 伺服器自動且週期性地 (如果不能持續地) 進行整合
測試和回歸測試
o 如果有任何東西沒過, 就顯示一個的警告, 因為這不符合當前分支的方
針
o 每當有人考慮從工作分支向主幹發行程式時, 需要觸發手動測試, 用這
個方式去檢查故事是否“完成”
• 對主幹來說, CI 伺服器自動且持續地執行整合測試和回歸測試
  7	
  
o 如果有任何東西沒過, 就發出一個紅色警告, 讓機器冒煙, 觸發警笛、
USB 火箭發射器, 再把國民警衛隊叫來.
哪種工具最合適這個版本控制的模型?
不確定. 我知道在 Perforce 中是可行的, 我想 subversion 應該也沒有問題, 但
是我不確定 CVS 是否可以. 任何建議都很歡迎.
不過要記得一個重要的事情 - 切換工具的成本要比不能有效合作的成本低得多!
所以想清楚你想怎麼做, 然後找到合適的工具來幫你.
與使用者故事無關的 check-in 要怎麼處理?
並非所有的程式變更都必須與某個使用者故事相關, 在上面例子中, 我的範例都
只是為了讓你容易了解才這樣做. 無論 check-in 哪種類型的程式 (或文檔之
類), 同樣的模型也是可以使用的.
合併程式很痛苦, 所以我想做得越少越好!
恭喜, 你得了合併恐懼症 - 對於合併程式的非理性恐懼! 合併讓你覺得痛苦是
因為你做的太少了. 越常合併, 痛苦就越少. :o)
我還有更多問題!
看看後面的參考資料! 我相信它們可以解決你大部分的問題.
參考資料
如果你想了解更多, 我強烈推薦下列資源
《Practical Perforce》
作者 Laura Wingerd. 這裡有一個試讀的章節
(http://oreilly.com/catalog/practicalperforce/chapter/ch07.pdf), 涵蓋了大
部份的主線模型
這是一本關於 Perforce 的書, 但是主線模型不會只適用於 Perforce.
《High level best practices in Software Configuration Management》
由Laura Wingerd和Chirstopher Seiwald所寫的, 有關於版本控制的常見最佳
  8	
  
實踐的摘要, 非常有用.
《Branching and merging – an agile perspective》
由 Robert Cowham 所寫的, 和本篇文章有關的有趣文章.
(http://www.cmcrossroads.com/article/agile-perspective-branching-and-
merging)
《The Flow of Change》
又是由 Laura Wingerd 所作, 關於主線模型的摘要. 在縱觀全局一節中絕大部
分內容是根據這些投影片所改寫的.
關於作者
Henrik Kniberg 是位於斯德哥爾摩的 Crisp 公司的一名顧問, 擅長於 Java 和敏
捷軟體開發. 他建立了多個瑞典軟體公司, 並且熱衷於學習、講授和應用軟件開
發的藝術. Henrik 從事了多種類型的工作, 並喜歡擔任經理, 開發人員, Scrum
Master, 老師和教練等不同角色. Henrik 是熱門的 InfoQ 迷你書的作者
“Scrum and XP from the Trenches: How We Do Scrum”.
	
  

Weitere ähnliche Inhalte

Andere mochten auch

Imafs: Case Study Norampac
Imafs: Case Study NorampacImafs: Case Study Norampac
Imafs: Case Study NorampacIMAFS
 
System Center Datacenter Cloud Management Vision & Roadmap
System Center Datacenter Cloud Management Vision & RoadmapSystem Center Datacenter Cloud Management Vision & Roadmap
System Center Datacenter Cloud Management Vision & RoadmapAmit Gatenyo
 
Scrum introduction in hsin chu-agilemeetup
Scrum introduction in hsin chu-agilemeetupScrum introduction in hsin chu-agilemeetup
Scrum introduction in hsin chu-agilemeetupJen-Chieh Ko
 
SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC PrinciplesPavlo Hodysh
 
ענן פרטי וענן ציבורי: לא שני עולמות מתחרים אלא שני מימדים לאותו העולם
ענן פרטי וענן ציבורי: לא שני עולמות מתחרים אלא שני מימדים לאותו העולםענן פרטי וענן ציבורי: לא שני עולמות מתחרים אלא שני מימדים לאותו העולם
ענן פרטי וענן ציבורי: לא שני עולמות מתחרים אלא שני מימדים לאותו העולםAmit Gatenyo
 
RemoteFX - Rich End User Experience for VDI and Remote Desktops
RemoteFX - Rich End User Experience for VDI and Remote DesktopsRemoteFX - Rich End User Experience for VDI and Remote Desktops
RemoteFX - Rich End User Experience for VDI and Remote DesktopsAmit Gatenyo
 
Single Responsibility Principle
Single Responsibility PrincipleSingle Responsibility Principle
Single Responsibility PrincipleDeddy Setyadi
 
La electricidad
La electricidadLa electricidad
La electricidadboounzueta
 

Andere mochten auch (15)

Imafs: Case Study Norampac
Imafs: Case Study NorampacImafs: Case Study Norampac
Imafs: Case Study Norampac
 
System Center Datacenter Cloud Management Vision & Roadmap
System Center Datacenter Cloud Management Vision & RoadmapSystem Center Datacenter Cloud Management Vision & Roadmap
System Center Datacenter Cloud Management Vision & Roadmap
 
Scrum introduction in hsin chu-agilemeetup
Scrum introduction in hsin chu-agilemeetupScrum introduction in hsin chu-agilemeetup
Scrum introduction in hsin chu-agilemeetup
 
Motivation
MotivationMotivation
Motivation
 
PlayList "here comes the weekend"
PlayList "here comes the weekend"PlayList "here comes the weekend"
PlayList "here comes the weekend"
 
Pr. jirin pkk
Pr. jirin pkkPr. jirin pkk
Pr. jirin pkk
 
SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC Principles
 
Permiso de Paternidad
Permiso de PaternidadPermiso de Paternidad
Permiso de Paternidad
 
ענן פרטי וענן ציבורי: לא שני עולמות מתחרים אלא שני מימדים לאותו העולם
ענן פרטי וענן ציבורי: לא שני עולמות מתחרים אלא שני מימדים לאותו העולםענן פרטי וענן ציבורי: לא שני עולמות מתחרים אלא שני מימדים לאותו העולם
ענן פרטי וענן ציבורי: לא שני עולמות מתחרים אלא שני מימדים לאותו העולם
 
RemoteFX - Rich End User Experience for VDI and Remote Desktops
RemoteFX - Rich End User Experience for VDI and Remote DesktopsRemoteFX - Rich End User Experience for VDI and Remote Desktops
RemoteFX - Rich End User Experience for VDI and Remote Desktops
 
OOP Basics
OOP BasicsOOP Basics
OOP Basics
 
Single Responsibility Principle
Single Responsibility PrincipleSingle Responsibility Principle
Single Responsibility Principle
 
Gepard marie
Gepard marieGepard marie
Gepard marie
 
La electricidad
La electricidadLa electricidad
La electricidad
 
Calendario 2016 2017
Calendario 2016 2017Calendario 2016 2017
Calendario 2016 2017
 

Ähnlich wie 多個敏捷團隊之間的版本控制 (4)

Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0智興 陳
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509tidesq
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享zenyuhao
 
How to replace linux system call by module
How to replace linux system call by moduleHow to replace linux system call by module
How to replace linux system call by moduleYU-CHENG Hsu
 
Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.twWei-Yu Chen
 
Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?wensheng wei
 
谈谈模块化
谈谈模块化谈谈模块化
谈谈模块化衡锋 阳
 
面向对象设计七大原则
面向对象设计七大原则面向对象设计七大原则
面向对象设计七大原则zoorz
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdfssuserd6c7621
 
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJustin Lin
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & developmentXuefeng Zhang
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922Earou Huang
 
Bluemix Node-Red Part II
Bluemix Node-Red Part IIBluemix Node-Red Part II
Bluemix Node-Red Part IIJoseph Chang
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
Vulkan introduction
Vulkan introductionVulkan introduction
Vulkan introductionJiahan Su
 
Chapter 4 models
Chapter 4 modelsChapter 4 models
Chapter 4 modelsEkman Hsieh
 
Pytorch cnn netowork introduction 20240318
Pytorch cnn netowork introduction 20240318Pytorch cnn netowork introduction 20240318
Pytorch cnn netowork introduction 20240318FEG
 
如何架构和开发高性能,高伸缩性Web 应用系统
如何架构和开发高性能,高伸缩性Web 应用系统如何架构和开发高性能,高伸缩性Web 应用系统
如何架构和开发高性能,高伸缩性Web 应用系统melity78
 

Ähnlich wie 多個敏捷團隊之間的版本控制 (4) (20)

Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享
 
How to replace linux system call by module
How to replace linux system call by moduleHow to replace linux system call by module
How to replace linux system call by module
 
Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.tw
 
Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?
 
谈谈模块化
谈谈模块化谈谈模块化
谈谈模块化
 
面向对象设计七大原则
面向对象设计七大原则面向对象设计七大原则
面向对象设计七大原则
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf
 
Ch01
Ch01Ch01
Ch01
 
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922
 
Bluemix Node-Red Part II
Bluemix Node-Red Part IIBluemix Node-Red Part II
Bluemix Node-Red Part II
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Vulkan introduction
Vulkan introductionVulkan introduction
Vulkan introduction
 
Chapter 4 models
Chapter 4 modelsChapter 4 models
Chapter 4 models
 
Pytorch cnn netowork introduction 20240318
Pytorch cnn netowork introduction 20240318Pytorch cnn netowork introduction 20240318
Pytorch cnn netowork introduction 20240318
 
如何架构和开发高性能,高伸缩性Web 应用系统
如何架构和开发高性能,高伸缩性Web 应用系统如何架构和开发高性能,高伸缩性Web 应用系统
如何架构和开发高性能,高伸缩性Web 应用系统
 

Mehr von Jen-Chieh Ko

RSG Taipei 2023 LeSS Design Principles
RSG Taipei 2023 LeSS Design PrinciplesRSG Taipei 2023 LeSS Design Principles
RSG Taipei 2023 LeSS Design PrinciplesJen-Chieh Ko
 
Practical Testing Strategy for Agile Team
Practical Testing Strategy for Agile TeamPractical Testing Strategy for Agile Team
Practical Testing Strategy for Agile TeamJen-Chieh Ko
 
O.R.I.D 初探 - 新竹敏捷分享.pdf
O.R.I.D 初探 - 新竹敏捷分享.pdfO.R.I.D 初探 - 新竹敏捷分享.pdf
O.R.I.D 初探 - 新竹敏捷分享.pdfJen-Chieh Ko
 
2021 台灣軟體測試現狀調查
2021 台灣軟體測試現狀調查2021 台灣軟體測試現狀調查
2021 台灣軟體測試現狀調查Jen-Chieh Ko
 
Agile summit2021 - Talk About Exploratory Testing
Agile summit2021 - Talk About Exploratory TestingAgile summit2021 - Talk About Exploratory Testing
Agile summit2021 - Talk About Exploratory TestingJen-Chieh Ko
 
Stop Retrospective, Start Continuous Improving
Stop Retrospective, Start Continuous ImprovingStop Retrospective, Start Continuous Improving
Stop Retrospective, Start Continuous ImprovingJen-Chieh Ko
 
Mopcon 2021 Scrum 是新的死亡行軍嗎?
Mopcon 2021   Scrum 是新的死亡行軍嗎?Mopcon 2021   Scrum 是新的死亡行軍嗎?
Mopcon 2021 Scrum 是新的死亡行軍嗎?Jen-Chieh Ko
 
啟動敏捷轉型的工具箱
啟動敏捷轉型的工具箱啟動敏捷轉型的工具箱
啟動敏捷轉型的工具箱Jen-Chieh Ko
 
Exploratory testing survey in 2020
Exploratory testing survey in 2020Exploratory testing survey in 2020
Exploratory testing survey in 2020Jen-Chieh Ko
 
如何把看板和 Scrum 發揮到極致
如何把看板和 Scrum 發揮到極致如何把看板和 Scrum 發揮到極致
如何把看板和 Scrum 發揮到極致Jen-Chieh Ko
 
Agile Hsinchu 七月線上聚會: 我的教練旅程
Agile Hsinchu 七月線上聚會: 我的教練旅程Agile Hsinchu 七月線上聚會: 我的教練旅程
Agile Hsinchu 七月線上聚會: 我的教練旅程Jen-Chieh Ko
 
The right It : How to make your assumption - Agile HsinChu 2020 Mar Gathering
The right It : How to make your assumption - Agile HsinChu 2020 Mar GatheringThe right It : How to make your assumption - Agile HsinChu 2020 Mar Gathering
The right It : How to make your assumption - Agile HsinChu 2020 Mar GatheringJen-Chieh Ko
 
Agile tourhsinchushare踩過的scrum event坑
Agile tourhsinchushare踩過的scrum event坑Agile tourhsinchushare踩過的scrum event坑
Agile tourhsinchushare踩過的scrum event坑Jen-Chieh Ko
 
Design sprint experience at Trend Micro
Design sprint experience at Trend MicroDesign sprint experience at Trend Micro
Design sprint experience at Trend MicroJen-Chieh Ko
 
Container and Test Automation Management Practices in TrendMicro
Container and Test Automation Management Practices in TrendMicroContainer and Test Automation Management Practices in TrendMicro
Container and Test Automation Management Practices in TrendMicroJen-Chieh Ko
 
Design sprint sharing of DS team
Design sprint sharing of DS team Design sprint sharing of DS team
Design sprint sharing of DS team Jen-Chieh Ko
 
Agile Summit Taipei 2019 - Agile Testing Strategy
Agile Summit Taipei 2019 - Agile Testing StrategyAgile Summit Taipei 2019 - Agile Testing Strategy
Agile Summit Taipei 2019 - Agile Testing StrategyJen-Chieh Ko
 
Agile HR at Titansoft
Agile HR at TitansoftAgile HR at Titansoft
Agile HR at TitansoftJen-Chieh Ko
 
From zero to one - How we evolved our test automation processes and mindset i...
From zero to one - How we evolved our test automation processes and mindset i...From zero to one - How we evolved our test automation processes and mindset i...
From zero to one - How we evolved our test automation processes and mindset i...Jen-Chieh Ko
 

Mehr von Jen-Chieh Ko (20)

RSG Taipei 2023 LeSS Design Principles
RSG Taipei 2023 LeSS Design PrinciplesRSG Taipei 2023 LeSS Design Principles
RSG Taipei 2023 LeSS Design Principles
 
Practical Testing Strategy for Agile Team
Practical Testing Strategy for Agile TeamPractical Testing Strategy for Agile Team
Practical Testing Strategy for Agile Team
 
O.R.I.D 初探 - 新竹敏捷分享.pdf
O.R.I.D 初探 - 新竹敏捷分享.pdfO.R.I.D 初探 - 新竹敏捷分享.pdf
O.R.I.D 初探 - 新竹敏捷分享.pdf
 
2021 台灣軟體測試現狀調查
2021 台灣軟體測試現狀調查2021 台灣軟體測試現狀調查
2021 台灣軟體測試現狀調查
 
Agile summit2021 - Talk About Exploratory Testing
Agile summit2021 - Talk About Exploratory TestingAgile summit2021 - Talk About Exploratory Testing
Agile summit2021 - Talk About Exploratory Testing
 
Stop Retrospective, Start Continuous Improving
Stop Retrospective, Start Continuous ImprovingStop Retrospective, Start Continuous Improving
Stop Retrospective, Start Continuous Improving
 
Mopcon 2021 Scrum 是新的死亡行軍嗎?
Mopcon 2021   Scrum 是新的死亡行軍嗎?Mopcon 2021   Scrum 是新的死亡行軍嗎?
Mopcon 2021 Scrum 是新的死亡行軍嗎?
 
啟動敏捷轉型的工具箱
啟動敏捷轉型的工具箱啟動敏捷轉型的工具箱
啟動敏捷轉型的工具箱
 
Exploratory testing survey in 2020
Exploratory testing survey in 2020Exploratory testing survey in 2020
Exploratory testing survey in 2020
 
如何把看板和 Scrum 發揮到極致
如何把看板和 Scrum 發揮到極致如何把看板和 Scrum 發揮到極致
如何把看板和 Scrum 發揮到極致
 
Agile Hsinchu 七月線上聚會: 我的教練旅程
Agile Hsinchu 七月線上聚會: 我的教練旅程Agile Hsinchu 七月線上聚會: 我的教練旅程
Agile Hsinchu 七月線上聚會: 我的教練旅程
 
The right It : How to make your assumption - Agile HsinChu 2020 Mar Gathering
The right It : How to make your assumption - Agile HsinChu 2020 Mar GatheringThe right It : How to make your assumption - Agile HsinChu 2020 Mar Gathering
The right It : How to make your assumption - Agile HsinChu 2020 Mar Gathering
 
Agile tourhsinchushare踩過的scrum event坑
Agile tourhsinchushare踩過的scrum event坑Agile tourhsinchushare踩過的scrum event坑
Agile tourhsinchushare踩過的scrum event坑
 
Design sprint experience at Trend Micro
Design sprint experience at Trend MicroDesign sprint experience at Trend Micro
Design sprint experience at Trend Micro
 
Container and Test Automation Management Practices in TrendMicro
Container and Test Automation Management Practices in TrendMicroContainer and Test Automation Management Practices in TrendMicro
Container and Test Automation Management Practices in TrendMicro
 
Design sprint sharing of DS team
Design sprint sharing of DS team Design sprint sharing of DS team
Design sprint sharing of DS team
 
Beer game-public
Beer game-publicBeer game-public
Beer game-public
 
Agile Summit Taipei 2019 - Agile Testing Strategy
Agile Summit Taipei 2019 - Agile Testing StrategyAgile Summit Taipei 2019 - Agile Testing Strategy
Agile Summit Taipei 2019 - Agile Testing Strategy
 
Agile HR at Titansoft
Agile HR at TitansoftAgile HR at Titansoft
Agile HR at Titansoft
 
From zero to one - How we evolved our test automation processes and mindset i...
From zero to one - How we evolved our test automation processes and mindset i...From zero to one - How we evolved our test automation processes and mindset i...
From zero to one - How we evolved our test automation processes and mindset i...
 

多個敏捷團隊之間的版本控制 (4)

  • 1.   1   多個敏捷團隊之間的版本控制(4) http://www.infoq.com/articles/agile-­‐version-­‐control     Version  Control  for  Multiple  Agile  Teams     Posted  by  Henrik  Kniberg  on  Mar  31,  2008   縱觀全局 好的, 現在我已經給出一個的相當詳細範例, 讓你了解到如何使用這個模式. 讓 我們退後一點, 來看看整個的全局吧. 在主線 (mainline) 模型中, 一個分支被稱為是一條 codeline (實際上, 分支 可以被視為是一條 codeline 的實現). 有時候也叫做 streams. 一條 codeline 的父親 (也就是 codeline 的原先出處) 叫做它的基線 (baseline), 主線是沒有基線的 codeline. 所以上面的例子, 我們可以歸納出: • 主幹是我們的主線. 它沒有父親, 不是嗎? • 其他所有 codeline(發布版本 1.0, 團隊 A 的工作分支, 團隊 B 的工作分支) 都是以主幹作為其基線. 這裡有、一個更複雜的例子:
  • 2.   2   這個圖形告訴我們: • 專案 X 的 codeline 衍生自主線. 目前此專案已完成, 所以分支已經結束. • 團隊 A 有一個作用中的工作分支, 它衍生自主線. • 團隊 A 還有一個進行中的 spike 分支, 他則是衍生自團隊 A 的工作分支 • 發布版本 2.3 已關閉,因為 2.3 已經不在上線的系統, 並且不再被維護 每條 codeline 有一個相對其基線的堅固水平, 也就是說, 每條 codeline 要不 就比其基線更堅固, 要不就沒有基線堅固(比較柔軟) • 一條堅固的 codeline 是穩定的, 徹底測試過的, 很少變更, 並且接近可以發 佈 • 一條柔軟的 codeline 是不穩定, 很少測試, 經常變更, 遠離可以發佈有點距 離 在繪製 codeline 時,堅固的 codeline 分支向上, 而柔軟的代碼線分支向下. 所有觀看上面圖形, 我們可以歸納出: • 發佈版本 2.3 比主線更堅固 • 團隊 A 的工作分支比主線更柔軟 • 團隊 A 的 spike 比團隊 A 的工作分支更柔軟
  • 3.   3   利用上面的方式來繪製圖表, 來說明分支的歷史是很有用. 但是如果同時有很多 分支存在, 可能就會有點混亂. 這裡有一個更清晰的格式, 只顯示了目前存在的 codeline 以及它們的衍生自於哪裡. 我建議你使用這個格式去繪製你的分支關係, 並起把它掛到團隊所在房間的牆 上. 當在討論整合的問題時, 看看這個圖表真的很有幫助. 這裡有一條重要的規則, 所有的變更都應沿著所在的線發展! 所以不能直接從團 隊 A 的工作分支向團隊 B 的工作分支去合併程式, 這會造成很多混亂. 反之, 在 團隊 A 工作分支中發生的變更, 應該流回到主線中, 然後再向下進入到團隊 B 的 工作分支中. 任何在主線之上面的 codeline 都可以叫做發佈 codeline, 也就是意味著這是 一個比主線更堅固的 codeline. 任何在主線下面的 codeline 都可以稱作是開發中 codeline (或工作 codeline), 這意味著它是一個比主線更柔軟的 codeline. 協作的黃金規則: - 總是接受穩定的變更 - 絕不強制使用會導致不穩定的變更
  • 4.   4   那麼這對於不同類型的 codeline 代表什麼意思呢? 上圖以顏色的方式說明了: • 在發佈 codeline 上, 每當有任何的變更, 都應該立即合併到其基線中, 並發 佈到主線上。 o 範例: 在 2.4.2 版本中修復了一個 bug, 應該立即合併到 2.4 版本中, 並且 將其合併到主線上。 • 一個發佈 codeline 永遠不要從其基線接受變更 o 範例: 有新的程式被 check-in 到主線中, 但是這個變更不應該進入 2.3 版本和 2.4 版本. • 變更應持續從基線流入到開發 codeline 中 o 範例: 任何針對主線的變更, 應該儘快往下流到團隊 A 和團隊 B 中, 以及 從團隊 A 往下流到團隊 A 的 spike 中. • 開發中 codeline 的變更只有在穩定時, 才能發佈到基線中 o 範例: 只有當一個故事完成, 並且通過測試後, 團隊 B 才能向主線合併 它. 無論變更何時放到 codeline 及其基線,有些合併是需要做的. 因為程式合併是 一個很容易犯錯的操作, 我們希望在兩條 codeline 中稍柔軟的一條上進行, 一
  • 5.   5   旦這個合併完成並且通過驗證, 我們可以把合併的程式, 複製回比較堅固的 codeline. 根據我們畫圖的慣例, 堅固的 codeline 要畫得比柔軟的 codeline 高, 所以我 們可以推出一個簡單的規則: 規則: 向下合併, 向上複製 範例:團隊 A 注意到主線已經被更新了, 他們將變更向下合併到自己的開發中 codeline, 並且修復任何衝突. 只要團隊 A 的開發中 codeline 達到一個穩定的 狀態, 他們會將程式複製回主線. 當然啦, 他們同時必須檢查主線上沒有發生任 何變更. 模型的變型 “版本控制模式”一節中, 描述了一個如何實施主線模型的範例. “縱觀全局”一節中, 則以更一般化的方式描述了主線模型. 本節中, 我將對如何實踐該模式提出一些典型的變型. “完成”的定義不必一定是“可發佈的“ 先決定“完成”的定義, 然後確保有一個分支可以容納根據該定義已經“完成” 的故事. 不過, 要小心有些重要的內容沒到做完的定義裡. 例如, 整合測試沒有 包括在“完成”中, 那什麼時候你才要做整合測試呢? 主幹(Trunk)不必是主線(Mainline) 這個模型需要一條主線才能運作, 不過不需要是主幹(雖然在大部分的情形下, 使用主幹是很自然的選擇) 團隊不一定必須有自己的分支 你當然可以有多個團隊共享同一個分支, 或是甚至直接在主線上工作, 只要你遵 循分支的方針即可. 通常, 團隊希望有自己的分支, 避免未完成的故事造成其他個團隊的困擾.
  • 6.   6   不需要每次都建立一個全新的發佈分支 你可以決定使用同樣的發布分支, 而不是在每個 sprint 結束後都建立一個新分 支. 那個發佈分支可以稱為“最新上線的版本”或是其他類似的名字. 如果同時 間, 在上線的系統中只有一個版本, 這當然是很好的模型. 不需要在每個 sprint 結束後都進行發佈 你可以在每個故事完成後進行發佈, 或者每三個 sprint 完成後發佈一次. 選擇你 自己的步調. 不需要對每個故事都運行回歸測試 如果在你的環境中,回歸測試或是整合測試很難做到, 那麼可以在 sprint 接近尾 聲的時候進行, 這樣你就可以批次對一堆故事進行測試和整合的工作. 不過這是 你要承擔的風險. 如果回歸測試和整合是包括在 “完成”的定義, 這可能意味 如果你在 sprint 尾聲時遇到問題, 可能會有沒有任何故事完成的風險. FAQ 持續集成(CI)如何整合到這個模式中? CI 伺服器應該對哪個分支作處理? 這要根據實際狀況而定. 不過以下是一個好 的起點. 假定主幹的方針是“完成而且可發佈”, 而每個工作分支的方針是“通過單元 測試”: • 對每個工作分支來說, CI 伺服器會自動且持續地檢查構建和通過所有單元測試 o 如果有任何東西沒過, 就會發出一個紅色警告, 讓機器冒煙. • 對每個工作分支來說, CI 伺服器自動且週期性地 (如果不能持續地) 進行整合 測試和回歸測試 o 如果有任何東西沒過, 就顯示一個的警告, 因為這不符合當前分支的方 針 o 每當有人考慮從工作分支向主幹發行程式時, 需要觸發手動測試, 用這 個方式去檢查故事是否“完成” • 對主幹來說, CI 伺服器自動且持續地執行整合測試和回歸測試
  • 7.   7   o 如果有任何東西沒過, 就發出一個紅色警告, 讓機器冒煙, 觸發警笛、 USB 火箭發射器, 再把國民警衛隊叫來. 哪種工具最合適這個版本控制的模型? 不確定. 我知道在 Perforce 中是可行的, 我想 subversion 應該也沒有問題, 但 是我不確定 CVS 是否可以. 任何建議都很歡迎. 不過要記得一個重要的事情 - 切換工具的成本要比不能有效合作的成本低得多! 所以想清楚你想怎麼做, 然後找到合適的工具來幫你. 與使用者故事無關的 check-in 要怎麼處理? 並非所有的程式變更都必須與某個使用者故事相關, 在上面例子中, 我的範例都 只是為了讓你容易了解才這樣做. 無論 check-in 哪種類型的程式 (或文檔之 類), 同樣的模型也是可以使用的. 合併程式很痛苦, 所以我想做得越少越好! 恭喜, 你得了合併恐懼症 - 對於合併程式的非理性恐懼! 合併讓你覺得痛苦是 因為你做的太少了. 越常合併, 痛苦就越少. :o) 我還有更多問題! 看看後面的參考資料! 我相信它們可以解決你大部分的問題. 參考資料 如果你想了解更多, 我強烈推薦下列資源 《Practical Perforce》 作者 Laura Wingerd. 這裡有一個試讀的章節 (http://oreilly.com/catalog/practicalperforce/chapter/ch07.pdf), 涵蓋了大 部份的主線模型 這是一本關於 Perforce 的書, 但是主線模型不會只適用於 Perforce. 《High level best practices in Software Configuration Management》 由Laura Wingerd和Chirstopher Seiwald所寫的, 有關於版本控制的常見最佳
  • 8.   8   實踐的摘要, 非常有用. 《Branching and merging – an agile perspective》 由 Robert Cowham 所寫的, 和本篇文章有關的有趣文章. (http://www.cmcrossroads.com/article/agile-perspective-branching-and- merging) 《The Flow of Change》 又是由 Laura Wingerd 所作, 關於主線模型的摘要. 在縱觀全局一節中絕大部 分內容是根據這些投影片所改寫的. 關於作者 Henrik Kniberg 是位於斯德哥爾摩的 Crisp 公司的一名顧問, 擅長於 Java 和敏 捷軟體開發. 他建立了多個瑞典軟體公司, 並且熱衷於學習、講授和應用軟件開 發的藝術. Henrik 從事了多種類型的工作, 並喜歡擔任經理, 開發人員, Scrum Master, 老師和教練等不同角色. Henrik 是熱門的 InfoQ 迷你書的作者 “Scrum and XP from the Trenches: How We Do Scrum”.