單元測試是驗證軟體功能並緩解回歸風險的一項關鍵但繁瑣的技術。雖然經典的自動化方法能夠有效探索程式結構,但它們通常缺乏生成真實輸入與斷言所需的語義資訊。大型語言模型(LLM)利用資料驅動的程式碼語義與程式設計模式知識,彌補了這一侷限。
為了系統分析該領域的最新技術進展,我們對2021年5月至2025年8月間發表的115篇相關文獻進行了系統性文獻綜述。我們基於單元測試生成的生命週期提出了一個統一的分類法,將LLM視為需要系統化工程約束的隨機生成器。該架構從核心生成策略以及一系列強化技術兩個方面對現有研究進行分析,這些強化技術涵蓋從生成前的脈絡強化到生成後的品質保證。
我們的分析顯示,提示工程(prompt engineering)已成為主導的使用策略,佔比達89%,歸因於其高度彈性。我們發現,迭代驗證與修復迴圈已成為確保生成測試具有可靠可用性的標準機制,並在編譯與執行通過率方面帶來了顯著提升。
然而,仍有關鍵挑戰尚待解決,包括:生成測試的缺乏有效缺陷檢測能力、以及缺乏標準化評測基準。為了推動該領域發展,我們提出了一條未來研究路線圖,強調朝自治測試智能體以及LLM與傳統軟體工程工具的混合系統演進。該綜述為研究者與實踐者提供了關於如何將LLM的潛力轉化為工業級測試解決方案的全面視角。
附加關鍵詞:單元測試、自動化測試生成、大型語言模型
1 引言
軟體測試是保障軟體品質並降低發行風險的一項基礎工程實踐[98, 109, 128]。作為白盒測試的一種形式,單元測試關注驗證系統中最小的、可獨立測試的單元(如函式或類別)的行為[15]。精心設計的單元測試套件可以在開發早期偵測邏輯錯誤及邊界情況缺陷,隨著軟體演進防止回歸[159],並為測試驅動開發(TDD)等敏捷實踐提供支援[15]。然而,手工編寫全面且高品質的單元測試被廣泛認為是一項成本高、勞力密集的任務,據報導其耗時超過開發時間的15%[31, 117]。
為因應這一挑戰,自動化測試生成(ATG)在數十年來一直是軟體工程領域的研究重點。該領域歷史上主要由基於搜尋的軟體測試(SBST)[43, 44, 64, 90, 106, 136]以及符號/協同執行技術[26, 50, 132, 160]所引領。這些技術已被證明在系統探索程式結構方面卓有成效。然而,這些傳統方法主要以結構為驅動,通常缺乏語義理解能力[13, 35, 43, 60, 94, 169]。由於無法理解程式碼語義,這些方法難以生成具有特定領域格式的輸入、建構具有複雜內部狀態的物件,或處理與外部依賴(如檔案系統或網路API)的互動[45, 113]。因此,傳統技術往往難以生成真實有效的測試用例。
大型語言模型(LLMs)為解決這一「語義鴻溝」提供了新方法。透過在大規模程式碼與自然語言語料上預訓練,這些模型學習了程式設計語法、常見程式設計模式、API使用方式以及領域特定知識[25, 85]。這種資料驅動的基礎使其能夠因應傳統方法難以處理的語義性挑戰。它們能夠生成具備領域語義的複雜輸入[59, 67],建構有效的測試前置[108, 170],並為外部依賴生成合理的mock實作[54, 108, 116]。
LLM的引入推動了單元測試生成研究的迅速成長,同時也帶來了新挑戰與方法多樣化。既有綜述雖然從更廣泛的視角回顧了LLM在軟體工程中的應用[40, 166],或對該任務進行了初步分類[165],但它們在很大程度上專注於對現有工作的梳理。本文認為,基於LLM的測試生成發展,應建立在對經典軟體工程(SE)原則的適配與強化之上,將LLM視為一種需要系統化約束的隨機生成器。
透過對115篇文獻的系統分析,本文提出了這一技術分類體系。我們的分析顯示,研究社群已經快速將經典SE技術與LLM整合起來。特別是,基於程式分析的脈絡強化技術,以及圍繞回饋迴圈的生成後修復技術,已成為提升LLM生成測試品質的標準實踐。更進一步的研究開始建構自治測試智能體,並設計與傳統工具深度整合的混合系統。然而,關鍵空白仍然存在:雖然測試可用性(即確保測試可編譯、可執行)已獲得改善,提升測試有效性(即其偵測真實缺陷的能力)仍然是重大挑戰。此外,缺乏標準化評測基準、對模型內在侷限性理解不足、以及學術研究與工業實踐之間的鴻溝,是阻礙領域進一步發展的三大障礙。
為建構清晰的分析架構,我們提出如下研究問題(RQs):
RQ1:如何應用並演化使用LLM的核心策略(預訓練、微調與提示工程),尤其是它們在單元測試生成中的表現?
RQ2:經典軟體工程技術如何用於強化基於LLM的單元測試生成,它們又如何結合形成一種系統化的生成過程管理方法?
RQ3:目前最先進的基於LLM的單元測試生成面臨哪些主要挑戰?這些挑戰為未來研究帶來了哪些機會?
透過回答這些問題,本文不僅提供了對目前研究格局的結構化概覽,也提出了一條明確的發展路線圖。該路線圖基於系統工程原則,旨在推動基於LLM的測試從學術探索邁向穩健的工業實踐。
為系統展示我們的分析,論文後續結構如下:第2節為我們的論點奠定基礎。透過回顧經典自動化單元測試生成原則,我們精確界定傳統方法難以跨越的「語義鴻溝」,並闡明為何大型語言模型被視為解決這一難題的關鍵技術。第3節介紹系統性文獻綜述的方法。論文核心部分回答三個研究問題:第4節解析使用LLM的策略(RQ1);第5節建構強化並約束該生成引擎的軟體工程技術生態(RQ2);第6節從更廣視角討論目前技術挑戰並識別未來研究機會(RQ3)。隨後,第7節討論研究有效性威脅,第8節與相關工作對比。最後,第9節總結全文並重申我們關於該領域演進路徑的核心見解。