1、百度工程能力工程標準V1 . 0前言 自1 9 6 8 年軟件工程被首次提出,到今年剛好是5 0 周年。在這半個世紀的時間里,質量和效率是軟件工程領域永恒的主題。人類自第一次工業革命以來,解決質量和效率問題的不二法門就是自動化、自動化、再自動化。智能化更是自動化的一種高級形態。然而在當今企業中,這樣的一個根本方法卻被人們無意或有意的忽視。說無意忽視,是因為在企業中負責工程能力建設的人可能缺乏工程經驗,心中眼中只有流程。仿佛流程順了,即便大都靠人工執行,也心安理得。說是有意,則是因為軟件行業中原有的分工等原因,自動化的導入帶來分工模糊、崗位重要性變化等諸多不確定性,缺乏引入的意愿。本人無意貶低流
2、程,而是更推崇自動化和智能化的流程,更無意非議職責分工,而是更推崇自動化和智能化解放人,使每個人都能更多從事創造性的工作。 創造性的工作。 人們對于人與世界、人與人的關系的認知,在過去的半個世紀里并無顯著突破,這些認知又進一步決定了流程優化的上限,仿佛一道透明天花板,人人可感,卻無從突破。另一方面,A B C 技術(A - A I 人工智能、B - B i g D a t a 大數據、C - C l o u d 云計算)突飛猛進、日新月異。如果工程能力的建設無法站在A B C 技術進步的巨人肩膀上做創新,那是軟件工程領域在這個時代的悲哀。 互聯網公司關注快速迭代,天生具有追求卓越工程能力的基因
3、,百度作為技術立身的企業,創立早期便啟動了研發流程自動化的工程能力建設,需求流轉、文檔閱讀、代碼搜索、程序分析、軟件測試、制品部署、服務監控、用戶反饋等覆蓋研發全流程的工具平臺積累,涉及到S e r v e r 、A p p 、S D K 、A I 算法模型、自動駕駛等異構產品業務形態。4 0 余個工程實踐環節,積累了4 0 余個可插件化接入的平臺,在公司內被廣泛使用。在這些實踐和平臺運行的同時,一個新的金礦正在悄然生成,那就是軟件工程大數據。如今我們依托百度領先的A B C 技術和工程能力建設經驗,將公司積累的5 0 0 多億條軟件工程數據進行處理,其中錘煉出的技術用于代碼推薦、缺陷檢測、智
4、能測試、智慧運維等領域。今年百度承接了國家重點專項基于編程現場大數據的軟件智能開發方法和環境,與國內軟件工程領域實力頂尖的1 5 所高校一同建設中國未來的智能大數據的軟件智能開發方法和環境,與國內軟件工程領域實力頂尖的1 5 所高校一同建設中國未來的智能軟件開發平臺。 作為百度內部以工程卓越、畢生所求為使命的一群人,我們一邊支持公司業務打勝仗,一邊努力探索工程能力建設的新方向,心中充滿著欣喜。并非??释軐⑽覀兊睦斫夂椭鲝埾蛐袠I分享,共同進步。然而由于工程能力體系龐大、平臺眾多,一時無法窮盡,所以我們將這個體系進行分解,首先分享價值高、可遷移的工程標準V 1 . 0 。后面陸續會向大家匯報我們
5、在A I 賦能軟件開發、A I 開發軟件工程等方面的進展。更期待您的反饋和交流。 李濤 百度工程效率總監 百度平臺化委員會秘書長2 0 1 8 年1 0 月1 0 日 百度工程能力白皮書I編委會成員百度工程能力白皮書I I目錄百度工程能力白皮書I I I1111122223456677891 01 21 21 21 31 31 31 41 41 51 61 7 百度是一個技術公司,研發工程能力的高低直接影響公司的持久創新力和公司在市場上的作為。只有不懈追求卓越的工程能力,才能夠帶來長期的核心競爭力,才能為每個用戶、每個企業客戶以及整個社會創造價值。長期以來,百度在大量的軟件開發經驗中總結了許多
6、優秀的工程實踐,這些實踐來自于公司工程標準和開發工具鏈的結合。經過長期團隊觀察和大量研發數據分析,我們證明這些實踐可以有效幫助提高軟件開發效率和產品質量。 百度軟件工程標準制定的目標是幫助研發團隊持續提升工程能力。工程標準可以快速指導團隊采用優秀的軟件工程實踐和研發工具,使其在研發效率或產品質量上獲得提升。同時有了標準和規范,也能夠更有效地衡量團隊工程能力的水平,讓各個團隊能夠更好地了解自身的工程能力現狀,進而設定工程能力提升目標,不懈追求工程卓越。 本白皮書希望分享百度在軟件工程標準、實踐、度量和改進方面的經驗,呼吁業界共同加強工程能力建設、研發工具投入、工程標準更新與工程素養提升,共同推進
7、軟件工程的發展。 百度軟件工程標準從典型的研發過程中,抽象出研發過程主要看流程是否順暢、實踐是否完備、實踐是否有效三個方面,再加上構建系統是否可靠穩定,形成四位一體的工程能力標準,具備流程全面、實踐完備、效果驅動、構建合理等特點。 百度軟件工程標準是由百度D e v Op s T OC (T e c h n i c a l Ov e r s i g h t C o mmi t t e e )制定并發布的,并且隨著公司工程技術的發展不斷更新。首先,D e v Op s T OC 的委員廣泛收集各個研發團隊的優秀工程實踐,以及工程標準實施的反饋,制定工程標準的初版或修改意見草案。然后T OC 委員
8、將草案提交至D e v Op s T OC 進行充分討論,如果T OC 會議通過,就進行標準修改的公示,同步修改研發工具中的對應規則。同時收集各團隊反饋和實際研發數據進行分析,來驗證標準實施的效果,并繼續準備下一輪的規則更新。 本白皮書是百度軟件工程標準1 . 0 版本。在此之前,百度軟件工程標準已經在百度內部經歷了十余次修訂,基本包含了百度所有產品團隊的優秀工程實踐,具備了可靠的權威性,起到了有效的指導作用。百度軟件工程能力白皮書1 百度公司的軟件產品形態有多種,例如A p p ,B r o w s e r ,P C C l i e n t ,S D K 等。不同的產品類型其研發過程及優秀實
9、踐也不盡相同。目前我們把研發的工程類型大致分為4 類:S e r v e r 、A p p 、S D K 和A D (A u t o n o -mo u s D r i v i n g ),本白皮書介紹S e r v e r 、A p p 和S D K 三種工程類型的工程標準。百度A D 工程類型的工程標準將在白皮書后續版本中增加。 開發一個S e r v e r 工程,需要經過需求、開發、代碼準入、測試、上線&驗證等階段,每個階段有若干優秀工程實踐。下圖是百度S e r v e r 工程類型的優秀實踐集合S e r v e r 類型工程能力地圖。通過工程能力地圖,可以指導從開發到上線的流程,
10、建立標準化研發工具鏈,統一度量工程能力。百度軟件工程能力白皮書2 開發一個A p p 工程,需要經過需求、開發、代碼準入、測試、灰度、發版等階段。下圖是A p p 類型工程能力地圖。百度軟件工程能力白皮書3 開發一個S D K 工程,需要經過需求、開發、代碼準入、測試、灰度、交付等階段。下圖是S D K 類型工程能力地圖。百度軟件工程能力白皮書4百度軟件工程能力白皮書5百度軟件工程能力白皮書6百度軟件工程能力白皮書7百度軟件工程能力白皮書8百度軟件工程能力白皮書9百度軟件工程能力白皮書1 0百度軟件工程能力白皮書1 1百度軟件工程能力白皮書1 2百度軟件工程能力白皮書 A v e r a g
11、e 使用包管理平臺進行產品包管理 G o o d 可以方便的獲取歷史包1 3 上述的工程標準有助于團隊了解工程全貌,自主確定工程改進目標,自助改進工程能力。每一個工程實踐都有對應的工程工具平臺支持,團隊只需在研發工具中選擇對應的工具插件,即可獲得相應的工程能力。例如在“代碼準入”階段中的若干工程實踐,都可以從百度代碼管理工具i C o d e 中進行選擇。 在“測試”階段中的工程實踐,則可以從百度流水線平臺i P i p e 中選擇相應插件,下圖為百度研發流水線i P i p e 的部分插件百度軟件工程能力白皮書1 4百度軟件工程能力白皮書 團隊在使用工程工具、按照工程標準進行工程實踐的過程中
12、,這些工程工具平臺能夠按照統一規范回傳數據,進而可以分析計算每個團隊在每個工程實踐上已經達到的級別。為此我們用研發工具平臺產生的研發現場數據,建立了百度研發數據倉庫,并基于這些工程數據,開發了工程能力地圖可視化的產品,方便各個團隊了解自身的工程能力,驗證工程改進的效果。1 5百度軟件工程能力白皮書 通過不斷修訂工程標準、迭代工程工具落地優秀實踐、收集研發數據并可視化工程能力,可以使研發團隊快速實施優秀工程實踐,提升工程能力,進而提高團隊開發效率,提高產品質量。 我們觀察了公司8 個樣本團隊的工程實踐落地進程和開發周期時間的變化。其中4 個團隊在觀察期內按照本文的工程標準推進了若干工程實踐的落地
13、,另外4 個團隊工程實踐做得很少且在觀察期內沒有推進新的工程實踐落地。把這8 個團隊在觀察期的每個版本的開發周期時間和周期時間的移動平均值用散點圖進行可視化,得到下圖。1 6百度軟件工程能力白皮書 對于一個科技公司來說,保持并不斷提升工程能力是最重要的。百度一直堅持培養工程師的工程素養,建設高效的工程工具,持續推動工程能力提升,R e l e n t l e s s P u r s u i t o f E n g i n e e r i n g E x c e l l e n c e ,永無止境的追求工程卓越。本白皮書介紹了目前百度工程的標準和工程實踐,希望作為軟件工程的實踐者為同行或研究機構
14、提供一個參考樣本,促進交流,共同提高。百度工程標準也必然會隨著公司內外工程技術的不斷革新而持續升級。百度軟件工程標準希望及眾家之所長,合眾人之智慧,以實踐為檢驗標準,促工程能力打造科技產品,用科技讓復雜的世界更簡單。 我們發現在選定的時間范圍內(橫坐標),推進工程實踐落地的4 個團隊(圖中高亮的顏色),其開發周期的移動平均值(下圖的散點)成穩定下降趨勢;沒有推進工程實踐落地的4 個團隊(圖中背景部分),其開發周期主要成發散上升趨勢。同時這8 個團隊在觀察期內的團隊人數、開發習慣等團隊特征以及產品質量均沒有顯著變化。這說明工程實踐能夠對開發周期的縮短產生積極影響。 為了在更大范圍內進一步發現工程標準、工程工具對研發效率和產品質量的影響,我們對百度所有團隊6 為了在更大范圍內進一步發現工程標準、工程工具對研發效率和產品質量的影響,我們對百度所有團隊6個月時間段內的研發數據進行了定量分析。分析結果表明,團隊采用的工程實踐數量越多,其開發周期越短;工程實踐做得程度越深入的團隊,其開發周期也越短。同時研究了開發團隊人數對上述結果的進一步影響,發現團隊人數越多,實施工程實踐對縮短開發周期的作用就越大。以上分析結論進一步佐證了優秀的軟件工程實踐能夠縮短開發周期。1 7