中科院王俊傑團隊 投稿
量子位 | 公衆号 QbitAI
中科院對 " 找 Bug" 下手了,一口氣總結了 N 種方案!
法寶就是大模型。
大模型由于其卓越的自然語言理解、推理等能力,已經被應用于各種場景,取得了前所未有的效果。類似的,軟件測試領域也受益于其強大的能力,能夠幫助生成逼真且多樣化測試輸入,模拟各種異常,加速缺陷的發現,提升測試效率,進行潛在提高軟件質量。
來自中國科學院軟件研究所、澳大利亞 Monash 大學、加拿大 York 大學的研究團隊收集了截止到 2023 年 10 月 30 日發表的 102 篇相關論文,并分别從軟件測試和大模型視角進行了全面分析,總結出一篇關于大模型在軟件測試領域應用的全面綜述。
(論文地址見文末)
研究發現一覽圖是這樣嬸兒的:
詳細内容我們接着往下看。
從軟件測試的視角來看
首先,研究人員從軟件測試的角度進行了分析,并将收集到的研究工作按照測試任務進行組織。
如下圖所示,大模型的應用主要集中在軟件測試生命周期的後段,用于測試用例準備(包括單元測試用例生成、測試預言生成、系統級測試輸入生成)、測試報告分析、程序調試和修複等任務。然而,在測試生命周期的早期任務(如測試需求、測試計劃等)上,目前還沒有使用大語言模型的相關工作。
進一步地,研究人員還對大模型在各種軟件測試任務上的應用進行了詳細分析。
以單元測試用例生成爲例,單元測試用例生成任務主要涉及爲獨立的軟件或組件單元編寫測試用例,以确保它們的正确性。傳統的基于搜索、約束或随機的生成技術存在着測試用例覆蓋率弱或可讀性差的問題。
引入大模型後,相對于傳統方法,大模型不僅能夠更好地理解領域知識以生成更準确的測試用例,而且還可以理解軟件項目和代碼上下文的信息,從而生成更全面的測試用例。
對于系統級測試輸入,模糊測試作爲常用技術,主要圍繞着生成無效、意外或随機的測試輸入來達到測試的目的,研究人員也詳細分析了大模型如何改進傳統模糊測試技術。
例如有研究提出通用模糊測試框架 Fuzz4All、ChatFuzz 等,也有研究專注于特定軟件開發基于大模型的模糊測試技術,包括深度學習庫、編譯器、求解器、移動應用、信息物理系統等。
這些研究的一個關注重點是生成多樣化的測試輸入,以實現更高的覆蓋率,通常通過将變異技術與基于大模型的生成相結合來實現;另一個關注重點是生成可以更早觸發錯誤的測試輸入,常見做法是收集曆史上觸發錯誤的程序來對大模型進行微調或将其作爲演示程序在查詢大模型時使用。
論文中對于各種研究的技術思路有更爲詳細的介紹和比較。
從大模型的視角來看
随後,研究人員再從大模型的視角出發,分析了軟件測試任務中選用的大模型,并進一步介紹了如何讓大模型适應測試任務,包括提示工程技術、大模型的輸入以及與傳統測試技術的結合使用。
在所選用的大模型方面,如下圖所示,最常用的前三種大模型分别是 ChatGPT、Codex 和 CodeT5。後兩種是專門在多種編程語言的代碼語料庫上訓練得到的大模型,能夠根據自然語言描述生成完整的代碼片段,因此非常适合涉及源代碼的測試任務,如測試用例生成、缺陷修複。
此外,雖然已經有 14 個研究使用 GPT-4(排名第四),但是 GPT-4 作爲一種多模态大模型,研究人員表示尚未發現相關研究探索軟件測試任務中利用其圖像相關功能(例如 UI 截圖、編程演示),這值得在未來研究中探索。
在如何調整大模型行爲以勝任軟件測試任務方面,主要有預訓練或微調和提示工程兩種技術手段。
如下圖所示,有 38 項研究使用了預訓練或微調模式以微調大模型的行爲,而 64 項研究則使用了提示工程來引導大模型達到預期的結果。
提示工程技術的主要優勢在于無需更新模型權重也能讓大模型适應特定領域和任務,并強化大模型的理解和推理能力,目前已經采用的技術包括零樣本或少樣本學習、自我一緻性、思維鏈、自動提示等技術。
此外,研究人員發現有 35 項研究在運用大模型之上,還結合了傳統測試技術,包括變異測試、差分測試、程序分析、統計分析等,以取得更好的測試有效性和覆蓋率。
雖然大模型在各種任務中表現出巨大的潛力,但仍然存在一些局限性,如難以理解和處理複雜的程序結構。
因此,将大模型與其他技術結合起來,以最大程度地發揮它們的優勢和避免劣勢,從而在特定情況下實現更好的結果,例如生成更多樣化和複雜的代碼,更好地模拟真實場景。
用大模型找 Bug 還有哪些挑戰?
過去兩年中,利用大模型進行軟件測試已經有了很多成功的實踐。然而,研究人員指出它仍處于早期發展階段,還有許多挑戰和未解決問題需要探索。
挑戰 1:實現高覆蓋率的挑戰
探索被測試軟件的多樣行爲以實現高覆蓋率始終是軟件測試的重要關注點。大模型直接實現所需的多樣性仍然具有很大挑戰,例如單元測試用例生成中,在 SF110 數據集上,行覆蓋率僅爲 2%,分支覆蓋率僅爲 1%。
在系統測試輸入生成方面,對于面向深度學習庫的模糊測試,TensorFlow 的 API 覆蓋率爲 66%(2215/3316)。已有工作通常将變異測試與大模型結合使用,以生成更多樣化的輸出。
其他潛在的研究方向涉及利用測試相關的數據來訓練或微調能夠理解測試特性的專用大模型,可以理解測試要求,自主地生成多樣化的輸出。
挑戰 2:測試預言的挑戰
測試預言問題一直是各種測試應用面臨的挑戰,已有工作常見做法是将其轉化爲更容易獲取的形式,通常通過差分測試來實現或僅關注容易自動識别的測試預言(例如崩潰類錯誤),雖然取得了不錯效果,但僅适用于少數情況。
探索利用大模型解決其他類型的測試預言問題是非常有價值的。
例如,蛻變測試也是常用的緩解測試預言問題的技術,可以探索結合人機交互或領域知識自動産生蛻變關系,還可探索大模型自動生成基于蛻變關系的測試用例,覆蓋各類輸入。進一步的,像 GPT-4 這樣的多模态大模型也爲檢測用戶界面相關缺陷并輔助推導測試預言提供了可能性。
挑戰 3:精準評估性能的挑戰
△該圖由 GPT-4 AI 生成
缺乏基準數據集和基于大模型技術潛在的數據洩漏問題給進行嚴格和全面的性能評估帶來了挑戰。研究人員通過檢查訓練大模型的數據源 CodeSearchNet 和 BigQuery,發現 Defect4J 基準數據集中使用的四個代碼庫同時包含在 CodeSearchNet 中,并且整個 Defects4J 代碼庫都包含在 BigQuery 中。
因此,大模型在預訓練過程中已經見過現有的程序修複基準數據集,存在嚴重的數據洩露問題。所以,需要構建更專門和多樣化的基準數據集,并采取措施防止數據洩漏。
挑戰 4:用于現實項目的挑戰
由于對數據隐私的關注,在考慮實際應用時,大多數軟件組織傾向于避免使用商用大模型,更願意采用開源的大模型,并使用組織特定的數據進行訓練或微調。
此外,一些公司還考慮到計算能力的限制或關注能源消耗等,傾向于采用中等規模的模型。在這樣的現實條件下,要達到與已有研究工作中報告的類似性能是非常具有挑戰的。例如,在廣泛使用的 QuixBugs 數據集中,40 個 Python 錯誤中有 39 個能夠自動修複,40 個 Java 錯誤中有 34 個能夠自動修複。
然而,當涉及到從 Stack Overflow 收集的深度學習程序(代表實際的編碼實踐)時,72 個 Python 錯誤中僅有 16 個能夠自動修複。如何更關注現實需求研發相應的技術才能更利于技術落地和實際應用。
大模型也帶來了研究機遇
利用大模型進行軟件測試也帶來了許多研究機遇,對于軟件測試領域的發展大有益處。
機遇 1:利用大模型進行更多樣化的軟件測試任務和階段
在測試任務的初期階段,大模型目前還未得到有效應用。主要原因有兩方面:一是早期測試任務的主觀性,需要專家進行評估;二是早期階段缺乏開放數據資源,這限制了大模型的性能表現。
此外,如下圖所示,雖然大模型在單元測試和系統測試方面得到了廣泛應用,但在集成測試和驗收測試方面的應用相對較少。總之,如何充分利用大模型進行更多樣化的軟件測試任務和測試階段是一個值得深入研究的新方向。例如,在驗收測試方面,大模型可以與人類測試人員協同工作,以自動生成測試用例并評估測試覆蓋率。
機遇 2:将大模型應用于更廣泛的測試類型和軟件
一方面,雖然大模型在功能測試方面得到了廣泛應用,但在性能測試和可用性測試等其他方面應用較少,這可能是因爲這些測試已有一些專門且讓人滿意的模型和工具。
但将大模型與這些工具相結合仍不失爲一個潛在的研究方向,例如利用大模型整合性能測試工具,并模拟真實用戶行爲來産生不同類型的工作負載。另
一方面,如下圖所示,已經有研究在多種類型的軟件測試中成功應用了大模型,例如移動應用,深度學習庫、自動駕駛系統等。不僅能将現有技術遷移到其他類型的軟件上,也可以針對某類軟件的特性,研發針對性的技術。
機遇 3:整合先進的提示工程技術
現有研究尚未充分挖掘大模型的潛力,如下圖所示,僅使用了五種最常見的提示工程技術。未來的研究應該探索更高級的提示工程技術(如圖中的思維樹、多模态思維鏈等),以更充分地發揮或增強大模型的理解和推理能力。
機遇 4:和傳統技術結合
目前關于大模型在解決軟件測試問題方面的能力還沒有明确的共識,有研究将大模型與傳統軟件測試技術相結合取得了很好的效果,這可能意味着大模型并非解決軟件測試問題的唯一靈丹妙藥。
考慮到已有許多成熟的軟件工程相關技術和工具,可以探索将大模型與傳統技術相結合(例如形式化驗證等尚未在已有研究中探索過的)、探索其他更先進的結合方式、以及與工具集成更好地發掘已有工具的潛力。