標籤:
同伴個人代碼複審結果
一、一般性檢查
1、代碼能夠正常運行,基本可以實現預定功能,沒有大的邏輯錯誤。
2、代碼結構非常清晰,模組化做得很好,很好地運用了物件導向的編程思想,容易閱讀和理解。
3、關於字串的匹配可以用庫函數中的Regex來進行,當然可能在字串比較長的時候,Regex會棧溢出,或者效率很低。
4、沒有出現多餘的調試代碼。
5、代碼的風格比較規範,縮排、換行、變數命名都遵守一般性的約定。
二、安全性檢查
1、對輸入的資料格式不合法的情況下,有些時候不能正確地識別。
2、當出現命令列參數不匹配的時候,拋出了異常,避免程式崩潰。
三、文檔和注釋
1、沒有協助文檔,但是有簡要的注釋。
2、通過與程式作者交流,可以得知每一段代碼的功能。
四、測試
1、有代碼測試模組。
2、測試案例偏少,不能覆蓋很多極端情況,代碼的覆蓋率不高。
五、發現的已知bug
1、
public static bool operator >(Number a, Number b) { if (a < b) return false; else return true; }
這一段中判斷條件有誤,應該改為(a < b || a == b)
2、不能產生形如(1 + 2) * (3 + 4)= 這樣的式子,該問題並非是編碼的錯誤,而是在演算法設計的層面上主動規避了這樣一種情況。作者的意圖是先產生一個算式的尾碼運算式,然後將其轉換為中綴運算式,作者用了一個變數t來記錄當前的優先順序,一旦優先順序達到了二級優先順序,作者就不再產生+和-符號,因此有些合法的情況作者不能產生。所以,可能極端的情況就是由於捨棄了某些情況,不能完整地根據參數產生足夠的不重複的算式。
3、作者為了避免被0除的情況,限制所有的數為正數,而題目要求允許產生0。
六、可做的最佳化
Number result = new Number(); int tdown = a.down * b.down / IntNum.gcd(a.down,b.down); int t1 = b.down / IntNum.gcd(a.down, b.down); int t2 = a.down / IntNum.gcd(a.down, b.down);
這一段代碼中 IntNum.gcd(a.down,b.down) 作為一個函數的返回結果,在三次計算中值完全相同,因此可以用一個臨時變數進行儲存,避免三次調用函數,如果該段代碼被反覆執行,那麼最佳化後的效率會大大提高。
七、總結
本程式作者的代碼風格和代碼邏輯十分規範,編程思路也很清晰,體現出較高的編程水平,值得筆者學習。
同伴個人代碼複審結果