一、團(tuán)隊(duì)為什么會(huì)抵制TDD
1.時(shí)間壓力
由于團(tuán)隊(duì)忙于交付,所以團(tuán)隊(duì)不可能分心出來執(zhí)行TDD,因?yàn)閳?zhí)行TDD需要更多的時(shí)間。所以,團(tuán)隊(duì)比較擔(dān)心投入TDD會(huì)進(jìn)一步影響進(jìn)度。
2.學(xué)習(xí)成本
TDD不是很簡單的就可以使用的,而是需要一定學(xué)習(xí)的。團(tuán)隊(duì)已經(jīng)很忙了,還要分身學(xué)習(xí),這對團(tuán)隊(duì)的直覺來說的話,一定是會(huì)更進(jìn)一步降低速率,所以,團(tuán)隊(duì)在效果不確定的情況下,一般也不會(huì)愿意投入。
3.指標(biāo)壓力
團(tuán)隊(duì)一旦使用TDD,就要向管理層匯報(bào)測試的覆蓋率等等,這等于是額外為自己增加了更多的負(fù)擔(dān)。
二、可能的解決辦法
1.引入比較擅長TDD的外部資源
因?yàn)橥獠勘容^成熟的能夠執(zhí)行TDD的團(tuán)隊(duì)能夠直接將TDD引入,并且?guī)韺?shí)際的效果,所以對于團(tuán)隊(duì)來說,比較容易看到立竿見影的效果。這樣團(tuán)隊(duì)就比較容易接受,并且去學(xué)習(xí)TDD。
2.減緩交付速度
如果允許的話,可以通過減緩交付速度的方式來騰出學(xué)習(xí)TDD的時(shí)間。但是有很多團(tuán)隊(duì)可能并不具備這樣的條件。
3.減少浪費(fèi)的時(shí)間
很多團(tuán)隊(duì)之所以忙于眼前的任務(wù)而無暇分身的首要原因是因?yàn)閳F(tuán)隊(duì)本身對于時(shí)間的使用不夠科學(xué),導(dǎo)致沒有時(shí)間去提升團(tuán)隊(duì)。所以從長遠(yuǎn)來看,減少浪費(fèi)的時(shí)間這個(gè)策略可以更好的提高團(tuán)隊(duì)整體的士氣以及團(tuán)隊(duì)的能力。所以,這個(gè)是最為推薦的策略。
這個(gè)改善本身需要通過一定的觀察,來找到團(tuán)隊(duì)的時(shí)間浪費(fèi)點(diǎn)。
不過,以大多數(shù)的團(tuán)隊(duì)情況來看 ,下面幾個(gè)方法都可以達(dá)到立竿見影的效果。
a.改善會(huì)議
1)會(huì)議召開之前問一下:是否所有的人都要參加,是否所有的人都要參加所有的部分?
2)會(huì)議召開的時(shí)候遵守時(shí)間盒
3)會(huì)議召開的時(shí)候,不要讓大家岔開話題。
4)會(huì)議不要自動(dòng)充滿預(yù)約的時(shí)間。
5)盡量減少會(huì)議。
b.引入和強(qiáng)化時(shí)間盒
1)對于一個(gè)Junior的程序員需要調(diào)查4個(gè)小時(shí)而一個(gè)senior只要幾分鐘就能夠解決的問題,就不要浪費(fèi)這么多的時(shí)間。因此設(shè)置時(shí)間盒,當(dāng)一個(gè)簡單問題超過20分鐘無法解決的時(shí)候就要詢問比自己有經(jīng)驗(yàn)的人。
2)比如,交付一個(gè)模塊的時(shí)間也應(yīng)該有時(shí)間盒。在時(shí)間盒沒有到來之前,需要檢查進(jìn)度(這里有另外一個(gè)話題,如何檢查進(jìn)度,簡略的說,不要用百分比來統(tǒng)計(jì)進(jìn)度,那個(gè)數(shù)據(jù)沒有任何參考價(jià)值)。這樣可以提前預(yù)知什么模塊會(huì)造成延遲。從而提前采取必要的措施來改進(jìn)。
c.減少等待
1)根據(jù)帕金森定律,工作會(huì)自動(dòng)充滿工作時(shí)間。所以,統(tǒng)計(jì)每個(gè)人的時(shí)間是如何使用的,可以發(fā)現(xiàn),其中的大量等待的存在。所以,減少這部分的等待,可以轉(zhuǎn)化為學(xué)習(xí)TDD的時(shí)間。
2)在瀑布式開發(fā)流程下,等待都是很明顯的,比如:需求分析階段,開發(fā)和測試團(tuán)隊(duì)基本上出在“無事可干”的狀態(tài)。開發(fā)階段,測試人員也處在“設(shè)計(jì)測試用例”狀態(tài),可是怎么那么湊巧,測試人員的測試用例設(shè)計(jì)時(shí)間“恰好”和開發(fā)人員開發(fā)所需要的時(shí)間一樣呢?所以必然有一方在某個(gè)時(shí)間段處在等待狀態(tài)。測試期間,開發(fā)人員在等待Bug的出現(xiàn)。
3)等待還非常的多,不一一列舉了。
4.改善約束點(diǎn)
a.團(tuán)隊(duì)的交付管道可能會(huì)遇到很多約束點(diǎn)。比如:“集成”。這個(gè)可以通過度量數(shù)據(jù)來得到具體數(shù)據(jù)??梢钥吹郊蛇^程中每個(gè)人的時(shí)間是如何使用的。到底有哪里是造成約束的。比如:集成的時(shí)候,只有幾個(gè)人能夠在處理集成的操作,其他人只能等待。
b.改善約束點(diǎn)的方法有很多,包括:拓寬管道,繞過約束點(diǎn),或者將約束點(diǎn)的操作向前移動(dòng)。這里也不一一列舉具體的做法了。
5.提高團(tuán)隊(duì)“做入質(zhì)量”的意識(shí)
a.做入質(zhì)量是提高成本意識(shí)以及質(zhì)量意識(shí)的重要入口。當(dāng)團(tuán)隊(duì)都有這個(gè)意識(shí)的時(shí)候,會(huì)自然而然的要求使用TDD。而無需外部要求。所以,這個(gè)是長久生效的策略。
b.為了能夠讓團(tuán)隊(duì)提高這個(gè)意識(shí),需要從實(shí)際統(tǒng)計(jì)數(shù)據(jù)出發(fā)。讓團(tuán)隊(duì)明白,后測質(zhì)量帶來的問題所在,以及時(shí)間浪費(fèi)。比如,bug的re-open率。以及TDD所帶來的數(shù)據(jù)上的變化。
c.最重要的是,讓團(tuán)隊(duì)看到效果??吹叫Ч菆F(tuán)隊(duì)能夠自動(dòng)吸收TDD的最佳策略。而讓團(tuán)隊(duì)看到效果的話,不要參考別人的成功案例。團(tuán)隊(duì)會(huì)找到很多借口,比如:時(shí)間不夠,人員經(jīng)驗(yàn)不夠等。一定要讓團(tuán)隊(duì)親自去感受到TDD的效果。