到底該怎么樣做代碼審查?


近幾天,算是掉進來一個巨大的焦油坑,我和另外三個同事備受折磨。現在三個有一個跑去裝機器了,暫時不寫代碼,還有我和另外一個同事。

其實代碼復雜度不是很復雜,但是代碼審查(簡稱CR)就是過不了,來來回回的改,若是去和較真CRer,貌似也理由也不是很充分,添加的CR評論多半是“我覺得”,“我認為”,CR代碼的spell check和style check勝過代碼的邏輯check。

比如,你一個循環,可能多半人都會這么寫:

for(int i=0;i<100;i++)
{
    ......
}

但是可能有些人會這么寫

// The max number is 100
int maxNum=100;

// Add some comments here
for(int num=0;i<maxNum;i++)
{
    .......
}

當然第二種方式看起來比第一種“優雅”,但是我認為第一種也不為過。

現在沒人關心這段代碼能不能得到想要的結果,這個只能寫code的人去心中有數了。

 可能有人會提到易讀性,維護性,我想這個有時候有點小題大做了,代碼足夠簡的情況下,如果還要掰扯個最優寫法,吹毛求疵,不為過。

如果寫每一段代碼都要考慮,這個是不是別人看會不會明白?會不會造成誤解?是不是已經足夠清晰?

那這個就不是寫代碼,這個就是寫文章了。

我認為代碼的易讀性跟怎么寫不太有關系,而是跟你整個框架的搭建,對行為的抽象精煉有關系。

再舉個例子:http://msdn.microsoft.com/en-us/library/ms243496(v=vs.110).aspx

相信大家在寫單元測試的時候廣泛用到Assert,有這么一個方法。

public static void AreEqual(
    Object expected,
    Object actual,
    string message
)

關於第三個message參數,msdn是這么定義的:

messageType: System.String
A message to display if the assertion fails. This message can be seen in the unit test results.

說白了就是寫一個信息,然后在斷言失敗的時候打印出來。

但是注意,這雖然是一個message of error,但是msdn 沒有將message定義為errormessage,errormsg等。也就是說沒有給這個message定性,只是說在失敗的時候打印一個message。

其實你要是說寫一個Assert.AreEqual("Bob", userName, message) 你會怎么寫你的message。

如果失敗,他會打印出:

 Expected : "Bob"; Actual :"Boa", message

先說我的想法,我是在message寫明這個斷言的作用,會寫“Verify if the user name is 'Bob' or not”, 表明這個斷言在驗證什么。

但是按照我們現在的寫法,他需要寫成“ Verify user name  ‘Bob’ fails.”, 區別在於我的是個不確定的語氣,而規定是肯定句。

 

其實有必要掰扯message怎么寫嗎?按照多數人來說,可能覺得微不足道。

我其實兩者怎么·寫都可以接受,但是就因為我的這種寫法,被談話許久,其實最后的的結論就是看到第二種寫法,第三者不用看code就知道哪里的功能錯了。

這個理由仍然不能讓我信服,既然你能看到message,說明斷言已經失敗了,繼而看到這個斷言在驗證什么也可以推知錯誤所在。

最后我把messge給刪除了,就光verify,不顯示message,也不錯吧。

但是人在屋檐下,怎么着我都是能接受的,你讓我怎么寫我就怎么寫,你制定出個rule出來,我follow就好了,不是嗎?

這就好比我不懂OO,我反OO難道我就不能寫出好的code嗎?不見得(我且認為滿口OO的人,才是最不懂OO的人)

=================================================================================

代碼如文章,現在幾個人寫一本書也不可能都文風一致。

現在每天最頭疼的,不是功能如何事先,而是糾結

如何給一個變量起個名字,現在是能不用變量就不用變量,函數里套函數

如何添加注釋,現在是能不寫就不寫,寫了 反倒多余

代碼空格對齊問題   哪里少了1個空格,哪里哪里要對齊。。。。。。

新function能不寫就不寫,堆代碼,寫了有人會comment

蛋疼的事情一大堆

。。。。。。。。。。。。。。。。。。。。。。。。。。。

新的代碼怎么放置,添加一個文件如何命名,一個變量放在哪個文件里都需要請示。

====================================================================================

 關於代碼風格,我認為只要不是堆砌,只要風格簡潔,思維通順,就為好的。而且你既然作為一個程序人員,基本的閱讀別人代碼的能力是必須的。

好的代碼能讓人明白你的思維,你能明白你當時的設計思路。

跟一同事飛總說了兩句,說了句經典的:他們看不懂邏輯,所以就只能挑code style和format的錯。

 

啰嗦完畢,吃飯

也請大家談談自己的意見,該怎么做CR經濟又實惠?

先謝謝大家

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM