這是一個有關(guān)軟件重構(gòu)項目的真實故事。為了公司業(yè)務(wù)保密和方便不熟悉軟件項目的讀者們閱讀,故事內(nèi)容稍作修改。
BMS系統(tǒng)是一家企業(yè)的后臺系統(tǒng)集群當(dāng)中占據(jù)著絕對重要位置的子系統(tǒng),直接影響著客戶服務(wù)部門對客戶的服務(wù)效率和水平。因為計算機系統(tǒng)環(huán)境的升級,兩年后將不再支持BMS系統(tǒng)當(dāng)前版本的運行,所以需要盡快重構(gòu)BMS系統(tǒng)。重構(gòu)項目已經(jīng)兩次交付延期,正準(zhǔn)備提出第三次延期交付申請,客戶已經(jīng)非常著急。
公司不得不再次派項目經(jīng)理C出手援助。C是一位TOC理論愛好者,在項目管理方面有自己獨特的見解,對一些形勢嚴峻的項目的援助經(jīng)常屢見奇效。
BMS系統(tǒng)的現(xiàn)任項目經(jīng)理M曾經(jīng)是維護BMS系統(tǒng)的一名高級開發(fā)人員,后被提拔任命為BMS系統(tǒng)的項目經(jīng)理,后考取了PMP認證,負責(zé)管理BMS系統(tǒng)和開發(fā)團隊已經(jīng)好幾個年頭。
在開始重構(gòu)BMS系統(tǒng)前,公司極其重視,特批了的M的多個申請——為了提高團隊的開發(fā)效率,給一部分人升級了機器配置,如擴充內(nèi)存、升級SSD硬盤、更換寬屏顯示器,有的直接更換成全新的機器,雙顯示器已是團隊工作的標(biāo)配。同時,部分人的新裝備和新機器正在采購流程中,招聘補員也是優(yōu)先考慮BMS團隊的人員需求,前期缺的幾名測試人員也已經(jīng)補齊。但即便如此,半年多時間已經(jīng)過去了,核心模塊還沒有完成交付。
公司和C得到M的工作匯報:
“我根據(jù)PMP做了很多嘗試,項目現(xiàn)在難以把控,團隊成員每天都在加班、都非常忙,希望能向客戶提出最后一次延期。
“現(xiàn)在項目主要在內(nèi)部測試,測試人員一旦發(fā)現(xiàn)缺陷后,將缺陷記錄至缺陷追蹤系統(tǒng),開發(fā)人員就會及時獲取并開始修復(fù),開發(fā)人員同時還繼續(xù)寫著一些小功能。缺陷追蹤系統(tǒng)中有幾百條已經(jīng)被開發(fā)人員標(biāo)記為“已修復(fù)”的缺陷,等待測試人員進行驗證,同時部分新提交的小功能也在等待測試人員開始測試。
“非常明顯,測試工作進展緩慢,成了項目的瓶頸。測試人員的加班已成必然,同時已經(jīng)從其他團隊臨時調(diào)來兩名測試人員協(xié)助。為了隨時能修復(fù)測試人員發(fā)現(xiàn)的缺陷,開發(fā)人員也一同加班,從而不影響整個項目的進度。
“我覺得很難進行進一步的改善,我希望能借調(diào)更多的測試人員來協(xié)助,而不是項目經(jīng)理。”(估計M認為項目經(jīng)理是不干活的人吧。)
C聽完M的總結(jié)匯報,并沒有和M進行過多的討論。C明白,和管理思維不同的人進行討論如何管理項目只是在浪費時間,C對此已頗有體會——就在半年多前的一個援助項目中,C就與另一個項目經(jīng)理進行過一次無果的討論。C雖然對BMS系統(tǒng)的業(yè)務(wù)不甚了解,但是憑多年的項目管理經(jīng)驗,C認定項目進度的最佳表現(xiàn)指標(biāo)應(yīng)該是標(biāo)記為綠色的“PASS”的測試用例數(shù)量持續(xù)地出現(xiàn)。
C正式進入項目。第一天C同團隊一起加班時,觀察了測試人員E執(zhí)行一個測試用例的完整流程:
測試人員E在左屏上切換到已經(jīng)加載好BMS系統(tǒng)核心模塊界面,刷新后,隨即切換到打開的測試用例文檔,將其中一條測試用例從頭到尾看了一遍,然后轉(zhuǎn)向右屏。測試人員E在已經(jīng)打開的數(shù)據(jù)庫查詢軟件中,在打開的好幾個標(biāo)簽頁里選中了一個(每個標(biāo)簽頁上顯示著查詢文件的名字),幾十行的數(shù)據(jù)查詢語句展示了出來(這些語句都是在測試之前的項目時團隊積攢下來的)。測試人員E在幾十行語句中找到并執(zhí)行了其中一條,不到兩秒鐘多行數(shù)據(jù)結(jié)果集就顯示了出來,借助橫向滾動后,復(fù)制了在結(jié)果集右半部的一個數(shù)據(jù)。測試人員E又選中另一個標(biāo)簽頁,在幾十行語句中好像沒有找到,向上滾輪動屏幕后才找到一段語句。測試人員E將剛復(fù)制的數(shù)據(jù)粘貼到這條語句段末尾后執(zhí)行,這次多等了幾秒鐘才出現(xiàn)了結(jié)果集,和之前一樣,迅速復(fù)制了結(jié)果集中一個數(shù)據(jù)。測試人員E迅速轉(zhuǎn)向左屏,熟練地從測試用例文件切換至已經(jīng)刷新好的BMS系統(tǒng)界面,測試人員E將復(fù)制的數(shù)據(jù)粘貼到界面頂端的一個文本框中,點了一下帶有查詢圖標(biāo)的按鈕,系統(tǒng)彈出正在查詢的友好提示大概幾秒鐘,數(shù)據(jù)就布滿了屏幕。這時測試人員E好像有一點喜悅。她復(fù)制了一個數(shù)據(jù),再次轉(zhuǎn)向右屏,選中一個標(biāo)簽頁后再次找到一條語句段,將復(fù)制的數(shù)據(jù)粘貼到語句段末尾并執(zhí)行,幾秒鐘后就顯示出了結(jié)果。此后,測試人員E開始在左屏和右屏之間來回轉(zhuǎn)頭進行數(shù)據(jù)驗證,充分利用了雙屏優(yōu)勢,從而減少了在一個屏幕上來回切換界面的時間。最后,測試人員E在左屏上切換到測試用例文檔,將那一條測試用例標(biāo)記為綠色的“PASS”。測試人員E此刻顯露出非常高興的表情——這個測試用例驗證的很順利,沒有發(fā)現(xiàn)任何缺陷。
C大概計算了一下,從第一步開始準(zhǔn)備BMS系統(tǒng)界面開始,到最后綠色的“PASS”大概10分鐘左右。C同時猜測,開發(fā)人員可能也是用類似的操作流程來進行自我工作檢測的。在當(dāng)晚加班結(jié)束前,C得到了幾名開發(fā)人員的口頭證實C的猜測。C這次觀察到的正是TOC理論中提及的“活躍的癱瘓”。
第二天一早,C告訴公司領(lǐng)導(dǎo):通過昨天的觀察,C認為存在大幅改善的機會,決定取消第三次延期交付申請,并停止從其他團隊借調(diào)更多測試人員的行動。(公司領(lǐng)導(dǎo)非常高興,因為他們正在為怎樣從其他項目中調(diào)配測試資源而頭疼。)
隨后,C和團隊所有成員開會,會上C提出兩個調(diào)整,在對調(diào)整內(nèi)容作了解釋和原因說明后,團隊所有成員一致投票通過。C提出的兩個調(diào)整如下:
1. 將核心模塊以開發(fā)主導(dǎo)的“模塊”需求方式改成以測試主導(dǎo)的“獨立業(yè)務(wù)線”小需求方式進行拆分,拆分工作由全體成員一起參與進行;對拆分后的小需求進行優(yōu)先級排序,集中完成優(yōu)先級最高的小需求進行交付后,再開始實現(xiàn)下一個小需求;
2. 將“獨立業(yè)務(wù)線”小需求拆分成多個小任務(wù),一個小任務(wù)對應(yīng)一個“測試用例”,安排一名熟練的開發(fā)人員和一名熟練的測試人員專門提前為每個小任務(wù)準(zhǔn)備3份測試數(shù)據(jù),一份用來開發(fā)自測,一份用來測試驗證,一份用來發(fā)現(xiàn)缺陷后的修復(fù)驗證。數(shù)據(jù)沒有準(zhǔn)備好時,任務(wù)不能釋放給其他人員,其他人員也不必再重復(fù)找測試數(shù)據(jù)而花費額外的時間。之前發(fā)現(xiàn)的缺陷進行分類后放置對應(yīng)的小需求中一并修復(fù)或驗證。小需求中所有小任務(wù)對應(yīng)的測試用例被標(biāo)記為綠色的“PASS”后,小需求被視作完成,進行發(fā)布交給驗收團隊驗收。
C隨后說服驗收團隊:驗收團隊不再等到大量的需求功能集合完成交付才開始驗證,而是接受小需求發(fā)布方式進行不斷驗證。
經(jīng)過以上調(diào)整,標(biāo)記測試用例狀態(tài)為綠色的“PASS”的速度越來越快,每個小需求的完成時間大幅縮短,團隊可以對每個小需求的交付驗收時間進行承諾;新的測試缺陷數(shù)量有明顯下降趨勢,即使發(fā)現(xiàn)新的缺陷也是非常容易修復(fù)的;驗收團隊發(fā)現(xiàn)的缺陷數(shù)量也較以往的項目明顯下降,即使有新的驗收缺陷也會在下一個小需求的發(fā)布中迅速修復(fù);團隊成員不再充當(dāng)業(yè)務(wù)的螺絲釘,每個人都提升了對業(yè)務(wù)的理解和掌握;大量的加班逐漸消失了,團隊開始了有規(guī)律的工作節(jié)奏。
一個多月后,核心模塊全部交付,雖沒有趕上最初不延期的項目完成計劃,但如C所言,不需要第三次延期交付申請。
在這次項目援助后,C表示,此次實施的調(diào)整方案是受TOC業(yè)內(nèi)流傳的“藍光”故事的啟發(fā),自己不斷追求更多更快的有效產(chǎn)出信號——綠色的“PASS”,來改善系統(tǒng)的整體流動性。