2011-12-20 42 views
9

我的開發團隊剛剛開始使用Mercurial,我們對以下幾點感到困惑:QA如何測試代碼並將其與mercurial中的穩定分支合併?

我們是一個php webdev團隊。

我們有3個開發人員。我們現在所做的大部分工作都是針對新產品的錯誤修正。還在做一些新的功能開發。

我們有2個QA人員。每個錯誤修復和功能都必須經過測試,然後才能上線。

到目前爲止,每個開發人員都有自己的存儲庫。我們有一個名爲WebDev的中央服務器,它有自己的回購。開發人員從WebDev中抽取,然後進行一些更改(即修復一個錯誤),並推送到Webdev。然後,QA測試人員將測試中央服務器上的代碼(以便在WebDev中對代碼進行測試),並且如果測試成功,他會將該代碼推送到我們的生產服務器。

這不能正常工作,因爲......當開發者-1(dev-1)修復了一個錯誤並推送到WebDev時會發生什麼。與此同時,dev-2修復了一個不同的bug,並推向WebDev。質量保證人員在那裏測試代碼,並批准第二個錯誤修復,但不是第一個。如果沒有第一套變更,他會如何推動第二套變更?我們似乎失去了版本控制系統的所有優點。

我已經閱讀了很多關於分支的知識,但我無法弄清楚如何爲我們做這個工作......我們是否爲每個bug修復和新功能創建了一個新的分支,並且只有在它被測試之後, QA將合併到WebDev的默認分支上?這是最好的方式,還是有我缺少的東西?

謝謝!

---- UPDATE ----

感謝所有到目前爲止回答的人。這裏是我現在所在的地方......我可以想到兩個解決方案。

1)dev-1修復了bug-101的bug。他從webdev中取出,合併並在本地進行提交。他把它設置在測試中。 QA直接從他的存儲庫中提取,並在本地進行測試。如果它通過,QA將從webdev - > merge - > push到webdev(如果它發生了很大的變化,可以在那裏再次查看以確保它沒問題)。所以我們一次只測試一件事情,WebDev只包含由測試人員在本地測試過的更改,並始終保持穩定。

2)爲一切創建分支。 dev-1創建分支「bugfix-101」,然後推送到webdev而不合並它。 QA可以測試分支代碼,如果它被批准,則將其與默認分支合併。我有四個關於這個方法的問題 - (a)是否可以將一個開放分支推送到遠程存儲庫? (b)如果QA合併並關閉webdev上的分支,下次我拉時,我的本地回購也會關閉併合並分支?和(c)你如何從分支代碼測試?當我在瀏覽器中運行Web應用程序時,如何從分支測試? (d)創建如此多的命名分支是否存在性能問題(假設其中大多數分支將很快關閉)?

再次感謝。

+0

我認爲,在UPDATE aection問題將是一條正確的路新的問題 - 他們是分開的,與原來的 – 2011-12-22 06:01:41

回答

6

便接踵而來高達巴薩姆:

你的團隊顯然是缺少(很容易)分支和水銀合併,並用monolitic默認分支工作(?)。

只要改變你的思維和工作流程略,你會看到一個很大的區別:

  1. 每個QA-構件具有永久克隆的回購,只拉應要求開發商的回購(它的速度更快,拉動的變化更明顯);也許分支QA也有意識
  2. 使用一個單獨的分支爲每每一個大的變化(功能或錯誤修復)
  3. 當一個開發有變更X分支「漏洞修復Y」在他的回購完成並準備測試,他要求QA「拉動並測試變更集X」
  4. 問題分析是否會將「Bugfix Y」合併到「QA」分支他的回購庫(作爲「測試通過」符號?)併合並「 QA「分支到主線(」穩定「或」默認「分支),最後將結果推送到需要的目的地(WebDev和Prod?)
  5. 在每一個下一個請求中,必須重複步驟4

這樣你從未混在一個審批週期不止一個發展行動

+0

我認爲從你的答案中可以得到智慧 - 但我已經閱讀並重讀了幾次,我不明白你在這裏說什麼......你是否建議我們有一個新的分支每一個bugfix?從我讀到的情況來看,擁有太多分支可能會減慢mercurial的速度。或者 - 您是否建議質量保證人員直接從開發人員的回購協議中提取,並且只有在通過後,他纔會發送到穩定的回購協議? – 2011-12-21 08:49:41

+0

思考更多 - 開發人員可以推送一個開放的分支到webdev回購嗎?然後由QA來測試並決定將其合併到默認分支中。在下次開發者從Webdev中抽取時,會發生什麼情況?他的分支是否會自動關閉(因爲它已關閉並在webdev中合併)? – 2011-12-21 09:15:59

+0

@ esther-h「你是否建議我們爲每一個bug修復都有一個新的分支?」:好吧,爲什麼不呢?回購將以更加結構化和可讀性的方式「從我閱讀的內容來看,擁有太多分支可能會減慢mercurial」 - **太多**是*數千*可能不是你的情況。 「QA人員直接從開發人員的回購中拉出來,只有在通過後,他纔會發送到穩定的回購?」 - 這只是其中一種可能的方式,QA可以從WebDev中免費獲取 – 2011-12-21 10:24:31

1

使用Mercurial創建分支是一件輕而易舉的事情,使用它:)我會爲不同的功能和不同的錯誤創建單獨的分支,並讓QA人員在確保bug修復時將它們合併到主分支。

另一種替代方法是使用named branches,它本質上是一樣的東西,但不是單獨的分支,而是您的命名分支與默認分支並排放置,直到它們準備合併爲止。

注意:我在工作場所的兩種策略之間進行了交替。

+0

略有差別嚴格來說,命名分支**是**分開的分支。即使是匿名分支也是獨立的分支 – 2011-12-21 02:35:07

4

這是一個使用tags的好地方。讓dev或qa人員標籤只包含他們想要的更改的版本,然後qa人員可以在標籤級別克隆存儲庫(或者如果存儲庫更新爲帶標籤的更改集,如果這對您更適合...您的偏好)。然後使用標記版本的代碼進行測試。

作爲一個側面說明,這將是值得探討的窯stackexchange現場看到霧溪的存儲庫策略這兩個答案(看看他們是怎麼吃自己的狗食):

更新

有一個很好的在this post中描述了爲什麼最好修復穩定分支中的錯誤,並將它們推回dev,同時使用開發分支來實現功能(將其推回至穩定分支以及雙向推/拉)。我們也是這樣做的。這不是直接回答你的問題,而是足夠相關,我想我會包括它。

+0

恐怕它在當前*混亂的工作流程中沒有任何改變* - 標籤沒有比舊的好的cset-hash增加任何成本,並且在**管理**的過程中添加任何東西 – 2011-12-21 02:31:33

+0

@LazyBadger:我更加仔細地閱讀這個問題,我同意。我沒有意識到他們試圖挑選第二個變化,而不包括第一個變化。 – 2011-12-21 02:34:22

相關問題