Uitgave van ControlFlag 1.0, een hulpmiddel voor het identificeren van fouten in C-code

Intel heeft de eerste grote release van de ControlFlag 1.0-tool gepubliceerd, waarmee u fouten en afwijkingen in de broncode kunt identificeren met behulp van een machine learning-systeem dat is getraind op een grote hoeveelheid bestaande code. In tegenstelling tot traditionele statische analysers past ControlFlag geen kant-en-klare regels toe, waarin het moeilijk is om in alle mogelijke opties te voorzien, maar is het gebaseerd op statistieken over het gebruik van verschillende taalconstructies in een groot aantal bestaande projecten. De ControlFlag-code is geschreven in C++ en is open source onder de MIT-licentie.

Het systeem is getraind door een statistisch model te bouwen van de bestaande codereeks van open-sourceprojecten die zijn gepubliceerd in GitHub en soortgelijke openbare repository's. In de trainingsfase bepaalt het systeem typische patronen voor het construeren van structuren in de code en bouwt het een syntactische boom van verbindingen tussen deze patronen op, die de stroom van code-uitvoering in het programma weerspiegelt. Als gevolg hiervan wordt een referentiebesluitvormingsboom gevormd die de ontwikkelingservaring van alle geanalyseerde broncodes combineert. De code die wordt beoordeeld, ondergaat een soortgelijk proces waarbij patronen worden geïdentificeerd die worden gecontroleerd aan de hand van een referentiebeslissingsboom. Grote verschillen met aangrenzende takken duiden op de aanwezigheid van een anomalie in het patroon dat wordt gecontroleerd.

Uitgave van ControlFlag 1.0, een hulpmiddel voor het identificeren van fouten in C-code

Als voorbeeld van de mogelijkheden van ControlFlag analyseerden de ontwikkelaars de broncodes van de OpenSSL- en cURL-projecten:

  • Afwijkende constructies “(s1 == NULL) ∧ (s2 == NULL)” en “(s1 == NULL) | (s2 == NULL)" , die niet overeenkomen met het veelgebruikte patroon "(s1 == NULL) || (s2 == NULL)". De code identificeerde ook afwijkingen in de uitdrukkingen “(-2 == rv)” (de min was een typefout) en “BIO_puts(bp, “:”) <= 0)” (in de context van het controleren van de succesvolle voltooiing van de functie had dit “== 0”) moeten zijn.
  • In cURL werd een fout ontdekt die niet werd gedetecteerd door statische analysatoren bij gebruik van het structuurelement “s->keepon”, dat een numeriek type had, maar werd vergeleken met de Booleaanse waarde TRUE.

Tot de kenmerken van de ControlFlag 1.0-versie behoort volledige ondersteuning voor standaardsjablonen voor de C-taal en de mogelijkheid om afwijkingen in voorwaardelijke “if”-expressies te detecteren. Bij het analyseren van bijvoorbeeld het codefragment “if (x = 7) y = x;” Het systeem zal vaststellen dat de “if”-instructie gewoonlijk de constructie “variabele == getal” gebruikt om numerieke waarden te vergelijken, dus het is zeer waarschijnlijk dat de “variabele = getal” in de “if”-expressie wordt veroorzaakt door een typefout. De kit bevat een script waarmee u bestaande C-taalrepository's op GitHub kunt downloaden en deze kunt gebruiken om het model te bouwen. Er zijn ook kant-en-klare modellen beschikbaar, zodat u meteen kunt beginnen met het controleren van de code.

Bron: opennet.ru

Voeg een reactie