Intel membuka kode sistem pembelajaran mesin ControlFlag untuk mengidentifikasi bug dalam kode

Intel telah menemukan perkembangan terkait proyek penelitian ControlFlag yang bertujuan menciptakan sistem pembelajaran mesin untuk meningkatkan kualitas kode. Toolkit yang disiapkan oleh proyek ini memungkinkan, berdasarkan model yang dilatih pada sejumlah besar kode yang ada, untuk mengidentifikasi berbagai kesalahan dan anomali dalam teks sumber yang ditulis dalam bahasa tingkat tinggi seperti C/C++. Sistem ini cocok untuk mengidentifikasi berbagai jenis masalah dalam kode, mulai dari mengidentifikasi kesalahan ketik dan kombinasi tipe yang salah, hingga mengidentifikasi pemeriksaan nilai NULL yang hilang pada pointer dan masalah memori. Kode ControlFlag ditulis dalam C++ dan bersumber terbuka di bawah lisensi MIT.

Sistem ini belajar mandiri dengan membangun model statistik dari rangkaian kode proyek terbuka yang diterbitkan di GitHub dan repositori publik serupa. Pada tahap pelatihan, sistem menentukan pola khas untuk membangun struktur dalam kode dan membangun pohon sintaksis hubungan antara pola-pola ini, yang mencerminkan aliran eksekusi kode dalam program. Hasilnya, pohon pengambilan keputusan referensi terbentuk yang menggabungkan pengalaman pengembangan semua kode sumber yang dianalisis.

Kode yang sedang ditinjau mengalami proses serupa dalam mengidentifikasi pola yang diperiksa berdasarkan pohon keputusan referensi. Perbedaan yang besar dengan cabang tetangga menunjukkan adanya anomali pada pola yang diperiksa. Sistem ini juga memungkinkan Anda tidak hanya mengidentifikasi kesalahan dalam template, tetapi juga menyarankan koreksi. Misalnya, dalam kode OpenSSL, konstruksi β€œ(s1 == NULL) ∧ (s2 == NULL)” diidentifikasi, yang muncul di pohon sintaks hanya 8 kali, sedangkan cabang terdekat dengan nilai β€œ(s1 == BATAL) || (s2 == NULL)” terjadi sekitar 7 ribu kali. Sistem juga mendeteksi anomali β€œ(s1 == NULL) | (s2 == NULL)” yang muncul 32 kali di pohon.

Intel membuka kode sistem pembelajaran mesin ControlFlag untuk mengidentifikasi bug dalam kode

Saat menganalisis potongan kode β€œif (x = 7) y = x;” Sistem telah menentukan bahwa konstruksi β€œvariabel == angka” biasanya digunakan pada operator β€œjika” untuk membandingkan nilai numerik, sehingga kemungkinan besar indikasi β€œvariabel = angka” pada ekspresi β€œjika” disebabkan oleh a salah ketik. Penganalisis statis tradisional akan menangkap kesalahan seperti itu, tetapi tidak seperti mereka, ControlFlag tidak menerapkan aturan yang sudah jadi, di mana sulit untuk menyediakan semua opsi yang memungkinkan, tetapi didasarkan pada statistik penggunaan berbagai struktur dalam jumlah besar. proyek.

Sebagai percobaan, dengan menggunakan ControlFlag dalam kode sumber utilitas cURL, yang sering disebut sebagai contoh kode berkualitas tinggi dan teruji, kesalahan yang tidak terdeteksi oleh penganalisis statis diidentifikasi saat menggunakan elemen struktur β€œs->keepon”, yang memiliki tipe numerik, tetapi dibandingkan dengan nilai Boolean TRUE . Dalam kode OpenSSL, selain masalah yang disebutkan di atas dengan "(s1 == NULL) ∧ (s2 == NULL)", anomali juga diidentifikasi dalam ekspresi "(-2 == rv)" (minusnya adalah salah ketik) dan "BIO_puts(bp, ":")

Sumber: opennet.ru

Tambah komentar