Intel muka kode sistem pembelajaran mesin ControlFlag pikeun ngaidentipikasi bug dina kode

Intel geus manggihan kamajuan nu patali jeung proyék panalungtikan ControlFlag, aimed dina nyieun sistem mesin learning pikeun ngaronjatkeun kualitas kode. Toolkit anu disiapkeun ku proyék ngamungkinkeun, dumasar kana modél anu dilatih dina sajumlah ageung kode anu aya, pikeun ngadeteksi rupa-rupa kasalahan sareng anomali dina téks sumber anu ditulis dina basa tingkat luhur sapertos C / C ++. Sistem ieu cocog pikeun ngaidentipikasi rupa-rupa masalah dina kode, ti ngadeteksi typos sareng kombinasi jinis anu salah, dugi ka ngadeteksi cék NULL anu lasut dina pointer sareng masalah mémori. Kode ControlFlag ditulis dina C ++ tur open source handapeun lisénsi MIT.

Sistem ieu diajar mandiri ku ngawangun modél statistik tina susunan kode anu aya pikeun proyék-proyék kabuka anu diterbitkeun dina GitHub sareng repositori umum anu sami. Dina tahap diajar, sistem nangtukeun pola has pikeun ngawangun struktur dina kode jeung ngawangun tangkal sintaksis link antara pola ieu, nu ngagambarkeun aliran palaksanaan kode dina program. Hasilna, tangkal kaputusan rujukan kabentuk nu ngagabungkeun pangalaman ngamekarkeun sakabéh téks sumber dianalisis.

Kodeu anu diuji ngalangkungan prosés anu sami pikeun ngaidentipikasi pola anu dipariksa ngalawan tangkal kaputusan rujukan. Beda ageung sareng dahan tatangga nunjukkeun ayana anomali dina template anu dipariksa. Sistim nu ogé ngamungkinkeun teu ukur pikeun ngaidentipikasi kasalahan dina citakan, tapi ogé nyarankeun koreksi. Contona, dina kode OpenSSL, konstruksi "(s1 == NULL) ∧ (s2 == NULL)" kapanggih, nu lumangsung ngan 8 kali dina tangkal sintaksis, sedengkeun cabang pangcaketna kalawan nilai "(s1 ==). NULL) || (s2 == NULL)" lumangsung ngeunaan 7 sarébu kali. Sistem ogé ngadeteksi anomali "(s1 == NULL) | (s2 == NULL)" nu lumangsung 32 kali dina tangkal.

Intel muka kode sistem pembelajaran mesin ControlFlag pikeun ngaidentipikasi bug dina kode

Nalika parsing snippet kode "lamun (x = 7) y = x;" sistem geus ditangtukeun yén "variabel == angka" konstruksi biasana dipaké dina "lamun" pernyataan pikeun ngabandingkeun nilai numerik, kituna, kalawan probabiliti tinggi, indikasi "variabel = angka" dina "lamun" ekspresi disababkeun ku salah ketik. Analis statik tradisional bakal nangkep kasalahan sapertos kitu, tapi teu siga aranjeunna, ControlFlag henteu nganggo aturan anu siap-siap dimana hese ngaramalkeun sadaya pilihan anu mungkin, tapi dumasar kana statistik ngagunakeun sagala jinis konstruksi dina sajumlah ageung proyék. .

Salaku ékspérimén, ngagunakeun ControlFlag dina kode sumber utilitas cURL, anu sering dicutat salaku conto kode kualitas luhur sareng diverifikasi, kasalahan anu teu dipikanyaho ku analisa statik dideteksi nalika nganggo unsur struktur "s-> keepon", nu miboga tipe numerik, tapi dibandingkeun jeung nilai boolean BENER . Dina kode OpenSSL, salian ti masalah anu disebut tadi sareng "(s1 == NULL) ∧ (s2 == NULL)", aya ogé anomali dina ekspresi "(-2 == rv)" (minusna nyaéta typo. ) jeung "BIO_puts(bp, ":")

sumber: opennet.ru

Tambahkeun komentar