- 軟件測試的藝術(原書第3版)
- (美)Glenford J.Myers Tom Badgett Corey Sandler
- 701字
- 2021-01-14 16:50:43
3.3.4 比較錯誤
1.是否有不同數據類型的變量之間的比較運算,例如,將字符串與地址、日期或數字相比較?
2.是否有混合模式的比較運算,或不同長度的變量間的比較運算?如果有,應確保程序能正確理解轉換規則。
3.比較運算符是否正確?程序員經常混淆“至多”、“至少”、“大于”、“不小于”、“小于”和“等于”等比較關系。
4.每個布爾表達式所敘述的內容是否都正確?在編寫涉及“與”、“或”或“非”的表達式時,程序員經常犯錯。
5.布爾運算符的操作數是否是布爾類型的?比較運算符和布爾運算符是否錯誤地混在了一起?這是一類經常會犯的錯誤,這里我們描述幾個典型錯誤的例子:
·如果想判斷i是否在2~10之間,表達式2<i<10是不正確的;相反,正確的應該是(2<i)&&(i<10)。
·如果想判斷i是否大于x或y,表達式i>x||y也是不正確的,正確的應該是(i>x)||(i>y)。
·如果要比較三個數字是否相等,表達式if(a==b==c)的實際意思卻大相徑庭。
·如果需要驗證數學關系x>y>z,正確的表達式應該是
6.在二進制的計算機上,是否有用二進制表示的小數或浮點數的比較運算?由于四舍五入,以及用二進制表示十進制數的近似度,這往往是錯誤的根源。7.對于那些包含一個以上布爾運算符的表達式,賦值順序以及運算符的優先順序是否正確?也就是說,如果碰到如同(if((a==2)&&(b==2)||(c==3))的表達式,程序能否正確理解是“與”運算在先還是“或”運算在先?
8.編譯器計算布爾表達式的方式是否會對程序產生影響?例如,語句if((x==0&&(x/y)>z)對于有的編譯器來說是可接受的,因為其認為一旦“與”運算符的一側為FALSE時,另一側就不用計算;但是對于其他編譯器來說,卻可能引起一個被0除的錯誤。
推薦閱讀
- PHP動態網站程序設計
- Learning LibGDX Game Development(Second Edition)
- INSTANT OpenCV Starter
- Python程序設計(第3版)
- BeagleBone Media Center
- 微信公眾平臺開發:從零基礎到ThinkPHP5高性能框架實踐
- Scala for Machine Learning(Second Edition)
- Unity 3D/2D移動開發實戰教程
- 區塊鏈架構之美:從比特幣、以太坊、超級賬本看區塊鏈架構設計
- Oracle Data Guard 11gR2 Administration Beginner's Guide
- 會當凌絕頂:Java開發修行實錄
- Oracle SOA Suite 12c Administrator's Guide
- Android開發進階實戰:拓展與提升
- 分布式系統架構與開發:技術原理與面試題解析
- PhantomJS Cookbook