boss:那么,你需要多長時間來修復(fù)這個bug?

沒有經(jīng)驗的程序員:給我一個小時?最多兩個小時?我能馬上搞定它!

有經(jīng)驗的程序員:這么說吧,釣到一條魚要多久我就要多久?!

要多少時間才能修復(fù)bug,事先是很難知道的,特別是如果你和這些代碼還素不相識的話,情況就更加撲朔迷離了。James Shore在《The Art of Agile 》一書中,明確指出要想修復(fù)問題得先知道問題的所在。而我們之所以無法準確估計時間是因為我們不知道需要多久才能發(fā)現(xiàn)癥結(jié)的所在,只有清楚這一點,我們才能合理估計修復(fù)bug所需要花費的時間。不過,這個時候恐怕黃花菜都涼了。 Steve McConnell曾說過:

“發(fā)現(xiàn)問題—理解問題—這就是程序員90%的工作?!?

很多bug都只需改動某一行代碼即可。但是需要投入大量時間的是,后面還得指出怎么樣才是正確的——就像我們在釣魚的時候,得知道往哪里下誘餌,什么時候魚兒容易上鉤等等。話說bug有四種類型:第一種易尋易修復(fù),第二種難尋易修復(fù),第三種易尋難修復(fù),第四種難尋難修復(fù)。最悲劇的就是最后一型的,不但“尋尋覓覓,凄凄涼涼戚戚”,哪怕終于千辛萬苦滴水穿石,也只能在那邊不由自主地抓耳撓腮,無奈嘆一句“路漫漫其修遠兮”。可以這么說,除非是新鮮出爐的代碼,不然讓你找bug就跟瞎子摸象一樣——糊里糊涂,不知道歸屬于哪種bug類型。

查找和修復(fù)bug

總結(jié)出以下結(jié)構(gòu)化的步驟:

1.明確目的。仔細查閱異常報告,確定是否是個bug,找出各種有用的信息發(fā)現(xiàn)問題的癥結(jié),予以重現(xiàn)。再次檢查是否與報告發(fā)生重復(fù)。如果發(fā)生重復(fù),那看看曾經(jīng)的相關(guān)人員是如何處理的。

2.準備工作——找出正確的代碼,用排除法清理工作區(qū)域。

3.匹配測試環(huán)境。如果客戶正在操作計算機配置,那么此過程可以跳躍。

4.明確代碼的用途,確?,F(xiàn)有測試工具一切正常。

5.好了,現(xiàn)在可以出發(fā)釣魚去咯——重現(xiàn)和診斷錯誤。如果你不能做到重現(xiàn),那你就不能證明你已經(jīng)完成修復(fù)工作。

6.編寫測試案例,或者通過現(xiàn)成的測試案例來捕獲bug。

7.進入修復(fù)模式——請務(wù)必確保不會影響到其他任何部分。但是,在開展修復(fù)工作之前,可能你還要包攬重構(gòu)工作,因為只有這樣,你才能無所顧忌地搗鼓代碼。而且事后回歸測試,還能確保你不會加入任何新的bug。

8.整理代碼。通過一步一步重構(gòu),讓你的代碼更易于理解,更安全。

9.找別人來審查一下,當(dāng)局者迷旁觀者清。

10.再次檢查此修復(fù)過程。

11.試著不從主線出發(fā),以檢查這些bug是否會影響其他支線。合并這些變化,處理代碼中的差異,回顧所有的審查和測試等工作。

12.思考。好好想一想哪里錯了以及為什么錯了?為什么你的修復(fù)會起效?這種類型的bug還會出現(xiàn)在哪里?在《 The Pragmatic Programmer》一書中,Andy Hunt 和Dave Thomas也如是指出“如果一個bug需要耗費你很多時間,那么一定要好好弄清楚原因”。此外,還需要思考的是,怎么做才能吸取經(jīng)驗教訓(xùn),將來在類似的問題上不再栽跟頭?以及,我們采用的方法、使用的工具是否還有可以改進的地方?以及這些bug的影響和嚴重程度。

找到bug,還是修復(fù)bug,哪個需要更多時間?

或許建立一個測試環(huán)境、重現(xiàn)問題和測試bug所需的時間,要遠遠多于找到bug和修復(fù)bug的時間。不過對于一小部分顯而易見的bug,找到它們很簡單——不過修復(fù)起來可能就不盡如人意了。

在《Making Software》一書中,有一章主要是探討“大部分的軟件漏洞的來源”,Dewayne Perry分析認為,相較于修復(fù),發(fā)現(xiàn)bug(包括理解bug和重現(xiàn)bug)所需時間更長。有研究表明,大多數(shù)的bug(差不多有3/4)既易于發(fā)現(xiàn)又易于修復(fù):5天或許更少(這是基于大規(guī)模實時系統(tǒng)通過重量級SDLC、大量審查和測試得出的數(shù)據(jù))。但是也有很惡心的bug,即便你可以輕輕松松揪到它,還是還得“嘔心瀝血”才能修復(fù)好。


發(fā)現(xiàn)/修復(fù) 修復(fù)時間<=5天 修復(fù)時間>5天
能重現(xiàn)問題 72.5% 18.4%
難以重現(xiàn)或根本沒法重現(xiàn) 5.9% 3.2%

所以如果你打賭說你能很快修復(fù)bug,大多數(shù)情況下你還真沒說錯。不過當(dāng)你打賭輸了的時候,那么,嘿嘿,就意味著你有大麻煩了。

所以,下次,boss再問什么時候能修復(fù)bug,別再傻乎乎地回答“馬上就能搞定”了。

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費用,即可穩(wěn)步提升排名至首頁。歡迎體驗最佳的哈爾濱網(wǎng)站建設(shè)。