避免程式Bugs

weixin_34249678發表於2017-09-10

避免Bugs

  1. 使用靜態和動態檢測以及不可改變性
  2. 開啟斷言減少程式bug
  3. 迭代式開發,(單元測試和迴歸測試)
  4. 模組化和封裝化

什麼時候開啟斷言

  • 方法的引數
/**
 * @param x  requires x >= 0
 * @return approximation to square root of x
 */
public double sqrt(double x) { 
    assert (x >= 0)):"x is" + x;
  }
  • 方法的返回值
public double sqrt(double x) {
    assert x >= 0;
    double r;
    ... // compute result r
    assert Math.abs(r*r - x) < .0001;
    return r;
}
  • 覆蓋所有的可能

如果if和switch沒有覆蓋所有的可能,可以使用斷言來阻塞不合法的可能

switch (vowel) {
  case 'a':
  case 'e':
  case 'i':
  case 'o':
  case 'u': return "A";
  default: assert false;
}

關閉斷言的情況

  1. 不要使用斷言來測試外部的變數(如外部檔案是否存在、網路是否可用、使用者的輸入是否正確)
  2. 測試時需要開啟斷言,給使用者的時候關閉。

模組化和封裝化

  • 變數的範圍應該最小化
  • 宣告迴圈的變數應該在迴圈內宣告
  • 在變數要使用的地方宣告
  • 避免全域性變數

相關文章