處理用戶回饋的錯誤
有些 bug 是上線後才被用戶發現,通常這表示我們的思考不夠周延,但進行亡羔補牢的工作也為時不晚。
當用戶回報 bug 後,除了重現 bug 之外,我們也需要確保它未來不會再發生。
用戶回報的 bug
在用戶操作我們的程式數次之後,他發現了以下的結果:
原因就在於他把所有商品數量都改成 0 之後再送出,就發現出現了不應該出現的運費。
當然如果是按照規格來實作與驗收時,是不應該出現這個 bug 的。但可能因為我們的疏忽,而導致了它的出現。
所以我們應該要修正它,以下是處理的方式。
針對 bug 撰寫測試
當我們接收到問題時,第一步該做的,就是寫一個測試來驗證它。
首先我們在 CartTest::provider
方法中,加入一組數量和總計都為 0 的測試數據:
public function provider()
{
return [
// ... 略
[ [ 0, 0, 0, 0, 0, 0 ], 0 ],
];
}
接著執行測試:
C:\project> phpunit
PHPUnit 4.2.6 by Sebastian Bergmann.
Configuration read from C:\project\phpunit.xml
..F....
Time: 568 ms, Memory: 8.00Mb
There was 1 failure:
1) CartTest::testUpdateQuantitiesAndGetTotal with data set #2 (array(0, 0, 0, 0,
0, 0), 0)
Failed asserting that 20 matches expected 0.
C:\project\tests\CartTest.php:27
FAILURES!
Tests: 7, Assertions: 8, Failures: 1.
果然發生了非預期的結果,這表示我們的程式碼確實有邏輯上的錯誤。回頭檢查了 Cart::updateQuantities
方法,發現我們判斷總金額來加入運費的邏輯沒有考慮到總金額為 0 的狀況。
if ($this->total < 500) {
// ... 略
}
修正如下:
if ($this->total > 0 && $this->total < 500) {
// ... 略
}
再執行一次測試,就會發現測試成功了, bug 宣告解決。
練習
思考看看,除了運費的 bug 外,還有沒有其他 bug ?
思考看看,有沒有什麼方法可以預先防止這種 bug 發生?