招行:輸入提示詞及抽象語法樹提取的信息至大模型,生成特定測試代碼
招商銀行正申請一項(xiàng)名為“測試代碼生成方法、裝置、設(shè)備、存儲介質(zhì)及產(chǎn)品”的專利。其申請于2024年7月11日,公布于2024年11月8日。
方法包括:基于抽象語法樹,對待測試代碼的變量類型與調(diào)用方式進(jìn)行上下文提取,得到關(guān)鍵上下文信息(步驟A,下有詳述);將關(guān)鍵上下文信息、預(yù)設(shè)的測試場景提示詞及預(yù)設(shè)的編碼風(fēng)格提示詞發(fā)送至大模型,接收大模型輸出的測試代碼(步驟C,下有詳述),其中,大模型根據(jù)測試場景提示詞與編碼風(fēng)格提示詞,對關(guān)鍵上下文信息進(jìn)行測試場景分析,輸出對應(yīng)的測試代碼。
更具體的,(步驟A)基于抽象語法樹,對待測試代碼的變量類型與調(diào)用方式進(jìn)行上下文提取,得到關(guān)鍵上下文信息的步驟,包括:解析待測試代碼,構(gòu)建待測試代碼的抽象語法樹,通過抽象語法樹得到待測試代碼的變量類型;遍歷待測試代碼的變量類型,檢驗(yàn)變量類型是否在待測試代碼中存在設(shè)定;若變量類型在待測試代碼中存在設(shè)定,則讀取變量類型的字段的類型信息及系統(tǒng)配置信息為變量類型的上下文信息;掃描待測試代碼,得到待測試代碼的調(diào)用方式,通過抽象語法樹獲取調(diào)用方式的代碼,將調(diào)用方式的代碼作為調(diào)用方式的上下文信息(步驟B,下有詳述);組合變量類型的上下文信息與調(diào)用方式的上下文信息,得到關(guān)鍵上下文信息。
(步驟B)掃描待測試代碼,得到待測試代碼的調(diào)用方式,通過抽象語法樹獲取調(diào)用方式的代碼,將調(diào)用方式的代碼作為調(diào)用方式的上下文信息的步驟,包括:掃描待測試代碼,得到待測試代碼的調(diào)用方式;通過抽象語法樹對調(diào)用方式進(jìn)行解析;若項(xiàng)目路徑存在作用域節(jié)點(diǎn)的變量類型,則調(diào)用方式為充血方法,通過抽象語法樹獲取充血方法的代碼為方法類的上下文信息;若項(xiàng)目路徑存在特定命名方式,通過正則表達(dá)式識別對應(yīng)的調(diào)用方式,通過抽象語法樹獲取調(diào)用方式對應(yīng)的代碼為方法類的上下文信息。
通過抽象語法樹對調(diào)用方式進(jìn)行解析的步驟之后,還需要:獲取待測試代碼的調(diào)用方式;將待測試代碼的調(diào)用方式在預(yù)設(shè)的調(diào)用方式庫進(jìn)行比對,若待測試代碼的調(diào)用方式存在于調(diào)用方式庫,則獲取調(diào)用方式庫中待測試代碼的調(diào)用方式對應(yīng)的動態(tài)提示詞。
(步驟C)將關(guān)鍵上下文信息、預(yù)設(shè)的測試場景提示詞及預(yù)設(shè)的編碼風(fēng)格提示詞發(fā)送至大模型,接收大模型輸出的測試代碼的步驟,包括:將關(guān)鍵上下文信息、預(yù)設(shè)的測試場景提示詞發(fā)送至大模型;接收大模型輸出的單元測試場景,將單元測試場景與預(yù)設(shè)的編碼風(fēng)格提示詞發(fā)送至大模型,其中,大模型根據(jù)測試場景提示詞,對關(guān)鍵上下文信息進(jìn)行測試場景分析,輸出單元測試場景;接收大模型輸出的測試代碼,其中,大模型根據(jù)編碼風(fēng)格提示詞,對單元測試場景進(jìn)行編碼風(fēng)格修改,輸出測試代碼。
另外,接收大模型輸出的單元測試場景,將單元測試場景與預(yù)設(shè)的編碼風(fēng)格提示詞發(fā)送至大模型的步驟,包括:接收大模型返回的單元測試場景;拆分單元測試場景,得到多個(gè)次級單元測試場景;展示所有的次級單元測試場景;對所有的次級單元測試場景進(jìn)行評估,得到目標(biāo)次級單元測試場景;將目標(biāo)次級單元測試場景與預(yù)設(shè)的編碼風(fēng)格提示詞發(fā)送至大模型。
說明書提到該發(fā)明的背景為,在軟件開發(fā)過程中,單元測試是確保代碼質(zhì)量和功能正確性的關(guān)鍵環(huán)節(jié)。單元測試的重要性體現(xiàn)在能夠及早發(fā)現(xiàn)和修復(fù)錯(cuò)誤,減少后期維護(hù)成本,并提高軟件的可靠性。然而,傳統(tǒng)的單元測試編寫方式通常要求開發(fā)人員根據(jù)特定的業(yè)務(wù)邏輯和應(yīng)用場景來手動撰寫測試用例,這一過程不僅耗時(shí)而且容易出錯(cuò)。開發(fā)人員需要對每一個(gè)功能點(diǎn)進(jìn)行細(xì)致分析,并且編寫相應(yīng)的測試代碼,這在大型項(xiàng)目中尤其有挑戰(zhàn)性。隨著人工智能和機(jī)器學(xué)習(xí)技術(shù)的發(fā)展,利用大模型技術(shù)來輔助或自動生成測試代碼成為研究熱點(diǎn)。
在現(xiàn)有的技術(shù)中,一些插件或工具能夠通過大模型完成單元測試的編寫。但這些工具通常缺乏足夠的智能化,會遺漏部分單元測試場景。同時(shí),這些工具也不能根據(jù)不同的編碼風(fēng)格自動調(diào)整測試代碼的格式和結(jié)構(gòu)。對此,用戶需要頻繁手動修改提示詞來調(diào)整大模型的單元測試場景,并對輸出的測試代碼進(jìn)行手動的代碼編寫風(fēng)格調(diào)整。這增加了用戶的工作量,降低了工作效率。
該發(fā)明通過輸入提示詞及抽象語法樹提取的關(guān)鍵上下文信息至大模型,由大模型生成的符合特定編碼風(fēng)格和測試場景需求的測試代碼,使得測試代碼生成的工作量得到明顯降低,工作效率顯著提高。
- 免責(zé)聲明
- 本文所包含的觀點(diǎn)僅代表作者個(gè)人看法,不代表新火種的觀點(diǎn)。在新火種上獲取的所有信息均不應(yīng)被視為投資建議。新火種對本文可能提及或鏈接的任何項(xiàng)目不表示認(rèn)可。 交易和投資涉及高風(fēng)險(xiǎn),讀者在采取與本文內(nèi)容相關(guān)的任何行動之前,請務(wù)必進(jìn)行充分的盡職調(diào)查。最終的決策應(yīng)該基于您自己的獨(dú)立判斷。新火種不對因依賴本文觀點(diǎn)而產(chǎn)生的任何金錢損失負(fù)任何責(zé)任。