青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Code Review 理論與實戰(zhàn)

?

Code Review 是一種通過復(fù)查代碼提高代碼質(zhì)量的過程,在 XP 方法中占有極為重要的地位,也已經(jīng)成為軟件工程中一個不可缺少的環(huán)節(jié)。本文通過對 Code Review 的一些概念和經(jīng)驗的探討,就如何進行 Code Review Code Review 中應(yīng)該注意什么提出一些建議。 本文中涉及的問題大部分針對 JAVA 類代碼。同時本文不涉及 Code Review 過程和組織。

關(guān)鍵詞: Code Review , JAVA , XP ,代碼質(zhì)量 ,軟件工程

一、 Code Review 簡介

1 Code Review 的目的

凡事知其然還要知其所以然 , 我們首先需要知道什么是 Code Review 和我們使用它的目的是什么。 Code Review 是一種用來確認方案設(shè)計和代碼實現(xiàn)的質(zhì)量保證機制,通過這個機制我們可以對代碼,測試過程和注釋進行檢查。 Code Review 主要用來在軟件工程過程中改進代碼質(zhì)量,通過 Code Review 可以達到如下目的:

在項目早期就能夠發(fā)現(xiàn)代碼中的BUG

幫助初級開發(fā)人員學(xué)習(xí)高級開發(fā)人員的經(jīng)驗,達到知識共享

避免開發(fā)人員犯一些很常見,很普通的錯誤

??? 保證項目組人員的良好溝通

??? 項目或產(chǎn)品的代碼更容易維護

2 Code Review的前提

知道了 Code Review 的目的,我們就可以看看如何做 Code Review 了,但在做 Code Review 前我們還有事要做,所謂預(yù)則立,不預(yù)則廢,就是說如果在進入 Code Review 之前我們不做些準(zhǔn)備工作, Code Review 很容易就變得沒有意義或是流于形式,這在我們周圍是有很多例子的啊。進入 Code Review 需要檢查的條件如下:

a) ?????? Code Review 人員是否理解了 Code Review 的概念和 Code Review 將做什么

如果做 Code Review 的人員不能理解 Code Review 對項目成敗和代碼質(zhì)量的重要程度,他們的做法可能就會是應(yīng)付了事。

b) ????? 代碼是否已經(jīng)正確的 build , build 的目的使得代碼已經(jīng)不存在基本語法錯誤

我們總不希望高級開發(fā)人員或是主管將時間浪費在檢查連編譯都通不過的代碼上吧。

c) ????? 代碼執(zhí)行時功能是否正確

Code Review 人員也不負責(zé)檢查代碼的功能是否正確,也就是說,需要復(fù)查的代碼必須由開發(fā)人員或質(zhì)量人員負責(zé)該代碼的功能的正確性。

d) ????? Review 人員是否理解了代碼

做復(fù)查的人員需要對該代碼有一個基本的了解,其功能是什么,是拿一方面的代碼,涉及到數(shù)據(jù)庫或是通訊,這樣才能采取針對性的檢查

e) ?????? 開發(fā)人員是否對代碼做了單元測試

這一點也是為了保證 Code Review 前一些語法和功能問題已經(jīng)得到解決, Code Review 人員可以將精力集中在代碼的質(zhì)量上。

3 Code Review 需要做什么

好了,進入條件準(zhǔn)備好了,有人在這些條件中看到 Code Review 這也不負責(zé),那也不檢查,不禁會問, Code Review 到底做什么?其實 Code Review 主要檢查代碼中是否存在以下方面問題:代碼的一致性、編碼風(fēng)格、 代碼的安全問題、代碼冗余、是否正確設(shè)計以滿足需求(性能、功能等等),下邊我們一一道來。以下內(nèi)容參考了 Software Quality Assurance: Documentation and Reviews 》一文中的代碼檢查部分。

3 1 完整性檢查( Completeness

代碼是否完全實現(xiàn)了設(shè)計文檔中提出的功能需求

代碼是否已按照設(shè)計文檔進行了集成和 Debug

代碼是否已創(chuàng)建了需要的數(shù)據(jù)庫 , 包括正確的初始化數(shù)據(jù)

代碼中是否存在任何沒有定義或沒有引用到的變量、常數(shù)或數(shù)據(jù)類型

3.2一致性檢查(Consistency)

代碼的邏輯是否符合設(shè)計文檔

代碼中使用的格式、符號、結(jié)構(gòu)等風(fēng)格是否保持一致

3.3正確性檢查(Correctness)

?????? 代碼是否符合制定的標(biāo)準(zhǔn)

?????? 所有的變量都被正確定義和使用

?????? 所有的注釋都是準(zhǔn)確的

?????? 所有的程序調(diào)用都使用了正確的參數(shù)個數(shù)

3 4 可修改性檢查( Modifiability

?????? 代碼涉及到的常量是否易于修改 ( 如使用配置、定義為類常量、使用專門的常量類等 )

?????? 代碼中是否包含了交叉說明或數(shù)據(jù)字典,以描述程序是如何對變量和常量進行訪問的

?????? 代碼是否只有一個出口和一個入口(嚴重的異常處理除外)

3.5可預(yù)測性檢查(Predictability)

?????? 代碼所用的開發(fā)語言是否具有定義良好的語法和語義

?????? 是否代碼避免了依賴于開發(fā)語言缺省提供的功能

?????? 代碼是否無意中陷入了死循環(huán)

?????? 代碼是否是否避免了無窮遞歸

3.6健壯性檢查(Robustness)

?????? 代碼是否采取措施避免運行時錯誤(如數(shù)組邊界溢出、被零除、值越界、堆棧溢出等)

3.7結(jié)構(gòu)性檢查(Structuredness)

?????? 程序的每個功能是否都作為一個可辯識的代碼塊存在

?????? 循環(huán)是否只有一個入口

3.8可追溯性檢查(Traceability)

?????? 代碼是否對每個程序進行了唯一標(biāo)識

?????? 是否有一個交叉引用的框架可以用來在代碼和開發(fā)文檔之間相互對應(yīng)

?????? 代碼是否包括一個修訂歷史記錄,記錄中對代碼的修改和原因都有記錄

?????? 是否所有的安全功能都有標(biāo)識

3.9可理解性檢查(Understandability)

?????? 注釋是否足夠清晰的描述每個子程序

?????? 是否使用到不明確或不必要的復(fù)雜代碼,它們是否被清楚的注釋

?????? 使用一些統(tǒng)一的格式化技巧(如縮進、空白等)用來增強代碼的清晰度

?????? 是否在定義命名規(guī)則時采用了便于記憶,反映類型等方法

?????? 每個變量都定義了合法的取值范圍

?????? 代碼中的算法是否符合開發(fā)文檔中描述的數(shù)學(xué)模型

3.10可驗證性檢查(Verifiability)

?????? 代碼中的實現(xiàn)技術(shù)是否便于測試

二、 Code Review 經(jīng)驗檢查項

以下是在實踐中建立的檢查列表 checklist ), 通過分類和有針對性的檢查項 , 保證了 Code Review 可以有的放矢。

1 JAVA 編碼規(guī)范方面檢查項

檢查項參照 JAVA 編碼規(guī)范執(zhí)行 , 見《 JAVA 編碼規(guī)范 ( Java Code Conventions )

2 面向?qū)ο笤O(shè)計方面檢查項

這幾點的范圍都很大,不可能在本文展開討論,有專門的書籍介紹這方面問題,當(dāng)然在 Code Review 中主要靠經(jīng)驗來判斷。

A) ?????? 類設(shè)計和抽象是否合適

B) ??????? 是否符合面向接口編程的思想

C) ?????? 是否采用合適的設(shè)計范式

3 性能方面檢查項

性能檢查在大多數(shù)代碼中都是需要嚴重關(guān)注的方面,也是最容易出現(xiàn)問題的方面,常常有程序員寫出了功能和語法沒有絲毫問題的代碼后,正式運行時卻在性能上表現(xiàn)不佳,從而不得不做大量的返工,甚至是推倒重來。

A) ?????? 在海量數(shù)據(jù)出現(xiàn)時,隊列,表,文件,在傳輸,upload等方面是否會出現(xiàn)問題,有無控制,如分配的內(nèi)存塊大小,隊列長度等控制參數(shù)

B) ?????? hashtable,vector等集合類數(shù)據(jù)結(jié)構(gòu)的選擇和設(shè)置是否合適,如正確設(shè)置capacity,load factor等參數(shù),數(shù)據(jù)結(jié)構(gòu)的是否是同步的

C) ?????? 有無濫用String對象的現(xiàn)象

D) ?????? 是否采用通用的線程池、對象池模塊等cache技術(shù)以提高性能

E) ?????? 類的接口是否定義良好,如參數(shù)類型等,避免內(nèi)部轉(zhuǎn)換

F) ?????? 是否采用內(nèi)存或硬盤緩沖機制以提高效率

G) ?????? 并發(fā)訪問時的應(yīng)對策略

H) ?????? I/O方面是否使用了合適的類或采用良好的方法以提高性能(如減少序列化,使用buffer類封裝流等)

I) ???????? 同步方法的使用是否得當(dāng),是否過度使用

J) ???????? 遞歸方法中的疊代次數(shù)是否合適,應(yīng)該保證在合理的??臻g范圍內(nèi)

K) ?????? 如果調(diào)用了阻塞方法,是否考慮了保證性能的措施

L) ??????? 避免過度優(yōu)化,對性能要求高的代碼是否使用profile工具,如Jprobe等

4 資源泄漏處理方面檢查項

? 對于 JAVA 來說由于存在垃圾收集機制,所以內(nèi)存泄漏不是太明顯,但使用不當(dāng),仍然存在內(nèi)存泄漏的問題。而對于其它的語言,如 C++ 等在這方面就要嚴重關(guān)注了。當(dāng)然數(shù)據(jù)庫連接資源不釋放的問題也是廣大程序員最常見的,相信有很多的 PM 被這個問題折磨的死去活來。

A) ?????? 分配的內(nèi)存是否釋放,尤其在錯誤處理路徑上(對非 JAVA 類)

B) ??????? 錯誤發(fā)生時是否所有的對象被釋放,如數(shù)據(jù)庫連接、 Socket 、文件等

C) ?????? 是否同一個對象被釋放多次(對非 JAVA 類)

D) ?????? 代碼是否保存準(zhǔn)確的對象 reference 計數(shù)(對非 JAVA 類)

5 線程安全方面檢查項

線程安全問題實際涉及兩個方面,一個是性能,另一個是資源的一致性,我們需要在這兩方面做個權(quán)衡,現(xiàn)在就是到了權(quán)衡利弊的時候了。

A) ?????? 代碼中所有的全局變量是否是線程安全的

B) ??????? 需要被多個線程訪問的對象是否線程安全,檢查有無通過同步方法保護

C) ?????? 同步對象上的鎖是否按相同的順序獲得和釋放以避免死鎖,注意錯誤處理代碼

D) ?????? 是否存在可能的死鎖或是競爭,當(dāng)用到多個鎖時,避免出現(xiàn)類似情況:線程 A 獲得鎖 1 ,然后鎖 2 ,線程 B 獲得鎖 2 ,然后鎖 1

E) ??????? 在保證線程安全的同時,要注意避免過度使用同步,導(dǎo)致性能降低

6 程序流程方面檢查項

A) ?????? 循環(huán)結(jié)束條件是否準(zhǔn)確

B) ??????? 是否避免了死循環(huán)的產(chǎn)生

C) ?????? 對循環(huán)的處理是否合適,如循環(huán)變量,局部對象,循環(huán)次數(shù)等能夠考慮到性能方面的影響

7 數(shù)據(jù)庫處理方面

很多 Code Review 人員在面對代碼中涉及到的數(shù)據(jù)庫可移植性和提高數(shù)據(jù)庫性能方面的沖突時表現(xiàn)的無所適從,凡事很難兩全其美的啊。

A) ?????? 數(shù)據(jù)庫設(shè)計或SQL語句是否便于移植(注意和性能方面會存在沖突)

B) ?????? 數(shù)據(jù)庫資源是否正常關(guān)閉和釋放

C) ?????? 數(shù)據(jù)庫訪問模塊是否正確封裝,便于管理和提高性能

D) ?????? 是否采用合適的事務(wù)隔離級別

E) ?????? 是否采用存儲過程以提高性能

F) ??????? 是否采用PreparedStatement以提高性能

8 通訊方面檢查項

A) ?????? socket通訊是否存在長期阻塞問題

B) ?????? 發(fā)送接收的數(shù)據(jù)流是否采用緩沖機制

C) ?????? socket超時處理,異常處理

D) ?????? 數(shù)據(jù)傳輸?shù)牧髁靠刂茊栴}

9 JAVA 對象處理方面檢查項

這個檢查項的基礎(chǔ)是對 JAVA 對象有較深的理解,但現(xiàn)實是很多看過《 Thinking in Java 》的程序員,仍然在程序中無法區(qū)分傳值和傳引用,以及對象和 reference 的區(qū)別。這或許就是理論和實踐難以結(jié)合的問題啊。正所謂知而不行,非真知也。

A) ?????? 對象生命周期的處理,是否對象的reference已經(jīng)失效,能夠設(shè)置為null,并被回收

B) ?????? 在對象的傳值和傳參方面有無問題,對象的clone方法使用是否過度

C) ?????? 是否 大量經(jīng)常的創(chuàng)建臨時對象

D) ?????? 是否盡量使用局部對象(堆棧對象)

E) ??????? 在只需要對象reference的地方是否創(chuàng)建了新的對象實例

10 異常處理方面檢查項

JAVA 中提供了方便的異常處理機制,但普遍存在的是異常被捕獲,但并沒有得到處理。我們可以打開一段代碼,最常見的現(xiàn)象是進入某個方法后,一個大的 try/catch 將所有代碼行括住,然后在 catch 中將異常打印到控制臺,而且該異常是 Exception 對象。

A) ?????? 每次當(dāng)方法返回時是否正確處理了異常,如最簡單的處理,記錄日志到日志文件中

B) ??????? 是否對數(shù)據(jù)的值和范圍是否合法進行校驗,包括采用斷言( assertion

C) ?????? 在出錯路徑上是否所有的資源和內(nèi)存都已經(jīng)釋放

D) ?????? 所有拋出的異常都得到正確的處理,特別是對子方法拋出的異常,在整個調(diào)用棧中必須能夠被捕捉并處理

E) ??????? 當(dāng)調(diào)用導(dǎo)致錯誤發(fā)生時,方法的調(diào)用者應(yīng)該得到一個通知

F) ??????? 不要忘了對錯誤處理部分的代碼進行測試,很多代碼在正常情況下執(zhí)行良好,而一旦出錯,整個系統(tǒng)就崩潰了

11 方法(函數(shù))方面檢查項

A) ?????? 方法的參數(shù)是否都做了校驗

B) ??????? 數(shù)組類結(jié)構(gòu)是否做了邊界校驗

C) ?????? 變量在使用前是否做了初始化

D) ?????? 返回堆對象的 reference ,不要返回棧對象的 reference

E) ??????? 方法 API 是否被良好定義,即是否盡量面向接口編程,便于維護和重構(gòu)

12 安全方面檢查項

A) ?????? 對命令行執(zhí)行的代碼,需要詳細檢查命令行參數(shù)

B) ??????? WEB 類程序檢查是否對訪問參數(shù)進行合法性驗證

C) ?????? 重要信息的保存是否選用合適的加密算法

D) ?????? 通訊時考慮是否選用安全的通訊方式

13 其他

A)????? 日志是否正常輸出和控制

B) ??????? 配置信息如何獲得,是否有硬編碼

三、 總結(jié)

通過在項目中實施 Code Review 將為我們帶來多方面的好處,表現(xiàn)在提高代碼質(zhì)量,保證項目或產(chǎn)品的穩(wěn)定性,開發(fā)經(jīng)驗的積累等,具體的實施當(dāng)然也要看項目的實際情況,因為 Code Review 也是需要成本的,這方面屬于 Code Review 過程的問題,將在其他文章中進行探討。

四、 參考資料

Java 語言編碼規(guī)范 (Java Code Conventions)? SUN

Software Quality Assurance: Documentation and Reviews? Dolores R. Wallace,Wendy W. Peng, Laura M. Ippolito

快速軟件開發(fā) 斯蒂夫 電子工業(yè)出版社

五、 關(guān)于作者

陳建華 , 從事移動互聯(lián)方面的應(yīng)用開發(fā) , 郵件地址 : cqbbs@yeah.net

posted on 2006-07-11 11:57 楊粼波 閱讀(1276) 評論(1)  編輯 收藏 引用 所屬分類: 文章收藏

評論

# re: Code Review 理論與實戰(zhàn) 2006-07-12 15:53 Stone Jiang

好文章  回復(fù)  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲免费影视| 欧美国产日本高清在线| 日韩视频二区| 国产精品白丝av嫩草影院| 亚洲婷婷国产精品电影人久久| 亚洲精品国产精品久久清纯直播 | 久久久天天操| 麻豆成人综合网| 一本色道久久99精品综合| 99视频精品| 国产伦精品一区二区三区视频黑人| 欧美一级午夜免费电影| 久久精品国产亚洲精品| 最新国产の精品合集bt伙计| 日韩视频在线一区二区| 一本久道久久综合中文字幕 | 欧美+日本+国产+在线a∨观看| 亚洲精品国产精品国自产观看浪潮| 亚洲区一区二区三区| 国产精品区免费视频| 免费成人网www| 欧美视频官网| 美女视频黄免费的久久| 欧美日韩一区精品| 老色鬼久久亚洲一区二区| 欧美日韩ab| 蜜桃av噜噜一区| 国产精品对白刺激久久久| 久久久午夜精品| 欧美少妇一区| 女生裸体视频一区二区三区| 国产精品视频xxxx| 亚洲国产视频a| 国产午夜精品福利 | 亚洲欧美资源在线| 开元免费观看欧美电视剧网站| 亚洲午夜伦理| 欧美精品一区二区三区很污很色的 | 国产日产欧美a一级在线| 欧美电影免费观看高清| 国产伦精品一区二区三区高清版| 国产精品人人做人人爽| 亚洲国产影院| 在线精品观看| 欧美在线国产| 性做久久久久久免费观看欧美| 欧美成人精品一区二区三区| 久久亚洲高清| 国产视频观看一区| 一区二区国产在线观看| 亚洲精品中文字| 美女露胸一区二区三区| 另类激情亚洲| 伊人久久男人天堂| 久久riav二区三区| 久久精品国产99精品国产亚洲性色| 欧美日韩国产欧美日美国产精品| 欧美国产亚洲精品久久久8v| 亚洲高清激情| 美女国产一区| 欧美激情一区二区三区全黄| 亚洲成色www8888| 久热精品视频在线观看| 裸体女人亚洲精品一区| 在线观看日韩av电影| 麻豆91精品91久久久的内涵| 免费永久网站黄欧美| 亚洲电影成人| 蜜臀91精品一区二区三区| 欧美大胆人体视频| 亚洲人成毛片在线播放| 欧美激情亚洲视频| 妖精视频成人观看www| 亚洲午夜av电影| 国产精品久久久久久久9999 | 国产精品丝袜xxxxxxx| 亚洲尤物在线视频观看| 午夜伦欧美伦电影理论片| 欧美一区二区三区四区视频| 国产乱理伦片在线观看夜一区| 亚洲小说欧美另类社区| 久久精品一区二区三区不卡牛牛| 国产一区二区成人| 玖玖视频精品| 中日韩高清电影网| 久久久久久久尹人综合网亚洲| 狠狠爱综合网| 欧美日韩成人激情| 亚洲欧美综合一区| 亚洲电影免费观看高清| 亚洲小说春色综合另类电影| 国产在线一区二区三区四区| 另类图片国产| 一区二区三区国产精品| 久久婷婷丁香| 亚洲视频中文字幕| 国内伊人久久久久久网站视频| 裸体一区二区| 午夜国产精品影院在线观看| 欧美va天堂在线| 午夜精品久久久久久久蜜桃app| 亚洲成人在线网| 欧美三级午夜理伦三级中文幕 | 亚洲社区在线观看| 久久影院午夜论| 欧美在线观看一区| 日韩网站在线看片你懂的| 久久久久国产一区二区三区四区| 亚洲开发第一视频在线播放| 国产三级欧美三级日产三级99| 欧美va亚洲va日韩∨a综合色| 亚洲午夜极品| 亚洲精品乱码久久久久久| 久久免费一区| 亚洲欧美在线观看| 一区二区三区国产精华| 亚洲国产黄色片| 国产一区二区三区在线播放免费观看| 欧美精品免费播放| 麻豆国产精品777777在线| 欧美一区二区成人| 在线综合视频| 91久久久国产精品| 欧美激情精品久久久久久黑人| 久久国产加勒比精品无码| 亚洲一区二区三区四区五区午夜| 91久久在线观看| 一区在线播放视频| 国精品一区二区| 国产伦精品一区二区三区四区免费| 欧美日韩精品三区| 欧美激情成人在线| 欧美成人r级一区二区三区| 久久精品成人| 欧美自拍偷拍| 欧美一区二区三区免费大片| 亚洲一区二区视频| 中日韩在线视频| 亚洲视频日本| 亚洲在线观看视频网站| 亚洲一区二区在线视频| 亚洲视频在线观看免费| 中文日韩欧美| 亚洲尤物在线| 久久久九九九九| 久久精品一区二区国产| 久久久精品日韩欧美| 欧美日韩综合在线| 欧美日韩视频在线第一区| 欧美日韩亚洲一区在线观看| 欧美三级中文字幕在线观看| 国产精品久久久久aaaa| 国产欧美精品xxxx另类| 韩国一区电影| 亚洲国产精品999| 夜夜嗨av一区二区三区网站四季av | 欧美日韩精品| 国产精品久久久久高潮| 国产欧美va欧美va香蕉在| 国产在线观看一区| 尤物在线精品| 99国产精品久久久久久久成人热| 一本到高清视频免费精品| 亚洲免费在线| 久久久在线视频| 亚洲日本成人网| 亚洲女性喷水在线观看一区| 久久精品国产一区二区三区免费看| 久久蜜桃资源一区二区老牛 | 亚洲视频一区在线观看| 久久精品一区二区三区不卡牛牛| 麻豆91精品| 国产精品第2页| 亚洲第一天堂无码专区| 亚洲午夜精品久久久久久浪潮| 久久成人精品电影| 欧美激情在线狂野欧美精品| 激情国产一区| 亚洲天堂视频在线观看| 蜜臀va亚洲va欧美va天堂| 一区二区三区免费观看| 久久久精品网| 国产精品久久二区| 极品少妇一区二区| 亚洲综合丁香| 欧美国内亚洲| 欧美一区二区啪啪| 欧美三级电影网| 亚洲精品久久久久久久久久久| 欧美一区二区三区四区高清 | 久久精品99无色码中文字幕| 亚洲毛片网站| 免费影视亚洲| 国内欧美视频一区二区| 午夜精品国产更新| 亚洲片在线观看| 久久综合久久久| 国产婷婷色综合av蜜臀av| 亚洲午夜在线视频| 亚洲黄色免费电影|