Keluaran ControlFlag 1.0, alat untuk mengenal pasti ralat dalam kod C

Intel telah menerbitkan keluaran utama pertama alat ControlFlag 1.0, yang membolehkan anda mengenal pasti ralat dan anomali dalam kod sumber menggunakan sistem pembelajaran mesin yang dilatih pada sejumlah besar kod sedia ada. Tidak seperti penganalisis statik tradisional, ControlFlag tidak menggunakan peraturan sedia ada, di mana sukar untuk menyediakan semua pilihan yang mungkin, tetapi berdasarkan statistik mengenai penggunaan pelbagai binaan bahasa dalam sejumlah besar projek sedia ada. Kod ControlFlag ditulis dalam C++ dan sumber terbuka di bawah lesen MIT.

Sistem ini dilatih dengan membina model statistik susunan kod projek sumber 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.

Keluaran ControlFlag 1.0, alat untuk mengenal pasti ralat dalam kod C

Sebagai contoh keupayaan ControlFlag, pembangun menganalisis kod sumber projek OpenSSL dan cURL:

  • Binaan anomali β€œ(s1 == NULL) ∧ (s2 == NULL)” dan β€œ(s1 == NULL) | (s2 == NULL)" , yang tidak sepadan dengan corak yang biasa digunakan "(s1 == NULL) || (s2 == NULL)". Kod itu juga mengenal pasti anomali dalam ungkapan "(-2 == rv)" (tolak adalah kesilapan menaip) dan "BIO_puts(bp, ":") <= 0)" (dalam konteks menyemak kejayaan menyiapkan fungsi itu sepatutnya "== 0").
  • Dalam cURL, ralat ditemui yang tidak dikesan oleh penganalisis statik apabila menggunakan elemen struktur "s->keepon", yang mempunyai jenis angka, tetapi dibandingkan dengan nilai boolean TRUE.

Antara ciri versi ControlFlag 1.0, terdapat sokongan penuh untuk templat standard untuk bahasa C dan keupayaan untuk mengesan anomali dalam ungkapan "jika" bersyarat. Sebagai contoh, apabila menganalisis serpihan kod "jika (x = 7) y = x;" Sistem akan menentukan bahawa pernyataan "jika" biasanya menggunakan binaan "nombor == pembolehubah" untuk membandingkan nilai berangka, jadi kemungkinan besar "pembolehubah = nombor" dalam ungkapan "jika" disebabkan oleh kesilapan menaip. Kit ini termasuk skrip yang membolehkan anda memuat turun repositori bahasa C sedia ada di GitHub dan menggunakannya untuk membina model. Model siap sedia juga tersedia, membolehkan anda mula menyemak kod dengan segera.

Sumber: opennet.ru

Tambah komen