提高你的Java程式碼質量吧:危險的邊界
阿新 • • 發佈:2019-01-23
一、分析
在單元測試中,有一項測試叫做邊界測試(也有叫做臨界測試),它能避免出現:數字越界使檢驗條件失效。
如果一個方法接受的是Int型別的引數,那一些三個值是必須的:0、正最大、負最大、其中正最大和負最大是邊界值,如果這三個值都沒有問題,方法才是比較安全可靠的。
二、場景
某生產的電子產品非常暢銷,需要提前30天預訂才能搶到手,同時它還規定了一個會員可擁有的最多產品數量,方式囤積壓貨肆意加價。
程式碼如果如下:
public class Clinet{ //一個會員擁有的最多數量 pubilc final static int LIMIT = 2000; public static void main(String[] args){ //會員當前擁有的產品數量 int cur = 1000; Scanner input = new Scanner(System.in); System.out.println("請輸入需要預訂的數量:"); while(input.hasNextInt()){ int order = input.nextInt(); //當前擁有的與準備訂購的產品的數量之和 if(order > 0 && order + cur <= LIMIT){ System.out.println("你已經成功預訂的" + order + "個產品"); }else{ System.out.println("超限額,預訂失敗!"); } } } }
業務邏輯非常簡單,但是經過自動化測試兩小時後,出現了異常的結果:
請輸入要需要預訂的數量:2147483647
你已經成功預訂的2147483647個產品!
看著2147483647這個數字很眼熟,它是int型別的最大值。當如數order是2147483647時,order+cur就超越了int的範圍,結果是-2147482649,orfer+cur<2000與order>0的條件就成立了。故由於:數字越界使檢驗條件失效。
三、建議
在測試過程中,必須要注意臨界測試的重要性。避免越界導致的問題,保證程式的的安全可靠。
新技術,新未來!歡迎大家關注“1024工場”微信服務號,時刻關注我們的最新的技術訊息!