Az Intel megnyitotta a ControlFlag gépi tanulási rendszerének forráskódját, amely a kódban lévő hibák azonosítására szolgál.

Az Intel felfedte a ControlFlag kutatási projekt jövőbeli fejlesztéseit, amely a kódminőség javítására irányuló gépi tanulási rendszer létrehozására összpontosít. Az elkészített eszköz lehetővé teszi, hogy a meglévő nagyobb kódmennyiségre tanított modell alapján különféle hibákat és anomáliákat észleljen a magas szintű programozási nyelveken, például C/C++-on írt forráskódokban. A rendszer alkalmas különböző problémák, például elírások és a típusok hibás kombinációjának észlelésére, valamint a NULL értékek mutatóinak ellenőrzésének elmulasztására és a memóriakezelési problémák feltárására. A ControlFlag kódja C++ nyelven készült, és MIT licenc alatt érhető el.

A rendszer az önképzés révén a GitHubon és hasonló nyilvános repozitóriumokban közzétett nyílt projektek meglévő kódjainak statisztikai modelljét építi fel. A tanulási szakaszban a rendszer azonosítja a kódban lévő szerkezetek építési sablonjait, és szintaxisfát épít ezeknek a sablonoknak a közötti kapcsolatok alapján, amely tükrözi a programban zajló kódvégrehajtás folyamatát. Ennek eredményeként egy mintafát hoz létre, amely az összes elemzett forráskód fejlesztési tapasztalatait összegzi.

A vizsgált kód esetében hasonló minták azonosítási folyamatot hajtanak végre, amelyek összehasonlításra kerülnek a mintafával. A szomszédos ágakkal való nagy eltérések anomáliát jeleznek a vizsgált mintában. A rendszer nemcsak a mintában lévő hibát képes azonosítani, hanem javaslatot is tehet a javításra. Például az OpenSSL kódban észlelték a következő szerkezetet: «(s1 == NULL) ∧ (s2 == NULL)», amely a szintaxisfában mindössze 8 alkalommal fordult elő, míg a legközelebbi ág, «(s1 == NULL) || (s2 == NULL)», körülbelül 7000 alkalommal jelentkezett. A rendszer továbbá észlelt egy «(s1 == NULL) | (s2 == NULL)» anomáliát, amely 32 alkalommal volt jelen a fában.

Az Intel megnyitotta a ControlFlag gépi tanulási rendszerének forráskódját, amely a kódban lévő hibák azonosítására szolgál.

A kódrészlet „if (x = 7) y = x;” elemzése során a rendszer megállapította, hogy általában az „if” utasításban a numerikus értékek összehasonlítására a „változó == szám” konstrukciót használják, ezért nagy valószínűséggel a „változó = szám” megadását a „if” kifejezésben elírás okozta. Ilyen hibát a hagyományos statikus elemzők is kiszűrtek volna, de ezzel szemben a ControlFlag nem alkalmaz előre meghatározott szabályokat, amelyekben nehéz előre látni az összes lehetséges variációt, hanem a különböző konstrukciók széleskörű használatának statisztikájából indul ki sok projektben.

Kísérletként a ControlFlag segítségével a cURL segédprogram forráskódjában, amelyet gyakran példaként hoznak fel minőségi és megbízható kódra, egy statikus elemzők által észre nem vett hibát találtak az „s->keepon” struktúraelem használatánál, amely numerikus típussal rendelkezett, de a TRUE logikai értékkel hasonlították össze. Az OpenSSL kódban, a fent említett „(s1 == NULL) ∧ (s2 == NULL)” probléma mellett, anomáliákat is észleltek az „(-2 == rv)” kifejezésekben (a mínusz elírás volt) és a „BIO_puts(bp, „:”)” kódban.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster