代碼走查和代碼審查是白盒測(cè)試方法中的2種。
代碼走查:
從參加人員來(lái)說(shuō),應(yīng)該是項(xiàng)目的整體參與者,如果項(xiàng)目太大,整體參加的成本很高,那么可以以模塊為組進(jìn)行走查。因?yàn)樗麄冎g負(fù)責(zé)的業(yè)務(wù)是緊密相關(guān)的,使用的技術(shù)是接近程度比較大的,因而開發(fā)的規(guī)范應(yīng)該是統(tǒng)一的。
從走查內(nèi)容來(lái)說(shuō),應(yīng)該是代碼的命名規(guī)范,以及組織結(jié)構(gòu)。每個(gè)項(xiàng)目都有自己的規(guī)范,但是如果項(xiàng)目?jī)?nèi)部使用不同的規(guī)范必然會(huì)增加發(fā)現(xiàn)問(wèn)題、解決問(wèn)題的難度,同時(shí)增加后期的維護(hù)成本。
從走查時(shí)間來(lái)說(shuō),應(yīng)該在每個(gè)模塊開發(fā)完成之后進(jìn)行,便于開發(fā)人員之間交流問(wèn)題以及體會(huì),并且每個(gè)人的講解時(shí)間不要超過(guò)30分鐘,因?yàn)槟K的業(yè)務(wù)復(fù)雜度不會(huì)那么復(fù)雜,30分鐘都講不清的業(yè)務(wù)邏輯如何保證代碼是清晰的。
從走查的結(jié)果來(lái)說(shuō),經(jīng)過(guò)走查的代碼應(yīng)該是參加成員大部分能認(rèn)同的,并且參加者每個(gè)人都能讀懂的邏輯清晰的代碼,并且通過(guò)交流提高項(xiàng)目成員的凝聚力,提高其業(yè)務(wù)認(rèn)知度,最好能形成項(xiàng)目之間可以共同使用的產(chǎn)品。
序號(hào)檢查項(xiàng)
1代碼的注釋與代碼是否一致?注釋是否是多余的?
2是否存在超過(guò)3層嵌套的循環(huán)與/或判斷?
3變量的命名是否代表了其作用?
4所有的循環(huán)邊界是否正確?
5所有的判斷條件邊界是否正確?
6輸入?yún)?shù)的異常是否處理了?
7程序中所有的異常是否處理了?
8是否存在重復(fù)的代碼?
9是否存在超過(guò)20行的方法?
10是否存在超過(guò)7個(gè)方法的類?
11方法的參數(shù)是否超過(guò)3個(gè)?
12是否有多種原因?qū)е滦薷哪硞€(gè)類?
13當(dāng)發(fā)生某個(gè)功能變化時(shí),是否需要修改多個(gè)類?
14代碼中的常量是否合適?
15一個(gè)方法是否訪問(wèn)了其他類的多個(gè)屬性?
16某幾項(xiàng)數(shù)據(jù)是否總是同時(shí)出現(xiàn),而又不是一個(gè)類的屬性?
17switch語(yǔ)句是否可以用類來(lái)替代?
18是否有一類的職責(zé)很少?
19是否有一個(gè)類的某些屬性或者方法沒(méi)有被其他類所使用?
20在類的方法中是否存在如下的調(diào)用形式:a.b().c()?
21是否某個(gè)類的方法總是調(diào)用另外一個(gè)類的同名方法?
22是否某個(gè)類總是訪問(wèn)另外一個(gè)類的屬性與方法?
23是否兩個(gè)類完成了類似的工作,使用了不同的方法名,卻沒(méi)有擁有同一個(gè)父類?
24是否某個(gè)類僅有字段和簡(jiǎn)單的賦值方法與取值方法構(gòu)成?
25是否某個(gè)子類僅使用了父類的部分屬性或方法?
代碼審查:
代碼走查(code walkthrough)和代碼審查(code inspection)是兩種不同的代碼評(píng)審方法,
代碼審查是一種正式的評(píng)審活動(dòng),而代碼走查的討論過(guò)程是非正式的。
最近對(duì)項(xiàng)目組進(jìn)行代碼評(píng)審,發(fā)覺(jué)需要對(duì)代碼評(píng)審中找到的問(wèn)題進(jìn)行一下分類,大概可以分成以下幾類問(wèn)題:
1. Comment
注釋沒(méi)寫,或者格式不對(duì),或者毫無(wú)意義
2. Coding Standard
沒(méi)遵守代碼規(guī)范
3. Existing Wheel
重復(fù)現(xiàn)成的代碼,或者是開源項(xiàng)目,或者公司已有代碼
4. Better practice
Java或者開源項(xiàng)目,有更好的寫法
5. Performance bottle and Improvement
性能瓶頸和提高
6. Code Logic Error
代碼邏輯錯(cuò)誤
7. Business Logic Error
業(yè)務(wù)邏輯錯(cuò)誤
代碼審查列出問(wèn)題的類型,并有解決情況報(bào)告
一般情況代碼走查有專門的工具比如:emma,該工具使用與大型項(xiàng)目,為開源的,代碼走查完畢之后需要對(duì)結(jié)論給出一個(gè)代碼走查報(bào)告。