




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Code Review簡(jiǎn)介1 Code Review的目的凡事知其然還要知其所以然,我們首先需要知道什么是Code Review和我們使用它的目的是什么。Code Review是一種用來(lái)確認(rèn)方案設(shè)計(jì)和代碼實(shí)現(xiàn)的質(zhì)量保證機(jī)制,通過(guò)這個(gè)機(jī)制我們可以對(duì)代碼,測(cè)試過(guò)程和注釋進(jìn)行檢查。Code Review主要用來(lái)在軟件工程過(guò)程中改進(jìn)代碼質(zhì)量,通過(guò)Code Review可以達(dá)到如下目的:在項(xiàng)目早期就能夠發(fā)現(xiàn)代碼中的BUG幫助初級(jí)開(kāi)發(fā)人員學(xué)習(xí)高級(jí)開(kāi)發(fā)人員的經(jīng)驗(yàn),達(dá)到知識(shí)共享避免開(kāi)發(fā)人員犯一些很常見(jiàn),很普通的錯(cuò)誤保證項(xiàng)目組人員的良好溝通項(xiàng)目或產(chǎn)品的代碼更容易維護(hù)2 Code Review的前提知道了Code
2、 Review的目的,我們就可以看看如何做Code Review了,但在做Code Review前我們還有事要做,所謂預(yù)則立,不預(yù)則廢,就是說(shuō)如果在進(jìn)入Code Review之前我們不做些準(zhǔn)備工作,Code Review很容易就變得沒(méi)有意義或是流于形式,這在我們周圍是有很多例子的啊。進(jìn)入Code Review需要檢查的條件如下:a) Code Review人員是否理解了Code Review的概念和Code Review將做什么如果做Code Review的人員不能理解Code Review對(duì)項(xiàng)目成敗和代碼質(zhì)量的重要程度,
3、他們的做法可能就會(huì)是應(yīng)付了事。b) 代碼是否已經(jīng)正確的build,build的目的使得代碼已經(jīng)不存在基本語(yǔ)法錯(cuò)誤我們總不希望高級(jí)開(kāi)發(fā)人員或是主管將時(shí)間浪費(fèi)在檢查連編譯都通不過(guò)的代碼上吧。c) 代碼執(zhí)行時(shí)功能是否正確Code Review人員也不負(fù)責(zé)檢查代碼的功能是否正確,也就是說(shuō),需要復(fù)查的代碼必須由開(kāi)發(fā)人員或質(zhì)量人員負(fù)責(zé)該代碼的功能的正確性。d) Review人員是否理解了代碼做復(fù)查的人員需要對(duì)該代碼有一個(gè)基本的了
4、解,其功能是什么,是拿一方面的代碼,涉及到數(shù)據(jù)庫(kù)或是通訊,這樣才能采取針對(duì)性的檢查e) 開(kāi)發(fā)人員是否對(duì)代碼做了單元測(cè)試這一點(diǎn)也是為了保證Code Review前一些語(yǔ)法和功能問(wèn)題已經(jīng)得到解決,Code Review人員可以將精力集中在代碼的質(zhì)量上。3 Code Review需要做什么好了,進(jìn)入條件準(zhǔn)備好了,有人在這些條件中看到Code Review這也不負(fù)責(zé),那也不檢查,不禁會(huì)問(wèn),Code Review到底做什么?其實(shí)Code Review主要檢查代碼中是否存在以下方面問(wèn)題:代碼的一致性、編碼風(fēng)格、代碼的安全問(wèn)題、代碼冗余
5、、是否正確設(shè)計(jì)以滿足需求(性能、功能等等),下邊我們一一道來(lái)。以下內(nèi)容參考了Software Quality Assurance: Documentation and Reviews一文中的代碼檢查部分。31完整性檢查(Completeness)代碼是否完全實(shí)現(xiàn)了設(shè)計(jì)文檔中提出的功能需求代碼是否已按照設(shè)計(jì)文檔進(jìn)行了集成和Debug代碼是否已創(chuàng)建了需要的數(shù)據(jù)庫(kù),包括正確的初始化數(shù)據(jù)代碼中是否存在任何沒(méi)有定義或沒(méi)有引用到的變量、常數(shù)或數(shù)據(jù)類型32一致性檢查(Consistency)代碼的邏輯是否符合設(shè)計(jì)文檔代碼中使用的格式、符號(hào)、結(jié)構(gòu)等風(fēng)格是否保持一致33正確性檢查(Correctness)代碼是
6、否符合制定的標(biāo)準(zhǔn)所有的變量都被正確定義和使用所有的注釋都是準(zhǔn)確的所有的程序調(diào)用都使用了正確的參數(shù)個(gè)數(shù)34可修改性檢查(Modifiability)代碼涉及到的常量是否易于修改(如使用配置、定義為類常量、使用專門的常量類等)代碼中是否包含了交叉說(shuō)明或數(shù)據(jù)字典,以描述程序是如何對(duì)變量和常量進(jìn)行訪問(wèn)的代碼是否只有一個(gè)出口和一個(gè)入口(嚴(yán)重的異常處理除外)35可預(yù)測(cè)性檢查(Predictability)代碼所用的開(kāi)發(fā)語(yǔ)言是否具有定義良好的語(yǔ)法和語(yǔ)義是否代碼避免了依賴于開(kāi)發(fā)語(yǔ)言缺省提供的功能代碼是否無(wú)意中陷入了死循環(huán)代碼是否是否避免了無(wú)窮遞歸36健壯性檢查(Robustness)代碼是否采取措施避免運(yùn)行時(shí)
7、錯(cuò)誤(如數(shù)組邊界溢出、被零除、值越界、堆棧溢出等)37結(jié)構(gòu)性檢查(Structuredness)程序的每個(gè)功能是否都作為一個(gè)可辯識(shí)的代碼塊存在循環(huán)是否只有一個(gè)入口38可追溯性檢查(Traceability)代碼是否對(duì)每個(gè)程序進(jìn)行了唯一標(biāo)識(shí)是否有一個(gè)交叉引用的框架可以用來(lái)在代碼和開(kāi)發(fā)文檔之間相互對(duì)應(yīng)代碼是否包括一個(gè)修訂歷史記錄,記錄中對(duì)代碼的修改和原因都有記錄是否所有的安全功能都有標(biāo)識(shí)39可理解性檢查(Understandability)注釋是否足夠清晰的描述每個(gè)子程序是否使用到不明確或不必要的復(fù)雜代碼,它們是否被清楚的注釋使用一些統(tǒng)一的格式化技巧(如縮進(jìn)、空白等)用來(lái)增強(qiáng)代碼的清晰度是否在定義
8、命名規(guī)則時(shí)采用了便于記憶,反映類型等方法每個(gè)變量都定義了合法的取值范圍代碼中的算法是否符合開(kāi)發(fā)文檔中描述的數(shù)學(xué)模型310可驗(yàn)證性檢查(Verifiability)代碼中的實(shí)現(xiàn)技術(shù)是否便于測(cè)試二、Code Review經(jīng)驗(yàn)檢查項(xiàng)以下是在實(shí)踐中建立的檢查列表(checklist),通過(guò)分類和有針對(duì)性的檢查項(xiàng),保證了Code Review可以有的放矢。1 JAVA編碼規(guī)范方面檢查項(xiàng)檢查項(xiàng)參照J(rèn)AVA編碼規(guī)范執(zhí)行,見(jiàn)JAVA編碼規(guī)范(Java Code Conventions)2 面向?qū)ο笤O(shè)計(jì)方面檢查項(xiàng)這幾點(diǎn)的范圍都很大,不可能在本文展開(kāi)討論,有專門的書籍介紹這方面問(wèn)題,當(dāng)然在Code Review中
9、主要靠經(jīng)驗(yàn)來(lái)判斷。A) 類設(shè)計(jì)和抽象是否合適B) 是否符合面向接口編程的思想C) 是否采用合適的設(shè)計(jì)范式3 性能方面檢查項(xiàng)性能檢查在大多數(shù)代碼中都是需要嚴(yán)重關(guān)注的方面,也是最容易出現(xiàn)問(wèn)題的方面,常常有程序員寫出了功能和語(yǔ)法沒(méi)有絲毫問(wèn)題的代碼后,正式運(yùn)行時(shí)卻在性能上表現(xiàn)不佳,從而不得不做大量的返工,甚至是推倒重來(lái)。A)
10、60; 在海量數(shù)據(jù)出現(xiàn)時(shí),隊(duì)列,表,文件,在傳輸,upload等方面是否會(huì)出現(xiàn)問(wèn)題,有無(wú)控制,如分配的內(nèi)存塊大小,隊(duì)列長(zhǎng)度等控制參數(shù)B) 對(duì)hashtable,vector等集合類數(shù)據(jù)結(jié)構(gòu)的選擇和設(shè)置是否合適,如正確設(shè)置capacity,load factor等參數(shù),數(shù)據(jù)結(jié)構(gòu)的是否是同步的C) 有無(wú)濫用String對(duì)象的現(xiàn)象D) 是否采用通用的線程池、對(duì)象池模塊等cac
11、he技術(shù)以提高性能E) 類的接口是否定義良好,如參數(shù)類型等,避免內(nèi)部轉(zhuǎn)換F) 是否采用內(nèi)存或硬盤緩沖機(jī)制以提高效率G) 并發(fā)訪問(wèn)時(shí)的應(yīng)對(duì)策略H) I/O方面是否使用了合適的類或采用良好的方法以提高性能(如減少序列化,使用buffer類封裝流等)I)
12、160; 同步方法的使用是否得當(dāng),是否過(guò)度使用J) 遞歸方法中的疊代次數(shù)是否合適,應(yīng)該保證在合理的??臻g范圍內(nèi)K) 如果調(diào)用了阻塞方法,是否考慮了保證性能的措施L) 避免過(guò)度優(yōu)化,對(duì)性能要求高的代碼是否使用profile工具,如Jprobe等4 資源泄漏處理方面檢查項(xiàng) 對(duì)于JAVA來(lái)說(shuō)由于存在垃圾收集機(jī)制,所以內(nèi)存泄漏不是
13、太明顯,但使用不當(dāng),仍然存在內(nèi)存泄漏的問(wèn)題。而對(duì)于其它的語(yǔ)言,如C+等在這方面就要嚴(yán)重關(guān)注了。當(dāng)然數(shù)據(jù)庫(kù)連接資源不釋放的問(wèn)題也是廣大程序員最常見(jiàn)的,相信有很多的PM被這個(gè)問(wèn)題折磨的死去活來(lái)。A) 分配的內(nèi)存是否釋放,尤其在錯(cuò)誤處理路徑上(對(duì)非JAVA類)B) 錯(cuò)誤發(fā)生時(shí)是否所有的對(duì)象被釋放,如數(shù)據(jù)庫(kù)連接、Socket、文件等C) 是否同一個(gè)對(duì)象被釋放多次(對(duì)非JAVA類
14、)D) 代碼是否保存準(zhǔn)確的對(duì)象reference計(jì)數(shù)(對(duì)非JAVA類)5 線程安全方面檢查項(xiàng)線程安全問(wèn)題實(shí)際涉及兩個(gè)方面,一個(gè)是性能,另一個(gè)是資源的一致性,我們需要在這兩方面做個(gè)權(quán)衡,現(xiàn)在就是到了權(quán)衡利弊的時(shí)候了。A) 代碼中所有的全局變量是否是線程安全的B) 需要被多個(gè)線程訪問(wèn)的對(duì)象是否線程安全,檢查有無(wú)通過(guò)同步方法保護(hù)C)
15、0; 同步對(duì)象上的鎖是否按相同的順序獲得和釋放以避免死鎖,注意錯(cuò)誤處理代碼D) 是否存在可能的死鎖或是競(jìng)爭(zhēng),當(dāng)用到多個(gè)鎖時(shí),避免出現(xiàn)類似情況:線程A獲得鎖1,然后鎖2,線程B獲得鎖2,然后鎖1E) 在保證線程安全的同時(shí),要注意避免過(guò)度使用同步,導(dǎo)致性能降低6 程序流程方面檢查項(xiàng)A) 循環(huán)結(jié)束條件是否準(zhǔn)確B)
16、160; 是否避免了死循環(huán)的產(chǎn)生C) 對(duì)循環(huán)的處理是否合適,如循環(huán)變量,局部對(duì)象,循環(huán)次數(shù)等能夠考慮到性能方面的影響7 數(shù)據(jù)庫(kù)處理方面很多Code Review人員在面對(duì)代碼中涉及到的數(shù)據(jù)庫(kù)可移植性和提高數(shù)據(jù)庫(kù)性能方面的沖突時(shí)表現(xiàn)的無(wú)所適從,凡事很難兩全其美的啊。A) 數(shù)據(jù)庫(kù)設(shè)計(jì)或SQL語(yǔ)句是否便于移植(注意和性能方面會(huì)存在沖突)B) 數(shù)據(jù)庫(kù)資源
17、是否正常關(guān)閉和釋放C) 數(shù)據(jù)庫(kù)訪問(wèn)模塊是否正確封裝,便于管理和提高性能D) 是否采用合適的事務(wù)隔離級(jí)別E) 是否采用存儲(chǔ)過(guò)程以提高性能F) 是否采用PreparedStatement以提高性能8 通訊方面檢查項(xiàng)A) socket
18、通訊是否存在長(zhǎng)期阻塞問(wèn)題B) 發(fā)送接收的數(shù)據(jù)流是否采用緩沖機(jī)制C) socket超時(shí)處理,異常處理D) 數(shù)據(jù)傳輸?shù)牧髁靠刂茊?wèn)題9 JAVA對(duì)象處理方面檢查項(xiàng)這個(gè)檢查項(xiàng)的基礎(chǔ)是對(duì)JAVA對(duì)象有較深的理解,但現(xiàn)實(shí)是很多看過(guò)Thinking in Java的程序員,仍然在程序中無(wú)法區(qū)分傳值和傳引用,以及對(duì)象和reference的區(qū)別。這或許就是理論和實(shí)踐難以結(jié)合的問(wèn)題啊。正所謂知而不行,
19、非真知也。A) 對(duì)象生命周期的處理,是否對(duì)象的reference已經(jīng)失效,能夠設(shè)置為null,并被回收B) 在對(duì)象的傳值和傳參方面有無(wú)問(wèn)題,對(duì)象的clone方法使用是否過(guò)度C) 是否大量經(jīng)常的創(chuàng)建臨時(shí)對(duì)象D) 是否盡量使用局部對(duì)象(堆棧對(duì)象)E)
20、60; 在只需要對(duì)象reference的地方是否創(chuàng)建了新的對(duì)象實(shí)例10 異常處理方面檢查項(xiàng)JAVA中提供了方便的異常處理機(jī)制,但普遍存在的是異常被捕獲,但并沒(méi)有得到處理。我們可以打開(kāi)一段代碼,最常見(jiàn)的現(xiàn)象是進(jìn)入某個(gè)方法后,一個(gè)大的try/catch將所有代碼行括住,然后在catch中將異常打印到控制臺(tái),而且該異常是Exception對(duì)象。A) 每次當(dāng)方法返回時(shí)是否正確處理了異常,如最簡(jiǎn)單的處理,記錄日志到日志文件中B) 是否對(duì)數(shù)
21、據(jù)的值和范圍是否合法進(jìn)行校驗(yàn),包括采用斷言(assertion)C) 在出錯(cuò)路徑上是否所有的資源和內(nèi)存都已經(jīng)釋放D) 所有拋出的異常都得到正確的處理,特別是對(duì)子方法拋出的異常,在整個(gè)調(diào)用棧中必須能夠被捕捉并處理E) 當(dāng)調(diào)用導(dǎo)致錯(cuò)誤發(fā)生時(shí),方法的調(diào)用者應(yīng)該得到一個(gè)通知F) 不要忘了對(duì)錯(cuò)誤處理部分的代碼進(jìn)行測(cè)試,很多代碼在正常情況下執(zhí)行良好,而一旦出錯(cuò),整個(gè)系統(tǒng)就崩潰了11 方法(函數(shù))方面檢查項(xiàng)A) 方法的參數(shù)是否都做了校驗(yàn)B)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 華東交通大學(xué)《財(cái)經(jīng)基礎(chǔ)知識(shí)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧沈陽(yáng)市郊聯(lián)體2025屆高中畢業(yè)班質(zhì)量檢測(cè)試題生物試題含解析
- 重慶機(jī)電職業(yè)技術(shù)大學(xué)《建筑與裝飾工程計(jì)量與計(jì)價(jià)》2023-2024學(xué)年第一學(xué)期期末試卷
- 內(nèi)蒙古化工職業(yè)學(xué)院《熱能工程導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶市南川市2025屆小升初考試數(shù)學(xué)試卷含解析
- 潛水裝備在海洋污染治理的應(yīng)用考核試卷
- 礦山環(huán)境保護(hù)法規(guī)執(zhí)行與監(jiān)督考核試卷
- 電子運(yùn)動(dòng)比賽裝備市場(chǎng)需求分析預(yù)測(cè)考核試卷
- 日用化工設(shè)備技術(shù)創(chuàng)新與研發(fā)考核試卷
- 社交平臺(tái)發(fā)展與社區(qū)經(jīng)濟(jì)模式考核試卷
- 2024年中遠(yuǎn)海運(yùn)招聘1189人(含社招)筆試參考題庫(kù)附帶答案詳解
- 2024年新疆財(cái)經(jīng)大學(xué)招聘事業(yè)編制人員真題
- 自主招生??荚囶}及答案
- 2025年4月版安全法律法規(guī)標(biāo)準(zhǔn)文件清單
- 2025年合肥高新國(guó)有房屋租賃經(jīng)營(yíng)有限公司社會(huì)招聘14人筆試參考題庫(kù)附帶答案詳解
- 品管圈PDCA改善案例-降低住院患者跌倒發(fā)生率
- 工程造價(jià)咨詢服務(wù)投標(biāo)方案(技術(shù)方案)
- 量與計(jì)量單位的整理與復(fù)習(xí)
- 員工工資條模板
- 汽車品牌馬自達(dá)課件
- 起重吊裝吊裝作業(yè)安全培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論