RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

大模型在代碼缺陷檢測領(lǐng)域的應(yīng)用實(shí)踐

OSC開源社區(qū) ? 來源: 百度Geek說 ? 2023-11-08 10:27 ? 次閱讀

作者 | 小新、車?yán)遄?

導(dǎo)讀

靜態(tài)代碼掃描(SA)能快速識別代碼缺陷,如空指針訪問、數(shù)組越界等,以較高ROI保障質(zhì)量及提升交付效率。當(dāng)前掃描能力主要依賴人工經(jīng)驗(yàn)生成規(guī)則,泛化能力弱且迭代滯后,導(dǎo)致漏出。本文提出基于代碼知識圖譜解決給機(jī)器學(xué)什么的問題,以及基于代碼大模型解決機(jī)器怎么學(xué)的問題,讓計(jì)算機(jī)像人一樣看懂代碼,并自動發(fā)現(xiàn)代碼中的缺陷,給出提示,以期達(dá)到更小的人力成本,更好的效果泛化和更高的問題召回。

01代碼缺陷檢測背景介紹

靜態(tài)代碼掃描(SA)指在軟件工程中,程序員寫好源代碼后,在不運(yùn)行計(jì)算機(jī)程序的條件下,對程序進(jìn)行分析檢查。通過在代碼測試之前,在編碼階段就介入SA,提前發(fā)現(xiàn)并修復(fù)代碼問題,有效減少測試時間,提高研發(fā)效率,發(fā)現(xiàn)BUG越晚,修復(fù)的成本越大。

2c513e60-7d5d-11ee-939d-92fbcf53809c.png

MEG的SA能力于2018年建立,支持C++、GO等語言,建設(shè)100+個規(guī)則,覆蓋大部分MEG的模塊,一定程度保障線上質(zhì)量。當(dāng)前檢測主要依賴人工生成規(guī)則,存在人工編寫成本高,以及泛化能力弱且迭代滯后,導(dǎo)致問題漏出。2022年Q2,我們團(tuán)隊(duì)嘗試引入大模型:通過代碼語言大模型,實(shí)現(xiàn)機(jī)器自主檢測缺陷,提升泛化能力和迭代效率,減少人工編寫規(guī)則的成本。接下來,為大家?guī)硐嚓P(guān)介紹。

02基于規(guī)則的代碼缺陷檢測主要問題

隨著缺陷規(guī)則增多,覆蓋的語言和模塊增多,有兩個突出的痛點(diǎn)急需解決:

1、每種規(guī)則都需人工根據(jù)經(jīng)驗(yàn)和后續(xù)的漏出分析維護(hù),成本較高;以空指針場景為例,人工編寫的規(guī)則代碼共4439行,維護(hù)的回歸case共227個,但Q2仍有3個bug漏出。我們如何引入大模型減少開發(fā)成本,提質(zhì)增效?

2、有效率偏低,掃描的能力有限(如斷鏈、框架保證非空、復(fù)雜場景靜態(tài)很難識別等,且風(fēng)險的接受不同,掃描的部分高風(fēng)險問題存在修復(fù)意愿低,對用戶造成打擾。我們如何通過模型,從歷史誤報中學(xué)習(xí)經(jīng)驗(yàn),進(jìn)行過濾,減少打擾,提升召回?

03解決方案

為了解決2個痛點(diǎn)問題,提出對應(yīng)的解決方案。

3.1基于大模型的缺陷自動掃描

如何讓計(jì)算機(jī)像人一樣看懂代碼,并自動發(fā)現(xiàn)代碼中的缺陷,給出提示。要讓計(jì)算機(jī)自主進(jìn)行缺陷檢測,核心需要解決2個技術(shù)難題:

【學(xué)什么】給計(jì)算機(jī)輸入什么內(nèi)容,能讓計(jì)算機(jī)更快、更好的學(xué)習(xí);主要依托代碼知識圖譜提取目標(biāo)變量相關(guān)的片段,減少機(jī)器學(xué)習(xí)需要的樣本量,提升學(xué)習(xí)的準(zhǔn)確性。

【怎么學(xué)】針對輸入的內(nèi)容,采用什么算法,能讓機(jī)器像人一樣讀懂多種程序語言,并完成檢測任務(wù);采用深度學(xué)習(xí)的方法,主要包含預(yù)訓(xùn)練和微調(diào)兩部分。預(yù)訓(xùn)練技術(shù)讓計(jì)算機(jī)在海量無標(biāo)簽的樣本中學(xué)習(xí)到多種語言的通用代碼語義,本項(xiàng)目主要采用開源的預(yù)訓(xùn)練大模型。微調(diào)技術(shù)通過給大模型輸入缺陷檢測的樣本,從而得到適配場景的大模型,讓機(jī)器自主的進(jìn)行缺陷識別。

2c662870-7d5d-11ee-939d-92fbcf53809c.png

3.1.1 代碼知識圖譜提取片段

為了平衡模型性能和資源,不同大模型允許輸入的token量級不同,如Bert模型限制512個token,因此,需要對輸入進(jìn)行縮減。代碼知識圖譜是基于程序分析手段,對業(yè)務(wù)源代碼經(jīng)過模糊或精準(zhǔn)的詞法分析、語法分析和語義分析后,結(jié)合依賴分析、關(guān)系挖掘等手段,構(gòu)建得到的軟件白盒代碼知識網(wǎng)。圖譜提供了多種數(shù)據(jù)訪問方式,用戶可以低成本的訪問代碼數(shù)據(jù)。

借助于代碼知識圖譜能力,可以根據(jù)不同場景制定不同的與目標(biāo)變量或目標(biāo)場景相關(guān)的上下文源碼獲取能力,提取的關(guān)鍵步驟包括:

構(gòu)建被分析代碼的知識圖譜

目標(biāo)變量檢測識別:在變更代碼中識別目標(biāo)變量,作為待檢測變量

變量依賴分析:基于控制流和數(shù)據(jù)流的與目標(biāo)變量相關(guān)的依賴變量分析

特征語句提取和剪枝

2c70de32-7d5d-11ee-939d-92fbcf53809c.png

以空指針風(fēng)險檢測為例,最終得到如下樣例的代碼切片信息

2c893d10-7d5d-11ee-939d-92fbcf53809c.png

3.1.2 采用大模型學(xué)習(xí)算法進(jìn)行缺陷預(yù)測

大模型檢測缺陷有兩種思路:

1、一種是通過判別式的方法,識別是否有缺陷以及缺陷類型;

2、一種是通過生成式的方法,構(gòu)建prompt,讓程序自動掃描所有相關(guān)缺陷。

本項(xiàng)目主要采用判別式的方法,并在實(shí)踐中證明該方法具有一定可行性。生成式的方法同步實(shí)驗(yàn)中,接下來分別介紹兩種思路的一些實(shí)踐。

3.1.2.1 判別式的方法

通過分類的思想,基于模型,從歷史的樣本中學(xué)習(xí)規(guī)律,從而預(yù)測新樣本的類別。深度學(xué)習(xí)眾多算法中,如TextCNN、LSTM等,應(yīng)該采用哪一種?我們通過多組對比實(shí)驗(yàn),最終選擇效果最佳的BERT代碼大模型。

2c94b690-7d5d-11ee-939d-92fbcf53809c.png

△模型效果

采用BERT進(jìn)行缺陷檢測共含3步,分別是預(yù)訓(xùn)練、微調(diào)和推理。

預(yù)訓(xùn)練階段采用開源的多語言大模型,已較好的學(xué)習(xí)多種程序語言的語義。

微調(diào)階段,給模型輸入上述通過代碼知識圖譜提取的變量使用點(diǎn)相關(guān)的切片,以及是否有缺陷或者缺陷類型的標(biāo)簽,生成微調(diào)模型,讓機(jī)器具備做檢測任務(wù)的能力。輸入的格式:

 {
 "slices": [{"line":"行代碼內(nèi)容", "loc": "行號"}],
 "mark": {"label":"樣本標(biāo)簽", "module_name":"代碼庫名", "commit_id":"代碼版本", "file_path":"文件名", "risk_happend_line":"發(fā)生異常的行"}
 }

推理階段,分析使用點(diǎn)目標(biāo)變量的相關(guān)切片,通過微調(diào)模型進(jìn)行預(yù)測,得到使用點(diǎn)是否有缺陷,以及缺陷類型

模型上線后,用戶對結(jié)果反饋狀態(tài)包括誤報和接受,采集真實(shí)反饋樣本,加入微調(diào)模型自動訓(xùn)練,從而到達(dá)自動迭代、快速學(xué)習(xí)新知識的目的。

2ca62f24-7d5d-11ee-939d-92fbcf53809c.png

3.1.2.2 生成式的方法

生成式模型百花齊發(fā),有閉源的如chatgpt、文心一言,有開源的如llama、bloom和starcode等。我們主要嘗試文心一言、llama和bloom,通過prompt(few shot、引入思維鏈、指定抽象的引導(dǎo)規(guī)則)和微調(diào)的方式,探索模型在空指針缺陷檢測的預(yù)測效果。整體f1測度不高,最佳的bloom61.69%,相比Bert路線的80%有差距,且模型的穩(wěn)定性較差。因生成式路線有自身的優(yōu)勢,如參數(shù)量大存在智能涌現(xiàn)具有更強(qiáng)的推理能力,允許輸入的token量不斷增加可減少對切片清洗的依賴,可與修復(fù)一起結(jié)合等,我們預(yù)判在缺陷檢測場景生成式是個趨勢,接下來我們將繼續(xù)優(yōu)化,不斷嘗試prompt和微調(diào),通過更合適的引導(dǎo),更好的激發(fā)模型的潛力,從而提升生成式方法在檢測場景的效果。

2cb07ccc-7d5d-11ee-939d-92fbcf53809c.png ? ?

3.2 采用規(guī)則+機(jī)器學(xué)習(xí)進(jìn)行誤報過濾

缺陷檢測場景識別的缺陷是風(fēng)險,存在接受度問題,如何過濾掉其中低風(fēng)險問題,是個難題。通過分析誤報和修復(fù)的樣本,我們采集誤報相關(guān)的特征,如指針類型,模塊誤報率、文件誤報率等跟誤報相關(guān)的10+特征,訓(xùn)練機(jī)器學(xué)習(xí)模型(邏輯回歸),判斷是否需要過濾.

整體方案架構(gòu)圖如下:

2ccdfb80-7d5d-11ee-939d-92fbcf53809c.png

04業(yè)務(wù)落地

基于AI的代碼缺陷檢測能力可以集成進(jìn)入code管理平臺,每次代碼提交,展示可能存在的代碼缺陷,阻塞合入,并采集研發(fā)人員的反饋,便于模型迭代。

05收益和展望

5.1 收益

通過理論和實(shí)踐證明,讓計(jì)算機(jī)自主學(xué)習(xí)程序語言并完成缺陷檢測任務(wù)具有一定可行性。

1、本項(xiàng)目的方法已在IEEE AITest Conference 2023發(fā)表論文:

2、實(shí)際落地效果:2023Q2 C++空指針場景已覆蓋1100+模塊,修復(fù)問題數(shù)662個,相比規(guī)則型靜態(tài)代碼掃描召回占比26.9%,增量召回484個,重合度26.8%,初步證明AI的召回能力,打開了大模型做代碼缺陷檢測的大門,同時也驗(yàn)證大模型具備傳統(tǒng)規(guī)則的擴(kuò)召回、低成本的優(yōu)勢,可形成標(biāo)記+訓(xùn)練+檢測的自閉環(huán)。

5.2 展望

基于5.1收益,給了我們用大模型做代碼缺陷檢測的信心,后續(xù)我們繼續(xù)在以下幾個方面加強(qiáng):

1、擴(kuò)展更多語言和場景,如除零、死循環(huán)、數(shù)組越界場景,并在多語言go、java等進(jìn)行快速訓(xùn)練,并進(jìn)行發(fā)布;

2、隨著生成式模型的興起,也會逐漸積累有效的問題和修復(fù)數(shù)據(jù),貢獻(xiàn)文心通用大模型,進(jìn)行預(yù)訓(xùn)練和微調(diào),以探索生成式模型在智能缺陷檢測與修復(fù)領(lǐng)域的應(yīng)用;

3、同時將調(diào)研更多基礎(chǔ)切片技術(shù),拿到更多豐富有效代碼切片,以提升準(zhǔn)召率。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7488

    瀏覽量

    87849
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
  • 缺陷檢測
    +關(guān)注

    關(guān)注

    2

    文章

    142

    瀏覽量

    12221
  • 大模型
    +關(guān)注

    關(guān)注

    2

    文章

    2423

    瀏覽量

    2640

原文標(biāo)題:大模型在代碼缺陷檢測領(lǐng)域的應(yīng)用實(shí)踐

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【大語言模型:原理與工程實(shí)踐】探索《大語言模型原理與工程實(shí)踐

    的未來發(fā)展方向進(jìn)行了展望,包括跨領(lǐng)域、跨模態(tài)和自動提示生成能力方向,為讀者提供了對未來技術(shù)發(fā)展的深刻見解?!洞笳Z言模型原理與工程實(shí)踐》是一本內(nèi)容豐富、深入淺出的技術(shù)書籍。它不僅為讀者提供了大語言
    發(fā)表于 04-30 15:35

    【大語言模型:原理與工程實(shí)踐】大語言模型的評測

    知識獲取、邏輯推理、代碼生成等方面的能力。這些評測基準(zhǔn)包括語言建模能力、綜合知識能力、數(shù)學(xué)計(jì)算能力、代碼能力和垂直領(lǐng)域等多個維度。對于微調(diào)模型
    發(fā)表于 05-07 17:12

    缺陷檢測工業(yè)生產(chǎn)中的應(yīng)用

    自己開發(fā)出的SVS系列工業(yè)智能軟件缺陷檢測的具體應(yīng)用“充電器字符缺陷檢測系統(tǒng)”為例為大家說明。檢測
    發(fā)表于 11-18 13:48

    [轉(zhuǎn)]產(chǎn)品表面缺陷檢測

    ` 工業(yè)制造過程中,總會有各種生產(chǎn)缺陷。以前大多數(shù)的產(chǎn)品檢測都是用肉眼檢查的,隨著機(jī)器視覺技術(shù)的發(fā)展,使用機(jī)器代替人眼檢測已成為未來的發(fā)展趨勢。機(jī)器視覺
    發(fā)表于 08-07 16:40

    labview深度學(xué)習(xí)應(yīng)用于缺陷檢測

    標(biāo)注產(chǎn)品后通過訓(xùn)練平臺完成模型訓(xùn)練經(jīng)過少量樣品訓(xùn)練得到測試結(jié)果,表明深度學(xué)習(xí)對傳統(tǒng)視覺算法比較棘手的缺陷檢測方面,能簡單粗暴的解決問題,后續(xù)就是增加缺陷樣品的收集,標(biāo)注,以及
    發(fā)表于 08-16 18:12

    機(jī)器視覺檢測系統(tǒng)薄膜表面缺陷檢測的應(yīng)用

    高產(chǎn)量下的薄膜質(zhì)量,提出了基于機(jī)器視覺檢測技術(shù)在線薄膜缺陷自動化檢測方法。機(jī)器視覺檢測技術(shù)的薄膜表面缺陷
    發(fā)表于 10-30 16:15

    廣東機(jī)器視覺缺陷檢測系統(tǒng)包裝袋封口檢測的應(yīng)用

    、測量、識別和定位功能中,視覺缺陷檢測的能力更強(qiáng)。除此之外,它還可以提高生產(chǎn)效率和自動化程度,因此工業(yè)領(lǐng)域得到了非常廣泛的應(yīng)用,是智能制造的重要基礎(chǔ)。四元數(shù)致力于運(yùn)動控制、圖像與視覺
    發(fā)表于 06-30 09:53

    芯片缺陷檢測

    Tips:需要了解項(xiàng)目細(xì)節(jié)或者相關(guān)技術(shù)支持,以下是聯(lián)系方式。(源碼中去掉了部分核心代碼,需要Github賬號,將項(xiàng)目Star之后截圖發(fā)到郵箱,我會把核心代碼進(jìn)行回復(fù))機(jī)器視覺項(xiàng)目----芯片缺陷
    發(fā)表于 07-23 06:42

    表面檢測市場案例,SMT缺陷檢測

    很多,一種電路板從幾十種到幾百種缺陷,這對檢測人員要求很高;并且檢測人員有崗位流動的情況下,要確保每個檢測人員達(dá)到合格水平是非常困難的。
    發(fā)表于 11-08 14:28

    基于改進(jìn)萬有引力優(yōu)化的LSSVM模型標(biāo)簽缺陷檢測中的應(yīng)用

    基于改進(jìn)萬有引力優(yōu)化的LSSVM模型標(biāo)簽缺陷檢測中的應(yīng)用_莊葛巍
    發(fā)表于 12-28 14:24 ?0次下載

    表面缺陷檢測系統(tǒng)的應(yīng)用領(lǐng)域有哪些

    國辰表面缺陷檢測系統(tǒng)能實(shí)時檢測、顯示和識別布匹上的表面缺陷,能檢測分別出斷經(jīng)/緯、松經(jīng)/緯、孔洞、疵點(diǎn)、臟/污點(diǎn)、破損、蟻蟲、塵埃等常見表面
    發(fā)表于 09-16 17:11 ?1014次閱讀

    魔方大模型智能汽車領(lǐng)域的應(yīng)用實(shí)踐與探索

    汽車領(lǐng)域最新的應(yīng)用實(shí)踐與探索。 當(dāng)前,大模型的出現(xiàn)正在加速信息技術(shù)進(jìn)入智能原生時代,并使得人機(jī)自然交互真正成為可能。而混合AI,端云協(xié)同等人工智能技術(shù)新的發(fā)展趨勢,為大模型
    的頭像 發(fā)表于 08-30 10:01 ?1507次閱讀

    瑞薩電子深度學(xué)習(xí)算法缺陷檢測領(lǐng)域的應(yīng)用

    浪費(fèi)大量的人力成本。因此,越來越多的工程師開始將深度學(xué)習(xí)算法引入缺陷檢測領(lǐng)域,因?yàn)樯疃葘W(xué)習(xí)特征提取和定位方面取得了非常好的效果。
    的頭像 發(fā)表于 09-22 12:19 ?889次閱讀
    瑞薩電子深度學(xué)習(xí)算法<b class='flag-5'>在</b><b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b><b class='flag-5'>領(lǐng)域</b>的應(yīng)用

    深度學(xué)習(xí)工業(yè)缺陷檢測中的應(yīng)用

    工業(yè)制造領(lǐng)域中,產(chǎn)品質(zhì)量的保證是至關(guān)重要的任務(wù)之一。然而,人工的檢測方法不僅費(fèi)時費(fèi)力,而且容易受到主觀因素的影響,從而降低了檢測的準(zhǔn)確性和一致性。近年來,基于深度學(xué)習(xí)的技術(shù)工業(yè)
    的頭像 發(fā)表于 10-24 09:29 ?1531次閱讀
    深度學(xué)習(xí)<b class='flag-5'>在</b>工業(yè)<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>中的應(yīng)用

    描繪未知:數(shù)據(jù)缺乏場景的缺陷檢測方案

    Neuro-T 視覺平臺 克服了數(shù)據(jù)缺乏狀況的困難,通過零代碼設(shè)置 GAN模型 和 無監(jiān)督學(xué)習(xí)模型 ,輕松實(shí)現(xiàn)缺陷圖像的標(biāo)注、繪制和導(dǎo)出。 工業(yè)應(yīng)用中存在較多的
    的頭像 發(fā)表于 01-25 10:46 ?562次閱讀
    描繪未知:數(shù)據(jù)缺乏場景的<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>方案
    RM新时代网站-首页