代碼審查:好事?壞事?
在軟件開發(fā)領(lǐng)域,代碼審查看起來是一個(gè)少有爭議、相當(dāng)平和的話題。
主流觀點(diǎn)普遍認(rèn)為代碼審查是個(gè)好東西。有些公司或組織甚至強(qiáng)制要求把代碼互審作為必須的流程。
審查是一種捕捉bug和問題的好措施。通過代碼審查能夠分享領(lǐng)域知識,提高代碼質(zhì)量。代碼審查提供了一個(gè)對團(tuán)隊(duì)進(jìn)行監(jiān)控,教育和強(qiáng)化的好機(jī)會(huì)。
至少理論上是這樣的…
當(dāng)挽起袖子開干,當(dāng)面對真正的項(xiàng)目計(jì)劃產(chǎn)生的壓力時(shí),代碼審查很有可能轉(zhuǎn)而變成一件壞事。
審查是一種能夠?qū)е略骱藓头至训幕顒?dòng)。它能使人對編寫的代碼是否正確產(chǎn)生懷疑,會(huì)激起人們?yōu)樗麄冏约旱木幋a標(biāo)準(zhǔn)而宣揚(yáng)說教。代碼審查是一種日?;顒?dòng),它執(zhí)行的正確與否帶來的是團(tuán)隊(duì)的開發(fā)效率的提升或是扼殺。
對于一個(gè)團(tuán)隊(duì),有效的代碼審查走的是一條中庸的路線——它既不會(huì)成為解決一切問題的銀彈,也不會(huì)成為傷害團(tuán)隊(duì)的毒藥。
經(jīng)過一些思考和跟一些同事討論之后,我認(rèn)為,成功的代碼審查的關(guān)于因素是 信任和訓(xùn)練。
團(tuán)隊(duì)成員必須相信,來自代碼審查中的反饋意見并不是對個(gè)人攻擊或?qū)ψ约耗芰Φ脑u判。審查者必須相信,受審查者不會(huì)因?yàn)槟闾岢隽烁倪M(jìn)意見而憎恨你。
團(tuán)隊(duì)成員必須把代碼審核看著是一個(gè)能不斷得到建設(shè)性反饋意見的平臺,而不是用來對團(tuán)隊(duì)成員評分評級或制造消極激進(jìn)言論的工具。
當(dāng)一個(gè)團(tuán)隊(duì)組成時(shí),信任并不是天生就存在于團(tuán)隊(duì)成員中的。
而訓(xùn)練人們?nèi)绾握_的展開一次代碼審查,可以讓人們在審查過程中建立信任。
所有我呆過的項(xiàng)目團(tuán)隊(duì)中,我發(fā)現(xiàn),學(xué)習(xí)如何正確的做代碼審查的方法就是讓大家審查自己的代碼。這樣之后,你才會(huì)知道如何給別人做代碼審查!這種方法提供了很多真實(shí)情景來解釋如何進(jìn)行代碼審查。
訓(xùn)練新手如何正確的提出評審意見,告訴他們應(yīng)該關(guān)注什么才能給有經(jīng)驗(yàn)的程序員提出有價(jià)值的意見。指導(dǎo)團(tuán)隊(duì)負(fù)責(zé)人在合適的時(shí)候給予評審者支持,點(diǎn)出有意義的評審意見,這樣能強(qiáng)化團(tuán)隊(duì)的信任,使團(tuán)隊(duì)成員互相尊敬。
那么,代碼審查是好事還是壞事呢?
這依賴于你的團(tuán)隊(duì)的愿望,是否努力把它變成一種積極的措施。就像對于任何這種開發(fā)方法論,簡單拿過來用是不行的——你必須保證你在以正確的方式用它。