C++/C代碼審查表

  
C++/C碼審查
文件結構
重要性
審查項
結論
 
頭文件和定義文件的名稱是否合理?
 
 
頭文件和定義文件的目錄結構是否合理?
 
 
版權和版本聲明是否完整?
 
重要
文件是否使用了 ifndef/define/endif 預處?
 
 
頭文件中是否只存放“聲明”而不存放“定義”
 
 
……
 
程序的版式
重要性
審查項
結論
 
空行是否得體?
 
 
代碼行內的空格是否得體?
 
 
長行拆分是否得體?
 
 
“{” “}” 是否各佔一行並且對齊於同一列?
 
重要
一行代是否只做一件事?如只定一個量,只寫一條句。
 
重要
Ifforwhiledo句自佔一行,不論執句多少都要加“{}”
 
重要
在定義變量(或參數),是否將修 * 量名?
 
 
註釋是否清晰並且必要?
 
重要
是否有錯誤或者可能解?
 
重要
類結構的public, protected, private序是否在所有的程序中保持一致?
 
 
……
 
命名規則
重要性
審查項
結論
重要
命名規則是否與所採用的操作系開發工具的格保持一致?
 
 
標識符是否直觀且可以拼讀?
 
 
標識符的長度應當符合“min-length && max-information”
 
重要
程序中是否出相同的局部量和全部量?
 
 
類名、函數名、變量和參數、常量的書寫格式是否遵循一定的規則?
 
 
靜態變量、全局變量、類的成員變量是否加前綴?
 
 
……
 
表達式與基本語句
重要性
審查項
結論
重要
如果代行中的運算符比多,是否已用括號清楚地確定表達式的操作序?
 
 
是否編寫太複雜或者多用途的複合表達式?
 
重要
是否將合表達式與真正的數學表達式混淆?
 
重要
是否用錯誤的方式寫if? 例如
1)將爾變量直接與TRUEFALSE或者10行比
2)將浮點量用“==”=”與任何數字比
3)將針變量用“==”=”NULL
 
 
如果循環體內存在邏輯判斷,並且循環次數很大,是否已經將邏輯判斷移到循環體的外面?
 
重要
Case句的尾是否忘了加break
 
重要
是否忘switchdefault分支?
 
重要
使用goto 是否留下? 例如跳了某些象的構造、量的初始化、重要的算等。
 
 
……
 
常量
重要性
審查項
結論
 
是否使用含義直觀的常量來表示那些將在程序中多次出現的數字或字符串?
 
 
在C++ 程序中,是否用const常量取代宏常量?
 
重要
如果某一常量與其它常量密切相,是否在定中包含了這種關系?
 
 
是否誤解了類中的const數據成員?因爲const數據成員只在某個對象生存期內是常量,而對於整個類而言卻是可變的。
 
 
……
 
函數設計
重要性
審查項
結論
 
參數的書寫是否完整?不要貪省事只寫參數的型而省略參數名字。
 
 
參數命名、順序是否合理?
 
 
參數的個數是否太多?
 
 
是否使用類型和數目不確定的參數?
 
 
是否省略了函數返回值的類型?
 
 
函數名字與返回值類型在語義上是否衝突?
 
重要
是否將正常錯誤標志混在一起返回?正常值應當用出參數得,而錯誤標志用return句返回。
 
重要
在函數體的入口,是否用assert參數的有效性檢查
 
重要
使用用了assert例如混淆非法情況與錯誤情況,後者是必然存在的並且是一定要作出理的。
 
重要
return句是否返回指向內存或者引用
 
 
是否使用const提高函數的健壯性?const可以制保函數的參數、返回,甚至函數的定體。“Use const whenever you need”
 
 
……
 
內存管理
重要性
審查項
結論
重要
mallocnew內存之後,是否立即檢查針值是否NULL?(防止使用指針值爲NULL的內存)
 
重要
是否忘記爲動態內存?(防止將未被初始化的內存作使用)
 
重要
或指的下是否越界?
 
重要
動態內存的申放是否配?(防止內存泄漏)
 
重要
是否有效地理了內存耗盡問題
 
重要
是否修改指向常量的指的內容?
 
重要
是否出野指?例如
1)指針變量沒有被初始化。
2)用freedelete放了內存之後,忘將指針設NULL
 
重要
是否將malloc/free new/delete 混淆使用?
 
重要
malloc句是否正確無?例如數是否正確?轉換是否正確?
 
重要
建與動態對象數組時new/delete句是否正確無
 
 
……
 
C++ 函數的高級特性
重要性
審查項
結論
 
重載函數是否有二義性?
 
重要
是否混淆了成函數的重、覆蓋與藏?
 
 
運算符的重載是否符合制定的編程規範?
 
 
是否濫用內聯函數?例如函數體內的代碼比較長,函數體內出現循環。
 
重要
是否用內函數取代了宏代
 
 
……
 
類的構造函數、析構函數和賦值函數
重要性
審查項
結論
重要
是否範而C++ 編譯器自動爲類產生四個缺省的函數:1缺省的無參數構造函數;(2)缺省的拷構造函數;(3)缺省的析構函數;(4)缺省的賦值函數。
 
重要
構造函數中是否漏了某些初始化工作?
 
重要
是否正確地使用構造函數的初始化表?
 
重要
析構函數中是否漏了某些清除工作?
 
 
是否錯寫、錯用了拷貝構造函數和賦值函數?
 
重要
賦值函數一般分四個步驟:(1檢查賦值;(2放原有內存源;(3)分配新的內存源,並制內容;(4)返回 *this。是否漏了重要步驟
 
重要
是否正確地寫了派生的構造函數、析構函數、賦值函數?注意事
1)派生不可能承基的構造函數、析構函數、賦值函數。
2)派生的構造函數在其初始化表裏調用基的構造函數。
3)基與派生的析構函數應該爲虛(即加virtual關鍵字)。
4)在寫派生賦值函數,注意不要忘記對的數據成重新賦值
 
 
……
 
類的高級特性
重要性
審查項
結論
重要
是否背了承和合的規則
1)若在邏輯BA,並且A的所有功能和屬性B而言都有意BA的功能和屬性。
2)若在邏輯AB一部分a part of),不允BA派生,而是要用A和其它西合出B
 
 
……
 
其它常見問題
重要性
審查項
結論
重要
數據問題
(1)量的數據型有錯誤嗎
(2)存在不同數據型的賦值嗎
(3)存在不同數據型的比較嗎
 
重要
值問題
(1)量的初始化或缺省錯誤嗎
(2)生上溢或下溢
(3)量的精度夠嗎
 
重要
邏輯判斷問題
(1)由於精度原因致比無效
(2)表達式中的誤嗎
(3)邏輯判斷
 
重要
環問題
(1)循環終止條件不正確
(2)無法正常止(死循
(3)錯誤地修改循環變
(4)存在差累積嗎
 
重要
錯誤處問題
(1)忘記進錯誤處
(2)錯誤處理程序一直沒有機會被運行?
(3)錯誤處理程序本身就有毛病?如告的錯誤實際錯誤不一致,理方式不正確等等。
(4)錯誤處理程序後炮?如在被它被調用之前件已
 
重要
文件I/O問題
(1)不存在的或者錯誤的文件行操作
(2)文件以不正確的方式打開嗎
(3)文件束判斷不正確
(4)沒有正確地關閉文件
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章