為什么敏捷實(shí)施或是任何一點(diǎn)的過程改進(jìn)都步履維艱?即使是十幾人的樓宇運(yùn)營(yíng)管理平臺(tái)開發(fā)團(tuán)隊(duì),也會(huì)出現(xiàn)“寫自動(dòng)化測(cè)試”→“不寫自動(dòng)化測(cè)試”→“寫自動(dòng)化測(cè)試”→“不寫自動(dòng)化測(cè)試”這種循環(huán)往復(fù)的過程?
除了人們常??偨Y(jié)的“敏捷實(shí)施模式”或是“敏捷失敗經(jīng)驗(yàn)分享”這樣的具體話題之外,是不是還有一些存在于思維模式中的更加根本性的因素阻礙了我們對(duì)系統(tǒng)全景的認(rèn)知,從而導(dǎo)致改革先行者的黯然退場(chǎng)?
本文將通過兩個(gè)案例來(lái)講述如何使用系統(tǒng)思考從全局掌握我們所處的復(fù)雜環(huán)境,做到既見樹木,又見森林。
案例1——舍本逐末
有一個(gè)大連人力資源軟件二次開發(fā)測(cè)試團(tuán)隊(duì)的負(fù)責(zé)人找到我們說:“我覺得現(xiàn)在的自動(dòng)化測(cè)試問題很大,執(zhí)行時(shí)間長(zhǎng),也不穩(wěn)定,有的時(shí)候是測(cè)試寫錯(cuò)了,也要花很長(zhǎng)時(shí)間修。我打算組織一批人,重新設(shè)計(jì)一下測(cè)試樓宇運(yùn)營(yíng)管理平臺(tái)開發(fā)代碼的架構(gòu),把常用的底層功能封裝成設(shè)計(jì)良好的API?!?
我的同事說:“好啊,你們打算怎么做呢?”
他說:“我也還沒想好,所以想過來(lái)商量一下。我希望這個(gè)東西做成以后,能夠讓不會(huì)寫程序的 QA 們都能用它來(lái)寫自動(dòng)化測(cè)試腳本。他們現(xiàn)在就是又要做測(cè)試,又要學(xué)著寫程序,我覺得太辛苦了,能讓他們不用學(xué)編程就能寫測(cè)試腳本就好了?!?
“呃……要不我們先看一下現(xiàn)在的代碼,了解一下都有什么問題,然后再討論?”我們內(nèi)心有點(diǎn)小小的糾結(jié)。
“好吧,我來(lái)給你們開通訪問權(quán)限,找人給你們講代碼?!彼芩斓卮饝?yīng)了。
致遠(yuǎn)服軟認(rèn)為:http://www.soft8.com.cn/打開代碼之后我們就忍不住風(fēng)中凌亂了,滿屏都是重復(fù)的代碼片段,讓人一陣陣眩暈。兩天之內(nèi),我們僅僅用了“提取方法”這一個(gè)重構(gòu)手法,就刪掉了1200行代碼。期間我們還發(fā)現(xiàn),不知道誰(shuí)在調(diào)試的時(shí)候把一處代碼從等待3秒改成了等待10秒后忘了改回來(lái),于是其他人再?gòu)?fù)制粘貼的時(shí)候,就全變成了等待10秒。
依賴于一小撥人重新設(shè)計(jì)樓宇運(yùn)營(yíng)管理平臺(tái)開發(fā)代碼結(jié)構(gòu)、提煉 API,確實(shí)會(huì)在短期內(nèi)使問題得到緩解。但使用這些 API 的人依然是那些不懂得如何編程的 QA,他們依然會(huì)使用復(fù)制粘貼來(lái)解決問題。再好的架構(gòu)、再優(yōu)秀的設(shè)計(jì),最終還是會(huì)淹沒在大量重復(fù)的代碼中,猶如黃金深埋于浮沙之下。而且如果問題表象得到暫時(shí)解決, 人們就會(huì)缺乏動(dòng)力去從根本上提升 QA 的編碼能力,隨著設(shè)計(jì)一點(diǎn)一點(diǎn)腐化,就又需要精兵強(qiáng)將充當(dāng)救火隊(duì)員。如此反復(fù),直到有一天又回到重新設(shè)計(jì)乃至重寫的老路上來(lái)。