持續整合實踐成熟度模型
1 概述
持續整合從“配置管理”、“構建”、“測試”、“部署及釋出”及“團隊習慣”5個緯度考察其成熟度,每個維度都有5個級別,分別是“入門”、“新手”、“中等”、“進階”和“瘋狂”。目前在各個維度上,行業的平均水平集中在“入門”和“新手”兩個級別。
評估時各級別之間不能越級,就是說即使“新手”中個別條目已經做到了,但如果“入門”中有條目沒有做到,也只能評為“入門”級。
該模型的主要目的是為了更好地幫助團隊認識現狀,同時瞭解改進的方向。該模型是對持續整合主要維度的簡單衡量,背後可能有一些並不適合團隊的假設,且並未對每個條目做細緻解釋,為獲得團隊持續整合工作的有針對性的全面評估,請聯絡PMO部門。
由於技術和專案的差異性,不同團隊達到同一級別需要付出的努力可能差異很大,獲得的收益也有區別,因此不適宜利用此模型在團隊間進行比較。
2 配置管理維度
入門:
使用版本管理工具
使用私有分支
功能測試Case在本地管理
生產程式碼被版本管理
每天提交程式碼,並寫Comment。
新手:
應用在最小工作單元完成後即可整合的分支策略
所有構建、測試及部署指令碼都被版本管理
所有測試程式碼和資料被集中管理
測試環境中的應用配置被版本管理
程式碼簽入的Comment清楚達意,含有必要的Metadata,比如Bug號等。
RD使用完全標準的開發環境,沒有僅供自己使用的指令碼、資料或測試環境等。
中等:
測試程式碼與生產程式碼同源
生產環境中的應用配置被版本管理
持續整合平臺執行的指令碼被版本管理,無需登入平臺修改指令碼。
每次構建均有版本追溯,無需重新從原始碼構建歷史版本。
Qa使用標準的開發測試環境
資料庫被版本管理
功能測試資料被版本管理
進階:
沒有僅在團隊成員本地儲存的任何專案資產。
RD和QA使用一致的開發測試環境。
瘋狂:
開發、測試、生產環境被版本管理,可以一鍵克隆。
所有測試資料被版本管理
通過下面問題進一步瞭解團隊的配置管理現狀:
使用何種分支管理策略?
團隊成員簽入程式碼的頻率和內容,Comment的質量如何?
一個RD在全新的機器上建立完整的工作環境要經歷那些步驟?
一個QA在全新的機器上建立完整的工作環境要經歷那些步驟?
RD和QA的工作環境有什麼區別?
RD之間的工作環境有什麼區別?
Qa之間的工作環境有什麼區別?
測試資料是怎麼管理的?
RD是否在沙盒中開發?如果不是,有那些依賴?
本地和平臺構建指令碼是如何管理的?
測試環境和生產環境的應用配置是如何管理的?
測試工具和測試Case是如何管理的?
測試執行的環境依賴有那些?是否每個人在自己的工作環境中都可以方便執行?
所有團隊成員是否使用相同的指令碼做本地構建?
團隊成員有那些私有的程式碼,指令碼和預先部署的環境?
3 構建維度
入門:
有幫助指令碼分別執行各構建步驟
階段構建,例如Nightly Build或Weekly Build。
Shell指令碼作為自動化構建開發指令碼
新手:
程式碼簽入後即執行包含自動化測試的構建過程
構建結果被有效通知團隊
所有人都知道如何執行本地構建
基礎構建過程不再有突出的環境問題
通過自動化構建指令碼完成自動化構建任務。
專人維護構建環境。
中等
在本地和平臺中執行自動化冒煙測試
在平臺中執行功能測試全集和效能測試。
充分利用多臺機器執行多個構建。
構建過程整合了詳細的報告。
能夠靈活配置各構建階段的具體任務。
通過指令碼同步及升級各個構建機器中的環境依賴
進階
構建步驟被充分優化
構建過程可以對報告做分析,並記錄關鍵指標的趨勢,並進行改進。
充分利用多臺機器做單個構建任務。
在全新的開發環境中籤出專案,通過一個指令碼即可構建完整的開發和測試環境併成功產出部署包。
瘋狂
執行時間超過限制即失敗。
通過下面問題進一步瞭解團隊的構建現狀:
如何管理編譯依賴?
如何管理模組版本依賴?
編譯的時間是多長?
每個人的構建環境和方法是否一致?
自動化構建的具體步驟?
自動化構建失敗的主要原因是什麼?
是否使用了Build Grid?如何用的?
如何管理Grid中的各臺機器?如何同步和更新環境?
本地構建的內容?什麼時候執行?要多長時間?
使用那個CI平臺?如何配置的?
如何調整構建中包含的內容?
4 測試維度
在其它緯度中也有一些與測試相關的條目,可參考。
入門:
有部分自動化功能測試
在專案後期集中測試
利用缺陷跟蹤系統管理缺陷
僅有少量的單元測試,尚未發揮明顯作用。
新手:
最小工作單元包含手工測試。
積累一定量的單元測試,團隊已從中受益。
構建時執行自動迴歸測試。
有人工參與的提測過程。
自動化功能測試具備一定數量並起到了一定保障作用。
自動化功能測試全集頻繁執行,不少於一天一次。
中等:
最小工作單元包含自動化測試工作。
不同層級的自動化測試發揮質量保障作用。
靜態程式碼檢查及相關舉措
可以在構建中推薦提測版本
自動化提測
進階:
普遍的單元測試,發揮良好效果。
自動化測試覆蓋率較高,測試工作被有效分散在開發階段。
手工測試大部分屬於探索性測試。
瘋狂:
100%單元測試覆蓋率。
自動化測試提供信心十足的質量保證,構建成功後即自動部署。
通過下面問題進一步瞭解團隊的構建現狀:
有那些級別的測試,現狀如何?
提測流程是怎麼樣的?需要多長時間?有多少人工參與?
集中的測試階段佔整個專案週期的比例?
QA和RD的合作流程是怎麼樣的?
有那些自動化測試,數量和質量分別如何?
自動化測試一般是什麼時候寫的,誰維護,怎麼管理和執行的?
什麼時間,如何做迴歸測試?
自動化驗收測試、效能測試以及安全性測試現狀?
應用了那些靜態程式碼檢查,怎麼用的?
單元測試的覆蓋率如何?
什麼時機,做那些人工測試?
如何選擇對哪個構建做測試?
5 部署及釋出維度
入門:
有輔助指令碼支援的手工部署
依據文件的人工上線流程
新手:
完整的部署指令碼支援
向測試環境的標準化部署
通過平臺的半自動上線流程
中等:
選擇指定的構建產出進行自動部署
可以推薦某個構建為上線候選版本
進階:
向生產環境中一鍵釋出,一鍵回滾。
向生產線部署後的自動化驗證。
瘋狂:
一鍵恢復生產環境
通過下面問題進一步瞭解團隊的部署及釋出現狀:
上線流程是什麼樣的?
是否需要通過work文件,郵件或是一個線上系統傳遞上線步驟或引數?
如何監測部署的質量?
如何做回滾操作?
如何向開發環境部署?有那些步驟?需要多少人工參與?
如何向測試環境部署?有那些步驟?需要多少人工參與?
有那些用於部署的指令碼?
團隊成員各自的部署環境有什麼區別?
如何選擇合適的構建做部署?
6 團隊習慣維度
入門:
至少有一個人隨時知曉構建狀態
階段性程式碼提交習慣
專人維護持續整合平臺和指令碼
新手:
專人看護平臺構建狀態
最小工作單元完成後即時合併到目標分支
所有人知曉當前的構建狀態
構建失敗後被及時修復或回滾,失敗期間沒人提交與修復構建無關的程式碼。
簽入前做本地自動化驗證
團隊成員簽入程式碼前做相同的本地驗證
失敗構建不過夜
中等:
失敗構建修復時間少於半個小時。
由提交人負責修復失敗構建,每個人都關注構建狀態。
團隊成員都寫較為全面的單元測試
每人每天向目標分支做至少一次對最小工作單元的有效提交。
團隊清楚持續整合平臺和指令碼內容,每個人都可以維護。
進階:
交付團隊全員對持續整合平臺的穩定構建負責。
交付團隊全員負責持續整合指令碼開發。
瘋狂:
1小時左右向目標分支做一次對最小工作單元的有效提交,且很少發現構建失敗。
通過下面問題進一步瞭解團隊的部署及釋出現狀:
RD如何定義自己工作完成的含義?
團隊簽入程式碼的規範是什麼?
是否在簽入程式碼前執行本地構建?
如何確保失敗的平臺構建有人處理?是簽入程式碼的人處理嗎?
構建失敗的頻率是多少?
團隊中誰維護自動化構建指令碼?
團隊中誰維護CI平臺?CI平臺有那些許可權控制?
團隊如何提高每個人的單元測試水平?
(作者:wenjian)
相關文章
- Flutter web 持續整合實踐FlutterWeb
- 持續整合(三):最佳實踐
- #翻譯#持續交付成熟度模型模型
- CI/CD 持續整合部署實踐
- Jenkins & Docker 持續整合實踐JenkinsDocker
- 持續交付成熟度模型 V1.2模型
- Artifactory & GitLab CI持續整合實踐Gitlab
- 京東到家的持續整合實踐之路
- Jenkins持續整合 入門實踐Jenkins
- 一個Web 持續整合工作實踐Web
- Practice - iOS 專案持續整合實踐(一)iOS
- Practice – iOS 專案持續整合實踐(一)iOS
- 個人對持續整合的理解和實踐
- Jenkins與Docker的持續整合實踐JenkinsDocker
- 軟體測試持續整合的方法實踐
- 質量之匙:持續整合工具與實踐
- 擁抱變化——持續整合(CI)實踐心得
- 持續整合、持續部署、持續交付、持續釋出
- 持續整合持續部署持續交付_持續整合與持續部署之間的真正區別
- 持續整合、持續交付、持續部署簡介
- 整合持續整合工具
- 使用流水線外掛實現持續整合、持續部署
- 淺談持續整合的理解以及實現持續整合,需要做什麼?
- MCI:移動持續整合在大眾點評的實踐
- iOS 持續整合iOS
- iOS使用fastlane實現持續整合iOSAST
- Jenkins + git實現持續整合JenkinsGit
- 淺談持續整合(CI)、持續交付(CD)、持續部署(CD)
- 對持續整合、 持續交付、持續部署和持續釋出的介紹
- 使用Xcode5的Bots做持續整合專案實踐XCode
- SoapUI實踐:自動化測試、壓力測試、持續整合UI
- Jenkins持續整合Jenkins
- 從持續整合到持續交付——DockerCloud概覽DockerCloud
- 持續整合領域的智慧排程探索及實踐 - 黃佳鑫
- [首發]國內某大型銀行的持續整合與交付實踐
- GitLab 持續整合在 Laravel 商用專案中的應用實踐GitlabLaravel
- 花椒前端基於 Docker 的 SSR 持續開發整合環境實踐前端Docker
- 談談持續整合,持續交付,持續部署之間的區別