看板 Soft_Job
作者 qrtt1 (有些事,有時候。。。)
標題 Re: [請益] BUG少的程式  通常有什麼特色?
時間 Fri Apr 27 21:55:07 2012


※ 引述《p52189 (皮爺)》之銘言:
: 大家好
: 個人經驗很淺,只寫過小型的 web 應用
: 很弱小很菜,一直以來深受bug所苦
: 從最開始亂寫,到後來聽了鄉民的意見,開始摸設計模式
: 設計模式確實有效的解決我原本混亂的撰碼習慣
: 而我自己也在黑暗中一邊摸索一邊嚐試修正
: 不過
: 即使一邊寫一邊提醒自己「不要亂寫不要亂寫不要亂寫」
: 還是會有疏忽的地方
: 每次都要花很多時間在完工之後的測試和bug修正
: 甚至會有花在測試的時間比動手寫的時間還多的狀況!!
: 我很想知道,bug少的程式究竟有些什麼樣的特質
: 而產出這些好程式的人,又是因為什麼樣的條件使他們手法漂亮?
: 請各位前輩指點,也請盡量講得淺顯一點
: 感謝!!!


經驗很淺相對的是沒有優雅處理問題的豐富經驗。
要有這些經驗得經驗過許多的試誤,
並且配合其他板友建議的 Design Pattern 與 Unit Test 等技術的使用。
一個不幸的消息是即使現在你知道了有這些東西也不見得能派上用場,
更可能用在不是那麼適當的地方,但總是種改變的機會。
以自我成長的路徑來說,你得先願意嘗試新方法,
也許由你寫出來的與過去的版本在老手的眼中並沒有太大的差異。
有時甚至改成了更糟的情況。

經驗很淺相對的你有更多的機會經驗到習慣性產生的 bug!
這個題目與其去知道世界上最優美的程式是什麼,不如觀察自己如何寫出 bug。

是對於程式語言的語意掌握不足而產生的 Bug 嗎?
像 javascript 的 == 與 === 的使用,
但是先前文章討論的 java 的 || 與 | 在判斷式中的語意問題。

是寫作習慣有需要調整的部分嗎?
像變數的 scope 過大
對,我這裡指的就是變數,沒有指是 global 或 local,
那些可怕的程式 local 的 scope 都是能逼近 global 的。

像是暫時性變數、付予多次意義。
弄個變數 i,只要是需要暫存的都丟給它,實在不是個好習慣啊XD
一旦有人想要調程『呼叫次序』時,就可能產生杯具。

像是輕忽初始化的重要性。
以 java 來說,它強迫你必需對 local 變數設定初值。
有時因偷懶而亂寫了 null 或是將 0 或 -1 設進去,沒考慮到實際應有的值,
事後才發現程式跑起來跟你想得不一樣。

以上只是些『一般而論』的情況,但對你來說是否有意義是另一回事。
這些東西對你產生意義的情況只有一種,
那就是你也用『極為相似』的手法,寫出了 bug。
這時候你才會正確地聯結上,原來 bug 是來自於什麼樣的『壞習慣』。

討論這些也許很細節,但這才是能札實地改正習慣的事情。
所以,我會建議你問一些更具體、細節的問題。
我們實在不能籠統地討論如何不寫出 bug,而不了解你怎麼生產 bug 的。
如果你需要一些糟糕的範例,那你可以挑幾本 refactoring 的書籍。
你可以先看看有哪些 bad smell,並且指出自己習慣性產出哪些。
看看書上提供哪些建議,你評估一下要採用那一個手法改善。

如果你的實況比那個更糟,那可以拿出來大家 review 一下這才是有實際效果的。

--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.118.63
※ 編輯: qrtt1           來自: 114.43.118.63        (04/27 22:03)
thinkniht:推一下1F 04/27 22:51
p52189:感謝!不好意思我真的很遜咖,是看到板友提到我才知道有重構這個字眼  這個關鍵字確實對於改善我的問題非常有用!2F 04/28 00:32

--
(qrtt1.): Re: [請益] BUG少的程式 通常有什麼特色? - Soft_Job板