在程序員的職業(yè)生涯中,免不了要跟bug一直打交道。Bug也是程序員進(jìn)階的磨刀石。如果是處女座的程序員,遇到bug會(huì)非常興奮,樂(lè)此不疲去折騰,乃至解決bug;當(dāng)然,bug還是大部分程序員的噩夢(mèng)。
在修改bug上經(jīng)常會(huì)存在這么一些問(wèn)題。
一、面對(duì)bug的一些態(tài)度
先來(lái)說(shuō)一下軟件行業(yè)的一些公司,他們經(jīng)常會(huì)讓一個(gè)人修補(bǔ)另一個(gè)人代碼里的BUG。在這種情況下,一些程序員完全可以一氣呵成書(shū)寫(xiě)了一段代碼,之后就可以把問(wèn)題拋給其他工程師。
但是,這樣就會(huì)出現(xiàn)另一種尷尬的情況。由于每個(gè)人的代碼技巧和風(fēng)格不一樣,讓一個(gè)人修復(fù)另一個(gè)人的BUG工作效率相當(dāng)?shù)?。另一方面,搞得另一位程序員很沒(méi)面子!何況對(duì)于技術(shù)高一點(diǎn)的程序員來(lái)說(shuō),修改越是糟糕的代碼,越痛苦!在他們的看來(lái),倒不如重寫(xiě)代碼。
其次,一些程序員面對(duì)bug也會(huì)出現(xiàn)消極的態(tài)度:測(cè)試人員是不是針對(duì)我?我真的適合做程序員嗎?這好像不是我的bug!
具備職業(yè)修養(yǎng)的程序員,面對(duì)bug的正確姿勢(shì)應(yīng)該是:調(diào)試代碼,單元測(cè)試,聯(lián)合調(diào)試,集成測(cè)試,確認(rèn)問(wèn)題所在,進(jìn)一步找出問(wèn)題的原因,然后再修改代碼,驗(yàn)證修改后的代碼。
二、如何解決Bug?
1、二分法定位
這也是比較常規(guī)的方法,即把程序邏輯一點(diǎn)點(diǎn)注釋掉,看看還會(huì)不會(huì)出問(wèn)題,類(lèi)似二分查找的方法,逐步縮小問(wèn)題范圍。
2、單步調(diào)試
由于代碼邏輯錯(cuò)誤,經(jīng)常會(huì)出現(xiàn)輸出結(jié)果與預(yù)期不符。解決此類(lèi)問(wèn)題最好的方法就是利用單步調(diào)試,即設(shè)定每一步代碼的預(yù)期結(jié)果,然后跟蹤判斷實(shí)際結(jié)果是否與預(yù)期結(jié)果一致,找到不一致的原因!在開(kāi)發(fā)環(huán)境無(wú)法重現(xiàn),無(wú)法單步調(diào)試的,就可以運(yùn)用添加輸出日志的方式判斷哪一步的問(wèn)題。
3、重寫(xiě)一遍
大部分的bug,其實(shí)都是 typo。你可以用必殺技,重寫(xiě)一下代碼!
而對(duì)于兼有管理職責(zé)的程序員來(lái)說(shuō),遇到手下的bug,不用解釋?zhuān)挥猛魄?,等他們自己把程序改好,或者?shí)在沒(méi)辦法,再來(lái)向你解釋他們的思想!