演讲实录(文字+视频)丨基于DevOps的质量左移与右移思考
本文內容選自2021中國DevOps社區峰會 · 深圳站,陳曉鵬老師分享的《基于DevOps的質量左移與右移思考》文字實錄和視頻回放。
2022中國DevOps社區峰會 · 天津站,定檔8月13日,哏都歡迎你~文末可搶購盲鳥票哦~
分享嘉賓:陳曉鵬?
某中國著名互聯網公司項目管理專家
中國商業聯合會互聯網應用委員會智庫專家、ISO29119軟件測試國際標準評審組專家,暨南大學信息科學技術學院校友導師,原埃森哲金牌講師。擁有MBA,PMP,CSM,SAFe Agilist,LeSS Practitioner及EXIN DevOps Master/DevOps Professional/DevOps Foundation全系列DevOps認證,20年IT領域相關工作經驗,超過13年在IBM、埃森哲、德勤等國際頂尖IT咨詢及世界五百強公司工作,現為某中國著名互聯網大廠項目管理專家。
視頻回放:
以下是演講文字實錄:
一、DevOps的孿生兄弟們
在正式開始分享之前,想跟大家介紹一下DevOps的孿生兄弟們。DevOps就是Dev+Ops,Dev是開發,Ops是運維,經過幾年發展,出現了很多新詞,比如DevSecOps、BizDevOps、DataOps、AIOps等等,我們是否可以類推,如果加入測試,是不是就叫DevQaOps或DevTestOps?答案是否定的。
二、DevOps中的測試究竟在哪里?
那測試在哪里?很多人說測試在Dev里面,因為Dev并不是傳統意義上理解的開發人員,而是開發組織,開發組織包含測試,而Ops是運維組織,兩者結合起來就是DevOps。
去年我在寫《敏捷測試轉型》一書時,專門做了研究,看到下圖,大受啟發,它闡明了測試不僅在Dev里,也包含在Ops里,在無限循環的9個步驟里,都有test的活動。測試融入在DevOps中而不是融入在Dev中。
三、DevOps中的質量左移與右移
如圖所示,這是一個傳統的研發周期圖,從方案到需求、設計,到測試、上線。
所謂的DevOps的質量左移或右移是什么意思呢?圖中的測試,不是大家理解的傳統意義上的拿著需求說明書去做驗證,這部分測試活動用灰色表示,只占整個質量左移或右移體系里非常小的一部分,除此之外,還有黃色和藍色部分。黃色部分是指除了驗證需求和說明書外,還要發現一些系統里不可預料到的問題,這就是真正測試人員提升價值的所在。灰色部分可以用自動化去實現,而黃色部分需要用人的思維去做,這就是我們所說的探索式測試;藍色部分是在代碼還沒完成之前的過程,在這個過程中,QA和測試人員更多會從項目需求風險、可測性和假設等方面來判斷到底需求和系統有沒有問題、有沒有風險。
左移和右移的中間點是什么呢?我認為有兩點:
從測試人員角度看,左移是單元測試,上線之后就是右移。
從項目的角度來看,coding之前是左移,之后是右移。
這樣我們可以用一些比較流行的方法和技術來做支持,比如代碼寫完后可以用代碼掃描工具,可以做自動化單元測試、探索式測試等,其中自動化測試就是前面提到的灰色部分,自動化測試不能代表整個測試的過程,自動化測試永遠代替不了人工,探索式測試需要人工完成。
傳統的瀑布模式下,需求、設計、開發、測試按順序進行,這樣的流程下,怎么做測試,大家都很清楚。
那Scrum怎么做測試呢?
在開發的時候會有一個版本規劃,測試人員應盡早參與,分析理解,看有沒有風險、交付時間是否可以,包括資源、環境、數據、DoD等;做sprint時,首先要確保測試的容量,否則你會發現測試的吞吐量不夠,再往下走是提升測試的透明度,無論團隊成員在哪個地方,本地還是遠程,都要參與到每個討論環節中,要讓所有的計劃、進度非常清楚,如果有問題,要提早把問題、障礙、風險暴露給團隊;執行的時候,需要參與到代碼評審,以及開發人員的會議中,可以從測試專業的角度給開發提一些意見。
代碼覆蓋率與測試覆蓋率有什么區別?
代碼覆蓋率表示測試用例通過手動測試和使用自動化測試所覆蓋的代碼百分比。比如正在測試的代碼總行數是1000行,跑完所有的測試用例,不管是手動還是自動,跑過的代碼行數是650,那代碼覆蓋率就是65%。
測試覆蓋率的顆粒度是需求,測試覆蓋率是通過測試所覆蓋的需求來度量的,是度量有多少的特性/功能被執行。比如現在要做一個web應用程序的兼容性測試,可能會涉及到跨瀏覽器、跨操作系統,可以把跨瀏覽器、跨操作系統的最大比例算出來,比如是20個組合,做了15個測試組合之后,測試覆蓋率就是75%。
我們需要追求百分百代碼覆蓋率嗎?
如圖所示是單元測試的代碼段,就是驗證一個除法,x/y,測試10除以2是否等于5,很簡單。是否代碼覆蓋率100%?因為它已經覆蓋了x/y的語句。但其實它是有問題的,因為它沒有驗證y等于0的時候,我們都知道,除數是不能為0的。所以百分百的代碼覆蓋率,并不能代表質量就一定是高的。
有些語句并不需要做代碼覆蓋,比如getter、setter等語句的邏輯重要程度不是很高,代碼覆蓋的價值不大。另外,單元測試里,不應該與代碼實現有太緊密的耦合,比如在寫單元測試的時候,對于私有方法不需要寫單元測試。因此你會發現,代碼覆蓋率并不需要百分百,只要達到百分之七八十就可以了。代碼覆蓋率的價值,不在于要驗證百分百的通過率,而在于幫助你發現代碼哪些部分沒有被測試,從而提高測試通過性。
四、自動化測試
自動化測試是DevOps的質量保障基石。
下圖是一個交付流水線,從需求端到開發到單元測試 、代碼分析、合并代碼、自動化測試、手工測試、非功能測試、生產運營。標紅的是自動化測試領域范疇里的,包括自動化單元測試、自動化代碼掃描、代碼分析、冒煙測試、自動化部署等,在整個CI/CD流水線里,自動化測試有著非常重要的地位,也就是說,如果沒有自動化測試,CI/CD是有問題的。這些工作要在10分鐘內搞定,自動化驗收階段要小于2小時。如果做不到,就沒有辦法敏捷和快速反饋,表示自動化測試執行的效率需要優化。
五、探索式測試
什么是探索式測試?
自動化測試到底能不能完全依賴?前面提到,自動化測試不能解決人的問題,所以一定要有人的參與,人的參與指的就是探索式測試。
探索式測試是一種強調測試人員的自由和責任以不斷優化其工作價值的測試方法,它通過將學習、測試設計和測試執行作為互相支持的活動在整個項目過程中并行執行。
傳統測試一般分為兩個階段:測試用例編寫和測試用例執行,而且兩個階段是不同的人在操作;而探索式測試只有一個步驟,就是學習、思考、寫用例、執行,首先對被測的系統做學習研究,去想一些測試點,甚至用例都不用寫,只寫一些簡單的測試點就可以執行,而且它會重復性地執行。
探索式測試的原理是什么呢?為什么能發現bug?
舉個形象的例子,掃雷游戲,如圖紅色的點是雷。傳統的測試方法,先寫測試用例,然后執行,還是能掃到一些雷的,但是不多;探索式測試,無序或更多維的方向,很明顯掃到的雷更多。探索式測試是發散性思維來組織、思考測試點。
生產環境測試分為兩種方式:一種是上線后測試、一種是線上巡檢。
上線后測試是上線之后部署到生產系統,這時不是馬上開放給最終用戶去用,而是會有一段時間組織業務人員去做測試,目的是驗證應用部署到生產環境會有什么樣的問題,這時的測試往往是很短的,比如0點部署,5點截止,超過時間沒有測完可能會影響第二天的正常使用。因為有時間的限制,建議大家不要全回歸,要找核心重點的業務,還要避免臟數據。
線上巡檢是在日常系統里做測試,其核心點是近幾年在談的全功能測試,把測試數據做一個標識,在程序處理的時候,對不同的標識做判斷,注意要把測試數據流引到另一個方向,不要跟生產數據混合。
六、混沌工程
混沌工程是怎么來的?亞馬遜“災難大師”在做消防員訓練的時候得到啟發,在亞馬遜推行所謂的游戲日,不斷地說要在生產系統里,人為地注入一些故障,看系統能不能覆蓋,覆蓋的時間是多長。
最出名的是Netflix,在AWS里做了一只搗蛋猴子,殺進程、關服務,看是否能夠恢復。
下圖是混沌工程的流程。混沌工程有很多開源框架,但真正做混沌工程,最主要還是要覆蓋5個流程:穩定狀態、假設、設計并運行實驗、學習和驗證、改進和修正。
穩定狀態。要知道現在的正常狀態是什么,如果做了混沌工程,不知道恢復的時候是什么狀態,就很頭疼。一般怎么知道?用指標、KPI,而且要設計跟業務相關的KPI,比如點播率、每個月賣出的數據量等,用業務相關的數據做反饋。
假設。假設停電了、系統宕機了、進程死掉了,做了假設之后要選擇哪個假設是你要做的,不能說全部一起做。
設計并運行試驗。選擇了假設后,要設計并運行試驗,看爆炸路徑多長、爆炸范圍、影響多大,一定要控制好爆炸半徑,否則可能整個系統都宕掉了。設計并運行,最好的方式是切一小部分用戶做測試,比如先拿1%的用戶做工程實驗,這是減少風險的很好方式。
學習和驗證。學習驗證,總結發現漏洞。
改進和修正。發現漏洞要改進,比如單點風險需要擴容,需要做負載均衡等。
往期推薦
演講實錄丨DevOps工程師=文化工程師
演講實錄(文字+視頻)丨使用Operator提升軟件交付能力
演講實錄丨DevSecOps在大型銀行的敏捷實踐
演講實錄(文字+視頻)丨唯一可信源的建設方法和案例
演講實錄(文字+視頻)丨DevOps一體化平臺落地及研發效能度量實踐
演講實錄(文字+視頻)丨DevOps度量與改進
演講實錄(文字+視頻)丨Ansible在DevOps中的應用
演講實錄丨數據共享驅動產業鏈業務模式升級和技術創新
2021中國DevOps社區峰會·深圳站完美落幕,明年再聚!
演講實錄丨中國DevOps社區 快樂中砥礪前行
演講實錄(文字+視頻)丨科創時代下的創新與敏捷
演講文字實錄丨數據驅動的模型工廠在工業企業的應用實踐
演講文字實錄(文字+視頻)丨從DevOps發展角度看應用架構的演進
2022中國DevOps社區峰會 · 天津
8月13日??天津賽象酒店
掃描海報二維碼或點擊“閱讀原文”
即可搶購盲鳥票
總結
以上是生活随笔為你收集整理的演讲实录(文字+视频)丨基于DevOps的质量左移与右移思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入文字后不会自动变长的下划线如何制作
- 下一篇: SD卡文件权限