Google 里的軟件工程學(xué)

簡(jiǎn)評(píng):原文作者 Fergus Henderson 在 Google 工作了 10 年以上果录,目前負(fù)責(zé) Google 的 text-tospeech 工程小組。有很多書籍或文章會(huì)從 商業(yè)/管理 等非技術(shù)角度來講 Google 是如何運(yùn)作的,這篇文檔則是從軟件工程學(xué)的角度來講 Google 是如何運(yùn)作的。

Google 的成功有很多原因,其中一個(gè)重要原因就是 Google 不斷積累的疑枯、優(yōu)秀的軟件工程實(shí)踐經(jīng)驗(yàn)。

本文的目的是梳理并簡(jiǎn)要介紹 Google 軟件開發(fā)的核心流程蛔六,內(nèi)容上主要分為軟件開發(fā) (Software development)荆永、項(xiàng)目管理 (Project management) 和團(tuán)隊(duì)建設(shè) (People management) 三個(gè)方面。

原文目錄

軟件開發(fā)

源碼倉庫(The Source Repository)

  • 單一源代碼倉庫国章,除了核心配置和安全相關(guān)代碼具钥,任何工程師都可以訪問任何代碼,并可以根據(jù)需要修改
  • 所有開發(fā)都基于 master 分支液兽,發(fā)布的時(shí)候才創(chuàng)建發(fā)布分枝
  • 代碼的每個(gè)子樹都有 owner骂删,任何修改都需要 owner 批準(zhǔn)

Blaze 分布式構(gòu)建系統(tǒng)(The Build System)

  • 構(gòu)建和測(cè)試存儲(chǔ)庫中的任何軟件通常非常簡(jiǎn)單和快捷
  • 開發(fā)人員只需要編寫 BUILD 文件,并且每個(gè)構(gòu)建系統(tǒng)僅依賴 BUILD 文件所聲明的文件
  • 構(gòu)建系統(tǒng)的優(yōu)化:可靠,自動(dòng)跟蹤依賴關(guān)系桃漾,增量構(gòu)建坏匪,緩存構(gòu)建結(jié)果以便復(fù)用
  • 自動(dòng)代碼檢查和測(cè)試

代碼審查(Code Review)

  • 完善的代碼審查工具拟逮,如可視化的 Web 界面撬统、電子郵件集成、自動(dòng)展示測(cè)試或靜態(tài)分析的結(jié)果
  • 每個(gè)變更都必須由至少另外一人審查敦迄,并將審查結(jié)果自動(dòng)復(fù)制到項(xiàng)目維護(hù)者的郵件列表
  • 鼓勵(lì)小的變更恋追,大的變更可以拆分為一系列較小的變更

測(cè)試(Testing)

  • 鼓勵(lì)和廣泛使用單元測(cè)試,Mocking 非常普遍
  • 廣泛使用集成測(cè)試和回歸測(cè)試
  • 自動(dòng)測(cè)量測(cè)試覆蓋率
  • 部署之前進(jìn)行負(fù)載測(cè)試罚屋,顯示關(guān)鍵的 metrics苦囱,比如延遲、錯(cuò)誤率以及它們隨請(qǐng)求速率的變化情況

Bug 跟蹤(Bug tracking)

  • Google 使用名為 Buganizer 的 Bug 跟蹤系統(tǒng)
  • 使用標(biāo)簽分類 bug
  • 每個(gè) bug 都有一個(gè)默認(rèn)的 assignee 和抄送郵件列表

編程語言(Programming languages)

  • 鼓勵(lì)使用 C++脾猛、Java撕彤、Python 或 Go之一,最小化不同編程語言的數(shù)量
  • 每種語言都有 Google 風(fēng)格指南猛拴,還有一個(gè)公司范圍內(nèi)的可讀性培訓(xùn)
  • 不同語言之前使用基于 Protocol Buffers 的 RPC 通信
  • 為所有語言提供通用的開發(fā)工具羹铅,比如代碼簽出、編輯愉昆、構(gòu)建职员、測(cè)試、審查跛溉、bug 報(bào)告等

調(diào)試和分析(Debugging and Profiling tools)

  • 在通用框架中提供調(diào)試和代碼跟蹤工具
  • 提供用于調(diào)試的網(wǎng)絡(luò)接口檢查 RPC 調(diào)用的時(shí)間焊切、錯(cuò)誤率和頻率限制以及資源消耗、性能分析數(shù)據(jù)等

發(fā)布(Release engineering)

  • 頻繁發(fā)布(比如每周或每兩周)芳室,自動(dòng)化發(fā)布任務(wù)专肪,提高工程師積極性,允許更多迭代以加快整體速度
  • 發(fā)布分支堪侯,將 master 的修改 cherry-pick 到發(fā)布分支
  • 發(fā)布到 staging 服務(wù)器牵祟,測(cè)試部分生產(chǎn)流量的副本
  • 發(fā)布到 canary 服務(wù)器,測(cè)試真實(shí)生產(chǎn)流量的一個(gè)子集
  • 最后逐步發(fā)布到所有服務(wù)器

Launch approval

  • 任何用戶可見的更改或重大的設(shè)計(jì)變更都需要工程團(tuán)隊(duì)之外的很多人員的審查和批準(zhǔn)抖格,以確保這些變更滿足符合法律诺苹、隱私、安全雹拄、可靠性以及業(yè)務(wù)需求
  • Google 內(nèi)部的 Launch approval 工具會(huì)跟蹤這些審查和批準(zhǔn)

Post-mortems

  • 任何重大的生產(chǎn)故障都需要寫一份事后的總結(jié)文檔收奔,描述事件的原因、影響以及如何解決
  • 重點(diǎn)關(guān)注如何避免它們?cè)俅伟l(fā)生(而不是追究人員責(zé)任)

頻繁重寫(Frequent rewrites)

  • 大部分軟件每隔幾年都會(huì)重寫一次
  • 減少了累計(jì)復(fù)雜性
  • 有助于適應(yīng)當(dāng)前的最佳實(shí)踐滓玖,鼓勵(lì)新的想法
  • 也是一種團(tuán)隊(duì)成員之間傳遞 ownership 的方式
  • 這是 Google 保持敏捷和長期成功的關(guān)鍵

項(xiàng)目管理

20% 時(shí)間

  • 允許工程師將 20% 時(shí)間花在喜歡的任何項(xiàng)目上
  • 有助于新想法的原型開發(fā)和演示坪哄,提高員工積極性
  • 鼓勵(lì)創(chuàng)新企業(yè)文化

OKRs(Objectives and Key Results)

  • 個(gè)人和團(tuán)隊(duì)要明確記錄目標(biāo)并評(píng)估這些目標(biāo)的進(jìn)展情況,團(tuán)隊(duì)設(shè)置季度和年度目標(biāo)
  • 建立關(guān)鍵結(jié)果來量化 OKR,用 OKR score 評(píng)估進(jìn)展情況
  • 設(shè)置野心勃勃的 OKR 指標(biāo)翩肌,即設(shè)置期望為目標(biāo)的 65%
  • OKR 是全公司透明的模暗,是一種簡(jiǎn)化的溝通框架,使每個(gè)人都清晰了解公司的目標(biāo)以及自己的位置

項(xiàng)目審批(Project approval)

  • Google 沒有明確的項(xiàng)目審批流程念祭,一般通過自下而上的方式進(jìn)行

公司重組(Corporate reorganizations)

  • 因項(xiàng)目取消而重組時(shí)工程師可以自由選擇新的團(tuán)隊(duì)或角色
  • 在很大程度上兑宇,技術(shù)驅(qū)動(dòng)公司應(yīng)該進(jìn)行頻繁的重組以避免組織效率低下

團(tuán)隊(duì)建設(shè)

角色(Roles)

技術(shù)角色與管理角色分開,項(xiàng)目由技術(shù)主管領(lǐng)導(dǎo)和決策粱坤,而經(jīng)理負(fù)責(zé)管理技術(shù)主管隶糕,指導(dǎo)職業(yè)發(fā)展,并負(fù)責(zé)績效評(píng)估站玄。

  • 軟件工程師
  • 研究科學(xué)家
  • SRE
  • 產(chǎn)品經(jīng)理
  • 項(xiàng)目經(jīng)理

工作環(huán)境(Facilities)

  • Google 提供豐富的娛樂枚驻、運(yùn)動(dòng)和餐飲設(shè)施
  • 開放式辦公鼓勵(lì)溝通
  • 先進(jìn)的視頻會(huì)議設(shè)施方便不同團(tuán)隊(duì)的溝通

培訓(xùn)(Training)

  • 新員工培訓(xùn),每個(gè)新員工都有導(dǎo)師和伙伴(Buddy)
  • 「Codelabs」和豐富的培訓(xùn)課程
  • 也支持外部機(jī)構(gòu)學(xué)習(xí)

換崗(Transfers)

  • 鼓勵(lì)在不同部門換崗株旷,幫助公司內(nèi)傳播知識(shí)
  • 允許 12 個(gè)月內(nèi)表現(xiàn)良好的員工更換項(xiàng)目
  • 鼓勵(lì)臨時(shí)性的參與其他項(xiàng)目

績效考核和獎(jiǎng)勵(lì)(Performance appraisal and rewards)

  • 鼓勵(lì)「peer bonuses」和「kudos」
  • 明確詳細(xì)的晉升過程再登,確保正確的人得到晉升
  • 匿名反饋調(diào)查評(píng)估經(jīng)理的績效

▎小結(jié)

本文簡(jiǎn)要介紹了在 Google 使用的重要軟件工程的實(shí)踐方法。Google 是一個(gè)龐大并且多元化的組織晾剖,有一些部門用的是不同的實(shí)踐方法锉矢,但是這里描述的實(shí)踐方法被 Google 大多數(shù)的團(tuán)隊(duì)所遵循。

實(shí)踐方法的詳細(xì)內(nèi)容請(qǐng)移步文末的英文原文鏈接钞瀑。


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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沈撞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雕什,更是在濱河造成了極大的恐慌缠俺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贷岸,死亡現(xiàn)場(chǎng)離奇詭異壹士,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)偿警,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門躏救,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人螟蒸,你說我怎么就攤上這事盒使。” “怎么了七嫌?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵少办,是天一觀的道長。 經(jīng)常有香客問我诵原,道長英妓,這世上最難降的妖魔是什么挽放? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蔓纠,結(jié)果婚禮上辑畦,老公的妹妹穿的比我還像新娘。我一直安慰自己腿倚,他們只是感情好纯出,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猴誊,像睡著了一般潦刃。 火紅的嫁衣襯著肌膚如雪侮措。 梳的紋絲不亂的頭發(fā)上懈叹,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音分扎,去河邊找鬼澄成。 笑死,一個(gè)胖子當(dāng)著我的面吹牛畏吓,可吹牛的內(nèi)容都是我干的墨状。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼菲饼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼肾砂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宏悦,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤镐确,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饼煞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體源葫,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年砖瞧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了息堂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡块促,死狀恐怖荣堰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竭翠,我是刑警寧澤振坚,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站逃片,受9級(jí)特大地震影響屡拨,放射性物質(zhì)發(fā)生泄漏只酥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一呀狼、第九天 我趴在偏房一處隱蔽的房頂上張望裂允。 院中可真熱鬧,春花似錦哥艇、人聲如沸绝编。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽十饥。三九已至,卻和暖如春祖乳,著一層夾襖步出監(jiān)牢的瞬間逗堵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工眷昆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜒秤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓亚斋,卻偏偏與公主長得像作媚,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帅刊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容