星期五, 6月 08, 2012

jQuery 教學 - 如何除錯 - 思想篇

Photobucket

今天我們要來探談一個很有趣的話題:
「如何偵錯、如何除錯???」,



這會關係到晚上、周末要不要進公司加班?
KT忘記哪一本聖經提到,開發軟體"除錯"占了整個開發週期的六成。
意思是說,大部分的時間不是在寫新的程式,而是在除錯。

可是坊間很多程式書籍,竟隻字未去提到如何除錯 (不單只是 jQuery 書籍)。
這讓KT超納悶的??? 除錯不重要嗎???

(一旦打開「除錯」這個話匝子,KT可以說上三天三夜。)

好的建築工匠,不是只知道如何把磚塊疊高高、
水泥灌飽飽、鋼筋綁緊緊,
而是知道整體方向,整個建築結構,
而不是只知道瘋狂的地把磚塊給疊高高就好,
且若有不小心造成錯誤,知道如何力挽狂欄、
彌補錯誤,而非整個全打掉再重蓋。


所以當大家寫程式遇到問題時,不是瘋狂亂try,不然就是東改西改,
看能不能好死不死,被亂槍打到,剛好把 bug (臭蟲)給打死。
很顯然的這是一個非常沒有效率的方法。

找出整個問題的根源,一槍斃命徹底殺死臭蟲,
絕對比拿槍亂掃,有時看似掃掉臭蟲,卻不知這樣沒有方向的亂掃、
亂改程式碼,反而會延伸更多病蟲害(side effect,副作用),



所以KT不只要告訴你,如何疊磚塊外,
還想告訴你如何提早下班,
周末把時間留給自己、留給家人。

我們來看一個簡單問題,如何把問題收斂到最小化,

Photobucket
我們今天接到一個新任務,

任務名稱:「加法玩具盒」
規格:兩個輸入端,一個輸出端
任務說明:輸出端會跑出,兩個輸入端相加的總和。

此時萌萌開始動手去找材料拚裝出此功能(上網搜尋、問知識加、問谷哥 ),
過了幾天總與有善心人士回答萌萌問題,整份程式碼貼給他,
萌萌開心的將程式碼收好,拿給老大看:「老大你看我寫好了」。

老大看萌萌示範結果,果然如當初客戶要求的結果出現 2,
向萌萌比了個讚,猛點頭:「Good Job! 年輕果然可為~」
將玩具盒寄給客戶驗證。

過沒幾天,
客戶端打來狂罵:「這什麼東西啊!!! 比$#!%^$#^還不如~$#^#$^」
老大當場被洗頭,還潤髮加按摩。

問題:客戶發現輸入1+1時,有時會出現9。

這事情可大可小,如果真是小孩子的玩具,那也就罷了,
如果這是銀行匯款系統,
兩個輸入分別是由其他分部或其他家銀行跨行匯款進來,
正常的時候會收到如期的2萬,但在莫名的情況下,有時會收到9萬。
這時問題可不是氣球吹一吹爆掉,再換一顆的問題。


萌萌得知後趕緊,再上網搜尋、問知識加、問谷哥,
怎麼辦,怎麼會這樣???
在沒人回答之前,
萌萌開始展開求學過程中,學到的一招大絕:「瘋狂亂試,東改西改」,
瘋狂地測試各種數據往盒子輸入端送,看能不能看出個端倪。

各位看倌們,看到這裡,你們知道問題出在哪嗎???

輸入端不論萌萌怎麼試,
天底下的天文數字萌萌縱使都試遍了,也是無法解決問題,
因為問題根本不在輸入端,而是在黑盒子裡面。

有時瘋狂亂掃,就是會出現牛頭根本沒對到馬嘴的問題。
看似相當傻的行為,KT 敢跟你掛保證,
全世界任何一個角落裡,
這事情不斷的不斷的再上演(不限於程式界)。

黑盒子有可能是你手上的工作、專案、報告、論文或產品...等。
問題到底在那,輸入是什麼、輸出應該要什麼,中間經過了什麼,
如果其中一個環節不知道,那完成的東西,將會是站在鋼索上的小丑一樣。

把架構畫出來,你會發現,問題即是在黑盒子裡。


有人說:「戲如人生,人生如戲」,
KT改了一下:「程式如人生,人生如程式」,


輸入: 你不會去怪出身低,生長環境背景差。
黑盒子:過程才是關鍵。
輸出:產出成功的產品或人生。

最明顯的例子:

輸入: 被父母雙親棄養的小孩,需撿寶特瓶,走很遠的路,去教會吃救濟飯過活
過程: 認真努力
結果: Steve Jobs (賈伯斯)



哈哈哈~談遠了,
程式不好可以改,不要砍掉重練,人生也是。

做一下總結,我們的專案,通常可能不是只完成一個黑盒子即可,
可能是一個很盤大且錯綜複雜的系統,如:

Photobucket

而我們必須盡可能的,把每個結構給畫出來,
將整體系統整理成一個個小盒子,一個個去完成,
遇到問題時,看是那一個小盒子出了問題,丟了(輸入)什麼進去,
卻沒出現什麼,把問題一隻縮小,最後就可以發現那一條臭蟲。

如果專案是個有系統的架構,
那個環節出了問題,
應該可以很輕易去發現,
所以在沒有任何架構下,
請勿寫任何一行程式,
因為這樣臭蟲很容易就滋生蔓延開來。



這一篇是除錯思想篇,
下一篇工具篇,
我們再來看一下jQuery 除錯工具,
如何偵錯使用。


相關文章:
jQuery 教學目錄

0 意見 :

張貼留言

回覆意見時,麻煩輸入一下暱稱
(隨便取個名字也好~ ^_^)
好讓我方便回覆您的問題,
選擇「名稱/網址」輸入您的暱稱,
麻煩一下,謝謝大家。

關閉廣告 [X]