英特爾揭曉 通過廣告 與 ControlFlag 研究項目相關的進展, 旨在創建一個機器學習系統來提高代碼質量。
該工具已在 MIT 許可下發布。 它的突出之處在於允許從大量現有代碼訓練的模型中識別用高級語言(例如 C/C++)編寫的源文本中的各種錯誤和異常。
系統 它適合檢測代碼中的各種類型的問題, 從檢測拼寫錯誤和不正確的類型組合,到識別指針中空值的缺失檢查和內存問題。
系統通過構建統計模型進行自我學習 來自 GitHub 和類似公共存儲庫上發布的現有開源代碼矩陣。 在訓練階段,系統確定典型模板 在代碼中構建結構並構建這些模板之間連接的語法樹,反映程序中代碼執行的流程。 結果,形成了參考決策樹,它結合了所有分析的源文本的開發經驗。
為了讓 ControlFlag 更適合更廣泛的軟件開發社區,英特爾很高興地宣布 ControlFlag 現已開源,可通過 https://github.com/IntelLabs/control-flag 進行訪問。 我們很高興為開發人員提供在此基礎上進行開發的機會,看看利用這項極其有價值的創新技術還可以做些什麼。
自推出以來,ControlFlag 已在生產級軟件和廣泛使用的開源軟件系統上進行了測試。 例如,去年,ControlFlag 發現了客戶端 URL (cURL) 中的代碼異常,這是一個每天使用各種網絡協議傳輸數據超過 XNUMX 億次的計算機軟件項目。 在向 cURL 團隊報告異常情況後,他們同意 ControlFlag 的發現,並隨後修補了他們的代碼。
對被測代碼執行類似的模式定義過程。,與參考決策樹進行比較。 與相鄰分支的較大差異表明正在驗證的模式存在異常。 該系統不僅可以識別模板中的錯誤,還可以提出解決方案。 例如,在解析代碼片段“if (x=7) y= x;”時系統判斷“if”語句中一般使用“variable==number”的結構來比較數值,因此“if”語句中的“variable=number”可能是拼寫錯誤造成的。
傳統的靜態分析器會檢測到此類錯誤,但與它們不同的是,ControlFlag 不應用開箱即用的規則(很難預測所有可能的選項),而是從大量項目中所有類型的構造的使用中獲取統計數據。
當我進行實驗時, 在 cURL 實用程序的源代碼中使用 ControlFlag 時, 經常 被引用作為例子 高質量、經過測試的代碼、靜態分析器 使用結構元素“s-> keepon”時發現了一個無意的錯誤, 它具有數字類型,但與布爾值 TRUE 進行比較。
在OpenSSL代碼中,除了上面提到的“(s1==NULL)∧(s2==NULL)”的問題之外,表達式“(-2==rv)”也存在異常,這不是拼寫錯誤。
另據報導,使用 ControlFlag 可以識別非特定專有軟件中的數百個錯誤,從而導致崩潰和內存問題。
終於 如果您有興趣了解更多信息,您可以查看詳細信息 在下面的鏈接中。 對於那些有興趣查看源代碼、獲取源代碼或將其克隆到存儲庫中的人,他們可以從 以下鏈接。