Rilis ControlFlag 1.0, alat untuk mengidentifikasi kesalahan dalam kode C

Intel telah menerbitkan rilis besar pertama alat ControlFlag 1.0, yang memungkinkan Anda mengidentifikasi kesalahan dan anomali dalam kode sumber menggunakan sistem pembelajaran mesin yang dilatih pada sejumlah besar kode yang ada. Tidak seperti penganalisis statis tradisional, ControlFlag tidak menerapkan aturan yang sudah jadi, yang sulit untuk menyediakan semua opsi yang memungkinkan, tetapi didasarkan pada statistik penggunaan berbagai konstruksi bahasa di sejumlah besar proyek yang ada. Kode ControlFlag ditulis dalam C++ dan bersumber terbuka di bawah lisensi MIT.

Sistem ini dilatih dengan membangun model statistik dari rangkaian kode proyek sumber 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.

Rilis ControlFlag 1.0, alat untuk mengidentifikasi kesalahan dalam kode C

Sebagai contoh kemampuan ControlFlag, pengembang menganalisis kode sumber proyek OpenSSL dan cURL:

  • Konstruksi anomali “(s1 == NULL) ∧ (s2 == NULL)” dan “(s1 == NULL) | (s2 == NULL)" , yang tidak cocok dengan pola yang umum digunakan "(s1 == NULL) || (s2 == BATAL)". Kode tersebut juga mengidentifikasi anomali dalam ekspresi “(-2 == rv)” (minusnya adalah salah ketik) dan “BIO_puts(bp, “:”) <= 0)” (dalam konteks memeriksa keberhasilan penyelesaian tugas fungsi seharusnya “== 0").
  • Di cURL, ditemukan kesalahan yang tidak terdeteksi oleh penganalisis statis saat menggunakan elemen struktur “s->keepon”, yang memiliki tipe numerik, tetapi dibandingkan dengan nilai boolean TRUE.

Di antara fitur-fitur versi ControlFlag 1.0, terdapat dukungan penuh untuk templat standar untuk bahasa C dan kemampuan untuk mendeteksi anomali dalam ekspresi “jika” bersyarat. Misalnya saat menganalisis penggalan kode “if (x = 7) y = x;” Sistem akan menentukan bahwa pernyataan “if” biasanya menggunakan konstruksi “variable == number” untuk membandingkan nilai numerik, sehingga kemungkinan besar “variable = number” pada ekspresi “if” disebabkan oleh kesalahan ketik. Kit ini mencakup skrip yang memungkinkan Anda mengunduh repositori bahasa C yang ada di GitHub dan menggunakannya untuk membangun model. Model siap pakai juga tersedia, memungkinkan Anda segera mulai memeriksa kodenya.

Sumber: opennet.ru

Tambah komentar