作者ggg12345 (ggg)
看板Soft_Job
標題Re: [請益] BUG少的程式 通常有什麼特色?
時間Tue May 8 10:28:48 2012
※ 引述《KHSH (KHSH)》之銘言:
: bug 要少
: 就是 error detection/handling mechanism 要多
:
: 當你的程式碼
: error handling 的部分超過 2/3
: 這樣就較有機會成為 bug-free (bug-less) 的 code
:
: → yjc1:高德納的名言:『Beware of bugs in the above code; 05/07 00:10
: → yjc1:I have only proved it correct, not tried it. 』 05/07 00:10
: 推 ggg12345:四面牆的平頂屋,防水就必須很費工.雙斜面屋頂就事半功倍! 05/07 01:55
: → ggg12345:太多error detection,若多餘也可能引入更多的矛盾與失誤! 05/07 02:16
: 推 sunsamy:給我足夠的時間bug自然少 05/07 03:49
: 推 shadow0326:我覺得好的error handling不是要讓bug變少, 而是讓bug 05/07 11:26
: → shadow0326:容易被定位 05/07 11:26
: → lwecloud:同意樓上 05/07 11:52
: → LaPass:要程式出錯時自己跟你說哪邊出問題 05/07 12:09
: 推 prokofieff:kernel的程式好難handle 05/07 12:48
==============
error dectecion 是允許錯誤發生, 再偵測, 排除.
如果採 error prevention 那是事先避免.
譬如有優先志願的選課, 志願欄若讓使用者隨意填, 還可以分不同時間分批填報
那要做 error detection 就很麻煩了.
如果是按課卡出現次序自動由程式填報, 同一類若出現在先, 就是志願在前. 不
同時間填報就附在前一批之後, 志願序也就隨append合併時, 調整在後, 這就不
會讓使用者亂填, 還要做 error detection 來得簡潔不失誤.
事前預防/避免 比之於 允許發生,事後偵測,排錯 在架構與算法上就是不同.
bug 少, 其中一個因素可能就是 "事先防止使之不可能發生".
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.4.90
推 LaPass:把系統關掉禁止所有人使用 => 沒人用就不可能發生bug (逃 05/08 10:39
推 bobju:總之就是先規劃好再動工.最差的是邊寫邊改的那種. 05/08 12:57
→ pooznn:邊寫邊改似乎是常態 先規劃好再動工 老闆可能會等到瘋掉! 05/08 15:15
→ ggg12345:永遠趕工做第一版,沒經驗傳承那就是無從規劃,防不了虫生! 05/08 17:52
推 bobju:剛寫程式寫上癮時很難克制先coding再說的衝動,總要debug到怕 05/08 18:04
→ bobju:了才會把規劃看得比較重,甚至到後來沒規格書就是不想動. 05/08 18:05
推 ledia:agile 表示: ... 05/08 22:25
推 yauhh:請教:除以0,以及,超出陣列範圍,二者都較適合做事先防止,或者 05/08 22:48
→ yauhh:執行之後補捉錯誤? 05/08 22:48
→ ggg12345:除以0有trap會警示,陣列範圍得自己檢查,記憶體保護是區塊 05/08 22:58
→ yauhh:對,不過實務上是trap到除以0的情況,以及超出陣列範圍的情況, 05/08 23:13
→ yauhh:只要trap到並且噴出訊息,就叫作bug. 05/08 23:14
→ ggg12345:檢試到分母為0還是得跳出來警示,也做不下去阿! 05/08 23:50
→ ggg12345:超出陣列範圍未必碰觸到memory protection,錯了未必知道. 05/08 23:52
→ ggg12345:若碰觸mem-protect引發trap也是跑不下去,都是要debug! 05/08 23:57
→ yauhh:並沒有說不debug,只是弄成bug-free的手段,可能彼此觀念不一 05/09 00:19
→ yauhh:就說我,通常是經過整個連環套鎖變化的程式狀態之後,發生除0 05/09 00:21
→ yauhh:所以我關心的不會只是那個除號右邊,而是前面發生什麼事. 05/09 00:22
→ yauhh:我會沿路埋下一堆assert來幫忙在開發測試時就抓到錯誤. 05/09 00:23
→ ggg12345:這兩項若效率不是問題,分母變數與陣列範圍的檢視就到處掛 05/09 00:50
→ yauhh:assertion是架設保護欄給工程師自己注意用的,而不是埋炸彈喔 05/09 21:02