Liberazione di ControlFlag 1.0, un strumentu per identificà errori in codice C

Intel hà publicatu a prima liberazione maiò di l'uttellu ControlFlag 1.0, chì permette di identificà errori è anomalie in u codice fonte utilizendu un sistema d'apprendimentu di macchina furmatu nantu à una grande quantità di codice esistenti. A cuntrariu di l'analizzatori statichi tradiziunali, ControlFlag ùn applicà micca regule pronti, in quale hè difficiule di furnisce tutte l'opzioni pussibuli, ma hè basatu annantu à statistiche nantu à l'usu di diversi custruzzioni di lingua in un gran numaru di prughjetti esistenti. U codice ControlFlag hè scrittu in C++ è hè apertu sottu a licenza MIT.

U sistema hè furmatu da custruisce un mudellu statisticu di l'array di codice esistenti di prughjetti open-source publicati in GitHub è repositori publichi simili. In u stadiu di furmazione, u sistema determina mudelli tipici per a custruzzione di strutture in u codice è custruisce un arbulu sintatticu di cunnessione trà sti mudelli, riflettendu u flussu di l'esekzione di codice in u prugramma. In u risultatu, un arbre di decisione di riferimentu hè furmatu chì combina l'esperienza di sviluppu di tutti i codici fonte analizati. U codice sottu rivisione hè sottumessu à un prucessu simili di identificà mudelli chì sò verificati contru un arbre di decisione di riferimentu. Grandi discrepanzii cù i rami vicini indicanu a presenza di una anomalia in u mudellu verificatu.

Liberazione di ControlFlag 1.0, un strumentu per identificà errori in codice C

Comu esempiu di e capacità di ControlFlag, i sviluppatori anu analizatu i codici fonte di i prughjetti OpenSSL è cURL:

  • Custruzzioni anomali "(s1 == NULL) ∧ (s2 == NULL)" è "(s1 == NULL) | (s2 == NULL)" , chì ùn currispondenu micca à u mudellu cumunimenti usatu "(s1 == NULL) || (s2 == NULL)". U codice hà ancu identificatu anomalie in l'espressioni "(-2 == rv)" (u minus era un typo) è "BIO_puts(bp, ":") <= 0)" (in u cuntestu di cuntrollà u cumpletu successu di a funzione duveria esse "== 0").
  • In cURL, hè statu scupertu un errore chì ùn era micca rilevatu da l'analizzatori statichi quandu anu utilizatu l'elementu di struttura "s->keepon", chì avia un tipu numericu, ma era paragunatu cù u valore booleanu TRUE.

Trà e caratteristiche di a versione ControlFlag 1.0, ci hè un supportu tutale per mudelli standard per a lingua C è a capacità di detect anomalie in espressioni "se" cundiziunali. Per esempiu, quandu analizà u frammentu di codice "se (x = 7) y = x;" U sistema determinarà chì a dichjarazione "se" generalmente usa a custruzzione "variable == number" per paragunà i valori numerichi, cusì hè assai prubabile chì a "variable = number" in l'espressione "se" hè causata da un typo. U kit include un script chì permette di scaricà i repositori di lingua C esistenti in GitHub è l'utilizanu per custruisce u mudellu. I mudelli pronti sò ancu dispunibili, chì vi permettenu di principià immediatamente à verificà u codice.

Source: opennet.ru

Add a comment