DevOps 時代的高效測試之路

CODING發表於2021-10-31

10 月 22 日,2021 屆 DevOps 國際峰會在北京順利召開,來自國內外的頂級技術專家共同暢談 DevOps 體系與方法、過程與實踐、工具與技術。CODING 測試及研發流程管理產品總監程勝聰(Diego)在大會現場接受了 CCTV《態度》欄目組的專訪,也在 DevOps 最佳實踐及解決方案專場為大家分享了他的主題——DevOps 時代的高效測試之路。

5IpK58.png

測試正在成為持續交付的最大瓶頸

業界對於測試的焦慮由來已久。從 2017 年開始,行業開始對測試困境形成共識,即測試不夠快成為導致交付延期的主要原因。之後,行業開始強調自動化測試,提出打造快速反饋環、流水線工作流和工程文化等理念。

5IpZDI.png

在這種背景之下,Diego 認為,持續測試是 DevOps 時代的高效測試之鑰。測試作為一項基礎的、持續的活動,理應貫穿於整個軟體交付週期之中。持續測試改變的是傳統測試後置的工作模式,讓測試活動延伸到 SDLC 的每個階段。

5IpnVP.png

高效測試需要以自動化為實踐基石

從一項對於測試時間花費的調研中可以得知,測試執行佔了總時間的四成。因此如果要提升整體測試效率,首要的就是通過自動化來提升測試執行的效率。然而,測試團隊發現即使在 CI 中配置好自動化程式碼庫,由於待執行的用例集合是固定的,隨著自動化測試覆蓋率提升、自動化程式碼越來越多,執行時間越來越長,於是執行頻率卻越來越低,效果並不如人意。

Diego 指出,只是默默地寫自動化程式碼是不夠的,自動化測試需要"更聰明地執行"。如果能夠人工地將需求(Req)、用例(Case)以及自動化函式(Func)關聯在一起,靈活確定測試子集會讓測試變得更加自由。如果某個自動化函式執行失敗,則可以迅速定位到某個有問題的需求,團隊再根據問題的優先順序和影響,來判定是否能夠繼續釋出。

5IpVKA.png

新的時代,新的流程

在新的時代,提倡新的流程。持續測試並不僅僅只是自動化測試、還有對流程的全域性優化,這需要我們從單點(執行)效率的提升延伸到全域性效率的提升。工具/技術改進過程效率(efficiency),而流程會指向正確的結果(effectiveness)。

那麼,DevOps 時代需要什麼樣的測試流程?

首先,Diego 認為敏捷宣言的四個“高於”清晰的指出了研發應該關注於為使用者帶來價值的行為和結果,而不是過程中的產物。

然而儘管協作很重要,卻不意味著流程、文件、計劃不重要。只要軟體的複雜度還在,有助於軟體順利交付的流程、文件、計劃都是必要的。只是需要相應變化、與時俱進——轉為輕流程、簡潔文件、儘早計劃,或“演進式”的流程/文件/計劃。

DevOps 需要更輕,更強調角色協作的流程。測試團隊首先需要圍繞需求開展測試,策略性定義子集,並且確定基於風險的測試策略。其次,團隊需要推動測試左移,讓測試與開發並行工作。在這個階段,需要完成的工作包括單元測試、測試評審、程式碼掃描,以及基於介面定義的開發和自動化測試。最後,還需要實踐測試右移,讓“測試永不退出”—— 在部署之後,還需要進行線上的實時監控,保證問題得到快速發現和處理。

5Ipebt.png

此外,DevOps 還需要健壯的規範和快速的反饋。Diego 認為:研發“一致性”是效能提升的基礎,規範能夠降低協作中的人為產生的主觀複雜度、避免不必要的上下文理解。而快速反饋不僅僅是減少手工操作的“勞力花費”、更重要的是減少成員的“心力損耗”,讓成員可以專注於自己的工作,不必要在不同平臺之間來回切換。軟體開發的藝術成分應該被關進籠子裡,而在軟體開發中並不需要藝術的部分,例如機械的判斷選擇、和協同所需操作,應趨向於科學化和量化。

騰訊雲內部落地實踐的分享

最後,Diego 向現場觀眾分享了騰訊雲 CODING 團隊內部的落地實踐,展現研發一體化的高效測試是如果實現的。

在研發過程中,存在各種各樣的活動。研發團隊中的不同角色,如產品、開發、測試以及運維一般都只關注自己所負責的活動,然後不同角色活動之間也存在關聯,協作產生的活動便形成一個完整的工作流。在此基礎之上,加入准入準出規範可以讓協作更加健壯,而自動操作則讓流動更加高效。CODING 正是基於這樣的邏輯,來為研發流程的高效管理設計出 CODING Compass 這一產品。

然而,DevOps 不應該只是研發團隊自嗨的領域,我們還需要跟業務價值連線起來。通過把研發活動對映到業務人員所熟悉的階段:計劃、開發、測試、部署,並且保持對 Lead Time(前置時間)、Process Time(處理時間)、% of Completeness &Accuracy(完成&準確百分比) 等指標的關注和持續改進,形成價值流管理。

5IpuUf.png

接下來,Diego 向大家介紹了騰訊雲 CODING 團隊是如何將測試活動嵌入其中的。

首先,迭代規劃階段會圍繞著需求開展測試,策略性的定義測試子集。測試與開發緊密協作,同時認領同一需求任務。而當迭代 Backlog 確定下來之後,也就表示測試範圍定下來了,測試計劃就可以建立,而需求的驗收標準也就可以直接轉換為功能點用例。

而在迭代進行時,測試和開發並行進行工作,在開發人員編碼單測的同時、進一步細化用例使之完整,並及時進行評審。在寫自動化用例的時候,我們可以利用 CODING 平臺的幫助實現自動化用例與功能用例的關聯。

5IpQPS.png

從而,當從測試計劃中發起測試執行,關聯的自動化用例會被指定執行。

5Ipl8g.png

通過踐行研發一體化的高效測試,團隊的高頻釋出得到了堅實的支撐,月均成功釋出次數 400+,需求的測試覆蓋度 96%,而且覆蓋主幹的自動化用例集通過持續重構基本上維持在 1400 的數量(冒煙自動化用例必須要在 15 分鐘內執行完畢)。

最後,Diego 總結道:CODING 之所以能實現高效的測試,3 個方面理念的轉變是尤為關鍵的。

首先是打破職能筒倉、實現目標共享。在過去開發和測試人員的目標通常是割裂、甚至相互對立的,開發人員看重寫了多少行程式碼,測試人員則關注發現了多少個 bug。正確的觀念應該是賦予團隊同一目標,讓不同角色圍繞業務需求展開工作,共同交付高質量的軟體。

其次是,改變“階段式交接”為“小步快走”的工作模式。開發和測試應該以同樣優先順序順序來處理需求,這樣到了交付的時候得到的是成品而非“半成品”。一方面在全域性通過控制在製品數量來縮短交付時間,另一方面在區域性則通過自動化的手段來進行單點的加速。

最後,則是實現了真正為團隊成員賦能。賦能並非要求所有人都是全才,而是讓團隊成員都放心的與其他人協作、或者使用其他人提供的工具和服務。為了解除疑慮、保障協作過程的順暢,通過標準規範的設定來提升活動的一致性,為團隊效能提升帶來積極的影響。

相關文章