2019年11月20日 星期三

code review筆記



最終目標: 讓code base越來越好

  1. 符合各檢查項目,且能改善code base就可以進
  2. 避免code base越來越亂,越來越難maintain,越來越想打掉重來

我自己review的重點

  1. 目標功能合不合理
    1. 其實開ticket與前期討論時應該就要做好
  2. 是否達到目標功能
  3. 整體架構是否合適並簡單明瞭
    1. 各component間的介面完善且清楚
    2. 各component各司其職,盡量減少耦合度
  4. 實作的細節:
    1. 不硬性規定developer 的寫法,但須確保
      1. 易讀
        1. 邏輯清晰明瞭,不要用隱晦或容易造成誤解的寫法
        2. 避免使用特殊tricky 用法
          1. 例如特殊技巧或特殊compiler特性
          2. 若真的要用到,需提出討論並做完整的文件與註解
        3. coding style與設計架構盡量參照原本code base的作法
          1. 除非是原本不夠好或有瑕疵須改善
      2. 演算法空間/時間複雜度
        1. 跟預想同量級,若超過還是要要求修改做法
      3. 邏輯上不會出現潛在問題
        1. deadlock/race condition....
    2. 需有test code
      1. 目標是保護自己(擋住別人會害到我的修改)且保護別人(找到這次commit 與未來commitbug)
      2. 一定要加unittest,integration test/end-to-end test…視情況
      3. 以component被用的角度來測試
        1. 可能可以發現找出當初設計沒考慮到盲點
        2. 避免與實作細節太相關,造成以後每次改都要改test code
      4. test coverage盡量100%
        1. 確保所有設計實考量到的地方都能被測到
        2. 沒跑到的地方需要提出討論
        3. 注意所有的狀況都需檢查結果是否符合預期,否則會變成只是單純增加覆蓋率的無意義測試
    3. 需有文件
      1. 除非是refactoring、修改coding style等小改動
    4. commit message要完整(ref 2)
      1. 標題簡潔易懂
      2. 內容來龍去脈解釋清楚,尤其是為了特殊時空背景而改的東西
      3. bug id 或是ticket一定要標示清楚
  5. 親自測試感受一下

其他

  1. 最終目標: 讓code base越來越好
  2. comment
    1. 對事不對人,充分給予說明參考資料
  3. 保持developer積極性
    1. 盡快response,避免developer倦怠
      1. 不一定要全部看完,有疑問或看到問題點就提出
    2. 不影響準則的地方尊重developer,不要卡著
      1. 單純建議,不影響整體的comment加上"NIT:"
      2. 若覺得有必要就再開ticket要求做
    3. 鼓勵developer 寫得好的地方

沒有留言:

張貼留言