代碼檢查的錯誤列表

o1.數據引用錯誤
n變量使用前是否賦值或初始化?

  容易引起變量使用錯誤,特別是對於指針或引用變量。

  在java中要求變量在使用前必須初始化。

n數組下標的範圍和類型

  是否存在下標越界錯誤,下表類型是否爲整型。

n通過指針引用的內存單元是否存在(虛調用)?

  如在函數返回局部變量的指針或引用時會產生虛調用錯誤。

n被引用的變量或內存的屬性是否與編譯器預期的一致?

  如A類型的指針或引用是否指向的是非A類型對象。

o2.數據聲明錯誤
n是否所有變量都已聲明?

  絕大多數編程語言要求變量先定義後使用,可保證變量使用的安全性。

n默認的屬性(默認值)是否正確? 
n變量的初始化是否正確?變量的初始化是否與其存儲空間的類型一致?
n是否每個變量都有正確的長度、類型和存儲類別?
n是否存在相似名稱的變量?
o3.運算錯誤
n是否存在非算術變量之間的運算?
n是否存在混合模式的運算?( int與float類型)
n是否存在不同字長變量之間的運算?(int與long類型)
n目標變量大小是否小於所賦值的大小?(精度損失或越界錯誤)
n中間結果是否上溢或下溢?
n是否存在除0錯誤?
n操作符的優先順序是否正確?
n整數除法是否正確?(精度問題,如2*(i/2)==i)

int x =1;

int y =2;

float z = 0;

z = x/y;

System.out.println ("z = " z);

OUTPUT:

z = 0

o

o4.比較錯誤
n是否有不同類型數據的比較運算?(如日期與數字)
n是否有混合模式或不同長度數據的比較運算?
n比較運算符是否正確?(如至多、至少,不小於)
n布爾表達式(與、或、非)是否正確?
n比較運算符是否與布爾表達式相混合?(如2<i<10對嗎?)
n是否存在浮點數的比較?
n優先順序是否正確?(例如if((a==2) &&(b==2) || (c==3))
n布爾表達式的計算方式(例如 if((x==0 && (y/x)>z))
n
o5.控制流程錯誤
n是否所有循環都能終止?(循環結束條件是否能滿足以及遞歸的終止條件是否能滿足。)
n是否存在由於入口條件不滿足而跳過循環體?(do-while循環)
n是否存在僅差一個的循環錯誤?(如for(int i=0;i<=10;i++){})
n程序結構中括號是否匹配、if,else是否匹配、do,while是否匹配、try,catch是否匹配等。

for (i==x ; i<=z; i++) {

...

}

while (NOTFOUND) {

...

}


o6.接口錯誤
n形參和實參的數量是否相等?
n形參的屬性是否與實參的屬性相匹配?
n形參的屬性是否與實參的順序相匹配?
n形參的單位是否和實參匹配?(屬邏輯錯誤)
n是否改變了某個僅作爲輸入值的形參?(C++中的const關鍵字)
n全局變量的定義是否一致?
o7.輸入輸出錯誤
n文件屬性是否正確?
n打開文件的語句是否正確?
n緩衝區、內存大小是否足夠來保留程序將讀取的文件?
n文件在使用前是否打開?
n文件在使用後是否關閉了?
n文件結束條件是否本正確處理?
n是否處理了IO錯誤?
n打印或輸出的文本信息中是否存在拼寫或語法錯誤?即輸出結果正確性。

o8.其他檢查
n是否存在未引用過的變量?
n每個變量的屬性和賦予的默認值是否一致?
n編譯通過的程序是否存在“警告”或“提示”信息?
n程序或模塊是否對輸入的合法性進行了檢查?(如第一章中三角形例)
n程序是否遺漏了某個功能?

o代碼走查和代碼檢查類似,都是以小組爲單位進行代碼閱讀,是一系列規程和錯誤檢查技術的集合。二者的過程大致相同,不同之處在於
n規程稍微不同
o走查會議期間,每個測試用例都在人們腦中推演,即把測試的數據沿着程序的邏輯結構走一遍,記錄程序的狀態供監視,很多錯誤是在向程序員提問的過程中發現的。
o其他與代碼檢查相同的地方
n參與者所持的態度同樣非常關鍵
n代碼走查也會帶來同樣的附帶作用















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章