編程精粹 ─ Microsoft編寫優(yōu)質(zhì)無錯(cuò)C程序秘訣
下載:Writing Clean Code ─ Microsoft Techniques for Developing Bug-free C Programs 中文版-------------------------------------------------------------------------------------------------------------
附錄A 編碼檢查表
本附錄給出的問題列表,總結(jié)了本書的所有觀點(diǎn)。使用本表的最好辦法是花兩周時(shí)間評(píng)審一下你的設(shè)計(jì)和編碼實(shí)現(xiàn)。先花幾分鐘時(shí)間看一看列表,一旦熟悉了這些問題,就可以靈活自如地按它寫代碼了。此時(shí),就可以把表放在一邊了。
一般問題 1、你是否為程序建立了DEBUG版本?
2、你是否將發(fā)現(xiàn)的錯(cuò)誤及時(shí)改正了?
3、你是否堅(jiān)持徹底測(cè)試代碼.即使耽誤了進(jìn)度也在所不惜?
4、你是否依靠測(cè)試組為你測(cè)試代碼?
5、你是否知道編碼的優(yōu)先順序?
6、你的編譯程序是否有可選的各種警告?
關(guān)于將更改歸并到主程序
1、你是否將編譯程序的警告(包括可選的)都處理了?
2、你的代碼是否未用Lint
3、你的代碼進(jìn)行了單元測(cè)試嗎?
4、你是否逐步通過了每一條編碼路徑以觀察數(shù)據(jù)流?
5、你是否逐步通過了匯編語言層次上的所有關(guān)鍵代碼?
6、是否清理過了任何代碼?如果是,修改處經(jīng)過徹底測(cè)試了嗎?
7、文檔是否指出了使用你的代碼有危險(xiǎn)之處?
8、程序維護(hù)人員是否能夠理解你的代碼?
每當(dāng)實(shí)現(xiàn)了一個(gè)函數(shù)或子系統(tǒng)之時(shí) 1、是否用斷言證實(shí)了函數(shù)參數(shù)的有效性?
2、代碼中是否有未定義的或者無意義的代碼?
3、代碼能否創(chuàng)建未定義的數(shù)據(jù)?
4、有沒有難以理解的斷言?對(duì)它們作解釋了沒有?
5、你在代碼中是否作過任何假設(shè)?
6、是否使用斷言警告可能出現(xiàn)的非常情況?
7、是否作過防御性程序設(shè)計(jì)?代碼是否隱藏了錯(cuò)誤?
8、是否用第二個(gè)算法來驗(yàn)證第一個(gè)算法?
9、是否有可用于確認(rèn)代碼或數(shù)據(jù)的啟動(dòng)(startup)檢查?
10、代碼是否包含了隨機(jī)行為?能消除這些行為嗎?
11、你的代碼若產(chǎn)生了無用信息,你是否在DEBUG代碼中也把它們置為無用信息?
12、代碼中是否有稀奇古怪的行為?
13、若代碼是子系統(tǒng)的一部分,那么你是否建立了一個(gè)子系統(tǒng)測(cè)試?
14、在你的設(shè)計(jì)和代碼中是否有任意情況?
15、即使程序員不感到需要,你也作完整性檢查嗎?
16、你是否因?yàn)榕佩e(cuò)程序太大或太慢,而將有價(jià)值的DEBUG測(cè)試拋置一邊?
17、是否使用了不可移植的數(shù)據(jù)類型?
18、代碼中是否有變量或表達(dá)式產(chǎn)生上溢或下溢?
19、是否準(zhǔn)確地實(shí)現(xiàn)了你的設(shè)計(jì)?還是非常近似地實(shí)現(xiàn)了你的設(shè)計(jì)?
20、代碼是否不止一次地解同一個(gè)問題?
21、是否企圖消除代碼中的每一個(gè)if語句?
22、是否用過嵌套?:運(yùn)算符?
23、是否已將專用代碼孤立出來?
24、是否用到了有風(fēng)險(xiǎn)的語言慣用語?
25、是否不必要地將不同類型的運(yùn)算符混用?
26、是否調(diào)用了返回錯(cuò)誤的函數(shù)?你能消除這種調(diào)用嗎?
27、是否引用了尚未分配的存儲(chǔ)空間?
28、是否引用已經(jīng)釋放了的存儲(chǔ)空間?
29、是否不必要地多用了輸出緩沖存儲(chǔ)?
30、是否向靜態(tài)或全局緩沖區(qū)傳送了數(shù)據(jù)?
31、你的函數(shù)是否依賴于另一個(gè)函數(shù)的內(nèi)部細(xì)節(jié)?
32、是否使用了怪異的或有疑問的C慣用語?
33、在代碼中是否有擠在一行的毛???
34、代碼有不必要的靈活性嗎?你能消除它們嗎?
35、你的代碼是經(jīng)過多次“試著”求解的結(jié)果嗎?
36、函數(shù)是否小并容易測(cè)試?
每當(dāng)設(shè)計(jì)了一個(gè)函數(shù)或子系統(tǒng)后 1、此特征是否符合產(chǎn)品的市場策略?
2、錯(cuò)誤代碼是否作為正常返回值的特殊情況而隱藏起來?
3、是否評(píng)審了你的界面,它能保證難于出現(xiàn)誤操作嗎?
4、是否具有多用途且面面俱到的函數(shù)?
5、你是否有太靈活的(空空洞洞的)函數(shù)參數(shù)?
6、當(dāng)你的函數(shù)不再需要時(shí),它是否返回一個(gè)錯(cuò)誤條件?
7、在調(diào)用點(diǎn)你的函數(shù)是出易讀?
8、你的函數(shù)是否有布爾量輸入?
修改錯(cuò)誤之時(shí)
1、錯(cuò)誤無法消失,是否能找到錯(cuò)誤的根源?
2、是修改了錯(cuò)誤的真正根源,還是僅僅修改了錯(cuò)誤的癥狀?