軟安科技(展位號:1S55)
8月27-29日約您觀展!
AIGC 在編寫腳本語言/前端代碼的領(lǐng)域已經(jīng)展露了非凡的能力,那么在嵌入式開發(fā)中,對于C/C++的語言能力又如何呢?
AIGC 生成代碼質(zhì)量如何?
01
一個簡單的要求
當我們向 chatGPT4提出一個簡單的要求。
會得到一個傳遞數(shù)組的函數(shù),chatGPT也可以針對性能要求修改為傳遞指針。
因為這個需求非常簡單,生成的函數(shù)代碼也只有5行,完成了邏輯上的需求。加上main函數(shù),所有的代碼都在一個cpp文件里面完成,運行起來沒有問題,開源的靜態(tài)代碼分析工具掃描也沒有問題。
02
真實的嵌入式環(huán)境會如何?
真實的嵌入式環(huán)境往往比這要復(fù)雜得多,例如我們用AI寫一個過濾函數(shù)。
會得到如下結(jié)果:
當我們簡單的將兩個函數(shù)一起在main里面使用時,問題出現(xiàn)了。
軟安靜態(tài)代碼分析工具在檢測中會報出空指針解引用的問題。因為我們生成的 incrementArray 函數(shù)在處理入?yún)⒅羔槙r,并沒有對其進行非空判斷,而是依賴調(diào)用的main 函數(shù)上下文保證非空。但是 checkThreshold 函數(shù)恰好可能返回一個空指針,這樣程序運行時就可能發(fā)生空指針解引用而崩潰了。
當然這個問題非常淺顯,我們甚至肉眼都可以看出來,但是當checkTreshould變的非常復(fù)雜,我們不能一眼就判斷返回值是否為空時,就需要借助工具來幫助我們了。當然,如果是在同一對話中讓AI把兩個函數(shù)放在一起,AI可能在處理checkTreshould 返回值時檢查是否為空。
或者我們在提出第一個需求時,強調(diào)AI必須對入?yún)⑦M行保護,那么空指針的問題不會發(fā)生。但是究竟應(yīng)該在函數(shù)內(nèi)進行非空判斷,還是在調(diào)用時進行非空判斷,不同的編碼風格會有不同選擇。
如果所有的代碼都由AI一次性生成,那么在統(tǒng)一風格下,可能不會有大問題。但是對于嵌入式編碼來說,一個中等復(fù)雜的項目總代碼行數(shù)可能輕易的上萬級別,即使AIGC 工具不設(shè)置生成代碼限制,這對當前的算力也是十分有挑戰(zhàn)的。其次,嵌入式項目都包含一定的硬件相關(guān)的驅(qū)動代碼(代碼庫),這部分代碼依照硬件手冊,多樣化且不一定開源,只能以輸入的形式提供給AI。
即使不存在信息泄露,讓AI準確的理解和使用基本上是不可能。所以當程序員尋求AI幫助時,往往只是輔助片段代碼,這種情況下就會出現(xiàn)上述的問題。
AIGC 生成代碼合規(guī)性如何?
如果我們的嵌入式代碼有符合MISRA規(guī)則的需求,那么AIGC又能提供什么幫助呢?在MISRA CPP 2008的上下文中詢問同樣的問題,會生成:
我們發(fā)現(xiàn)生成的代碼并沒有完全遵守規(guī)范,比如7-1-1 “A variable which is not modified shall be const qualified.”
當我們讓 chatGPT 按照“規(guī)則7-1-1”重新生成時,它遵循的是另一條與7-1-1無關(guān)的規(guī)則。
當我們以文字的形式而不是代號描述規(guī)則時,它可以準確的解決違規(guī)問題。通過軟安靜兮源代碼檢測工具,我們發(fā)現(xiàn)生成的代碼還是帶有其他規(guī)范的問題(如6-5-5:單個函數(shù)應(yīng)該僅有一個退出點)。
總體來說,AIGC 是能夠生成一段自身無質(zhì)量安全問題的代碼,但在嵌入式編碼需要使用AI來輔助生成某個函數(shù)或者片段代碼時,它的質(zhì)量保證就不能確保了,需要靜態(tài)代碼分析工具,特別是具有跨函數(shù)分析能力、全局分析能力的工具來檢查生成結(jié)果。
軟安靜兮源代碼檢測工具
如何能夠幫助我們用好AIGC
不可否認的是,AIGC作為人類發(fā)明的最偉大的工具之一對開拓編碼思維、提高編碼速度是有幫助的。但是在嵌入式開發(fā)中,對代碼效率和安全性要求都非常高的時候,還需要一款專業(yè)的靜態(tài)代碼分析工具來彌補AIGC的準確性和專業(yè)性。
軟安靜兮源代碼檢測工具(英文名:StatiCode)是一款自主研發(fā)的靜態(tài)代碼分析工具,具有完全的自主知識產(chǎn)權(quán)。
作為一款基于編譯的靜態(tài)代碼分析工具,相較于非編譯的靜態(tài)代碼分析工具,軟安靜兮在分析深度以及分析準確率上有明顯的優(yōu)勢。默認支持上十種主流編譯器(包括 Clang、GCC、Tasking、S32D、Keil、MSVC、Hightec、ARM Clang、ARM GCC等),在最真實的環(huán)境檢測代碼的語法和底層邏輯。
由于對效率和擴展性的雙向追求,C/C++是一個對專業(yè)性要求極高的語言,并且還在不斷更新,也是容易觸發(fā)質(zhì)量安全漏洞的語言之一。軟安靜兮支持多個版本的C/C++,并支持包括資源泄露、越界訪問等在內(nèi)的諸多檢查器。
在針對代碼的質(zhì)量和安全方面,眾多專業(yè)的組織也制定了行業(yè)規(guī)范。軟安靜兮支持最新的編碼規(guī)范MISRA C、C++ 2023,也支持主流的 MISRA C 2012,MISRA C++ 2008、 AUTOSAR、CERT、 CWE Top 25和 OWASP Top 10。
針對嵌入式的開發(fā)環(huán)境,軟安靜兮源代碼檢測工具也提供了靈活的部署方式,包括容器部署、本機部署、一體機部署等。廣泛支持國產(chǎn)操作系統(tǒng)環(huán)境。具有簡潔且用戶友好的操作界面及功能,能夠快速地一鍵式開啟掃描任務(wù)。同時也提供豐富的接口和API,支持市面主流的CI/CD工具鏈,融入開發(fā)流程。
在嵌入式系統(tǒng)開發(fā)過程中,通過SAST工具能夠在早期發(fā)現(xiàn)潛在問題,在軟件發(fā)布前及時進行修復(fù),這樣的結(jié)合不僅在軟件開發(fā)的不同階段提供了更全面的安全保障,也有助于避免在嵌入式系統(tǒng)中出現(xiàn)可能導(dǎo)致功能失敗或信息泄露的潛在問題。
elexcon深圳國際電子展由創(chuàng)意時代與博聞創(chuàng)意創(chuàng)立于2004年,已成為備受海內(nèi)外電子行業(yè)關(guān)注的年度專業(yè)電子展之一,是展示技術(shù)實力、拓展行業(yè)合作的重要平臺。更多展會詳情請登錄m.mf0o.cn 展位、贊助商及演講人申請請聯(lián)系:0755-88311535
掃描以下二維碼分享至微信朋友圈:
打開微信“掃一掃”即可將該新聞分享到朋友圈。