1. 程式人生 > >第三章《程式碼檢查、走查與評審》筆記與心得

第三章《程式碼檢查、走查與評審》筆記與心得

                                                                          程式碼檢查心得

       程式碼檢查主要分為8類。以下為閱讀筆記和心得。

       紫色字型為暫不理解的問題。

一、資料引用錯誤

  1. 引用的變數務必要初始化。陣列使用時要注意記憶體空間,不要越界。
  2. 注意“虛呼叫”錯誤。虛呼叫一般是通過指向基類的指標或引用來訪問派生類的物件,是動態鏈編的過程。如果在建構函式中呼叫虛擬函式,因為物件還沒有完全誕生,此時呼叫為實呼叫。注意在析構時,先析構派生類再析構基類,所以在函式中呼叫基類虛擬函式時,派生類已經被析構,此時不能再呼叫派生類的虛擬函式。
    關於虛呼叫的使用,更多見:  https://blog.csdn.net/u011475134/article/details/76347803
  3. 如果一個記憶體區域中具有不同屬性的別名,當通過別名進行引用時,記憶體區域中的資料值要檢查是否具有正確的屬性。
  4. 是否計算位串的地址。
  5. 字串的邊界要注意是否存在“差一個”的錯誤。

二、資料宣告錯誤

     所有的變數都需要宣告型別並初始化

三、運算錯誤

  1. 是否存在不一致的資料型別的變數間的運算。這個錯誤有時候編譯器歸為警告型別,但仍然需要檢查。
  2. 賦值語句的變數的資料型別是否小於右邊表示式的資料型別與結果?
  3. 表示式運算過程中是否會出現溢位現象?所以在程式設計時要有取模的好習慣。
  4. 對於包含一個以上操作符的表示式,賦值順序和操作符的優先順序要注意。

四、比較錯誤

  1. 注意是否存在不同資料型別的比較。
  2. 布林運算子的運算元是否是布林型別的。
  3. 對於連續比較,語句是否正確。比如2<i<10的寫法是不對的,應該為(i>2)&&(i<10)。
  4. 操作符的優先順序是否正確,是否能被正確理解?

五、控制流程錯誤

  1. 是否存在死迴圈?
  2. 是否存在“僅差一個”的錯誤
  3. 對於條件控制流程,是否存在將所有的情況包含在內。

六、介面錯誤

  1. 注意函式實參和形參的數量、型別、順序是否匹配。
  2. 是否有程式改變了某個原本僅為輸入值的形參。如果一個函式的形參是指標,在這個函式內需要對此指標指向的記憶體空間操作。最好在此函式中定義一個指標,使這個指標指向要操作的記憶體空間。避免其他程式對形參指標操作時發生錯誤。
  3. 如果存在全域性變數,在所有引用他們的模組中,格式是否正確。還有一個非常重要的問題,在多執行緒程式設計中,如果一個變數為共享變數,要注意對這個變數進行互斥量保護!

七、輸入/輸出錯誤

  1. 是否有足夠的記憶體空間,來保留程式將讀取的檔案?
  2. 所有的檔案在使用後是否正確關閉?
  3. 程式是否處理“File Not Found”的錯誤
  4. 對I/O出錯情況處理是否正確?
  5. 常數是否以實參形式傳遞過?這個在C開發中是常見的,會造成什麼影響?

八、其他檢查

  1. 要對程式編譯時發出的警告進行一一檢查
  2. 程式是否有異常判斷,比如輸入為一個空指標、對於unsigned int的形參i,是否有i<0的檢查?
  3. 注意程式中結構體的“位元組對齊”的問題。
  4. 程式的註釋是否言簡意賅?