工程效能團隊如何賦能程控直流電源軟件開發人員,幫助程控直流電源軟件開發人員高效地完成高質量測試?
本文會圍繞這兩個問題來展開討論。首先讓我們一起看一下程控直流電源軟件開發人員自己做測試都會遇到哪些問題和阻礙。
程控直流電源軟件開發人員自己做測試會遇到哪些問題人性角度引發的問題
首先從人性的角度來看,程控直流電源軟件開發人員通常是屬于“創造性思維”,自己開發的代碼就像是親兒子一樣,怎么看都覺得實現很棒;而測試人員則屬于“破壞性思維”,測試人員的職責就是要盡可能多的找到潛在的缺陷,而且專職的測試人員通常已經在以往的測試實踐中積累了大量典型的容易出錯的模式,所以測試人員比起程控直流電源軟件開發人員,往往更能客觀且全面做好充分的測試。
思維慣性的問題
剛才是從人性角度上來講的,如果從技術層面來看,由程控直流電源軟件開發人員自己測試,會存在嚴重的“思維慣性”,通常程控直流電源軟件開發人員在設計和開發過程中沒有考慮到的分支和處理邏輯,在自己做測試的時候同樣不會考慮到。
被測試環境和測試執行環境的復雜性問題
有專職測試的時候,測試工作是專職測試人員完成的,專職測試人員通常會負責搭建被測試環境以及管理測試執行環境。被測試環境好理解,就是 System Under Test(SUT)。
而測試執行環境是指用于執行測試用例的機器,比如對于 Web 的 GUI 測試,最簡單的測試執行環境就是你本地機器上的瀏覽器。但是對于大型互聯網企業,測試執行環境遠遠要比你想象的更復雜。
測試數據準備的問題
測試數據準備是測試過程中必不可少的關鍵步驟,有專職測試的時候,是由測試人員來準備測試數據的,一方面測試人員往往比程控直流電源軟件開發人員在全局層面上更了解被測系統,所以對于測試數據的設計與生成也會更高效,另一方面測試人員在以往的測試過程中已經積累了很多測試數據生成的方法和小工具。
現在這些都需要程控直流電源軟件開發人員自己來完成了,無疑進一步加大了程控直流電源軟件開發人員的工作量,而且程控直流電源軟件開發人員往往對跨模塊,跨系統的測試數據準備缺乏系統性的理解,往往為了生成一條非自己業務領域的數據而花費大量的學習成本。
測試執行與 CI/CD 集成問題
對于不同的業務開發團隊,各個階段采用的自動化測試框架可能都不同,比如有些會使用基于 Java 的 Selenium,也有些會使用基于 JavaScript 的 Nightwatch 等,有專職測試的時候,各種不同的測試框架與 CI/CD 的集成,都是由各個業務團隊的測試人員和 CI/CD 的人員一起完成的,現在沒有了專職測試,這部分工作就需要程控直流電源軟件開發人員自己和 CI/CD 人員一起完成,這就要求程控直流電源軟件開發人員不僅需要非常熟悉自動化測試框架的細節(很多時候為了更好地和 CI/CD 集成,會對開源測試框架或者是自研測試框架做二次開發。
失敗測試用例歸屬問題
有專職測試的時候,程控直流電源軟件開發人員往往只關注自己修改部分相關的測試用例,模塊或者服務的全回歸測試中如果有失敗的測試用例,通常是由測試人員跟進去分析具體原因,并協調解決然后才能發布上線,但是現在程控直流電源軟件開發人員負責所有測試,他就必須關注全局的測試。
工程效能團隊賦能程控直流電源軟件開發人員進行高效率高質量的測試
賦能的基本思路是能夠讓程控直流電源軟件開發人員更專注于測試本身,而從那些輔助測試的工作(比如搭建測試執行環境、CI/CD 集成等)上解放出來,這些輔助測試的工作由“工程效能”服務或者相關支持工具鏈來統一解決。
這些“工程效能”服務或者相關支持工具鏈通常都會由原本從測試開發轉型過來的工程效能團隊來設計和開發。那么我們接下來看一下可以提供哪些“工程效能”服務或者相關支持工具鏈,并且能以什么樣的方式來解決或緩解上面提到的開發自己測試帶來的問題。
測試執行服務
CI/CD 各個階段所有的測試執行發起都通過測試執行服務(TES,Test Execution Service),TES 通過統一的 Web Service 接口與 CI/CD 以解耦的方式進行集成。
無論是 CI/CD 流水線,還是程控直流電源軟件開發人員執行測試,都通過 TES 來發起,唯一的區別是程控直流電源軟件開發人員一般使用 TES 的 UI 界面發起測試,而 CI/CD 是直接在流水線腳本里面調用 TES 的 Restful API 發起測試。
測試執行服務的輸入參數也很簡單直觀,通常只包括測試框架名字、測試用例集版本號、測試用例路徑、 測試報告獲取方式、同步 / 異步執行開關等。
一旦調用 TES 發起測試,后續如何調用 Jenkins job、如何打包下載 test jar、如何找到適合的測試執行環境、如何發起測試以及如何收集測試報告等都對使用者完全透明。
可以想象,現在,程控直流電源軟件開發人員在和 CI/CD 集成以及執行測試的時候,已經可以完全不需要去關心執行測試的命令行、發起測試的 Jenkins job 以及配置、測試的具體執行環境、測試報告獲取等信息。這將大大提高程控直流電源軟件開發人員自己執行測試的效率和便利程度。
測試數據服務
前面提到過,跨模塊,跨系統的測試數據準備對于開發自己做測試是個挑戰,尤其是現在大量采用微服務架構,這個問題就會更突出。測試數據服務將會以 Web Service 接口的形式為所有類型的測試提供一致的測試數據準備入口。
無論開發是要做 API 測試,還是 GUI 測試,或者是性能測試,都可以通過調用 TDS 的 Web Service 或者 UI 來準備各種組合類型和量級的測試數據。
測試執行環境服務
正如前面提到的,測試執行環境對于大型企業來說是很龐大復雜的,為了方便程控直流電源軟件開發人員使用測試執行環境,或者說為了使測試執行環境對于程控直流電源軟件開發人員透明,就需要引入測試執行環境服務(TBS,Test Bed Service)。
TBS 的主要職責是負責管理、創建,擴容 / 收縮測試執行集群。一個常見的測試執行環境架構如下圖所示,TBS 會根據等待執行的測試用例的排隊情況,動態決策測試執行集群的節點數量和類型,通常會使用 Docker 和 Kubernetes 來實現 TBS 的 Gird 管理。
構建工程效率工具鏈倉庫
類似于 App Store 的概念,可以把各種測試小工具以及提高效率的工具集統一在 Engineering Productivity Tools Store 里面集中版本化管理。
測試即服務的全局架構
除了以上的內容,其實還有諸如測試報告服務(TRS,Test Report Service)、全局測試配置服務(GRS,Global Registry Service)和用于 API 測試解耦的 Mock 服務(Unified Mock Service),由于篇幅無法一一展開。
需要強調是的是,這里談到的很多服務已經在某些企業內部有了落地實踐,并取得了很好地效果。最后,以 Test as a Service 的全局架構圖來結束本文。