上週發佈了一個版本供公司內部同事來測試。有人發現了這麼一個bug,副本列表的界面上,剩餘進入次數變成了負數,有的爲-1,有的-2。
典型的一個解決方案,判斷兩數相減的結果如果小於0,就等於0。好嘛,典型的頭疼醫頭,腳疼醫腳。
之所以要請一個好的Debug大師,就是要避免這種止疼而不治疼的debug方案執行。好的程序員會使所有代碼正確運行,普通的程序員追求的是代碼看上去不出錯。
說完信念,就說這個bug是怎麼解決掉的。
兩數相減爲負,很明顯是一個小數減了大數。一開始,我以爲是已經進入次數的自增超過了可進入次數,是不是有進入副本增加次數 不在檢查可進入次數這個條件之下。排查了一遍,沒有。難道是被減數變小了?可進入次數應該是一個不變的量。等等,購買特權會使可進入次數變多。難道在特權模式下進入了N次,後來特權失去,可進入次數又變回了原來的數值。好嘛,現在真成了一個小數減去大數了。
我在異常日誌裏面了找到了一個有關特權保存到數據庫的異常,這個異常的用戶主體就是報bug的同事。
要使所有代碼正確運行,不追求代碼看上去不出錯。