C++程式碼檢閱(Code Review)等級標準

來源:互聯網
上載者:User
C++程式碼檢閱(Code Review)等級標準 0 前言

記錄的問題都是來源於平常C++編碼過程之中常見或基礎的缺陷。

只是由個人整理而成的標準,用於平常代碼編寫中的“掃雷”,沒有權威性,現應用於我的Team Dev。

後續的補充完善還是一個漫長的過程。

程式員要善於記錄和總結,這樣才能成長和提升。

1 簡介

程式碼檢閱定義:通過閱讀代碼檢查代碼缺陷的品質保證過程。

程式碼檢閱內容:編程規範,重構方法,架構設計,效能安全,日誌,可讀性,擴充性。。。

程式碼檢閱好處:及早發現編碼缺陷,分析編碼缺陷,提升代碼品質,提高編碼水平,促進團隊合作。。。

程式碼檢閱形式:代碼走讀,代碼講解,結對程式設計,交叉評審,專家評審,評審會議(只發現問題,不在會議上討論和解決問題)。。。

2 等級標準

一般分三種等級:

嚴重:會引起系統死機,程式崩潰,功能不可用,導致嚴重後果的問題。

一般:會引起功能部分不可用,設計缺陷,運行效率的問題。

提示:會引起代碼可讀性差,違反編程規範的問題。

3 嚴重等級及問題樣本
1)問題類型:操作null 指標問題樣本:CTestClass *p = NULL;p->GetName();//操作null 指標
2)問題類型:操作非法指標問題樣本:char *p = new char[100];delete p;memcpy(p,"你好");//操作非法指標
3)問題類型:指標未判斷為空白問題樣本:if(NULL == P);//要有指標判斷為空白
4)問題類型:野指標問題樣本:new和delete應成對出現malloc和free應成對出現
5)問題類型:死迴圈問題樣本:while(...){    i++;//i++保證不會死迴圈};
6)問題類型:邏輯錯誤問題樣本:指代碼邏輯混亂或相關
7)問題類型:資源泄漏問題樣本:CDialog::Create要有CWnd::DestroyWindow來釋放CreateIcon、GetIcon要有DestroyIcon來釋放CBitmap LoadImage要有DeleteObject來釋放
8)問題類型:數組越界問題樣本:char szArray[MAX];printf("%c",szArray[MAX]);//數組越界
9)問題類型:迴圈體內改寫迴圈變數問題樣本:for(int i=0;i<MAX;i++){    i = 100;//迴圈體內改寫迴圈變數}
10)問題類型:IO操作、資料庫操作資源未釋放問題樣本:開啟的操作必須要關閉,open()和close()操作應成對出現。
11)問題類型:判斷無符號數是否小於0問題樣本:UInt iLen = MAX;if(iLen < 0)//判斷無符號數是否小於0{    ...}
12)問題類型:記憶體拷貝忽略結尾標誌'\0'問題樣本:char *s = "aaaa";char a[4];memcpy(a,s,4);//記憶體拷貝忽略結尾標誌'\0'
13)問題類型:函數內部修改形參問題樣本:string GetName(int iID){    iID = 100;//函數內部修改形參    ...}
14)問題類型:new數組,delete無[]問題樣本:char *a = new char[100];...delete a;//new數組,delete無[]
15)問題類型:局部變數和局部變數、函數參數、全域變數重名16)問題類型:對象不能用memset初始化17)問題類型:多線程資源未做互斥處理18)問題類型:代碼循環複雜度不能高於1419)問題類型:函數代碼嵌套級數不能超過620)問題類型:調試或日誌資訊中不能有敏感資訊
4 一般等級及問題樣本
1)問題類型:變數未初始化問題樣本:char *a;//變數未初始化char b[100];strcpy(b,a);
2)問題類型:函數入參未進行校正問題樣本:void FunTest(CTestClass *p){    p->Get();//函數入參未進行校正}
3)問題類型:布爾值與非布爾值比較問題樣本:int i = 0;bool flag = true;if(i == flag)//布爾值與非布爾值比較{    ...}
4)問題類型:浮點數與0比較問題樣本:double dwLen = 0.1;if(0 == dwLen)//浮點數與0比較{    ...}
5)問題類型:不同資料類型強制比較或賦值問題樣本:long lMax = 32768;short iLen = 0;iLen = lMax;//不同資料類型強制賦值
6)問題類型:複雜運算式未加括弧表示優先順序問題樣本:if(i==j&&i==k||i==l||j==k)//複雜運算式未加括弧表示優先順序{    ...}
7)問題類型:函數無傳回值或傳回值不正確問題樣本:bool Fun(){    int i = 0;    ...    return i;//函數傳回值不正確}
8)問題類型:指標判斷有誤問題樣本:bool Fun(char *p){    if(p)//指標判斷有誤}
9)問題類型:變數比較應放在==左邊問題樣本:if(p == NULL)//變數比較應放在==左邊
10)問題類型:重複代碼問題樣本:重複代碼要提煉或封裝,一定要重複的應加註釋其重複合理性
5 提示等級及問題樣本
1)問題類型:魔鬼數字問題樣本:for(int i=0;i<1000;i++)//魔鬼數字{    ...}
2)問題類型:注釋錯誤問題樣本:注釋有錯別字或語意表達錯誤
3)問題類型:注釋無效問題樣本:注釋必須要合理,不多餘,不廢話
4)問題類型:無注釋或注釋量過低問題樣本:注釋正常應該在30%以上
5)問題類型:排版或縮排混亂問題樣本:空行、縮排必須規範(4空格代替tab)
6)問題類型:冗餘代碼問題樣本:無用注釋或無用代碼
7)問題類型:維護性質代碼無說明問題樣本:維護性質的代碼要有注釋
8)問題類型:if、for、while、switch等語句應加{}問題樣本:switch(i)   case 1:        ...    //應加{}    break;   case 2:       ...       break;
9)問題類型:檔案總行數不超過200010)問題類型:函數總行數不超過20011)問題類型:函數形參不超過512)問題類型:命名不符合編程規範

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.