要有審查清單
? ? ? 代碼審查這件事其實(shí)是可以標(biāo)準(zhǔn)化和流程化的赡若,其效果在一定程度上也是可以量化的列赎。要想做好代碼審查,尤其是對(duì)一個(gè)開發(fā)團(tuán)隊(duì)來(lái)說(shuō)骇窍,有一份審查清單是非常有必要的瓜晤,這樣大家就都有了一個(gè)標(biāo)準(zhǔn),可以在代碼審查過(guò)程中按照審查清單逐一檢查腹纳。使用審查清單可以幫助審查者快速找到問題活鹰,甚至開發(fā)者在開發(fā)階段就可以按照審查清單進(jìn)行代碼自查。
一般來(lái)說(shuō)只估,一份代碼審查清單應(yīng)該包括如下幾個(gè)大的類目志群。
代碼結(jié)構(gòu):是否包含超長(zhǎng)代碼,代碼層次嵌套是否過(guò)深蛔钙,函數(shù)是否入?yún)⑦^(guò)多锌云,循環(huán)條件是否有跳出點(diǎn),if語(yǔ)句是否有對(duì)應(yīng)的else語(yǔ)句吁脱,是否存在重復(fù)的代碼桑涎,等等彬向。
代碼安全性:I/O流是否正常關(guān)閉,資金計(jì)算是否使用了Double數(shù)據(jù)類型攻冷,是否有超大的臨時(shí)對(duì)象娃胆,線程池大小是否合理,異常是否被忽略等曼,是否有詳細(xì)的日志記錄里烦,是否存在并發(fā)問題,參數(shù)是否做了必要的檢查禁谦,遠(yuǎn)程服務(wù)的入?yún)⒊鰠⑹欠駥?shí)現(xiàn)了Serialization并且自定義了serialVersionUID胁黑,應(yīng)用是否依賴了SNAPSHOT版本的類庫(kù),等等州泊。
代碼性能:是否有長(zhǎng)SQL語(yǔ)句丧蘸、SQL語(yǔ)句是否用到索引,是否有成熟的類庫(kù)可以替換自己實(shí)現(xiàn)的代碼遥皂,是否可以考慮單例模式力喷,是否可以考慮線程池,是否可以考慮NIO演训,是否可以進(jìn)行鎖優(yōu)化弟孟,等等。
代碼注釋:指類及方法是否有注釋仇祭,注釋是否可以表達(dá)其準(zhǔn)確含義,在代碼中是否存在FIXME及TODO等注釋颈畸,注釋是否包含邊界值及對(duì)異常情況的說(shuō)明乌奇,等等。
單元測(cè)試:代碼是否有可測(cè)試性眯娱,新代碼是否有單元測(cè)試礁苗,單元測(cè)試是否可以覆蓋所有場(chǎng)景,等等徙缴。
代碼優(yōu)化:是否可以使用枚舉代替自定義的常量试伙,在代碼中是否包含魔法值,是否可以使用Optional代替NPE的檢查于样,是否可以使用Stream代替for循環(huán)疏叨,是否可以使用設(shè)計(jì)模式,等等穿剖。
其他:代碼邏輯是否正確蚤蔓,是否實(shí)現(xiàn)了業(yè)務(wù)功能,代碼是否有好的可讀性及可測(cè)試性糊余,等等秀又。
審查時(shí)機(jī)
? ? 代碼審查應(yīng)該是日常性的工作单寂,而不是代碼上線前的集中性工作。換句話說(shuō)吐辙,代碼審查應(yīng)該是伴隨著代碼提交的宣决,而不是伴隨著代碼發(fā)布的。最好的實(shí)踐是在每次提交改動(dòng)較大的代碼后都找到對(duì)應(yīng)的開發(fā)人員進(jìn)行代碼審查昏苏,這樣可以更早地發(fā)現(xiàn)問題尊沸,也可以使其他人更早地了解這部分新代碼。
審查代碼量不宜過(guò)多
? ? 2006年5月捷雕,Smart Bear針對(duì)Cisco進(jìn)行了為期10個(gè)月的代碼審查方面的研究椒丧,最終得到一份思科代碼審查報(bào)告(Code Review at Cisco Systems,參見http://support. smartbear.com/support/media/resources/cc/book/code-review-cisco-case-study.pdf)救巷。在該報(bào)告中指出壶熏,做代碼審查,每次審查的代碼行數(shù)最好在200行以內(nèi)浦译,不超過(guò)400行棒假,否則查找代碼缺陷的效果就會(huì)大打折扣。
出自《程序員的三門課》