C++程式碼規範和CodeReview
C++程式碼規範和CodeReview
背景
最近手頭上的開發工作基本已經完成主要功能,其後續進行的工作主要在細小功能的調整和完善上,週末在家看書,想到了CodeReview,想把這件事在組內推廣下(其實CodeReview應該是在開發過程中進行的,現在提出,也是希望以後不要步此後塵)。
說道Review,那就不能不提程式碼規範。
專案中的規範問題:
是否有編碼規範的意識?
開發一個專案,若如果從開始編寫第一行程式碼,大家就有程式碼規範的意識,確屬難能可貴。但大多數情況,很多原因導致我們沒有將此作為一項重要的原則開始。原因也大概無非以下幾類:- 時間原因
- 軟體原因:專案開發使用的框架,第三方庫各自有各自的編碼風格
- 個人原因:每個人也有自己的編碼習慣,一時間很難保持統一
- 公司原因:公司對編碼要求、編碼稽核沒有強制執行,沒有專人負責,編碼規範形同虛設,完全靠自覺,壓根沒譜
- 其他:這個很多時候,也有個人怕麻煩、懶啊、等等原因,總之,沒能達到這要求,找藉口一找一籮筐啊。
- 時間原因
選擇什麼樣的規範作為標準呢?
這個主要根據程式語言的不同。不同程式語言有自己獨特的特點,C++、Java、javaScript、Python等,語法規則相差很大,風格自然不同。對於不同變成語言,好多知名IT公司都有自己的編碼規範,我們可以以此為參考。
3.統一程式設計規範的意義有那些?
程式設計規範的形成,主要是為了團隊之間更方便地程式碼閱讀和交流為主要目的,同時也更容易從中分析程式碼錯誤。既然是為了別人閱讀和交流,那就要更加通用和一致,這樣才能有利於交流。 好多不注重規範的程式設計師寫程式碼,都沒有考慮程式碼最後給其他人看。所以寫程式碼也相當隨意。命名、註釋、對齊,等等,完全隨意。結果呢,幾個星期過後,自己開自己程式碼都看不懂了,更別提給別人看。
谷歌的C++程式碼規範
目前,網上流傳最廣的沒過於Google的C++程式碼規範,大家可以有時間進行學習。 Google程式設計規範:https://github.com/google/styleguide
程式碼審查
"在Google,沒有程式,任何產品、任何專案的程式程式碼,可以在沒有經過有效的程式碼審查前提交到程式碼庫裡的"--- Mark CC <<Things Everyone Should Do: Code Review>>
1. 為什麼要進行CodeReview
(1)CodeReview的目的提升程式碼質量,儘早發現常見、普通的缺陷與BUG降低修復成本,同時促進團隊內部知識共享,幫助更多人更好地理解系統;
(2)保證組內人員良好的溝通,使得產品程式碼更容易維護;
2. 從程式碼審查裡能得到什麼?(Mark CC)
在程式碼提交前,用第二群眼睛檢查一遍,防止 bug 混入。
程式碼審查的最大的功用是純社會性的。如果你在程式設計,而且知道將會有同事檢查你的程式碼,你程式設計態度就完全不一樣了。你寫出的程式碼將更加整潔,有更好的註釋,更好的程式結構——因為你知道,那個你很在意的人將會檢視你的程式。
- 程式碼審查能傳播知識。在很多的開發團隊裡,經常每一個人負責一個核心模組,每個人都只關注他自己的那個模組。除非是同事的模組影響了自己的程式,他們從不相互交流。
進行CodeReview應該遵循哪些基本規則?
(1)需要對CodeReview形成一致的認識,如果在對該事物的認識上存在分歧,那麼會增加CodeReview工作的難度;
(2)需要對基本的編碼規範形成一致性的認知,即形成統一的程式碼規範;
(3)CodeReview必須在程式碼CheckIn之前完成;
(4)CodeReview應從設計到編碼邏輯進行細緻的review,故需要參與成員的緊密溝通合作;
(5)必須準確記錄CodeReview過程中發現的問題,可以使用問題點記錄單;
(6)Review過程中可以要求作者講解,遇到不清楚的邏輯點要處分提問討論;
(7)要形成討論問題、解決問題的氣氛,不能把CodeReview搞成批判大會;
(8)Code的作者應對Code質量負責;
(9)引導輕量Review:如果一次性Review issue過多,會嚴重影響Review的質量;
Google程式碼規範工具Cpplint的使用
下面,來學習下CPPlint工具的使用:
1. 準備測試程式碼:
#include <iostream>
using namespace std;
int main()
{
cout<<"hello !"<<endl;
return 0;
}
2. 開啟命令提示符,如下,會發現一共有9個錯誤
11個錯誤:
- 沒有找到版權資訊
- 存在空行
- 不要直接引用名稱空間
- 奇怪的空格在檔案第五行開頭
- 製表位使用,這個不被推薦,最好使用空格
- ...
3. 按照提示修改問題,新增版權資訊
4. 下一個問題:Line ends in whitespace (行以空格結尾),感覺應該指的是第6行是一個空行,建議刪掉。
刪除空行後顯示:
5. 提示,名稱空間被直接引用
6. 提示存在奇異的空格在行起始
對於一般的編輯工具,都可以顯示特殊治製表符和空格。
VS中:
NotePad++中:
7. 刪除空行後,出現新的問題: 左括號應該位於上一行末尾
8. 製表位,建議替換成空格
9. << 符號應該有空格:
10. 行末有空格
11. 總算完了
短短的幾行程式碼,問題如此多。
程式碼質量,任重道遠。
執行程式碼ReView:
下一週,希望大家:自己先給自己程式碼 review,並寫點總結
給點建議:
- 選出一段程式碼(一個小功能程式碼:如一個類,或一個或幾個功能函式)
- 對選中程式碼進行Review(檢查:編碼規範,邏輯是否正確,條件判斷是否覆蓋了整個邏輯,設計是否合理,程式碼效能,等)
- 對比原始碼和修改後的程式碼,進行分析總結
- 每個人先準備好演示檔案,進行講解,其他人來提問,來改進。
- 個人ppt控制篇幅,不要太長(5-10分鐘)。
- 格式不限,自由發揮。