必贏官網(wǎng)發(fā)布兩篇關(guān)于“大語言模型與軟件工程任務(wù)”的新綜述。站在大語言模型風(fēng)口上的軟件工程,將飄往何方?
必贏3003no1線路檢測中心必贏3003no1線路檢測中心InPlusLab團(tuán)隊(duì)于2023年8月22日和11月17日在arXiv上分別公布了兩篇“大語言模型+軟件工程”的綜述:
https://arxiv.org/abs/2308.11396
https://arxiv.org/abs/2311.10372
當(dāng)前,隨著越來越多的專為軟件工程任務(wù)設(shè)計(jì)的LLMs得到部署,也有越來越多研究工作聚焦于將LLMs在軟件工程領(lǐng)域的應(yīng)用和實(shí)例分析。LLM能否更好地解析需求,能否生成高質(zhì)量的代碼、高覆蓋的測試用例等已成為軟件工程領(lǐng)域的熱門話題。然而,在現(xiàn)有文獻(xiàn)中,不僅對于LLM在軟件工程領(lǐng)域的應(yīng)用和評估的調(diào)研工作存在缺失,對于專為軟件工程任務(wù)設(shè)計(jì)的LLMs的演變、表現(xiàn)和發(fā)展方向也缺少系統(tǒng)性的回顧。必贏3003no1線路檢測中心InPlusLab團(tuán)隊(duì)公布的這兩篇文章則分別針對這兩點(diǎn)展開了系統(tǒng)性綜述。
第一篇文章全面梳理了軟件工程領(lǐng)域與LLM的結(jié)合點(diǎn),并總結(jié)了當(dāng)前LLM在軟件工程任務(wù)上的表現(xiàn)情況,為LLM在軟件工程領(lǐng)域的研究和優(yōu)化提供了基礎(chǔ)性建議。根據(jù)當(dāng)前行業(yè)對大模型中“大”的定義以及LLM的時效性,文章分別從ACM Digital Library,IEEE Xplore Digital Library和arXiv等六個主要文獻(xiàn)數(shù)據(jù)庫中收集并篩選出了2022年以來的123篇相關(guān)文獻(xiàn)。主要針對下面兩個問題展開:
1. RQ1: 當(dāng)前LLM與軟件工程有哪些結(jié)合性工作?它們關(guān)注于軟件工程中的哪些任務(wù)?
2. RQ2: 當(dāng)前LLM在軟件工程任務(wù)上的表現(xiàn)如何?以及對未來工作的一些討論。
RQ1: 對當(dāng)前文獻(xiàn)中LLM
與軟件工程研究點(diǎn)的回顧
文章將篩選出的123篇論文根據(jù)涉及的軟件工程任務(wù)的具體內(nèi)容進(jìn)行了分類,主要包括七個類別:代碼生成(Code Generation)、代碼摘要(Code Summarization)、代碼翻譯(Code Translation)、漏洞檢測(Vulnerability Detection)、代碼評估(Code Evaluation)、代碼管理(Code Management)和問答交互(Q&A Interaction)。并展示了分類后文獻(xiàn)的分布情況(如下圖所示),其中面向代碼生成(Code Generation)的研究相對較多,而面向代碼翻譯(Code translation)的最少,面向其他軟件工程任務(wù)的數(shù)量相對較為平均。
針對每個類別,文章給出了它們的定義并在正文中詳細(xì)闡述了示例和當(dāng)前的研究工作,這可以幫助研究人員在將LLM應(yīng)用于軟件工程任務(wù)時繼續(xù)發(fā)現(xiàn)和解決潛在問題。在代碼生成任務(wù)上,當(dāng)前的研究工作主要分為三個方向:評估工作、發(fā)布全新的測試框架或方法、增強(qiáng)的大語言模型的代碼生成能力。
在問答交互任務(wù)上,當(dāng)前工作則主要集中于開發(fā)原型系統(tǒng)或交互框架、評估工作、提示工程以及問答交互時安全性和效率問題的改進(jìn)。
雖然在軟件工程領(lǐng)域中,軟件評估和漏洞挖掘存在一定的交集。但由于它們在LLM上的應(yīng)用側(cè)重不同,所以文章也進(jìn)行了分別討論。在軟件評估方面,當(dāng)前工作主要集中于測試用例生成、提出代碼測試框架、測試助手或代碼測試模型;在漏洞挖掘方面,則主要關(guān)注評估工作、正確性和效率問題的改進(jìn)及應(yīng)用的研究。
當(dāng)前工作在代碼摘要上的研究方向和在代碼生成上的比較接近,主要方向分別是評估工作、應(yīng)用研究和增強(qiáng)LLM的代碼摘要能力;而在代碼翻譯任務(wù)上工作較少,僅有的三個工作聚焦于逆向工程與應(yīng)用。
同時,還有一些工作將LLM用于代碼管理,主要分為輔助代碼合并和代碼版本管理。
文章還對其他一些相關(guān)工作進(jìn)行了展示,如性別取向、數(shù)據(jù)虛擬化等。
RQ2: 對當(dāng)前LLM在軟件工程任務(wù)上的
性能表現(xiàn)進(jìn)行回顧
盡管LLM在文本生成任務(wù)上有優(yōu)秀的表現(xiàn),但其在代碼生成等軟件工程任務(wù)上的表現(xiàn)還需要進(jìn)一步驗(yàn)證。在這部分,文章對上述文獻(xiàn)中含有評估內(nèi)容的論文進(jìn)行了篩選。考慮到不同評估工作采用的LLM和關(guān)注的軟件工程任務(wù)可能不同,所以文章在篩選時也對這些信息進(jìn)行了整理(如下表所示)。文章主要從摘要和結(jié)論中篩選出文章的評估結(jié)果,并按結(jié)果分為:Finished Well, Poor Proformance和Ambiguity。需要注意的是,藍(lán)色陰影代表雖然文章評測的LLM(s)在該任務(wù)上表現(xiàn)不好,但是文獻(xiàn)中依然給出來積極的態(tài)度;紅色陰影代表評估結(jié)果不錯,但仍然存在限制,甚至是不夠好。
文章對以上結(jié)果進(jìn)行討論,并初步得出結(jié)論:(1)代碼生成作為一個較難的任務(wù),目前LLMs在這個任務(wù)上往往并不能達(dá)到“可直接使用”的程度,表現(xiàn)也并不優(yōu)異和統(tǒng)一。但一些文章中雖然評估的結(jié)論并沒有對LLMs作出肯定,還是給出了積極的態(tài)度;(2)在程序修復(fù)、Text-to-SQL這些任務(wù)上,LLM通常能做的很好;(3)在程序漏洞檢測上,LLMs通常表現(xiàn)得并不好;(4)雖然有兩篇文獻(xiàn)關(guān)于LLMs在測試用例生成這一任務(wù)上的結(jié)論存在矛盾,但它們也都給出了比較積極的態(tài)度,認(rèn)為LLMs在這項(xiàng)任務(wù)上具有潛力;(5)在代碼總結(jié)、代碼解釋任務(wù)上,LLMs通常具有很好的表現(xiàn),但在魯棒性上有所欠缺;(6)比較新的LLMs在代碼生成這項(xiàng)任務(wù)上的表現(xiàn)進(jìn)步很大。
文章得到一個最基本的結(jié)論:LLMs在一些需要理解代碼語法的軟件工程任務(wù)上,如代碼摘要、代碼修復(fù),獲得了很好的表現(xiàn);但在一些需要理解代碼語義的軟件工程任務(wù)上,如代碼生成、漏洞檢測,通常表現(xiàn)的不夠好;LLMs隨著版本/模型的迭代依然在不斷進(jìn)步,是具有潛力的。所以,文章認(rèn)為在當(dāng)前階段,LLMs依然不能代替人工進(jìn)行軟件工程任務(wù),但是它能成為一個很好的程序開發(fā)者助理、搜索器和提示工具。
第二篇文章對代碼LLM(Code LLMs) 的發(fā)展歷程和性能表現(xiàn)進(jìn)行了全面調(diào)查和分析,包括Code LLMs與通用LLMs之間的性能,以及Code LLMs之間的性能表現(xiàn)。文章的動機(jī)為:Code LLMs可以通過指令微調(diào)的方法產(chǎn)生,也可以通過傳統(tǒng)的預(yù)訓(xùn)練方法得到。身為專門為軟件工程領(lǐng)域開發(fā)的語言模型,理想情況下,LLMs在軟件工程任務(wù)上的能力通??梢缘玫竭M(jìn)一步激發(fā),并擁有更強(qiáng)的代碼生成、漏洞挖掘等能力。所以,當(dāng)前也有大量工作聚焦于此,并產(chǎn)生許多具有里程碑意義的Code LLMs,如Codex、StarCoder、Code Llama等。但是,由于指令微調(diào)、訓(xùn)練數(shù)據(jù)等各方面帶來的不確定因素,以及當(dāng)前最先進(jìn)的通用LLMs,如GPT-4,在各個軟件工程領(lǐng)域取得了矚目的效果。我們很難確定當(dāng)前最先進(jìn)的Code LLMs在軟件工程任務(wù)上能否比當(dāng)前最先進(jìn)的通用LLMs獲得更好的表現(xiàn)。同時,Code LLMs的數(shù)量繁多,它們很大一部分都是通過在通用LLMs或其他Code LLMs上微調(diào)得到。由于它們可能擁有不同的結(jié)構(gòu)和微調(diào)技術(shù),所以很可能不同Code LLMs擅長的軟件工程任務(wù)并不相同。然而,目前卻缺少對Code LLMs及其性能的系統(tǒng)性調(diào)查,尤其是Code LLMs與通用LLMs、以及Code LLMs之間的性能調(diào)查。
為此,文章從GitHub, dblp, Google Scholar和 arXiv四個主要的發(fā)布新模型的數(shù)據(jù)庫中篩出了134篇有效的相關(guān)文獻(xiàn)。文章主要針對下面三個問題展開:
1. RQ1: 當(dāng)前有哪些專為軟件工程任務(wù)設(shè)計(jì)的LLMs?它們是如何演變的?
2. RQ2: 這些Code LLMs在軟件工程任務(wù)上的性能表現(xiàn)比通用LLMs更好嗎?
3. RQ3: 在不同軟件工程任務(wù)上,不同Code LLMs的表現(xiàn)如何?
RQ1: 當(dāng)前有哪些專為軟件工程任務(wù)
設(shè)計(jì)的LLMs?它們是如何演變的?
文章將收集到的專為軟件工程任務(wù)設(shè)計(jì)的LLMs(Code LLMs)進(jìn)行整理并展示了它們之間的關(guān)系。下圖根據(jù)發(fā)布單位統(tǒng)計(jì)了Code LLMs的數(shù)量。我們可以看到,企業(yè)主導(dǎo)的Code LLMs有18個,其中微軟發(fā)布最多,占8個;高校共發(fā)布18個Code LLMs;相對來說,研究團(tuán)隊(duì)和社區(qū)發(fā)布的Code LLMs最多,有21個。
文章也按照發(fā)布的時間對Code LLMs進(jìn)行了展示(如下圖所示)。其中紅色表示未開源,藍(lán)色表示開源。我們可以看到隨著年份的增加,越來越多的企業(yè)、高校和科研團(tuán)隊(duì)參與到Code LLMs的開發(fā)中。
文章還梳理了這些Code LLMs之間的關(guān)系(如下圖所示)。其中箭頭表示被指向者由指向者發(fā)展得到,這種發(fā)展包括且不限于:改良、微調(diào)、借用技術(shù)。
RQ2: 這些Code LLMs在軟件工程任務(wù)上
的性能表現(xiàn)比通用LLMs更好嗎?
文章從收集的論文中篩選出對Code LLMs進(jìn)行評測、發(fā)布全新評測基準(zhǔn)以及全新Code LLMs的文章。并從全部文獻(xiàn)中篩查出實(shí)驗(yàn)部分存在Code LLMs與通用 LLMs對比工作的內(nèi)容,最終得到如下圖的結(jié)果:
在上表的38篇文獻(xiàn)中,共有11篇工作中的實(shí)驗(yàn)顯示通用LLMs在軟件工程任務(wù)上的表現(xiàn)更好,而有20篇工作的實(shí)驗(yàn)部分,顯示Code LLMs表現(xiàn)更優(yōu)秀。還有7篇文章,我們無法從其中的實(shí)驗(yàn)部分或文章結(jié)論中得到關(guān)于Code LLMs與通用LLMs誰更好的明確結(jié)論。
根據(jù)上述文獻(xiàn)的結(jié)果,我們可以得到如下結(jié)論:(1)模型的參數(shù)對模型的性能影響非常大,同一模型的較大規(guī)模往往具有更好的表現(xiàn);(2)對于同一模型,面向軟件工程任務(wù)進(jìn)行指令微調(diào)后的新模型比基座模型具有更好的表現(xiàn);(3)在參數(shù)量接近時,Code LLMs往往比通用LLMs表現(xiàn)更好;(4)當(dāng)前最先進(jìn)的Code LLM比當(dāng)前最先進(jìn)的通用LLMs(GPT-4)在代碼生成任務(wù)上表現(xiàn)更好。
文章還分享了一些有趣的結(jié)果:(1)同一模型的參數(shù)規(guī)模對模型的能力存在重要的影響,但在影響程度上,不同LLMs的表現(xiàn)可能存在差異,模型參數(shù)量對于模型性能是否存在邊際效應(yīng),以及不同模型對于參數(shù)量的敏感程度,或許是一個值得討論的問題。(2)所有的編碼器-解碼器模型的HumanEval結(jié)果都比僅解碼器模型差的多??赡苁且?yàn)椋壕幋a器-解碼器與HumanEval設(shè)置不太一致,但是僅編碼器模型卻與競賽編程設(shè)置非常一致。所以,文章認(rèn)為我們可能還需要更加多樣化的測試基準(zhǔn)來量化Code LLMs的真實(shí)能力,單一的benchmark可能并不能完整體現(xiàn)LLMs的性能。(3)LLM的能力不完全由其規(guī)模決定,數(shù)據(jù)質(zhì)量可能發(fā)揮著非常重要的作用。所以phi-1.5-1.3B才有可能戰(zhàn)勝參數(shù)規(guī)模五倍于它的LLMs。
當(dāng)然,我們也發(fā)現(xiàn),當(dāng)前在實(shí)際的應(yīng)用中評估Code LLMs和通用LLMs的性能表現(xiàn)比較困難。一個最主要的原因是當(dāng)前最先進(jìn)的通用LLMs——GPT-4和GPT-3.5-tubro未開源,所以很多測試都沒有將這兩個LLMs進(jìn)行對比。并且,由于每個工作的發(fā)表時間不同,每個工作所能采用的Code LLMs與通用LLMs也幾乎不相同,這便導(dǎo)致各個工作的評測結(jié)果存在差異。
RQ3: 在不同軟件工程任務(wù)上,
不同Code LLMs的表現(xiàn)如何?
文章首先從收集的論文中整理出具有對LLMs在軟件工程任務(wù)上評測的部分,并將這些工作面向不同的軟件工程任務(wù)進(jìn)行分類,再按評測的benchmark進(jìn)行分類,文章希望可以為每一個benchmark整理出一個相對較為完整的名單。
文章在這一部分不僅整理了包含HumanEval、MBPP等主流Benchmark的較為完整的名單,還將不同文獻(xiàn)中的大量數(shù)據(jù)進(jìn)行整理和展示。并且文章針對Code LLMs的表現(xiàn)進(jìn)行了闡述,給出了如下結(jié)論:(1)當(dāng)前針對LLMs的評估更關(guān)注代碼生成任務(wù),對于其他任務(wù)的評估或關(guān)注度較少。不僅相關(guān)評估工作存在缺失,在新模型發(fā)布時,也鮮少關(guān)注漏洞修復(fù)等任務(wù)。(2)對于代碼生成任務(wù)存在HumanEval等廣受關(guān)注的benchmark,而其他任務(wù)上缺少這樣的benchmark;在代碼生成任務(wù)上,Code-LLaMA系列的LLMs表現(xiàn)得最好,其中Unnatural-Code-LLaMA-34B的表現(xiàn)最突出;在API相關(guān)的代碼生成任務(wù)上,ToolCoder表現(xiàn)更好,而GPT-4、GPT-3.5(GPT-3.5-turbo)也具有很好的性能表現(xiàn)。(3)在測試用例生成任務(wù)上,GPT-4和GPT-3.5(GPT-3.5-turbo)具有更好的性能表現(xiàn)。(4)在代碼摘要任務(wù)上,CodeT5+具有更好的性能表現(xiàn),好于GPT-3.5(GPT-3.5-turbo)。(5)在代碼翻譯任務(wù)上,GPT-4的表現(xiàn)更好。(6)在漏洞修復(fù)任務(wù)上,根據(jù)僅有的一些結(jié)果,Codex的性能更好。
必贏3003no1線路檢測中心必贏3003no1線路檢測中心發(fā)布的這兩篇論文圍繞“大語言模型+軟件工程”主題,不僅全面梳理了軟件工程領(lǐng)域與LLM的結(jié)合點(diǎn)、總結(jié)了當(dāng)前LLM在軟件工程任務(wù)上的表現(xiàn)情況,也對代碼 LLM(Code LLMs)的發(fā)展歷程和性能表現(xiàn)進(jìn)行了全面調(diào)查和分析。兩篇文章對范圍內(nèi)歷史工作進(jìn)行系統(tǒng)回顧的同時,也對該主題的發(fā)展方向進(jìn)行了討論,比如Code LLMs的性能改進(jìn)方向等,值得關(guān)注!