Google 里的軟件工程學

簡評:原文作者 Fergus Henderson 在 Google 工作了 10 年以上,目前負責 Google 的 text-tospeech 工程小組。有很多書籍或文章會從 商業/管理 等非技術角度來講 Google 是如何運作的,這篇文檔則是從軟件工程學的角度來講 Google 是如何運作的。

Google 的成功有很多原因,其中一個重要原因就是 Google 不斷積累的、優秀的軟件工程實踐經驗。

本文的目的是梳理并簡要介紹 Google 軟件開發的核心流程,內容上主要分為軟件開發 (Software development)、項目管理 (Project management) 和團隊建設 (People management) 三個方面。

原文目錄

軟件開發

源碼倉庫(The Source Repository)

  • 單一源代碼倉庫,除了核心配置和安全相關代碼,任何工程師都可以訪問任何代碼,并可以根據需要修改
  • 所有開發都基于 master 分支,發布的時候才創建發布分枝
  • 代碼的每個子樹都有 owner,任何修改都需要 owner 批準

Blaze 分布式構建系統(The Build System)

  • 構建和測試存儲庫中的任何軟件通常非常簡單和快捷
  • 開發人員只需要編寫 BUILD 文件,并且每個構建系統僅依賴 BUILD 文件所聲明的文件
  • 構建系統的優化:可靠,自動跟蹤依賴關系,增量構建,緩存構建結果以便復用
  • 自動代碼檢查和測試

代碼審查(Code Review)

  • 完善的代碼審查工具,如可視化的 Web 界面、電子郵件集成、自動展示測試或靜態分析的結果
  • 每個變更都必須由至少另外一人審查,并將審查結果自動復制到項目維護者的郵件列表
  • 鼓勵小的變更,大的變更可以拆分為一系列較小的變更

測試(Testing)

  • 鼓勵和廣泛使用單元測試,Mocking 非常普遍
  • 廣泛使用集成測試和回歸測試
  • 自動測量測試覆蓋率
  • 部署之前進行負載測試,顯示關鍵的 metrics,比如延遲、錯誤率以及它們隨請求速率的變化情況

Bug 跟蹤(Bug tracking)

  • Google 使用名為 Buganizer 的 Bug 跟蹤系統
  • 使用標簽分類 bug
  • 每個 bug 都有一個默認的 assignee 和抄送郵件列表

編程語言(Programming languages)

  • 鼓勵使用 C++、Java、Python 或 Go之一,最小化不同編程語言的數量
  • 每種語言都有 Google 風格指南,還有一個公司范圍內的可讀性培訓
  • 不同語言之前使用基于 Protocol Buffers 的 RPC 通信
  • 為所有語言提供通用的開發工具,比如代碼簽出、編輯、構建、測試、審查、bug 報告等

調試和分析(Debugging and Profiling tools)

  • 在通用框架中提供調試和代碼跟蹤工具
  • 提供用于調試的網絡接口檢查 RPC 調用的時間、錯誤率和頻率限制以及資源消耗、性能分析數據等

發布(Release engineering)

  • 頻繁發布(比如每周或每兩周),自動化發布任務,提高工程師積極性,允許更多迭代以加快整體速度
  • 發布分支,將 master 的修改 cherry-pick 到發布分支
  • 發布到 staging 服務器,測試部分生產流量的副本
  • 發布到 canary 服務器,測試真實生產流量的一個子集
  • 最后逐步發布到所有服務器

Launch approval

  • 任何用戶可見的更改或重大的設計變更都需要工程團隊之外的很多人員的審查和批準,以確保這些變更滿足符合法律、隱私、安全、可靠性以及業務需求
  • Google 內部的 Launch approval 工具會跟蹤這些審查和批準

Post-mortems

  • 任何重大的生產故障都需要寫一份事后的總結文檔,描述事件的原因、影響以及如何解決
  • 重點關注如何避免它們再次發生(而不是追究人員責任)

頻繁重寫(Frequent rewrites)

  • 大部分軟件每隔幾年都會重寫一次
  • 減少了累計復雜性
  • 有助于適應當前的最佳實踐,鼓勵新的想法
  • 也是一種團隊成員之間傳遞 ownership 的方式
  • 這是 Google 保持敏捷和長期成功的關鍵

項目管理

20% 時間

  • 允許工程師將 20% 時間花在喜歡的任何項目上
  • 有助于新想法的原型開發和演示,提高員工積極性
  • 鼓勵創新企業文化

OKRs(Objectives and Key Results)

  • 個人和團隊要明確記錄目標并評估這些目標的進展情況,團隊設置季度和年度目標
  • 建立關鍵結果來量化 OKR,用 OKR score 評估進展情況
  • 設置野心勃勃的 OKR 指標,即設置期望為目標的 65%
  • OKR 是全公司透明的,是一種簡化的溝通框架,使每個人都清晰了解公司的目標以及自己的位置

項目審批(Project approval)

  • Google 沒有明確的項目審批流程,一般通過自下而上的方式進行

公司重組(Corporate reorganizations)

  • 因項目取消而重組時工程師可以自由選擇新的團隊或角色
  • 在很大程度上,技術驅動公司應該進行頻繁的重組以避免組織效率低下

團隊建設

角色(Roles)

技術角色與管理角色分開,項目由技術主管領導和決策,而經理負責管理技術主管,指導職業發展,并負責績效評估。

  • 軟件工程師
  • 研究科學家
  • SRE
  • 產品經理
  • 項目經理

工作環境(Facilities)

  • Google 提供豐富的娛樂、運動和餐飲設施
  • 開放式辦公鼓勵溝通
  • 先進的視頻會議設施方便不同團隊的溝通

培訓(Training)

  • 新員工培訓,每個新員工都有導師和伙伴(Buddy)
  • 「Codelabs」和豐富的培訓課程
  • 也支持外部機構學習

換崗(Transfers)

  • 鼓勵在不同部門換崗,幫助公司內傳播知識
  • 允許 12 個月內表現良好的員工更換項目
  • 鼓勵臨時性的參與其他項目

績效考核和獎勵(Performance appraisal and rewards)

  • 鼓勵「peer bonuses」和「kudos」
  • 明確詳細的晉升過程,確保正確的人得到晉升
  • 匿名反饋調查評估經理的績效

▎小結

本文簡要介紹了在 Google 使用的重要軟件工程的實踐方法。Google 是一個龐大并且多元化的組織,有一些部門用的是不同的實踐方法,但是這里描述的實踐方法被 Google 大多數的團隊所遵循。

實踐方法的詳細內容請移步文末的英文原文鏈接。


原文鏈接:Software Engineering at Google
推薦閱讀:Chrome 十周年重設計 | 首席設計師專訪

我的知乎:@Aceyclee | 我的微博:@Aceyclee

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容