Software Engineering at Google
生活随笔
收集整理的這篇文章主要介紹了
Software Engineering at Google
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Google的Fergus Henderson在Software Engineering at Google中介紹了Google的軟件工程實踐。
軟件開發(fā)
源碼倉庫
- 單一源代碼倉庫,除了核心配置和安全相關(guān)代碼,任何工程師都可以訪問任何代碼,并可以根據(jù)需要修改
- 所有開發(fā)都基于master分支,發(fā)布的時候才創(chuàng)建發(fā)布分枝
- 代碼的每個子樹都有owner,任何修改都需要owner批準
Blaze分布式構(gòu)建系統(tǒng)
- 構(gòu)建和測試存儲庫中的任何軟件通常非常簡單和快捷
- 開發(fā)人員只需要編寫B(tài)UILD文件,并且每個構(gòu)建系統(tǒng)僅依賴BUILD文件所聲明的文件
- 構(gòu)建系統(tǒng)的優(yōu)化:可靠,自動跟蹤依賴關(guān)系,增量構(gòu)建,緩存構(gòu)建結(jié)果以便復(fù)用
- 自動代碼檢查和測試
代碼審查
- 完善的代碼審查工具,如可視化的Web界面、電子郵件集成、自動展示測試或靜態(tài)分析的結(jié)果
- 每個變更都必須由至少另外一人審查,并將審查結(jié)果自動復(fù)制到項目維護者的郵件列表
- 鼓勵小的變更,大的變更可以拆分為一系列較小的變更
測試
- 鼓勵和廣泛使用單元測試,Mocking非常普遍
- 廣泛使用集成測試和回歸測試
- 自動測量測試覆蓋率
- 部署之前進行負載測試,顯示關(guān)鍵的metrics,比如延遲、錯誤率以及它們隨請求速率的變化情況
Bug跟蹤
- Google使用名為Buganizer的Bug跟蹤系統(tǒng)
- 使用標簽分類bug
- 每個bug都有一個默認的assignee和抄送郵件列表
編程語言
- 鼓勵使用C++、Java、Python或Go之一,最小化不同編程語言的數(shù)量
- 每種語言都有Google風(fēng)格指南,還有一個公司范圍內(nèi)的可讀性培訓(xùn)
- 不同語言之前使用基于Protocol Buffers的RPC通信
- 為所有語言提供通用的開發(fā)工具,比如代碼簽出、編輯、構(gòu)建、測試、審查、bug報告等
調(diào)試和分析
- 在通用框架中提供調(diào)試和代碼跟蹤工具
- 提供用于調(diào)試的網(wǎng)絡(luò)接口檢查RPC調(diào)用的時間、錯誤率和頻率限制以及資源消耗、性能分析數(shù)據(jù)等
發(fā)布
- 頻繁發(fā)布(比如每周或每兩周),自動化發(fā)布任務(wù),提高工程師積極性,允許更多迭代以加快整體速度
- 發(fā)布分支,將master的修改cherry-pick到發(fā)布分支
- 發(fā)布到staging服務(wù)器,測試部分生產(chǎn)流量的副本
- 發(fā)布到canary服務(wù)器,測試真實生產(chǎn)流量的一個子集
- 最后逐步發(fā)布到所有服務(wù)器
Launch approval
- 任何用戶可見的更改或重大的設(shè)計變更都需要工程團隊之外的很多人員的審查和批準,以確保這些變更滿足符合法律、隱私、安全、可靠性以及業(yè)務(wù)需求
- Google內(nèi)部的Launch approval工具會跟蹤這些審查和批準
Post-mortems
- 任何重大的生產(chǎn)故障都需要寫一份事后的總結(jié)文檔,描述事件的原因、影響以及如何解決
- 重點關(guān)注如何避免它們再次發(fā)生(而不是追究人員責(zé)任)
頻繁重寫
- 大部分軟件每隔幾年都會重寫一次
- 減少了累計復(fù)雜性
- 有助于適應(yīng)當(dāng)前的最佳實踐,鼓勵新的想法
- 也是一種團隊成員之間傳遞ownership的方式,
- 這是Google保持敏捷和長期成功的關(guān)鍵
項目管理
20%時間
- 允許工程師可以將20%時間花在喜歡的任何項目上
- 有助于新想法的原型開發(fā)和演示,提高員工積極性
- 鼓勵創(chuàng)新企業(yè)文化
OKR(Objectives and Key Results)
- 個人和團隊要明確記錄目標并評估這些目標的進展情況,團隊設(shè)置季度和年度目標
- 建立關(guān)鍵結(jié)果來量化OKR,用OKR score評估進展情況
- 設(shè)置野心勃勃的OKR指標,即設(shè)置期望為目標的65%
- OKR是全公司透明的,是一種簡化的溝通框架,使每個人都清晰了解公司的目標以及自己的位置
項目審批
- Google沒有明確的項目審批流程,一般通過自下而上的方式進行
公司重組
- 因項目取消而重組時工程師可以自由選擇新的團隊或角色
- 在很大程度上,技術(shù)驅(qū)動公司應(yīng)該進行頻繁的重組以避免組織效率低下
人員管理
角色,技術(shù)角色與管理角色分開,項目由技術(shù)主管領(lǐng)導(dǎo)和決策,而經(jīng)理負責(zé)管理技術(shù)主管,指導(dǎo)職業(yè)發(fā)展,并負責(zé)績效評估
- 高標準的軟件工程師
- 研究科學(xué)家
- SRE
- 產(chǎn)品經(jīng)理
- 項目經(jīng)理
工作環(huán)境(Facilities)
- Google提供豐富的娛樂、運動和餐飲設(shè)施
- 開放式辦公鼓勵溝通
- 先進的視頻會議設(shè)施方便不同團隊的溝通
培訓(xùn)
- 新員工培訓(xùn),每個新員工都有導(dǎo)師和伙伴(Buddy)
- “Codelabs”和豐富的培訓(xùn)課程
- 也支持外部機構(gòu)學(xué)習(xí)
換崗
- 鼓勵在不同部門換崗,幫助公司內(nèi)傳播知識
- 允許12個月內(nèi)表現(xiàn)良好的員工更換項目
- 鼓勵臨時性的參與其他項目
績效考核和獎勵
- 鼓勵“peer bonuses”和“kudos”
- 明確詳細的晉升過程,確保正確的人得到晉升
- 匿名反饋調(diào)查評估經(jīng)理的績效
更多內(nèi)容請參考英文原文https://arxiv.org/pdf/1702.01715.pdf。更多SRE的內(nèi)容請參考SRE以及SRE筆記。
轉(zhuǎn)載于:https://www.cnblogs.com/allcloud/p/7095087.html
總結(jié)
以上是生活随笔為你收集整理的Software Engineering at Google的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring AOP用法
- 下一篇: ack-grep 代码全文搜索