- 軟件測試:實踐者方法
- 孫志安等編著
- 6422字
- 2024-09-19 17:31:45
1.4.2 軟件測試發展趨勢
無論是基于技術發展還是工程實踐視角,分析軟件發展需求及其面臨的挑戰,在可預知的未來,數字化、敏捷化、自動化、智能化、服務化是軟件測試發展的主流方向,是驅動軟件測試創新發展、融合發展、跨越發展的重要抓手。
1.4.2.1 數字化
軟件測試不僅需要關注程序的靜態特性,更加需要關注動態環境、任務場景下的數據及環境配置、操作使用、系統效能、交付能力等問題。等比例構建真實測試環境既不經濟,也不現實。基于系統工程業務數字化及系統開發模式轉型,軟件測試從線性、以文檔為中心的過程向動態、互連、以數字模型和虛擬現實為中心的生態系統轉型,虛擬測試、數字化測試迎來了重大發展機遇。
數字化測試是基于測試需求,構建數字化模型及仿真環境,以替代真實環境,獲得等價的測試數據,驅動測試。數字代理、數字孿生、不確定性量化、數字化決策、數字化試驗鑒定計劃(Test & Evaluation Main Plan,TEMP)等,為數字化測試轉型奠定了堅實基礎;以模型為中心,對測試過程及測試策略進行持續動態調整,適應軟件需求的變化及迭代升級;以虛擬現實為手段,基于價值的決策分析、貝葉斯信任網絡等,基于數據驅動的測試風險分析和決策成為可能;使用數字化手段對測試能力及測試過程的不確定性進行度量,獲得軟件系統性能參數的敏感性、實現需求、過程及測試結果的數字化表征,支撐測試過程虛擬化及持續改進。
數字化測試與虛擬測試相輔相成,旨在突破經典軟件測試對時空的限制,實現操作的交互性,測試輸入、測試結果的仿真性。首先,基于軟件設計分析,生成模塊表、變量表、指令描述表、調用關系樹,逆向生成可視化程序流程圖,與軟件系統動態關聯,實施靜態分析。其次,基于數據源特性,以軟件缺陷模式,構造軟件系統運行環境和任務場景,通過雙向查詢與實時同步、CPU模擬、存儲器模擬、時鐘模擬、中斷控制模擬、通信模擬等,生成測試用例,注入測試數據,實現軟件系統動態模擬。最后,基于系統任務場景、質量目標、使用模式、運行剖面等,逆向生成流程圖標識語言,使用流程圖標識語言生成流程圖塊文件,將流程圖塊文件與系統數據流耦合,實現系統能力驗證。
1.4.2.2 敏捷化
輕量級、能更好適應客戶及市場需求變化、加速價值交付及迭代更新的敏捷軟件開發快速發展,DevOps文化普及,持續集成和持續部署已成為軟件開發的標準實踐。為適應這種一切敏捷、快速迭代、頻繁發布的軟件開發模式,軟件測試敏捷化,勢在必行。
知名咨詢公司Accenture將敏捷測試定義為:遵循敏捷開發原則的一種測試實踐。敏捷測試將測試集成到軟件開發流程,貫穿于軟件生命周期過程,自我驅動、靈活賦能,持續響應客戶反饋,加速價值交付;基于軟件迭代開發,同步進行測試迭代,快速反饋質量狀態,不斷修正質量指標,及時調整測試策略,持續改進測試過程;同步組織實施測試迭代,強化與軟件開發的合作,強化測試的持續性和跨職能團隊的協作,使得軟件測試具有更強的協作性、更短的周期性、更靈活的計劃性、更高效的自動化等特征。
敏捷測試以用戶需求為驅動,面向被測系統,基于確定的測試過程及測試模式,設計多個沖刺(Sprint)以滿足迭代目標,將測試安排在每個敏捷迭代中,持續響應頻繁反饋,持續發布軟件增量,迭代驗證進展,沖刺驗證價值。迭代開始時,可能是粗粒度測試,在Sprint 0及后續Sprint中,則為適時(Just-in-Time)式測試,基于不斷修正的質量指標,不斷迭代,直至滿足測試充分性要求。
就測試技術及方法而言,敏捷測試同傳統軟件測試并無本質差別。傳統軟件測試技術和方法在每個Sprint迭代中,都有用武之地。敏捷測試遵循敏捷宣言,采用敏捷模式,同敏捷開發方式緊密融合,契合敏捷開發周期,與開發并行,能夠盡早檢出問題,避免缺陷堆積,縮短價值交付周期,規避系統風險。敏捷測試強調質量屬于每個角色的職責,開發、測試、質保、管理等所有人員對軟件質量負責。敏捷測試推崇輕量級的管理模式,摒棄定義繁雜的測試流程和缺陷管理流程,裁剪繁雜的測試過程文檔,讓測試工作化繁為簡,輕裝上陣。敏捷測試必將推動軟件測試模式的深刻變革,測試理念的重大變化。
1.4.2.3 自動化
推進軟件測試自動化,提質增效,是軟件測試人的不懈追求。軟件測試自動化是在自動化測試框架下,基于人工智能等技術,使用自動化測試工具,通過可視化界面或命令,自動生成測試用例、測試數據、測試腳本,按預定計劃組織實施軟件測試,實現軟件測試目標定位、測試分析、測試設計、測試執行、質量度量、過程監控、分析評估等全流程自動化,是軟件測試發展的重要趨勢,是測試組織技術及能力成熟度的重要標志。自動化測試框架是一組抽象構件及構件實例之間交互的方法,提供腳手架命令生成一個自動化項目,實現依賴自動組裝,支撐系統可重用設計,主要包括腳本模塊化架構、測試庫架構、關鍵詞或表格驅動架構、數據驅動架構等類型。
軟件測試自動化包括浸入式和非浸入式兩種類型。浸入式測試需要修改軟件代碼或控制其運行環境,非浸入式測試用于監視和檢查軟件,無須修改軟件結構及代碼。軟件測試自動化涉及測試技術、測試體系、自動化編譯、持續集成、自動發布等測試系統,以及自動化測試流程改進、自動化基礎設施建設等所有方面及環節。
近年來,軟件測試自動化發展取得了一系列重大突破。例如,基于遺傳算法、爬山法等技術,自動生成滿足某一軟件成分的測試用例,支撐邏輯覆蓋測試用例自動生成和自動執行;又如,ChatGPT將文件上傳至活動對話工作區,基于代碼解釋器的掃描代碼,自動完成代碼靜態分析和代碼審查,實現邏輯驅動測試自動化的新突破。與此同時,基于分布式自動化測試框架和測試中臺,基于BDD端到端的自動化測試、DevOps自動化測試、iOS UI自動化+基于docker的分布式測試、基于人工智能的超級自動化測試等技術取得重大進展,為軟件測試自動化發展注入了創新動能。
事實上,即便是最有可能實現自動化的測試執行也還難以真正地自動化,因為測試執行是一個不穩定的過程,需要人工干預,況且自動化測試腳本也難以自動生成,測試結果亦需要人工分析。對于千差萬別的軟件系統及測試需求,基于測試工程師的智慧和經驗,創新自動化測試技術,使用自動化測試工具,往往會產生意想不到的效果,但完全自動化的軟件測試可能事倍功半,除非是對于特定軟件系統的特定測試需求,討論測試自動化,似乎并無太大意義。軟件測試是基于創新、創造的人類智慧活動。超級自動化或許只是一個美好的夢想。即便前路迷茫,軟件測試自動化發展,勢不可擋。
1.4.2.4 智能化
人工智能在軟硬件兩端賦能,構筑了較完善的智能基礎軟件體系、協同的上層軟件生態及相互銜接的下游價值鏈閉環,形成了涵蓋計算芯片、開源平臺、基礎應用、行業應用、智能產品等的人工智能產業鏈。面對人工智能的高速發展,軟件測試面臨著兩個方面的挑戰:一方面是如何創新測試技術,對智能軟件進行測試,保證其可行性和能力;另一方面是如何應用人工智能技術及成果,推進軟件測試的智能化發展。
1.智能軟件測試
智能軟件是基于數據驅動的構建,由算法模型、基礎設施、數據及產品服務構成,具有自主感知、智能判斷、自主決策、行為控制等功能特征,以及自主性、學習性、協同性、自適應性等技術特征。傳統軟件系統是基于控制流和數據流構建的業務處理系統,智能軟件則是一個智能模型嵌入的復雜系統,是基于數據驅動構建的參數化數值計算系統,軟件特征及生命周期過程較傳統軟件存在著顯著差異。智能軟件生命周期過程如圖1-5所示。

圖1-5 智能軟件生命周期過程
智能軟件測試尚處于發展階段,目前主要集中于智能軟件缺陷定義、失效行為刻畫、測試準則構建等方面,較傳統軟件測試,智能軟件測試面臨著新的需求和挑戰。第一,智能軟件是一種動態系統,系統行為具有不確定性、自適應性等特性,系統能力隨著學習時間增長而增強,難以精確地描述或表達其目標任務、動態增長的能力及系統行為,受測試樣本及測試資源制約,而又無法通過等價類劃分等方法大幅降低樣本量,難以對測試結果進行準確判斷,難以對軟件質量進行分析評價。第二,算法模型是智能軟件的核心,但模型的統計學本質使得智能軟件的輸出具有不確定性,難以通過測試發現測試預言數據驅動特性、內部行為分析方法缺失等問題,測試結果不穩定,且可理解性,魯棒性差,需要基于大量數據,通過大量測試驗證其普適性。第三,智能軟件通過數據驅動建模實現預測或決策,運行于非確定性開放環境,數據驅動建模使得系統行為隨訓練數據改變而改變,如何構造測試數據、感知環境、交互環境、上下文場景,是保證有限測試及測試有效性的關鍵。第四,傳統軟件缺陷是代碼中能夠引起一個或一個以上失效的錯誤的編碼,智能軟件缺陷不再是顯式的代碼或參數錯誤,具有非確定性和確定性相結合的缺陷觸發與傳播機制,缺陷識別、缺陷單位、缺陷分類、缺陷分析、缺陷處置愈發困難。第五,智能軟件測試依賴于大數據,基于大數據的自動產生、分析、呈現等技術,能夠有效地驗證智能軟件的可信性及交付能力,但測試工作量巨大。
基于智能軟件特征、內部和外部形態及數據和模型視角,從數據對模型的影響、模型對數據的作用兩個方向,可將智能測試劃分為數據分布多樣性驅動測試、數據邊界穩定性驅動測試、數據語義一致性驅動測試、數據精度適應性驅動測試四種類型。智能軟件測試分類及內容如圖1-6所示。
基于測試對象視角,智能軟件測試可以劃分為智能算法、智能算力、數據質量、智能產品測試四種類型及智能化水平評估。智能算法是智能軟件測試的核心內容,主要包括智能算法正確性、算法收斂性、算法魯棒性、算法依賴性、算法可增強性、算法效率等方面的測試。例如,面對智能算法的不確定性、難解釋性等特征,基于IT/ECSA 1021、ISO/IEC 39119、ISO/IEC 25059等標準規范,建立面向智能算法的測試流程、覆蓋準則,構造如圖1-7所示的智能算法測試系統,對智能算法的準確性、對抗樣本攻擊、覆蓋率等進行多維度測試,支持多種模態數據集對抗曾廣和非對抗曾廣。

圖1-6 智能軟件測試分類及內容

圖1-7 智能算法測試系統
2.測試智能化
軟件測試智能化是應用人工智能技術,對軟件系統進行智能分析和測試,降本增效,加速軟件交付的測試實踐,是軟件測試領域的一個重要發展趨勢。目前,軟件測試智能化發展主要集中于:一是將人工智能技術同軟件測試策劃、測試設計、測試執行、測試分析、缺陷管理等結合起來,推進全程自動化測試、智能化分析,改進測試過程;二是將軟件開發、測試過程中形成的資產轉換成規則和知識,構建測試模型,基于機器學習,實現測試用例、測試數據、測試預言等自動生成,以及缺陷和日志智能分析、測試設計與測試分析優化,如Eggplant AI導入已有測試資產,創新模型,使用智能算法選擇最佳測試集并進行測試用例排序;三是基于圖像識別、語音識別、知識圖譜、自然語言處理等技術,開發應用智能測試工具,提高測試覆蓋率和測試效率;四是通過領域知識圖譜工程、代碼深度分析,實現精準測試及缺陷定位,推進基于測試驅動的軟件質量工程發展。智能化軟件測試的基本原理如圖1-8所示。
目前,神經網絡和遺傳算法在智能算法、智能算力、數據質量、智能體測試及智能化水平評估等方面得到了較好應用。其中,神經網絡在GUI測試、內存使用測試、分布式系統功能驗證等場景及缺陷定位與測試分析等方面取得了重要進展。遺傳算法可以用于選擇最優的單元測試用例,也就是單元測試的最優輸入集。同時,利用人工智能還可以優化測試工具,將軟件測試的上下文與測試用例結合起來,選擇最優測試用例集進行測試。
未來,隨著人工智能的深化發展,在特定的業務領域能夠持續提升機器的認知能力,實現從感知智能向認知智能演化,使得測試機器人能夠對領域知識進行深刻領悟,能夠對業務知識進行深刻認知,實現真正意義上的測試智能化。

圖1-8 智能化軟件測試的基本原理
3.基于大模型的軟件測試
大模型是具有大規模參數和復雜計算結構,由深度神經網絡構建而成的機器學習模型,通過海量數據訓練,學習復雜的模式和特征,具有強大的泛化和智能涌現能力,已在自然語言理解和生成、機器視覺、語音識別、科學計算、智能推薦等領域得以廣泛應用。ChatGPT的橫空問世及一批類似大模型的迅猛發展,推進信息社會邁向以大模型為主導的新發展階段。同樣,這對軟件測試帶來了重大影響和深刻變革。
基于大模型的軟件測試是利用大模型的上下文理解能力、高效的學習效率、多模態處理能力、自動化性能,基于海量數據訓練,通過對被測軟件的理解,生成有針對性的測試用例、多樣化的測試輸入、逼真的應用場景,驅動測試,實現軟件測試的自動化、智能化和集成化,提高測試質量和效率。
(1)自動化:大模型具有強大的自然語言理解與處理能力,能夠自動地理解軟件需求,生成測試需求和測試用例,自動地執行測試用例,收集和分析測試結果,生成測試報告。
(2)智能化:通過大模型的深度學習及模式識別能力,智能生成模擬數據,用于各種場景及邊界條件下的軟件測試,提高測試覆蓋率;對測試結果進行深度分析,以發現異常和潛在的軟件缺陷,提高測試的可信性。
(3)集成化:大模型能夠將軟件測試過程同軟件生命周期過程緊密集成,實現測試與開發實時互動和反饋,改進開發過程,提高軟件質量。
目前,基于大模型的軟件測試,研究和實踐的重點包括兩個方面:一是將傳統軟件測試技術與基于大模型的生成技術相結合,生成多樣化的測試輸入,實現精準的測試及覆蓋率目標;二是基于歷史軟件缺陷數據訓練,生成能夠更加高效觸發錯誤的測試輸入。目前我國已在測試用例生成和執行、文本輸入生成、智能缺陷檢測、缺陷自動修復、自動回歸、智能協作等方面取得了顯著成效。中國科學院軟件研究所、澳大利亞Monash大學、加拿大York大學的研究團隊,基于軟件測試和大模型視角,分析了截至2023年10月30日的102篇論文,總結出了如圖1-9所示的大模型在軟件測試領域的應用情況。
由圖1-9可見,大模型在軟件測試領域的應用主要集中于測試用例生成、測試預言生成、缺陷分析、缺陷修復等軟件測試生命周期的后端。例如,在大量的大模型中,Codex和CodeT5是基于多種編程語言代碼語料庫訓練得到的大模型,能夠根據自然語言描述生成完整的代碼片段,適宜于基于源代碼的測試,對于測試用例生成,能夠比較準確地理解領域知識及軟件項目和代碼上下文的信息,生成準確、全面且有針對性的測試用例。但遺憾的是,大模型在測試需求分析、測試計劃制訂等方面尚未取得實質性進展。
盡管大模型在軟件測試中展現出了巨大的潛力,也進行了大量成功的實踐,但基于大模型的軟件測試,尚處于探索和起步階段,在復雜程序結構理解和處理、高覆蓋率、測試預言、精準評估等方面,還存在著大量需要研究解決的問題。展望基于大模型的軟件測試發展,一是通過預訓練和微調及提示工程,基于零樣本或少樣本學習、自我一致性、思維鏈、自動提示等技術,調整大模型行為,以適應特定的領域和任務,提高大模型的理解和推理能力。二是同變異測試、差分測試、蛻變測試、程序分析、統計分析等傳統軟件測試技術進行融合,進一步提高測試覆蓋率和測試質量。

圖1-9 大模型在軟件測試領域的應用情況
1.4.2.5 服務化
軟件測試服務化是指將測試策劃、測試設計、測試執行、測試總結等過程資產作為獨立的服務進行封裝,將測試作為一種服務(Test as a Service,TaaS),通過專業測試團隊或工具,為客戶提供定制化的解決方案即定制化服務,提高測試效率,降低測試成本。它是云計算和軟件測試相結合的一種新型服務模式,具有定制化、專業化、集成化、系統化、擴展化等特征,正在成為推進軟件測試行業專業化發展源動力,是軟件測試的重要發展趨勢。
在企業或軟件開發組織內部,基于測試中臺,測試人員、開發人員、管理人員及相關方能夠通過應用程序編程接口(API),按需自動獲得測試能力,使得開發人員能夠盡早關注并開展測試,根據測試需求及其變化情況,快速調整測試資源和服務內容,推進測試左移及全程質量管控。圖1-10展示了一個軟件測試中臺服務示例。

圖1-10 軟件測試中臺服務
一個在軟件測試領域進行深入研究和最佳實踐的時代已經到來,制約軟件測試發展的重大關鍵引領技術正在被逐一突破,軟件測試數字化、敏捷化、自動化、智能化、服務化發展,勢不可擋,一個創新發展、融合發展、跨越發展的時代已然來臨。
- SpringBoot揭秘:快速構建微服務體系
- DevSecOps企業級實踐:理念、技術與案例
- Java高手真經·編程基礎卷:Java核心編程技術
- 中文版Revit 2018基礎培訓教程(全彩版)
- 軟件研發效能提升之美
- Arduino項目開發:智能家居
- 卡爾曼濾波原理及應用:MATLAB仿真(第2版)
- 每天5分鐘玩轉OpenStack
- 深入淺出數據結構與算法(微課視頻版)
- 鳳凰項目:一個IT運維的傳奇故事
- Spring Cloud微服務快速上手
- TensorFlow+Android經典模型從理論到實戰(微課視頻版)
- Apache Cordova移動應用開發實戰
- 騰訊Android自動化測試實戰
- Intel Quartus Prime數字系統設計權威指南:從數字邏輯、Verilog HDL 到復雜數字系統的實現