在白盒測試時需要代碼檢查,在代碼檢查中有一份錯誤列表作為參考,更容易發(fā)現(xiàn)程序是否存在常見錯誤。代碼檢查錯誤主要類型如下:數(shù)據(jù)引用錯誤、數(shù)據(jù)聲明錯誤、運(yùn)算錯誤、比較錯誤、控制流程錯誤、接口錯誤、輸入/輸出錯誤、其他檢查。
數(shù)據(jù)引用錯誤
- 是否有引用的變量未賦值或未初始化?
- 下標(biāo)的值是否在范圍之內(nèi)。
- 是否存在非整數(shù)下標(biāo)?
- 當(dāng)使用別名是屬性是否正確?
- 記錄和結(jié)構(gòu)的屬性是否匹配?
- 基礎(chǔ)的存儲屬性是否正確?
- 索引或下標(biāo)操作是否有“僅差一個”的錯誤?也就是說,是否能正確獲取數(shù)組第一個數(shù)和數(shù)組最后一個數(shù)。
- 對于對象語言,繼承需求是否得滿足?
數(shù)據(jù)聲明錯誤
是否所有的變量都已聲明?
默認(rèn)的屬性是否被正確理解?
數(shù)組和字符串的初始化是否正確?
變量是否賦予了正確的長度、類型?
初始化是否與存儲類相一致?
是否有相似的變量名?
運(yùn)算錯誤
- 是否存在不一致數(shù)據(jù)類型(如非算術(shù)變量間)的運(yùn)算?
- 是否錯在混合模式的運(yùn)算?如浮點變量與一個整型變量做運(yùn)算。
- 是否存在相同數(shù)據(jù)類型、不同字長變量間的運(yùn)算?
- 目標(biāo)變量的大小是否小于右邊表達(dá)式結(jié)果?
- 中間結(jié)果是否上溢或下溢? 也就是說,最終的結(jié)果看起來是個有效值,但中間結(jié)果對于編程語言的數(shù)據(jù)類型可能過大或者過小。
- 是否存在被0除?
- 是否存在二進(jìn)制的不精確度?
- 變量的值是否超過了有意義的范圍?
- 操作符的優(yōu)先順序是否被正確理解?
- 整數(shù)運(yùn)算是否有使用不當(dāng)
比較錯誤
- 是否存在不同類型變量間的比較?例如字符串與日期相比較。
- 是否存在混合模式的比較運(yùn)算,或不同長度的變量的比較運(yùn)算?例如整型和浮點型相加減。
- 比較運(yùn)算符是否正確?”至多“、”至少“、”大于“、"小于"、”等于”等比較關(guān)系
- 布爾表達(dá)式所敘述的內(nèi)容是否正確?涉及到“與”、“或”、”非“的表達(dá)式
- 比較運(yùn)算是否與布爾表達(dá)式相混合?例如判斷a、b、c是否相等,在數(shù)學(xué)判斷方法:a== b == c,而在編寫實際是 (a== b )&&( b ==c)
- 是否存在二進(jìn)制小數(shù)的比較?
- 操作符的優(yōu)先順序是否被正確理解?
- 區(qū)分&和&&區(qū)別。
?
控制流程錯誤
- 是否超出了多條分支路徑?
- 是否每個循環(huán)都終止了?
- 是否某個程序都終止了?
- 是否存在有入口條件不滿足而跳過循環(huán)體?
- 可能的循環(huán)越界是否正確?
- 是否存在“僅差一個”的迭代錯誤?迭代數(shù)量恰恰多一次或少一次?
- 在語句組或代碼塊的括號位置是否正確。
- 是否存在不能窮盡的判斷?
接口錯誤
- 形參的數(shù)量是否等于實參的數(shù)量?
- 形參的屬性是否與實參的屬性相匹配?
- 傳遞給被調(diào)用模塊的實參個數(shù)是否等于其形參個數(shù)?
- 調(diào)用內(nèi)置函數(shù),實參的數(shù)量、屬性、順序是否正確?
輸入/輸出錯誤
- 文件屬性是否正確?
- OPEN語句是否正確?
- I/O語句是否符合格式規(guī)范?
- 緩沖大小與記錄大小是否匹配?
- 文件在使用前是否打開?
- 文件在使用后是否關(guān)閉?
- 文件結(jié)束條件是否別正確處理?
- 是否處理I/O錯誤?
其他檢查
- 在交叉引用列表中是否存在未引用過的變量。
- 屬性列表是否與預(yù)期的相一致?
- 是否存在“警告”或“提示“信息?
- 是否對輸入的合法性進(jìn)行了檢查?
結(jié)語
文中列出常見檢查清單,列出共性問題,讀者把自己使用編程語言中特有錯誤加入到列表中,日后不斷完善。