Intel membuka kod sistem pembelajaran mesin ControlFlag untuk mengenal pasti pepijat dalam kod tersebut

Intel telah menemui perkembangan yang berkaitan dengan projek penyelidikan ControlFlag yang bertujuan untuk mencipta sistem pembelajaran mesin untuk meningkatkan kualiti kod. Kit alat yang disediakan oleh projek membolehkan, berdasarkan model yang dilatih pada sejumlah besar kod sedia ada, untuk mengenal pasti pelbagai ralat dan anomali dalam teks sumber yang ditulis dalam bahasa peringkat tinggi seperti C/C++. Sistem ini sesuai untuk mengenal pasti pelbagai jenis masalah dalam kod, daripada mengenal pasti kesilapan taip dan kombinasi jenis yang salah, kepada mengenal pasti semakan nilai NULL yang hilang dalam penunjuk dan masalah ingatan. Kod ControlFlag ditulis dalam C++ dan sumber terbuka di bawah lesen MIT.

Sistem ini belajar sendiri dengan membina model statistik susunan kod projek terbuka sedia ada yang diterbitkan dalam GitHub dan repositori awam yang serupa. Pada peringkat latihan, sistem menentukan corak tipikal untuk membina struktur dalam kod dan membina pokok sintaksis hubungan antara corak ini, mencerminkan aliran pelaksanaan kod dalam program. Akibatnya, pokok membuat keputusan rujukan dibentuk yang menggabungkan pengalaman pembangunan semua kod sumber yang dianalisis.

Kod yang sedang disemak menjalani proses yang serupa untuk mengenal pasti corak yang disemak pada pokok keputusan rujukan. Percanggahan besar dengan cawangan jiran menunjukkan kehadiran anomali dalam corak yang diperiksa. Sistem ini juga membolehkan anda bukan sahaja mengenal pasti ralat dalam templat, tetapi juga mencadangkan pembetulan. Sebagai contoh, dalam kod OpenSSL, pembinaan "(s1 == NULL) ∧ (s2 == NULL)" telah dikenal pasti, yang muncul dalam pokok sintaks hanya 8 kali, manakala cawangan terdekat dengan nilai "(s1 == NULL) || (s2 == NULL)” berlaku kira-kira 7 ribu kali. Sistem juga mengesan anomali β€œ(s1 == NULL) | (s2 == NULL)” yang muncul 32 kali dalam pokok.

Intel membuka kod sistem pembelajaran mesin ControlFlag untuk mengenal pasti pepijat dalam kod tersebut

Apabila menganalisis serpihan kod "jika (x = 7) y = x;" Sistem telah menentukan bahawa pernyataan "jika" biasanya menggunakan pembinaan "bilangan == pembolehubah" untuk membandingkan nilai berangka, jadi kemungkinan besar "pembolehubah = nombor" dalam ungkapan "jika" disebabkan oleh kesilapan menaip. Penganalisis statik tradisional akan menangkap ralat sedemikian, tetapi tidak seperti mereka, ControlFlag tidak menggunakan peraturan sedia ada, di mana sukar untuk menyediakan semua pilihan yang mungkin, tetapi berdasarkan statistik penggunaan pelbagai struktur dalam jumlah yang besar daripada projek.

Sebagai percubaan, menggunakan ControlFlag dalam kod sumber utiliti cURL, yang sering disebut sebagai contoh kod berkualiti tinggi dan diuji, ralat yang tidak dapat dikesan oleh penganalisis statik telah dikenal pasti apabila menggunakan elemen struktur "s->keepon", yang mempunyai jenis angka, tetapi dibandingkan dengan nilai Boolean TRUE . Dalam kod OpenSSL, sebagai tambahan kepada masalah yang disebutkan di atas dengan "(s1 == NULL) ∧ (s2 == NULL)", anomali juga dikenal pasti dalam ungkapan "(-2 == rv)" (tolak ialah kesilapan taip) dan "BIO_puts(bp, ":")

Sumber: opennet.ru

Tambah komen