今早看的書中提到,小型測試一般用來發現單一代碼錯誤,其中大小差一錯誤即是其中一種。
問題:什么是大小差一錯誤呢?
就是指某個變量的最大值和最小值可能會和正常值差1,或者循環多執行一次/少執行一次。
這是一類常見的程序設計錯誤。
例子一:
int a[5],i;
for(i = 1;i <= 5;i++)
? ? a[i]=0;
上述代碼定義了長度為5的數組a,循環的目的是給數組元素初始化,賦值為0.但是,循環下標從1開始到5,出現了a[5]=0,這樣的不存在的數組元素.這就是典型的“差一錯誤”(off-by-one).
有些人會說,作為老司機。。。哦,不,經驗豐富的coder,我怎么會犯如此低級的錯誤呢?
那么我們繼續看一個數學題:
如果你要建造一個100米長的柵欄,其柵欄柱間隔為10米,那么你需要多少根柵欄柱呢?
如果答10可以去面壁了。
答案:11根或9根都是正確答案。
因為:從M到N,一共有 M-N+1 項.
這個問題寫出來后很簡單,只不過在寫代碼的時候,往往比較容易忽略。尤其在涉及到數組操作兩端界限的時候,如果不是從0開始計數,就要稍微考慮一下咯。
以上的公式背下來很簡單,實際工作中往往需要考慮用戶層次問題,而不是簡單的進行技術實現。
考慮用戶的want,而不是僅僅滿足用戶的need。
例如之前驗收一個需求,是希望通過從整點開始累計訪問次數,以圖形的方式呈現每個時段的訪問量。類似以下圖形:
圖片發自簡書App
數據計算沒有問題,但是存在以下現象:
整點過后訪問量必須在下一個整點才能體現,例如2:20如果有大量的訪問,到3點的圖形才能刷新數據。
這就有疑問了,如果用戶需要根據訪問量進行閾值控制,這種圖形顯示方式遠遠滯后風暴發生點。開發人員需要根據用戶的使用場景調整呈現圖的時間取值范圍。