正文
眾所周知,代碼審查是軟件開發(fā)過程中十分重要的環(huán)節(jié),樓主結(jié)合自己的實(shí)際工作經(jīng)驗(yàn),和大家分享一下在實(shí)際工作中代碼審查是如何開展的,
筆者水平有限,若有錯(cuò)誤和紕漏,還請大家指正。
代碼審查的阻力
我想不通公司不同部門對代碼審查這項(xiàng)工作的重視程度還是不一樣的,對于代碼審查的阻力總結(jié)了以下幾點(diǎn):
國內(nèi)的整體環(huán)境,國內(nèi)的公司,尤其是互聯(lián)網(wǎng)公司,講究速度致上,軟件開發(fā)的迭代周期周期短,速度快,因?yàn)楦偁幪?,開發(fā)的產(chǎn)品要求快速上線,對代碼審查不是很重視,先上線,出了問題再解決。
公司的規(guī)模,大公司重視流程,把代碼審查作為軟件開發(fā)中的重要一環(huán),甚至計(jì)入考核,不管什么一旦成為制度,開展起來就相對容易了。小公司則不然,尤其是剛起步的,可能覺的代碼審查沒有必要。
和你的領(lǐng)導(dǎo)有關(guān)系,就和上面說的,代碼審查如果沒有形成制度,如果你的領(lǐng)導(dǎo)是技術(shù)出身,明白代碼審查的重要性,那么會(huì)要求你去做。如果是來自別的領(lǐng)域,可能認(rèn)識不到它的重要性,覺的代碼審查是浪費(fèi)時(shí)間(就和代碼重構(gòu)一個(gè)道理)。
個(gè)人原因,尤其是剛剛進(jìn)入公司的員工,大學(xué)的軟件工程課里面好像是沒有介紹代碼審查的,就是有,沒有實(shí)際經(jīng)驗(yàn),也體會(huì)不到它的重要性,筆者剛?cè)肼殨r(shí)就是這么認(rèn)為的。
代碼審查的重要性
說了代碼審查工作的開展遇到的阻力,下面說一下為什么代碼審查是重要的。
代碼審查是保證代碼質(zhì)量的重要手段。軟件缺陷可能隱藏在各個(gè)地方,測試是發(fā)現(xiàn)缺陷的重要方法,但專業(yè)的測試人員更多的可能是黑盒測試,他們不去關(guān)注代碼內(nèi)部的邏輯,只去關(guān)注代碼實(shí)現(xiàn)的功能,有人說測試代碼中的邏輯需要開發(fā)人員進(jìn)行單元測試,一方面,單元測試覆蓋率基本上不可能達(dá)到100%,另一方面,畢竟是單元測試,測試場景簡單,有些復(fù)雜的場景有可能會(huì)測不到。各種測試完成后,如果還有缺陷,那只能讓客戶充當(dāng)我們的“終極測試”了。抱怨會(huì)接踵而來,客戶滿意度會(huì)越來越低。所以,我們要想出一切可以使用的方法來進(jìn)一步提高代碼質(zhì)量的方法,還有代碼審查么,測試發(fā)現(xiàn)不了的問題,通過代碼審查也許你能夠發(fā)現(xiàn)。
代碼審查是熟悉軟件架構(gòu),了解軟件業(yè)務(wù)邏輯的好方法。學(xué)習(xí)代碼是需要切入點(diǎn)的,一個(gè)上百萬行代碼的系統(tǒng),從哪里開始著手,只能一個(gè)模塊一個(gè)模塊,一個(gè)組件一個(gè)組件的來熟悉,掌握。實(shí)現(xiàn)一個(gè)比較大的功能,你應(yīng)該不會(huì)是唯一的開發(fā)人員,從系統(tǒng)架構(gòu)師輸出的系統(tǒng)設(shè)計(jì),然后到各個(gè)團(tuán)隊(duì)中技術(shù)Lead輸出的component級別的設(shè)計(jì),到開始實(shí)現(xiàn)時(shí),應(yīng)該會(huì)把功能分為不同的模塊有不同的開發(fā)人員協(xié)同實(shí)現(xiàn)。這是個(gè)學(xué)習(xí)的機(jī)會(huì),不要只局限于自己這部分,為了了解這個(gè)大的功能,甚至和這個(gè)功能相關(guān)的其他已經(jīng)實(shí)現(xiàn)的功能,你同樣需要關(guān)注其他人的工作。有目的的看代碼和漫無目的的瀏覽效果是不一樣的,你已經(jīng)對新功能有所了解,審查代碼之前,你認(rèn)為代碼會(huì)怎么寫,別人哪里和你想的不一樣,舊功能和新功能是如何相互影響的等等,心里懷著問題,你的學(xué)習(xí)速度會(huì)更快,記得更加深刻。
代碼審查是你提高自己的好方法。前提是team中有經(jīng)驗(yàn)豐富的開發(fā)人員的存在。也就是大牛,不要錯(cuò)過讓他看你代碼的機(jī)會(huì),不要害怕他會(huì)為你寫的代碼挑出一大堆問題,有人說你自己寫的代碼就像自己的孩子,見不得別人說半點(diǎn)不字,不要固執(zhí),