Re: [請益] BUG少的程式 通常有什麼特色?

看板Soft_Job (軟體人)作者 (ggg)時間14年前 (2012/05/08 10:28), 編輯推噓5(5016)
留言21則, 6人參與, 最新討論串8/10 (看更多)
※ 引述《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

05/08 10:39, , 1F
把系統關掉禁止所有人使用 => 沒人用就不可能發生bug (逃
05/08 10:39, 1F

05/08 12:57, , 2F
總之就是先規劃好再動工.最差的是邊寫邊改的那種.
05/08 12:57, 2F

05/08 15:15, , 3F
邊寫邊改似乎是常態 先規劃好再動工 老闆可能會等到瘋掉!
05/08 15:15, 3F

05/08 17:52, , 4F
永遠趕工做第一版,沒經驗傳承那就是無從規劃,防不了虫生!
05/08 17:52, 4F

05/08 18:04, , 5F
剛寫程式寫上癮時很難克制先coding再說的衝動,總要debug到怕
05/08 18:04, 5F

05/08 18:05, , 6F
了才會把規劃看得比較重,甚至到後來沒規格書就是不想動.
05/08 18:05, 6F

05/08 22:25, , 7F
agile 表示: ...
05/08 22:25, 7F

05/08 22:48, , 8F
請教:除以0,以及,超出陣列範圍,二者都較適合做事先防止,或者
05/08 22:48, 8F

05/08 22:48, , 9F
執行之後補捉錯誤?
05/08 22:48, 9F

05/08 22:58, , 10F
除以0有trap會警示,陣列範圍得自己檢查,記憶體保護是區塊
05/08 22:58, 10F

05/08 23:13, , 11F
對,不過實務上是trap到除以0的情況,以及超出陣列範圍的情況,
05/08 23:13, 11F

05/08 23:14, , 12F
只要trap到並且噴出訊息,就叫作bug.
05/08 23:14, 12F

05/08 23:50, , 13F
檢試到分母為0還是得跳出來警示,也做不下去阿!
05/08 23:50, 13F

05/08 23:52, , 14F
超出陣列範圍未必碰觸到memory protection,錯了未必知道.
05/08 23:52, 14F

05/08 23:57, , 15F
若碰觸mem-protect引發trap也是跑不下去,都是要debug!
05/08 23:57, 15F

05/09 00:19, , 16F
並沒有說不debug,只是弄成bug-free的手段,可能彼此觀念不一
05/09 00:19, 16F

05/09 00:21, , 17F
就說我,通常是經過整個連環套鎖變化的程式狀態之後,發生除0
05/09 00:21, 17F

05/09 00:22, , 18F
所以我關心的不會只是那個除號右邊,而是前面發生什麼事.
05/09 00:22, 18F

05/09 00:23, , 19F
我會沿路埋下一堆assert來幫忙在開發測試時就抓到錯誤.
05/09 00:23, 19F

05/09 00:50, , 20F
這兩項若效率不是問題,分母變數與陣列範圍的檢視就到處掛
05/09 00:50, 20F

05/09 21:02, , 21F
assertion是架設保護欄給工程師自己注意用的,而不是埋炸彈喔
05/09 21:02, 21F
文章代碼(AID): #1Fg8JZZg (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1Fg8JZZg (Soft_Job)