當前位置: 妍妍網 > 碼農

研發效能最佳實踐:基於自動化測試的實踐實作交付效率提升的研究丨IDCF

2024-02-29碼農

點這裏 👇 星標關註,獲取最新資訊!

作者:劉偉偉

研發效能(DevOps)工程師(中 級)認證學員

摘要

本文透過實踐案例分析,探討了自動化測試在提升軟體交付效率中的作用,並提出了自動化測試流程制度建設與工具建設的策略。文章指出,自動化測試的實施需要明確目標,選擇合適的工具,建立有效的流程制度,並透過數據度量和持續改進來實作交付效率的提升。

目錄

第一章 引言

第二章 自動化測試的實踐與挑戰

2.1 自動化測試與DevOps的關系

2.2 為什麽要實施自動化測試

2.3 自動化測試實踐的目標與現狀

2.4 自動化測試的實施計劃

第三章 自動化測試的未來發展趨勢

第四章 結論

第一章 引言

隨著軟體開發的復雜性增加,DevOps的誕生與流行,作為DevOps中的自動化測試已經成為提升軟體交付效率的重要手段。然而,自動化測試的實施並非一帆風順,需要面對許多挑戰,如目標確定、工具選擇、流程制度建設、度量指標確定等。本文將透過實踐案例分析,探討這些問題並提出相應的解決策略。

第二章 自動化測試的

實踐與挑戰

2.1 自動化測試與DevOps的關系

自動化測試與DevOps有著密不可分的關聯,二者相互強化,共同提升軟體交付的品質與效率。在DevOps的文化中,測試不再是軟體開發生命周期中的一個孤立階段,而是貫穿整個流程,從需求分析到產品上線的各個階段,確保了品質的持續把關。而自動化測試在此過程中扮演了關鍵角色,它透過一系列自動化的手段,對軟體進行快速、高效的測試,從而加快了叠代速度,提高了交付頻率,同時保持了軟體品質[1]。
具體來看,自動化測試在DevOps中的重要性體現在以下幾個方面:

(一)加速反饋迴圈:在DevOps模式下,快速反饋是核心優勢之一。自動化測試能夠透過連續的構建、測試和部署,加速從開發到營運的反饋迴圈,開發團隊可以更快地獲得關於軟體品質的資訊,並及時進行調整最佳化。

(二) 支持持續整合/持續部署:自動化測試是持續整合(CI)和持續部署(CD)的重要支撐,它確保了在程式碼整合到主分支後,能夠快速執行測試,及時發現整合錯誤,從而提高整體的整合品質[2]。

(三) 確保釋出品質:在DevOps的持續交付過程中,自動化測試保證了傳遞給使用者的品質,透過自動化的方式,在程式碼推播到生產環境之前進行嚴格的測試,降低了因匆忙釋出存在缺陷的軟體而帶來的風險。

(四)促進協作:在DevOps的文化中,開發、測試、運維之間的協作和溝通至關重要。自動化測試工具和平台的引入,有助於打破資訊壁壘,促進不同部門間的溝通與協作[3]。
總的來說,自動化測試是DevOps文化中不可或缺的一部份,它透過實作快速叠代、高品質交付和高效協作,促進了軟體組織的敏捷性和市場競爭力。

2.2 為什麽要實施自動化測試

自動化測試是在軟體測試領域中非常重要的一環,它對於提升測試效率、保證軟體品質、加速交付過程等方面發揮著至關重要的作用。

(一)提升測試效率:在快節奏的軟體開發環境中,自動化測試可以大大提高測試效率。透過自動化執行測試用例,可以節省大量的人工操作時間,特別是在處理大量重復性或繁瑣的測試任務時,自動化測試的優勢尤為明顯。

(二)保證軟體品質:自動化測試可以幫助團隊確保軟體品質,透過持續地執行測試用例,可以在軟體開發的早期階段發現和修復錯誤,從而降低後期的修復成本。此外,自動化測試還可以提供一致和可靠的測試結果,有助於團隊對軟體品質進行準確的評估。

(三)加速交付過程:在DevOps文化和持續整合、持續部署(CI/CD)的實踐背景下,自動化測試成為了加速軟體交付過程的關鍵因素。透過自動化測試,開發團隊可以快速得到反饋,及時最佳化調整,從而實作快速叠代和持續交付。

支持回歸測試:自動化測試非常適合於回歸測試,可以確保在軟體更新或修復後,相同的測試可以重復執行,從而確保更改沒有引入新的錯誤。

(四)提高測試覆蓋率:自動化測試可以透過執行大量的測試用例來提高測試的覆蓋率,從而更好地檢查和驗證軟體的功能和效能。

(五)提升測試的可維護性:自動化測試指令碼易於維護,特別是當測試用例發生變化時,自動化測試可以更容易地進行更新和調整。

(六)提升測試的可復用性:自動化測試用例可以重復使用,這對於回歸測試特別有價值。透過自動化,測試人員可以確保在軟體更新或修復後,相同的測試可以用相同的方式重復執行,從而確保更改沒有引入新的錯誤。

(七)提升測試的客觀性:自動化測試可以提供更為客觀和一致的測試結果,因為同樣的測試用例每次都會按照同樣的步驟執行,不受人為因素影響。

(八)提升測試的非幹擾性:自動化測試可以在不影響使用者正常工作的情況下進行,尤其是在夜間或系統空閑時段執行,從而避免了因測試而造成的服務中斷或使用者體驗下降。

(九)提升測試的準確性:自動化測試可以減少由於人為因素導致的誤差,如遺漏測試某些場景或錯誤地記錄測試結果。

2.3 自動化測試實踐的目標與現狀

當公司確定自動化測試在DevOps中的地位,以及對交付效率及軟體品質提升的期望,決定推進自動化測試的實踐,希望在自動化測試實踐下達成以下目的:提升軟體交付效率、節省測試資源投入、提高軟體交付品質。

不過在實踐過程中遇到了很多挑戰,公司在推進自動化測試的實際現狀如何呢?

(一)開發人員跟測試人員的比例為非常懸殊,開發人員多,測試人員少的現狀一直制約著自動化測試的推進;

(二)單元測試一直沒有實際開展,開發人員更多是執行單介面測試,透過在本地出發單介面請求測試程式程式碼是否邏輯正常、開發功能無異常;

(三)介面文件缺失,公司在多年的資訊化建設過程中,建設了非常多的系統,這些系統有采購的,有自建的,有合作開發的,有些系統的介面文件是比較完善的,但更多的情況是缺少介面文件,測試人員在開發介面自動化測試指令碼時,缺少必要的輸入,;

(四)公司成立以來,未進行過介面自動化測試及UI自動化測試,自動化測試領域是空白的,大家都沒深入做過自動化測試,人員能力有限,會的人少;

(五)公司已完成建設需求交付管理及流水線系統。

2.4 自動化測試的實施步驟

基於公司的現狀以及對DevOps的認知,首先選擇把自動化測試金字塔中的三層模型變更為四層模型,將介面測試拆分為單介面測試與多介面場景測試,由開發人員執行單元測試與單介面測試,測試人員執行多介面場景測試及UI自動化測試,此處未嚴格規定只能如此執行,開發人員實際上也可以執行多介面場景測試,作為自動化測試的推進者,提供工具、執行流程及培訓。

其次工具選擇上更多選擇能夠整合至流水線上的工具,單元測試采用Junit+Mockito,單介面測試采用線上介面管理工具,多介面場景測試選擇流水線中現成工具,UI自動化測試采用以RPA為主,SeleniumUI為輔的選型。透過這些工具的使用,提升了很多方面。

最後自動化測試流程制度建設與工具建設,作為自動化測試任務的推進者,此外還必須包括營運,並確定度量指標,透過數據體現自動化測試過程,並確定待提升的點,做的好進行表揚,做的不好進行改善,透過數據進行分析,持續改善。

以下是實施自動化測試的詳細步驟。

2.4.1 確定實踐目標

在剛開始推進自動化測試時,最重要的是明確目標,想透過自動化測試實作什麽目標,只有目標明確,才能有的放矢。故此最後確定的目標是提升軟體交付效率、節省測試資源投入、提高軟體交付品質,同時在實踐的過程中註重培養團隊能力,提升個人技術水平及工具使用熟練度,只有自動化測試指令碼的開發速率足夠快,自動化測試的投入產出比才更有價值,畢竟最終目的之一是為了提高交付效率。

在實踐目標的確定上,切記不要好高騖遠,目標不能定的太高,不然期望越高,失望越大。在設定實踐目標時,應該保持現實和務實的態度,避免設定過高的目標。這裏面臨的第一個挑戰是領導對自動化測試的期望太高,總認為一上自動化測試,就能夠提升多少交付效率,提高多少品質,發現多少缺陷,但實際上並沒有。自動化測試首先被套用的場景是回歸測試,本身回歸測試就不會發現很多缺陷,不能因為缺陷發現的少就否定自動化測試的價值。

還有另外一個挑戰,針對公司內部資訊化系統的建設,在軟體交付過程中一直是缺少回歸測試的,如果在自動化測試實踐套用在回歸測試,就會認為自動化測試階段是多余的,是不需要做的,這裏是觀念不同導致的,之前沒做不代表就不需要做,只是之前省略掉該步驟,這裏其實隱含的另一個挑戰,是對上線內容生產缺陷的重視度不夠,只有敬畏生產環境,敬畏生產缺陷,在軟體交付中才能夠做到尊重生產環境,認真對待每一個缺陷,盡可能地預防和修復它們,以保證產品的品質和使用者的滿意度,提高使用者體驗。

2.4.2 組建實踐團隊

一個好漢三個幫,單打獨鬥是無法實踐DevOps的,尤其是做不好自動化測試,所以在實踐開始前,組建一個高效的自動化測試團隊需要綜合考慮多個因素,包括團隊成員的選擇、團隊結構的規劃、團隊文化的塑造等。

團隊成員的選擇:選取開發、測試、測開人員組建自動化測試團隊。這時候其實有很多成員其實對自動化測試了解不足,這個沒有關系,只要態度上是積極的,對自動化測試有熱情即可。這裏面臨的挑戰是團隊成員參與度不夠,技術能力不足。

參與度不夠是因為自動化測試的實踐是兼職參與,團隊的成員有自己的本職工作,只能夠參與部份工作,所以解決該問題重點是確定統計指標,在什麽時候完成多少工作內容,完成那些工作內容。

技術能力不足只能透過加強培訓,並在實踐中學習,在學習中實踐的方式解決該挑戰。

2.4.3 選擇合適的工具

選擇合適的自動化測試工具是提升測試效率、保證軟體品質的關鍵步驟。在自動化測試工具市場中,有多種工具可供選擇,每種工具都有其獨特的優勢和適用場景。以下是在選擇自動化測試工具時需要考慮的一些關鍵因素:工具整合能力、易用性和學習曲線、是否開源或具有二次開發能力、對編碼能力的要求及社群活躍度。

工具整合能力:考慮跟流水線的整合,跟使用者中心的整合等,只有整合在流水線之後,才能切實有效的自動化觸發執行,有效提升交付效率;

易用性和學習曲線:易用性對於團隊來說是一個重要因素。一些工具設計得非常使用者友好,而其他工具可能需要更多的技術專長來設定和使用;

是否開源或具有二次開發能力:這裏僅為了符合公司規定,確保具有獨立自主的系統能力,能夠自主決定如何客製化系統;

對編碼能力的要求:根據團隊中成員的編碼技能來選擇工具也很重要。雖然有些工具聲稱不需要編碼技能,但擁有一定程度的編碼知識通常有助於更有效地利用自動化測試工具;

社群活躍度:一個活躍的社群和良好的支持對於解決使用過程中可能遇到的問題至關重要;

最後確定采用的工具如下:

單元測試采用Junit+Mockito組建組合使用,線上結果掃描采用流水線整合SonarQube實作線上化管理及數據采集;

單介面測試采用契約管理線上管理工具,優點是工具開源,後續可整合對接至流水線,同時兼顧介面文件管理及線上介面測試管理功能;

多介面場景測試采用Magic介面自動化測試工具,本工具跟流水線工具一塊被引入,跟流水線天然整合,雖然有些相容性問題,但能夠透過程式碼的客製化開發提升最佳化,使用該工具,天然整合流水線,形成流程閉環;

UI自動化測試采用以RPA為主,Selenium為輔的方式,RPA支持視覺化頁面元素確定采集,有效降低頁面元素定位難度,同時視覺化組建托拉拽的實作,有效降低指令碼開發難度,但無法相容更多套用場景,此處透過采用Selenium方式進行補充。

選擇最合適的自動化測試工具需要根據計畫的具體需求和團隊的技術能力進行綜合評估。嘗試工具的試用版本、評估其社群支持以及進行小規模的試點計畫,都是確保所選工具能夠有效地滿足計畫需求的不錯方式。

2.4.4 實踐試點

自動化測試的推廣采取試點的方式進行。基於各系統的開發敏捷團隊及接受程度選擇2個系統進行試點,確保試點的成功並能從中學習和積累經驗。

試點計畫之一是團隊對自動化測試的引入非常有興趣和熱情,願意嘗試新方法並提供反饋。

試點計畫之二是系統問題較多,團隊正積極透過各種方式實作生產缺陷的降低,故此積極引入自動化測試,希望自動化測試能夠降低系統上線風險,提高交付品質。

透過實踐試點,總結經驗教訓,分析試點的成功和失敗之處,為今後更廣泛的自動化測試推廣提供寶貴的參考和指導。

透過實踐試點的方式,自動化測試能夠在特定的環境下先行實施,從而降低風險並提高成功率。同時,試點計畫積累的經驗和數據,將為自動化測試在整個組織中的推廣提供堅實的基礎。

2.4.5 流程制度建設

制度建設,如果是做個demo的話,那選擇工具開發完指令碼上線執行即可,但為了自動化測試持續不斷地執行,需要流程制度的建設,只有將流程固定下來,形成閉環,才能持續運轉,持續改善。

流程制度是自動化測試中非常有價值的智力資本,透過梳理流程,將自動化測試有機整合至軟體交付流程,為自動化測試提升長久的生命力,透過規範制度的建立,將自動化測試實踐的規範內容透過制度的形式確定下來,確保測試過程的標準化和一致性,提高測試效率和品質,透過將這些實踐內容制度化,並輔以適當的團隊結構和治理模式,可以確保自動化測試的有效實施和持續最佳化。這不僅有助於提高軟體測試的品質和效率,還能支持更快的釋出周期和更好的決策制定。

這裏面臨的挑戰是無法協調開發、測試的資源投入,現有交付流程下,開發跟測試之間的工作內容已經確定,此時再增加一項自動化測試的內容,讓開發人員及測試人員編寫自動化測試指令碼,執行自動化測試用例,表面上看降低了交付速率,但實際提升了軟體交付品質,提高了交付效率,綜合來看還是能夠有效提升效率的,不過在協調各團隊成員時,需要透過有力的數據對比,領導的支持等方式實作流程的固化,規範制度的建立。

2.4.6 度量與改善

自動化測試的一次實踐並不是終點,而是開始。

自動化測試實踐的度量對於評估測試過程的效果、定位問題以及指導未來的改進至關重要。有效的度量指標可以幫助團隊了解自動化測試的覆蓋範圍、效率和品質,進而采取措施進行改善。以下是確定的度量指標及其改善方法:

測試用例自動化執行占比: 自動化測試的工作如何跟測試階段進行整合,並評估自動化測試的占比,需要透過自動化執行占比來評估自動化的程度,並能夠透過該指標確定每個系統及每個測試人員自動化執行的占比。為了增加覆蓋率占比,可以設計更多的自動化測試用例,特別是針對關鍵功能和高風險區域。

自動化指令碼bug發現率: 指標顯示了自動化測試執行發現的有效bug數,並占所有有效bug數的百分比。為了提高這個比率,可以最佳化自動化測試指令碼,使其更能模擬真實使用者行為,或者在不同的測試環境中執行自動化測試。

自動化測試指令碼執行次數: 指標顯示自動化測試指令碼的執行了多少次,反映自動化測試投入產出比,只有執行次數達到一定數量後,產出才會大於投入,說明該場景的測試指令碼開發是有價值的。

自動化測試指令碼執行時間: 指標記錄了執行單個自動化測試用例所需的時間。執行時間過長可能意味著需要最佳化測試指令碼或改進測試環境。透過重構指令碼、減少冗余操作或利用更高效的服務,可以降低執行時間。

自動化測試用例異常率: 指標反映了自動化測試用例執行失敗的比例。過高的異常率可能表明系統不穩定或測試用例需要更新。透過監控系統狀態、最佳化測試指令碼和維護測試用例,可以降低異常率。

透過這些度量指標,團隊可以系統地評估自動化測試的效果,辨識改進領域,並采取具體措施以提高測試效率和品質。持續的最佳化和調整對於保持自動化測試的有效性至關重要。

第三章 自動化測試的

未來發展趨勢

DevOps的本質是為了實作快速、高效且有價值的交付,對自動化測試實踐的思考同樣逃不開該本質目的,我們在自動化測試實踐時,同樣思考還能夠采用哪些新思維新技術實作自動化測試的高效交付。在研究行業發展趨勢及新技術之後,認為自動化測試的未來發展趨勢將緊密與人工智慧(AI)、機器學習(ML)、大數據、雲端運算等技術的發展相結合,以便應對日益復雜的軟體系統和持續變化的測試環境。隨著互聯網和物聯網裝置的激增,以及移動應用程式和雲端運算服務的廣泛套用,自動化測試的需求將持續上升。

(一)人工智慧和機器學習: AI和ML技術將在自動化測試中發揮更大作用,例如透過智慧分析測試數據、自我修復測試指令碼以及預測軟體故障等。這將進一步提高測試的準確性和效率,同時減少人工幹預的需要。

(二)大數據和雲端運算: 大數據將使得自動化測試能夠處理和分析海量數據,而雲端運算則提供了一種彈性可延伸的服務平台,使得測試過程可以更加靈活和高效。結合容器化和無伺服器架構,自動化測試將能更好地適應現代軟體開發中的微服務體系和持續整合/持續部署(CI/CD)流程。

(三)移動應用程式和互聯網應用程式: 隨著行動裝置和Web服務的普及,針對移動應用程式和Web應用程式的自動化測試將變得更加重要。這包括使用模擬器和真實裝置進行的測試,以及針對不同作業系統和瀏覽器的相容性測試。

(四)安全性和私密: 在自動化測試中,安全性和私密保護將變得至關重要。測試過程中需要確保數據的安全傳輸和儲存,同時驗證應用程式是否遵循相關的安全標準和私密法規。

(五)虛擬現實和增強現實: 隨著虛擬現實(VR)和增強現實(AR)技術的發展,針對VR/AR應用程式的自動化測試也將成為一個新興領域。

(六)無程式碼和低程式碼測試工具: 無程式碼測試工具將允許非技術人員透過圖形界面和拖放元件等方式快速建立測試用例,而低程式碼工具則允許開發者以少量程式碼快速搭建測試指令碼。這將加速測試過程的自動化,並降低測試門檻。

綜上所述,自動化測試的未來發展趨勢將是一個持續前進演化的過程,它需要測試人員不斷適應新技術,采用創新的測試方法和工具,以保障軟體品質,提高測試效率,並滿足現代軟體開發的需求。

第四章 結論

自動化測試在DevOps實踐中的實施,雖然面臨著許多挑戰,但透過采取有效的應對策略和實際路徑,可以有效地提升軟體交付效率和品質。自動化測試的實施需要明確目標,選擇合適的工具,建立有效的流程制度,並透過數據度量和持續改進來實作交付效率的提升。透過實踐案例分析,本文證明了自動化測試在提升軟體交付效率中的作用,並為自動化測試的實施提供了參考。

參考文獻

[1]【自動化工具對中國DevOps實踐的影響】 黃璜、張賀、邵棟著 2019年10月

[2]【面向DevOps的軟體工程新技術專題前言】‌榮國平、白曉穎、嶽濤著 2019年10月

[3]【DevOps中的測試實踐】 騰訊WeTest平台 2020年12月

與其臨淵羨魚,不如退而結網,用力擁抱夢想!!!

【研發效能(DevOps)工程師 職業技術認證】

掌握端到端的研發效能知識體系,是想要成為高級管理者的必備技能!

八期班-3月20日,正式開班! 立即報名,擴充套件職業發展與晉升之路!