????先來一波場(chǎng)景:團(tuán)隊(duì)A忙忙碌碌終于把這個(gè)sprint的story做完了(我們玩的是敏捷開發(fā))鸠信,給po(產(chǎn)品負(fù)責(zé)人,接下來篇幅會(huì)以po來表示)演示完了衣屏,po給客戶演示也ok了施绎。po發(fā)來好消息,跟我們說可以上生產(chǎn)了骄蝇。團(tuán)隊(duì)B還在為處于sprint的周期中膳殷,苦苦掙扎。我們內(nèi)心也是滿懷喜悅九火,心想:“你看那群人還在苦苦掙扎”赚窃。終于到了下班時(shí)間了,團(tuán)隊(duì)A對(duì)這次上線已經(jīng)萬事俱備了吃既。就差東風(fēng)了考榨。團(tuán)隊(duì)A的leader對(duì)A隊(duì)員說,麻煩deploy一下服務(wù)A鹦倚;服務(wù)A部署完畢河质,沒有任何問題。啪啦啪啦震叙,服務(wù)A掀鹅、B、C媒楼、D都部署好了乐尊。到最后發(fā)現(xiàn),天啊划址,服務(wù)E涵蓋了團(tuán)隊(duì)B的不完整的功能(團(tuán)隊(duì)B的功能還沒做完扔嵌,也沒有測(cè)試過)限府。好了,此時(shí)的你痢缎,我相信你會(huì)“吐血”胁勺,吐完血還是乖乖把服務(wù)A、B独旷、C署穗、D回滾回來。然后打電話跟po說嵌洼,上線失敗了案疲。
? ? 我相信在多團(tuán)隊(duì)協(xié)作的時(shí)候,總是會(huì)遇到上線不同步麻养,代碼被覆蓋褐啡,功能不見了,等等這些讓痛心疾首的情況回溺。那么該如何避免上述的情況呢春贸?我們來一層一層拋開問題的本質(zhì)。問題:為什么團(tuán)隊(duì)A上線遗遵,需要等待團(tuán)隊(duì)B萍恕?因?yàn)榇蠹业膕print的周期不一致,ok车要,這個(gè)我們沒辦法避免允粤,因?yàn)槊總€(gè)團(tuán)隊(duì)負(fù)責(zé)的功能大小不一致,po也不一樣翼岁,所以在時(shí)間上無法同步类垫。那么我們只需要做到團(tuán)隊(duì)A上線不需要等待團(tuán)隊(duì)B就好了。那么會(huì)有人問琅坡,如何做到不等待悉患?團(tuán)隊(duì)A做完功能需要合并到develop環(huán)境(集成測(cè)試環(huán)境,接下來篇幅會(huì)以develop環(huán)境來表示)榆俺,然后合并到uat環(huán)境(預(yù)發(fā)布環(huán)境售躁,接下來篇幅會(huì)以u(píng)at環(huán)境來表示)給用戶演示。團(tuán)隊(duì)B也一樣茴晋,也需要做同樣的動(dòng)作陪捷。那又會(huì)有人提出建議,團(tuán)隊(duì)A把功能上到uat環(huán)境诺擅,然后給客戶演示市袖,客戶ok了,團(tuán)隊(duì)A就把功能上線烁涌,接下來就輪到團(tuán)隊(duì)B苍碟,上到uat環(huán)境給客戶演示團(tuán)隊(duì)負(fù)責(zé)的功能酒觅,ok了,然后上線微峰,這樣就不會(huì)沖突了阐滩。這個(gè)也算是一種方案。但是這個(gè)方案需要天時(shí)地利人和齊聚才能得以實(shí)現(xiàn)县忌,因?yàn)樵诂F(xiàn)實(shí)情況下,給po演示完继效,po給客戶演示這往往需要等待一段漫長(zhǎng)的過程症杏,甚至給客戶演示完,客戶也會(huì)得到“啟發(fā)”瑞信,給你來個(gè)“我需要根據(jù)手機(jī)殼的顏色改變屏幕的顏色”的需求厉颤。這個(gè)時(shí)候,你可能還需要幾天時(shí)間去修改功能凡简。整個(gè)過程下來可能需要一個(gè)星期逼友。也就是說團(tuán)隊(duì)B需要等待團(tuán)隊(duì)A用完這個(gè)坑才能用,效率極低秤涩。
? ? 上面講到一種方案帜乞,我想大家不會(huì)采用。那是否還有更好的方案嗎筐眷?當(dāng)然有黎烈,不然我早死了≡纫ィ“發(fā)布火車”照棋,什么是發(fā)布火車呢?從字面上來理解武翎,就是像火車一樣烈炭,定時(shí)就會(huì)載貨走,不會(huì)等任何人宝恶。說好的定時(shí)符隙,那什么為開始時(shí)刻呢?在你的代碼推向develop環(huán)境那一刻開始卑惜,“火車”就開始啟動(dòng)了膏执,也就是只要你的代碼部署到develop環(huán)境,就說明你的功能是完整的露久、可用的更米、是可以上線的。這樣約束會(huì)有什么好處呢毫痕?限制其他團(tuán)隊(duì)把不完整或者殘缺的功能推向develop征峦,影響可以上線的功能迟几。也就是說團(tuán)隊(duì)A開發(fā)好功能了,團(tuán)隊(duì)向po演示完栏笆,po接收类腮,我們把功能部署到uat環(huán)境,po向客戶演示完蛉加,決定可以上線蚜枢,是不會(huì)攜帶不完整或者殘缺的功能的。但是也有可能會(huì)攜帶其他團(tuán)隊(duì)的功能针饥,但是攜帶的功能起碼是完整的厂抽,可用的。這樣也不至于影響到團(tuán)隊(duì)A的上線了丁眼。這個(gè)約束可以解決上述案例中的一個(gè)痛點(diǎn):團(tuán)隊(duì)A上線時(shí)發(fā)現(xiàn)有團(tuán)隊(duì)B不完整的功能筷凤。
? ? 肯定有人問,那測(cè)試人員在哪里測(cè)試苞七?如何保證部署到develop環(huán)境的功能是完整的藐守?團(tuán)隊(duì)向po演示是用什么環(huán)境演示?同時(shí)也會(huì)出現(xiàn)團(tuán)隊(duì)A攜帶了團(tuán)隊(duì)B的完整功能蹂风,但是團(tuán)隊(duì)B的功能客戶那邊還沒確認(rèn)可以上線卢厂,就把團(tuán)隊(duì)B的功能帶上生產(chǎn)了,等等問題硫眨。我來一個(gè)一個(gè)解釋我們是如何做的足淆。
? ??