在軟件開發的生命周期中,自動生成單元測試成為提高代碼質量和開發效率的關鍵技術。
原標題:AI 驅動的智能化單元測試生成:字節跳動的實踐與創新
文章來源:AI前線
內容字數:19947字
字節跳動基于LLM的單元測試用例自動生成實踐
本文總結了字節跳動質量效能專家趙亮在QCon全球軟件開發大會上關于基于大模型自動生成單元測試的演講要點,該實踐旨在解決單元測試編寫耗時、維護困難以及現有工具效果不足等問題,提升代碼質量和研發效率。
1. 現狀與痛點
許多研發人員面臨單元測試覆蓋率低的問題,并非出于主觀意愿,而是由于時間限制和精力不足。編寫單元測試的時間成本高(5-15分鐘/個),業務上線時間緊迫,導致存量代碼單元測試缺失嚴重(部分倉庫覆蓋率低于10%)。現有工具生成的單元測試可讀性低、用例多樣性不穩定、編譯通過率低,增加了研發人員的修正成本。
2. 目標與挑戰
該實踐的目標是提高單元測試生成產品的工程化分析準確性、模型生成效果(引入偏好對齊和強化學習等算法)、提升用戶體驗(開箱即用,輕量化)。 目標包括覆蓋率、有效性(斷言、mock和流量)、倉庫覆蓋率以及研發投入產出比。主要挑戰在于數據質量(模型訓練數據、提示詞、數據準確性)和代碼生成效果(代碼風格、業務語義匹配)。
3. 數據質量提升
為了提升數據質量,采用了基于流量來源的收集和采納(真實流量、接口自動化、測試技術服務)、流量蒸餾(數據分析、路徑推導、脫敏處理)以及流量分發(存量生成、IDE、MR流水線)等方法。通過這些方法,顯著提升了用例的可信度、用戶的采納率和問題的發現率。
4. 等價類提升思想
為了提升測試覆蓋率,采用了等價類設計等方法,并結合模型和工程方法解決路徑覆蓋問題。通過對被測函數進行要素分析、邏輯分析和路徑分析(利用AST和IR技術),為模型生成不同路徑的單元測試提供詳細信息。
5. 模型與程序分析的融合
該實踐融合了模型和程序分析的優勢。工程化方法保證了代碼分析的準確性和穩定性,模型則提供了靈活性和泛化能力。模型生成和修復需要特定的條件數據(路徑數據、函數簽名、依賴結構體定義、錯誤信息等)。
6. 代碼生成效果提升
通過模型泛化效果提升、模型提示詞選擇策劃、無流量單測方法以及模型效果生成評價等手段,持續優化模型的代碼生成能力。模型工程整體架構包含數據環節(數據收集、訓練評估)、模型選用(結合思維鏈)、模型評測及優化(人工和機器評測相結合)等步驟。
7. 數據工程建設
數據工程建設注重數據集的可信度和純凈度,包含樣本打標、樣本篩選、隱私過濾、格式處理、數據簡化和數據配比打亂等環節。通過代碼簡化(抽取關鍵數據,業務語義字段轉譯,統一不同編程語言的print函數),提升了模型訓練效率和效果。
8. PE工程及模型微調
PE工程路徑規劃涵蓋代碼理解、路徑識別、入參理解、mock規劃等,通過路徑提升、參數補全、語法修正和斷言修正等步驟,持續優化模型。目前主要處于模型微調階段,未來計劃結合微調和獎勵模型。
9. 評測工程建設及效果
評測工程建設包含人工評估和五個評測指標(編譯通過率、覆蓋率、斷言成功率、運行通過率、路徑提升效果)。目前倉庫級平均覆蓋率達到40%(部分達60%),單個方法覆蓋率達83.09%。
10. 總結與規劃
該實踐已完成基礎層(能力分析、數據構建)、生成層(單元測試框架生成、路徑提升)、修正層(語法、運行、斷言修正)以及統計&應用層的工作。未來的規劃包括模型持續優化、用例召回分析、用例保鮮機制以及產品多元化。
聯系作者
文章來源:AI前線
作者微信:
作者簡介:面向AI愛好者、開發者和科學家,提供大模型最新資訊、AI技術分享干貨、一線業界實踐案例,助你全面擁抱AIGC。