Quora:代碼質量和發展速度可以兼得
在項目開發中,代碼質量與代碼開發速度一直是兩個互斥的參數。維護高質量的代碼有助于提高項目長期開發速度和維護代碼的長期安全與穩定。然而,高質量的代碼通常需要消耗大量的資源來維護,且會使短期的產品開發周期變長。因此,項目開發團隊不可避免的需要在低代碼質量高開發速度和高代碼質量低開發速度中作出選擇。而為了讓產品盡快上市,多數公司會選擇放棄長期利益而采用前一種方式。那么,究竟有沒有辦法打破這種二選一的局面呢?近日,Quora 就分享了該網站在維護高質量代碼庫的同時,保持代碼迅速發展和更新的經驗。接下來,本文就 Quora 的經驗進行介紹和分析。
代碼質量維護的目標
Quora 的工程經理 Nikhil Garg 表示,維護高質量代碼時,開發團隊需要明確其保持長期快速發展的目標。為此,Quora 在維護代碼質量時,提出了四個關鍵性的原則:
- 代碼應該易于閱讀和理解
- 代碼的不同部分應該滿足不同的質量標準
- 盡量減少維護代碼質量的開銷
- 代碼庫已經保持一致 </ul>
在這些原則的指導下,Quora 分別在代碼編寫階段、審查階段、測試階段和代碼清除階段進行了努力。
代碼編寫階段
首先,在代碼編寫階段,Quora 開發了 Qlint 工具進行規則檢查。除了各種語言的語法風格指導方針,Quora 還有保證代碼質量的準則以及如何構建模塊以減少閱讀時間的手冊。然而,對于代碼編寫人員,保證代碼遵循所有相關的原則十分困難。這就容易導致代碼需要不斷的進行修改,既影響代碼質量,又減緩工程進度。為此,Quora 又開發了 Qlint,用于代碼的靜態檢查。而且,Quora 公司把 Qlint 與 Vim、Emacs 和 Sublime 等編輯器進行了完全集成,能夠為違反規則的情況提供直觀的視覺反饋。最后,Qlint 已經與 push 流程、代碼的編寫風格規則和 Phabricator 集成在一起。所有這些都能夠在保證很小開銷的情況下增加代碼的一致性和質量。
代碼審查階段
其次,在代碼審查階段,Quora 采用了提交后代碼審查的方式。正如陳皓和玉伯最近所討論的,代碼審查是一個很容易拖慢工程進度,并嚴重影響代碼質量的工作。就如何進行代碼審查,兩位技術大牛進行了激烈辯論。由此可見,這是一個充滿爭議的地方。Quora 基于對設計師的和代碼審查工具 Phabricator 的信任,選擇了提交后審查的方式。這就意味著開發人員可以先提交代碼,繼續進行其他工作或者繼續代碼的修改。在 Quora,一天大概 50 人次提交 187 次的代碼改動。專門的代碼審閱人員會之后進行復雜的審查工作,包括正確性、隱私保護、性能、架構、重用性以及代碼風格等六個方面。
一般而言,Quora 會要求代碼審查工作需要在一周內完成。而實際情況下,大部分的代碼只需要1-2 天即可完成審查工作。一周時間只是更多的增加審查人員的時間靈活性。這種審查方式既可以保持開發人員不斷的推進開發工作,同時又讓審查人員可以選擇比較好的時機進行復雜代碼的審查。從而,在保持開發速度的同時,網站還能夠保證代碼的質量。當然,對于涉及用戶隱私的代碼、包含公共函數的代碼以及可能會引起宕機的代碼等關鍵性代碼,Quora 還是會采用提交前審查的方式。
至于審查人員方面,Quora 實現了一個簡單的系統,來指定代碼的審查人員。除了代碼提交者之外,該系統會根據一些內置的規則,自動挑選數據專家等合適的人選。這一系統既減少了代碼開發人員尋找審查人員的工作量,同時又能夠有效保證審查的質量,為代碼長期快速發展貢獻了一份力量。
代碼測試階段
然后,在測試階段,Quora 編寫了基于 nosetests 的測試框架、若干用于測試自動化的工具以及測試編寫指南。作為產品開發流程中非常重要的一個環節,測試對代碼質量和產品發布速度都有著很大影響。為了提高測試的覆蓋率,產品測試過程通常需要大量的功能和 UI 測試程序。Quora 投入大量精力搭建了專門的測試框架,用于減少測試程序的編寫代價。而且,該網站也開發了一些工具來使得測試自動化。目前,Quora 的測試服務器能夠在五分鐘內運行完所有的測試集。此外,‘test-local’工具能夠鑒別并執行只與發生改變的文件相關的測試程序。與代碼審查類似,Quora 針對不同類型的代碼改變會設置不同的測試標準和測試覆蓋率。由此,Quora 測試代碼能夠很好的保證質量和更新速度。
舊代碼清理階段
最后,在舊代碼的清理階段,Quora 會定期組織廢棄代碼的清理工作。一個快速發展的公司總是需要各種各樣的想法。有些想法最終被采納,而另外一些被慢慢遺忘。對于這些被遺忘的代碼,Quora 定期組織清理工作周。在這段時間內,一個專門的團隊或者整個公司會專門進行代碼的清理工作。而且,針對不同的清理難度和代碼對未來的影響,Quora 團隊會對不同的模塊設置不同的清理優先級。
通過以上介紹可以看出,Quora 非常重視做好各個環節和細節的工作。通過詳細的指導方針和手冊、自動化的流程和各種精致的工具,該網站建立了良性發展的系統,達到改善長期發展速度的目的。未來,Quora 會繼續設計更多的工具和更完善的系統,來適應網站的發展需求。Quora 的發展經驗也為其他公司提供了很好的借鑒。