如何做好Code Review:思考、方法和實(shí)踐
最近被要求做一個(gè)關(guān)于Code Review的講演。首先要說明的是,我并不是太擅長開展Code Review的活動(dòng)。做這個(gè)完全是因?yàn)榇饝?yīng)了別人又不好反悔。不過在做準(zhǔn)備的過程中還是有一些感想。
關(guān)于Code Review我所了解到的行業(yè)中最著名的是Bill Gates匯報(bào)。這是微軟在軟件開發(fā)過程中的一個(gè)重要環(huán)節(jié),因?yàn)锽ill Gates親自參加而備受關(guān)注,在行業(yè)中廣為流傳。
Ok,進(jìn)入正題了。
我們面臨的共同問題:
1、對于開發(fā)周期較長的軟件項(xiàng)目,可維護(hù)差的代碼對項(xiàng)目造成了極大的困擾
2、結(jié)構(gòu)復(fù)雜的,體系不清楚的代碼會導(dǎo)致新成員或者外部干系人很難融入。
3、軟件項(xiàng)目代碼質(zhì)量低下,Bug眾多并且有關(guān)聯(lián)累積效應(yīng)。
以上三個(gè)問題是我在以往的Code Review活動(dòng)中總結(jié)出來,可以被影響或者解決的問題。也就是說我的觀點(diǎn)是如果沒有上述問題,或者在目前的軟件產(chǎn)品的規(guī)模、開發(fā)過程的成熟度還沒有達(dá)到一定級別時(shí)Code Review是可以不做的。當(dāng)然優(yōu)秀的開發(fā)人員會做自我審查,這是另外一個(gè)問題了。
總而言之,我認(rèn)為開展Code Review活動(dòng)的前提是
1、開發(fā)過程和質(zhì)量控制達(dá)到了一定的成熟的。
Code Review必然與重構(gòu)相關(guān)聯(lián)。如果開發(fā)過程中更本就沒有重構(gòu)這樣的活動(dòng),那估計(jì)Review出來的結(jié)果不太容易得到執(zhí)行。
其次是各種標(biāo)準(zhǔn)和規(guī)范的齊備性,沒有規(guī)矩是不能成方圓的,如果只有一個(gè)命名規(guī)范,那可想而知Review的內(nèi)容不會太深入,效果因此大打折扣。
2、代碼達(dá)到一定那個(gè)的規(guī)模一般來說,功能單一的小型項(xiàng)目的體系結(jié)構(gòu)不會太復(fù)雜。不太會出現(xiàn)Bug的累積效應(yīng)。小型項(xiàng)目完全可以通過daily meeting和Test來保證。
Code Review并不是一個(gè)隨便就可以做,或者做了就有好結(jié)果的活動(dòng)。不過無論如何,一旦條件成熟或者資源充足都應(yīng)該積極的開展Code Review的活動(dòng)。因?yàn)樗诉M(jìn)行質(zhì)量控制以外,還是一個(gè)團(tuán)隊(duì)成員之間進(jìn)行溝通和相互學(xué)習(xí)的好機(jī)會。
Code Review的內(nèi)容:
1、代碼的規(guī)范性
a、混亂而散漫的命名,例如使用a、b、c這樣的單字母對變量進(jìn)行無意義的命名
b、隨處可見的magic number或則hard code。軟件中const在所難免,不過這些const應(yīng)該被集中管理起來。而不是可以隨意、隨處的出現(xiàn)
c、缺少注釋,或者注釋不完備甚至錯(cuò)誤
2、代碼的結(jié)構(gòu)問題
a、巨大的類或者巨大的方法
b、過于復(fù)雜的實(shí)現(xiàn)
c、緊耦合
d、重復(fù)的代碼
3、其他問題
a、缺少驗(yàn)證和異常處理。例如不對數(shù)據(jù)進(jìn)行驗(yàn)證,或者不處理異常又或者捕獲無法處理的異常
b、對工具和框架的錯(cuò)誤使用。例如有的ORM框架提供非常方便的運(yùn)行時(shí)延遲加載功能,方便倒是方便,濫用卻會有性能隱憂
c、缺少可讀性。注釋和命名規(guī)范是一個(gè)問題,不過過深的調(diào)用層次都會影響代碼可讀性。
d、缺少擴(kuò)展性。例如在沒有DLR的情況下在業(yè)務(wù)層使用匿名對象。
e、缺少安全控制
f、性能隱患。例如在C#中使用了非托管資源而沒有進(jìn)行釋放,或者說有過多、過于頻繁的I/O訪問
4、測試問題
a、沒有測試或者覆蓋度不夠
b、測試代碼滯后,在更改邏輯后沒有對測試進(jìn)行同步更新
以上是一些通常的Code Review的內(nèi)容了。當(dāng)然這里再強(qiáng)調(diào)一點(diǎn)的就是規(guī)范的完備性,和開發(fā)過程的成熟度。Code Review是一種相對高級軟件開發(fā)活動(dòng),沒有必要一定要執(zhí)行。不過一旦實(shí)施成功將會有巨大的回報(bào)。
在實(shí)施過程中還有一些心得:
1、做好準(zhǔn)備。如果對項(xiàng)目很熟的話,應(yīng)該知道哪些地方會有問題,Code Review是重新審視和從內(nèi)因上解決這些問題的良機(jī)。
2、不要考慮業(yè)務(wù)邏輯。完全專注于代碼的實(shí)現(xiàn),例如算法的效率,抽象的粒度。整個(gè)代碼體系結(jié)構(gòu)的平衡性
3、虛心學(xué)習(xí)。不要有針對性
4、在原則和現(xiàn)實(shí)之間平衡。不可能所有事情都完美,所以有的時(shí)候我們堅(jiān)持原則,有的時(shí)候修改規(guī)范。
5、不要讓自己Review自己的代碼
6、總結(jié)跟進(jìn)Review的結(jié)果,并且堅(jiān)持開展這個(gè)活動(dòng)。這才是最重要的
posted on 2013-03-18 10:11 順其自然EVO 閱讀(575) 評論(0) 編輯 收藏 所屬分類: 測試學(xué)習(xí)專欄 、敏捷測試