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