ControlFlag 1.0:n julkaisu, työkalu C-koodin virheiden tunnistamiseen

Intel on julkaissut ensimmäisen suuren julkaisun ControlFlag 1.0 -työkalusta, jonka avulla voit tunnistaa lähdekoodin virheet ja poikkeamat käyttämällä koneoppimisjärjestelmää, joka on koulutettu suurelle määrälle olemassa olevaa koodia. Toisin kuin perinteiset staattiset analysaattorit, ControlFlag ei ​​käytä valmiita sääntöjä, joissa on vaikea tarjota kaikkia mahdollisia vaihtoehtoja, vaan perustuu tilastoihin erilaisten kielirakenteiden käytöstä useissa olemassa olevissa projekteissa. ControlFlag-koodi on kirjoitettu C++-kielellä ja se on avoimen lähdekoodin MIT-lisenssillä.

Järjestelmää koulutetaan rakentamalla tilastollinen malli olemassa olevasta avoimen lähdekoodin projektien koodijoukosta, joka on julkaistu GitHubissa ja vastaavissa julkisissa arkistoissa. Harjoitusvaiheessa järjestelmä määrittää tyypilliset mallit koodin rakenteiden rakentamiseksi ja rakentaa syntaktisen yhteyksien puun näiden mallien välille, mikä kuvastaa koodin suorittamisen kulkua ohjelmassa. Tuloksena muodostuu referenssipäätöksentekopuu, joka yhdistää kaikkien analysoitujen lähdekoodien kehityskokemuksen. Tarkastelun kohteena oleva koodi käy läpi samanlaisen prosessin, jossa tunnistetaan kuvioita, joita verrataan viitepäätöspuuhun. Suuret erot naapurihaarojen kanssa osoittavat poikkeaman olemassaolosta tarkistettavassa kuviossa.

ControlFlag 1.0:n julkaisu, työkalu C-koodin virheiden tunnistamiseen

Esimerkkinä ControlFlagin ominaisuuksista kehittäjät analysoivat OpenSSL- ja cURL-projektien lähdekoodit:

  • Epänormaalit konstruktit “(s1 == NULL) ∧ (s2 == NULL)” ja “(s1 == NULL) | (s2 == NULL)" , jotka eivät vastaa yleisesti käytettyä mallia "(s1 == NULL) || (s2 == NULL)". Koodi tunnisti myös poikkeavuuksia lausekkeissa "(-2 == rv)" (miinus oli kirjoitusvirhe) ja "BIO_puts(bp, ":) <= 0)" (tarkistuksen onnistuneen suorittamisen yhteydessä) funktio sen olisi pitänyt olla "== 0").
  • cURL:ssä havaittiin virhe, jota staattiset analysaattorit eivät havainneet käytettäessä rakenneelementtiä ”s->keepon”, jolla oli numeerinen tyyppi, mutta jota verrattiin loogiseen arvoon TRUE.

ControlFlag 1.0 -version ominaisuuksien joukossa on täysi tuki C-kielen vakiomalleille ja kyky havaita poikkeavuuksia ehdollisissa "jos"-lausekkeissa. Esimerkiksi analysoitaessa koodifragmenttia "if (x = 7) y = x;" Järjestelmä määrittää, että "if"-käsky käyttää yleensä "muuttuja == numero" -rakennetta numeeristen arvojen vertaamiseen, joten on erittäin todennäköistä, että "muuttuja = numero" "if"-lausekkeessa johtuu kirjoitusvirheestä. Pakkaus sisältää komentosarjan, jonka avulla voit ladata olemassa olevia C-kielen arkistot GitHubissa ja käyttää niitä mallin rakentamiseen. Saatavilla on myös valmiita malleja, joiden avulla voit aloittaa koodin tarkistamisen välittömästi.

Lähde: opennet.ru

Lisää kommentti