敏捷中高效開(kāi)發(fā)的一個(gè)方法“結(jié)對(duì)開(kāi)發(fā)”,目前沒(méi)有看到哪個(gè)開(kāi)發(fā)團(tuán)隊(duì)有這樣實(shí)行。不嚴(yán)謹(jǐn)?shù)拈_(kāi)發(fā)思維會(huì)造成后續(xù)出現(xiàn)很多缺陷,補(bǔ)救方法:代碼審查?尤其重要。但卻苦惱如何在開(kāi)發(fā)人員中進(jìn)行推進(jìn)。
以下僅供本人學(xué)習(xí)使用,文章來(lái)源:https://blog.csdn.net/wongdei123321/article/details/79012466?utm_source=blogxgwz1,侵刪。原文鏈接:http://blog.jobbole.com/83595/
在我們關(guān)于高效代碼審查的博文中,我們建議使用一個(gè)檢查清單。在代碼審查中,檢查清單是一個(gè)非常好的工具——它們保證了審查可以在你的團(tuán)隊(duì)中始終如一的進(jìn)行。它們也是一種保證常見(jiàn)問(wèn)題能夠被發(fā)現(xiàn)并被解決的便利方式。
軟件工程學(xué)院的研究表明,程序員們會(huì)犯15-20種常見(jiàn)的錯(cuò)誤。所以,通過(guò)把這些錯(cuò)誤加入到檢查清單當(dāng)中,你可以確保不論什么時(shí)候,只要這些錯(cuò)誤發(fā)生了,你就能發(fā)現(xiàn)它們,并且可以幫助你杜絕這些錯(cuò)誤。
為了幫助你開(kāi)始創(chuàng)建一個(gè)清單,這里列出了一些典型的內(nèi)容:
常規(guī)項(xiàng)
代碼能夠工作么?它有沒(méi)有實(shí)現(xiàn)預(yù)期的功能,邏輯是否正確等。
所有的代碼是否簡(jiǎn)單易懂?
代碼符合你所遵循的編程規(guī)范么?這通常包括大括號(hào)的位置,變量名和函數(shù)名,行的長(zhǎng)度,縮進(jìn),格式和注釋。
是否存在多余的或是重復(fù)的代碼?
代碼是否盡可能的模塊化了?
是否有可以被替換的全局變量?
是否有被注釋掉的代碼?
循環(huán)是否設(shè)置了長(zhǎng)度和正確的終止條件?
是否有可以被庫(kù)函數(shù)替代的代碼?
是否有可以刪除的日志或調(diào)試代碼?
安全
所有的數(shù)據(jù)輸入是否都進(jìn)行了檢查(檢測(cè)正確的類(lèi)型,長(zhǎng)度,格式和范圍)并且進(jìn)行了編碼?
在哪里使用了第三方工具,返回的錯(cuò)誤是否被捕獲?
輸出的值是否進(jìn)行了檢查并且編碼?
無(wú)效的參數(shù)值是否能夠處理?
文檔
是否有注釋?zhuān)⑶颐枋隽舜a的意圖?
所有的函數(shù)都有注釋嗎?
對(duì)非常規(guī)行為和邊界情況處理是否有描述?
第三方庫(kù)的使用和函數(shù)是否有文檔?
數(shù)據(jù)結(jié)構(gòu)和計(jì)量單位是否進(jìn)行了解釋?zhuān)?/p>
是否有未完成的代碼?如果是的話(huà),是不是應(yīng)該移除,或者用合適的標(biāo)記進(jìn)行標(biāo)記比如‘TODO’?
測(cè)試
代碼是否可以測(cè)試?比如,不要添加太多的或是隱藏的依賴(lài)關(guān)系,不能夠初始化對(duì)象,測(cè)試框架可以使用方法等。
是否存在測(cè)試,它們是否可以被理解?比如,至少達(dá)到你滿(mǎn)意的代碼覆蓋(code coverage)。
單元測(cè)試是否真正的測(cè)試了代碼是否可以完成預(yù)期的功能?
是否檢查了數(shù)組的“越界“錯(cuò)誤?
是否有可以被已經(jīng)存在的API所替代的測(cè)試代碼?
你同樣需要把特定語(yǔ)言中有可能引起錯(cuò)誤的問(wèn)題添加到清單中。
這個(gè)清單故意沒(méi)有詳盡的列出所有可能會(huì)發(fā)生的錯(cuò)誤。你不希望你的清單是這樣的,太長(zhǎng)了以至于從來(lái)沒(méi)人會(huì)去用它。僅僅包含常見(jiàn)的問(wèn)題會(huì)比較好。
把使用清單作為你的起點(diǎn),針對(duì)特定的使用案例,你需要對(duì)其進(jìn)行優(yōu)化。一個(gè)比較棒的方式就是讓你的團(tuán)隊(duì)記錄下那些在代碼審查過(guò)程中臨時(shí)發(fā)現(xiàn)的問(wèn)題,有了這些數(shù)據(jù),你就能夠確定你的團(tuán)隊(duì)常犯的錯(cuò)誤,然后你就可以量身定制一個(gè)審查清單。確保你刪除了那些沒(méi)有出現(xiàn)過(guò)的錯(cuò)誤。(你也可以保留那些出現(xiàn)概率很小,但是非常關(guān)鍵的項(xiàng)目,比如安全相關(guān)的問(wèn)題)。
基本規(guī)則是,清單上的任何條目都必須明確,而且,如果可能的話(huà),對(duì)于一些條目你可以對(duì)其進(jìn)行二元判定。這樣可以防止判斷的不一致。和你的團(tuán)隊(duì)分享這份清單并且讓他們認(rèn)同你清單的內(nèi)容是個(gè)好主意。同樣的,要定期檢查你的清單,以確保各條目仍然是有意義的。
有了一個(gè)好的清單,可以提高你在代碼審查過(guò)程中發(fā)現(xiàn)的缺陷個(gè)數(shù)。這可以幫助你提高代碼標(biāo)準(zhǔn),避免質(zhì)量參差不齊的代碼審查。