自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

北大李戈團(tuán)隊(duì)提出大模型單測(cè)生成新方法,顯著提升代碼測(cè)試覆蓋率

人工智能 新聞
北京大學(xué)李戈教授團(tuán)隊(duì)提出一種全新的提升測(cè)試用例覆蓋率的方法,該方法借助程序分片思想(Method Slicing),將復(fù)雜待測(cè)函數(shù)依據(jù)語(yǔ)義拆解為若干簡(jiǎn)單片段,進(jìn)而讓大模型為各個(gè)簡(jiǎn)單片段分別生成測(cè)試樣例。

單元測(cè)試是軟件開(kāi)發(fā)流程中的一個(gè)關(guān)鍵環(huán)節(jié),主要用于驗(yàn)證軟件中的最小可測(cè)試單元,函數(shù)或模塊是否按預(yù)期工作。單元測(cè)試的目標(biāo)是確保每個(gè)獨(dú)立的代碼片段都能正確執(zhí)行其功能,對(duì)于提高軟件質(zhì)量和開(kāi)發(fā)效率具有重要意義。

然而,大模型自身無(wú)力為復(fù)雜待測(cè)函數(shù)(環(huán)復(fù)雜度大于 10)生成高覆蓋率的測(cè)試樣例集。為了解決該痛點(diǎn),北京大學(xué)李戈教授團(tuán)隊(duì)提出一種全新的提升測(cè)試用例覆蓋率的方法,該方法借助程序分片思想(Method Slicing),將復(fù)雜待測(cè)函數(shù)依據(jù)語(yǔ)義拆解為若干簡(jiǎn)單片段,進(jìn)而讓大模型為各個(gè)簡(jiǎn)單片段分別生成測(cè)試樣例。生成單個(gè)測(cè)試樣例時(shí),大模型只需分析原待測(cè)函數(shù)的一個(gè)片段,分析難度減小,生成覆蓋該片段的單元測(cè)試難度隨之減小。由此推廣,提升整體測(cè)試樣例集代碼覆蓋率。

相關(guān)論文《HITS: High-coverage LLM-based Unit Test Generation via Method Slicing》近期被 ASE 2024(at the 39th IEEE/ACM International Conference on Automated Software Engineering)頂會(huì)接受。

圖片

論文地址:https://www.arxiv.org/pdf/2408.11324

接下來(lái)看看北大團(tuán)隊(duì)論文研究的具體內(nèi)容:

HITS 使用大模型進(jìn)行程序分片

程序分片指將一個(gè)程序依據(jù)語(yǔ)義劃分為若干解決問(wèn)題的階段。程序是對(duì)一個(gè)問(wèn)題解決方案的形式化表述。一個(gè)問(wèn)題解決方案通常包含多個(gè)步驟,每個(gè)步驟對(duì)應(yīng)著程序中的一片(slice)代碼。如下圖所示,一個(gè)色塊對(duì)應(yīng)著一片代碼,也對(duì)應(yīng)著一個(gè)問(wèn)題解決的步驟。

HITS 要求大模型分別為每個(gè)代碼片設(shè)計(jì)可以高效覆蓋它的單元測(cè)試代碼。以上圖為例,當(dāng)我們得到如圖的分片后,HITS 要求大模型為 Slice 1(綠色),Slice 2(藍(lán)色),Slice 3(紅色)分別生成測(cè)試樣例。為 Slice 1 生成的測(cè)試樣例要盡可能覆蓋 Slice 1,不用考慮 Slice 2 和 Slice 3,其余代碼片同理。

HITS 起效的原因有二。其一,大模型要考慮覆蓋的代碼量降低。以上圖為例,為 Slice 3 生成測(cè)試樣例,則只需考慮 Slice 3 中的條件分支。要覆蓋 Slice 3 中的某些條件分支,只需在 Slice 1 和 Slice 2 中找尋一條執(zhí)行路徑即可,無(wú)需考慮該執(zhí)行路徑對(duì) Slice 1 和 Slice 2 覆蓋率的影響。其二,依據(jù)語(yǔ)義(問(wèn)題解決步驟)分割的代碼片有助于大模型掌握代碼執(zhí)行中間狀態(tài)。為順序靠后的代碼塊生成測(cè)試樣例,需要考慮先前代碼對(duì)程序狀態(tài)的改變。由于代碼塊依據(jù)實(shí)際問(wèn)題解決步驟分割,因此可以用自然語(yǔ)言對(duì)先前代碼塊的操作進(jìn)行描述(如上圖中注釋部分)。由于當(dāng)前大語(yǔ)言模型多為自然語(yǔ)言與程序語(yǔ)言混合訓(xùn)練產(chǎn)物,良好的自然語(yǔ)言概括可幫助大模型更精準(zhǔn)掌握代碼對(duì)程序狀態(tài)的改變。

HITS 使用大模型進(jìn)行程序分片。問(wèn)題的解決步驟通常為帶有程序員主觀色彩的自然語(yǔ)言表述,因而可以直接利用自然語(yǔ)言處理能力超群的大模型。具體而言,HITS 使用上下文學(xué)習(xí)方法(In-context learning) 調(diào)用大模型。團(tuán)隊(duì)利用過(guò)往在真實(shí)場(chǎng)景實(shí)踐的經(jīng)驗(yàn),手工編寫(xiě)若干程序分片樣例,經(jīng)若干次調(diào)整后使大模型對(duì)程序分片的效果達(dá)到了研究團(tuán)隊(duì)的預(yù)期。

對(duì)代碼片生成測(cè)試樣例

給定要覆蓋的代碼片段,要生成對(duì)應(yīng)測(cè)試樣例,需經(jīng)歷以下 3 個(gè)步驟:1. 對(duì)片段的輸入進(jìn)行分析;2. 構(gòu)造 prompt 指示大模型生成初始測(cè)試樣例;3. 使用規(guī)則后處理和大模型 self-debug 調(diào)整測(cè)試樣例使之可以正確運(yùn)行。

對(duì)片段的輸入進(jìn)行分析,指提取要覆蓋的片段所接受的一切外部輸入,以備后續(xù) prompt 使用。外部輸入,指該片段所應(yīng)用到的先前片段定義的局部變量,待測(cè)方法的形參,片段內(nèi)調(diào)用的方法以及外部變量。外部輸入的值直接決定了要覆蓋的片段的執(zhí)行情況,因此將該信息提取出來(lái)提示給大模型有助于有針對(duì)性地設(shè)計(jì)測(cè)試樣例。研究團(tuán)隊(duì)在實(shí)驗(yàn)中發(fā)現(xiàn)大模型擁有良好的提取外部輸入的能力,因此在 HITS 中由大模型來(lái)完成該任務(wù)。

接下來(lái),HITS 構(gòu)建思維鏈(Chain-of-thought)形式的 prompt 引導(dǎo)大模型生成測(cè)試樣例。推理步驟如下。第一步,給定外部輸入,分析要滿足待覆蓋代碼片內(nèi)的各種條件分支的排列組合,外部輸入都分別需要滿足哪些性質(zhì),如:組合 1,字符串 a 需要包含字符’x’,整數(shù)變量 i 需要非負(fù);組合 2,字符串 a 需要非空,整數(shù)變量 i 需要為質(zhì)數(shù)。第二步,對(duì)上一步中的每一種組合,分析相對(duì)應(yīng)的待測(cè)代碼執(zhí)行時(shí)所處環(huán)境的性質(zhì),包括但不限于實(shí)參的特性,全局變量的設(shè)置。第三步,為每一種組合生成一個(gè)測(cè)試樣例。研究團(tuán)隊(duì)為每一步手工構(gòu)建了樣例,以便于大模型能夠正確理解并執(zhí)行指令。

最后,HITS 通過(guò)后處理和 self-debug 使大模型生成的測(cè)試樣例得以正確運(yùn)行。大模型生成的測(cè)試樣例往往難以直接使用,會(huì)出現(xiàn)各式各樣的編譯錯(cuò)誤和來(lái)自于錯(cuò)誤編寫(xiě)測(cè)試樣例導(dǎo)致的運(yùn)行時(shí)錯(cuò)誤。研究團(tuán)隊(duì)根據(jù)自身觀察及已有論文的總結(jié),設(shè)計(jì)了若干規(guī)則和常見(jiàn)錯(cuò)誤的修復(fù)案例。首先嘗試依據(jù)規(guī)則修復(fù)。如果規(guī)則無(wú)法修復(fù),則使用大模型 self-debug 的功能進(jìn)行修復(fù),在 prompt 中提供了常見(jiàn)錯(cuò)誤的修復(fù)案例以供大模型參考。

圖片

HITS 的整體圖解

實(shí)驗(yàn)驗(yàn)證

研究團(tuán)隊(duì)使用 gpt-3.5-turbo 作為 HITS 調(diào)用的大模型,分別在大模型學(xué)習(xí)過(guò)和未學(xué)習(xí)過(guò)的 Java 項(xiàng)目中的復(fù)雜函數(shù)(環(huán)復(fù)雜度大于 10)上對(duì)比 HITS,其他基于大模型的單元測(cè)試方法和 evosuite 的代碼覆蓋率。實(shí)驗(yàn)結(jié)果顯示 HITS 相較于被比較的諸方法有較明顯的性能提升。

圖片

圖片

圖片

研究團(tuán)隊(duì)通過(guò)樣例分析展示分片方法如何提升代碼覆蓋率。如圖所示。

該案例中,基線方法生成的測(cè)試樣例未能完全覆蓋 Slice 2 中的紅色代碼片段。然而,HITS 由于聚焦于 Slice 2,對(duì)其所引用的外部變量進(jìn)行了分析,捕捉到 “如果要覆蓋紅色代碼片段,變量’arguments’ 需要非空 “的性質(zhì),根據(jù)該性質(zhì)構(gòu)建了測(cè)試樣例,成功實(shí)現(xiàn)了對(duì)紅色區(qū)域代碼的覆蓋。

提升單元測(cè)試覆蓋率,增強(qiáng)系統(tǒng)的可靠性和穩(wěn)定性,進(jìn)而提高軟件質(zhì)量。HITS使用程序分片實(shí)驗(yàn)證明,該技術(shù)不僅能大幅提升整體測(cè)試樣例集代碼覆蓋率,且實(shí)施方法簡(jiǎn)潔直接,未來(lái)有望在真實(shí)場(chǎng)景實(shí)踐中,幫助團(tuán)隊(duì)更早發(fā)現(xiàn)并修正開(kāi)發(fā)中的錯(cuò)誤,提升軟件交付質(zhì)量。

責(zé)任編輯:張燕妮 來(lái)源: 機(jī)器之心
相關(guān)推薦

2024-11-27 13:36:10

2023-09-25 10:04:37

模型AI

2015-06-05 09:27:13

無(wú)線WiFi

2024-04-01 08:26:30

單測(cè)覆蓋率字節(jié)碼

2021-02-20 16:07:27

神經(jīng)網(wǎng)絡(luò)AI算法

2023-10-27 08:49:00

JCovOpenJDK

2024-02-21 12:10:00

模型數(shù)據(jù)

2024-09-29 10:40:00

數(shù)據(jù)模型

2012-04-11 11:21:57

ibmdw

2025-02-28 09:15:00

2011-11-01 10:10:48

ScriptCover

2024-06-14 12:04:33

2022-12-08 13:00:10

AI性別偏見(jiàn)

2024-12-30 07:11:00

大型視覺(jué)語(yǔ)言模型VLMs人工智能

2015-11-09 17:56:57

WebPHP函數(shù)覆蓋

2016-01-13 10:14:15

WebPHP函數(shù)覆蓋

2019-09-25 09:20:41

谷歌代碼開(kāi)發(fā)者

2011-04-25 09:49:20

代碼測(cè)試

2025-03-17 12:55:18

2024-08-07 13:00:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)