
BUG,在中文的意思就是『蟲』,像是蟑螂螞蟻強哥等等的…但是在程式設計上面,BUG的意思就是程式中出錯的地方,所以『DEBUG』一詞就由然而生,也就是程式上的除錯。通常BUG可以粗分為下列數種:
糊塗蟲:通常這種BUG發生的原因都是因為寫程式的時候精神不夠專注所致,像是熬夜或著是連續寫了好幾個小時沒休息最有可能發生,像是陣列存取出界 (Out of array bound)、變數轉型錯誤(casting error)、甚至是忘記加分號(指JAVA以及C/C++)等等的…有時候這種BUG特別難抓,因為撰寫者會認為有錯的地方是對的,舉例來說,一個簡單 的歸零動作(sample in JAVA):
int n = 0;
for(int i = 0;i < array.length;i++) array[n] = 0;
相信各位一定看的很清楚錯在哪裡,但也不是不可能發生(尤其很累的時候),難抓的原因就是因為他太trival,trival到誰都不覺得他會錯,所以通常找到以後,要注意當事人是否有想要撞壁或在牆角畫圈圈的自閉行為。
搗蛋蟲:通常這種BUG的發生常常是因為外部的function、lib或是jar有錯而導致,一開始幾乎所有的當事人都會反覆的檢查自己的程式碼,逐行檢查最後會發現竟然不是自己的錯,找到以後,要注意當事人是否有異常的報復行為。
肚爛蟲:這種蟲通常會在大樹上發現,啊不…是在上萬行的專案中常發生,發生的原因通常是開發時間過長,已經忘記之前寫過的東西啦,再加上 document沒有寫好,所以常常會發生,這種BUG其實是蠻讓人肚爛的,因為是自己寫過的東西但是自己用自己寫的東西卻有錯,通常,當事人在發現錯誤 以後通常會罵:『靠…就肚爛ㄟ…』(from CD-PRO2),舉例來說假設自己寫過一個class可以處理jpeg檔的開啟:
class JPEGLoader {
punlic static RenderedImage loadJPEG(File file,Object status) {...}
}
到底status是什麼鬼…這是我寫的嗎啊啊啊啊…
大懶蟲:通常這種蟲都是在當事人趕工的情況下所發生,因為沒有時間,所以很多funcion在寫的時候都用最智障的寫法去寫,反正只要能跑就好,通常這種寫法會導致程式hard-code太多,或是可讀性不高,以後修改起來會很麻煩,像:int i = 1;
int j = 2,k = 3,a = 11;
int p = j * 5;
他X的,到底什麼是i,j,k,a,p…
邏輯蟲:這種蟲算是高等蟲蟲,因為他的層面不在語言上,在於作法,也就算演算法,像是要寫一個簡單的去除陣列中重複物件的寫法就有很多種,可以burst -force去做,就是O(n^2),也可以聰明點先做排序,再做一次陣列scan即可完成,也就是O(nlogn + n),但是對於小量的陣列長度做sort和直接暴力作沒什麼差別,這時候就要看應用面的選擇。
寫了那麼多,不知道是不是心有戚戚焉呢…