厲害的程式設計師是怎麼把 Bug 盡可能的轉化成編譯錯誤的?

時間 2021-05-06 03:21:57

1樓:hua liu

用spring之類框架時,用註解替代xml。

xml的優點是該一些屬性引數不需要重新編譯。

但是缺點就是把問題延遲到執行時才觸發。甚至說一些懶載入的反射類,啟動時也發現不了,只有執行過程中例項化時才報找不到類定義的異常。

後來乾脆所有都用註解,而且能不用反射的盡量不用,這樣全世界都安靜了

2樓:

1.消滅魔法數字,最好都定義為常量

2.消滅字串,都定義為列舉和常量

3.消滅裸的空值判斷,空值判斷都用公有的方法,例如aa==null 改為 isNull(aa)

4.工具類和公開類裡面的null預防檢測,類似於assert5.規定在某些層只能丟擲異常,只有最外面層才捕獲異常,專案末期再修正提示問題

6.靜態檢查,使用ide

7.拋棄sql裸寫,採用orm,

8.使用強型別,整形是整形,字元是字元,陣列是陣列,map是map,物件是物件

9.字串要模板化

3樓:張雷

比如Kotlin的Null Safety.

4樓:Irons Du

大家都說的很好啊。

盡力把程式的要求/約束放到編譯期(檢查)

譬如:1、強型別(型別安全)(避免執行期接收了非預期的型別)2、override 檢查

3、避免某些隱式轉換

3、static_assert

4、隱藏不必要的public(且不安全)介面 (介面越少,使用者學習成本越少,用錯機率也越小)

5、限定資源的分配(和釋放)

(比如,禁止某些類由使用者自己構造成raw pointer,而必須通過你提供的介面構造出shared_ptr)

6、禁止某些類被繼承(以及對虛函式進行重寫)7、可能 vczh 說的第二點跟《產生式程式設計》書中提到的基於型別組裝(搭積木)有點類似。(當然這也需要借助 conecpt 來加強型別檢測)

5樓:

題主啊,他們都是騙你的,他們不能。

像EternalBlue那種bug,在產品經理決定要把東西做成這樣的時候,就已經注定了,之後就是讓程式設計師來寫出這些bug。

6樓:zpan

這個是需要語言支援的,比如 C++ 的話可以用模板 + SFINAE 做很多檢查,C 的話很多時候就沒辦法,只能多加 assert。

7樓:Belleve

Idris 裡面你可以直接在 Type 中約束執行時的性質,然後你的函式不能保持這些性質直接不給編譯……

data

Color

=Red

|Black

data

Node

:Nat

->Color

->Type

->Type

where

Leaf

:Node

ZBlack a

NBlack

:Node h c a -> a ->

Node h c' a ->

Node

(S h)

Black a

NRed

:Node h Black a -> a ->Node h Black a ->

Node h Red a

data

RedBlackTree

:Type

->Type

where

NewRBTree

:Node h Black a ->

RedBlackTree a

上面這幾個 datatype 把 Red-black tree 的五個性質都包含了,而你寫的函式只要不能保持這些性質就會報錯。

8樓:

請找到<> 第三版. 在此書的第四章,"設計與宣告"中,它的第一條款,也就是全書的第18條款:"讓介面容易被正確使用, 不易被誤用".本章節應該就是你需要的內容.

另外, C++程式設計師要熟讀並完全理解6E的內容.這是乙個漫長的過程.

....等等, 我估計是想要這個<>, 加油~

9樓:jamesr

除了繁瑣地加各種限定(比如C裡面用一堆const),開啟-Wall之外,沒事有事各種assert之外,程式邏輯上也用各種defensive的思想。

另外,按erlang/OTP的思路就是別試圖做各種執行時錯誤修復,出錯了,讓程式崩掉好了,只要能精確定位錯誤即可。

10樓:深藍加菲

編譯器選項開啟所有warning ,並將 warning 視為錯誤。 類似於 if (prt=NULL) 之類的錯誤都會被檢查出來。

別用 i , j , k 之類的變數名,很容易寫錯, 比如兩層迴圈用 i , j , 你將 i 手抖寫成 j 了編譯器哪怕是神仙也查不出來。

const 之類的好東西,能用上的地方一定要用。

有些東西不是編譯期間的,但是還是說一下,比如大量使用assert或者類似的斷言。有本老書《

Microsoft 編寫優質無錯C 程式秘訣》可以看看

11樓:劉鑫

盡量用靜態編譯語言,特別是那些強型別推導的語言擅長這個。很多設計模式只有在這些語言的環境下才有意義。要是十年前,我會推薦你讀一下《C++設計新思維》,近些年的不太了解。

程式設計師都是怎麼緩解找不到bug狂躁的心情?

我知道是bug,但不能算是bug,想解決又不能解決得糾結。本身設計就有問題,後面一句話說要加乙個功能,該功能又在這個bug上,一問迭代三天時間要搞定,我頭髮都禿了。怎麼找,哪哪都是bug,沒法下手 以前在團隊裡專業負責解決別人找不到的bug,不記得有我找不到的bug,最多的時候可能會為乙個bug花半...

厲害的程式設計師相對於普通程式設計師,對於完成乙個需求來說,除了更少的 bug,還有什麼優勢?

烈日烤魚 沒有程式設計師經歷的人想理解這個問題,你就想想你高中的數學大神和普通人同做一張數學卷子的結果吧。這裡程式設計思維模擬數學思維 不離譜 數學大神模擬頂級程式設計師,普通同學模擬一般程式設計師,任務需求就是,把一張卷子上填滿正確的答案。結果就是 數學大神能做出來的難題普通同學做不出來 數學大神...

如何讓程式設計師開發的系統不再有BUG?

想多了人都會犯錯,更何況寫程式 新需求的開發或許會帶來舊程式的bug 程式設計師不寫程式肯定不會有bug 程式設計師寫程式肯定都在寫bug hdyjzdj 很難嗎?跟我唱就行 One world All the companies closedown hereOne dream Fire all t...