ControlFlag 1.0-ın buraxılışı, C kodunda səhvləri müəyyən etmək üçün alətdir

Intel, böyük miqdarda mövcud kod üzərində təlim keçmiş maşın öyrənmə sistemindən istifadə edərək mənbə kodundakı səhvləri və anomaliyaları müəyyən etməyə imkan verən ControlFlag 1.0 alətinin ilk əsas buraxılışını nəşr etdi. Ənənəvi statik analizatorlardan fərqli olaraq ControlFlag bütün mümkün variantları təmin etmək çətin olan hazır qaydaları tətbiq etmir, lakin çoxlu sayda mövcud layihələrdə müxtəlif dil konstruksiyalarından istifadə statistikasına əsaslanır. ControlFlag kodu C++ dilində yazılmışdır və MIT lisenziyası altında açıq mənbəlidir.

Sistem GitHub və oxşar ictimai depolarda dərc edilmiş açıq mənbəli layihələrin mövcud kod massivinin statistik modelini qurmaqla öyrədilir. Təlim mərhələsində sistem kodda strukturların qurulması üçün tipik nümunələri müəyyən edir və proqramda kodun icrası axınını əks etdirən bu nümunələr arasında əlaqələrin sintaktik ağacını qurur. Nəticədə, bütün təhlil edilən mənbə kodlarının inkişaf təcrübəsini birləşdirən istinad qərar vermə ağacı formalaşır. Nəzərdən keçirilən kod istinad qərar ağacına qarşı yoxlanılan nümunələri müəyyən etmək üçün oxşar prosesdən keçir. Qonşu filiallarla böyük uyğunsuzluqlar yoxlanılan nümunədə anomaliya varlığını göstərir.

ControlFlag 1.0-ın buraxılışı, C kodunda səhvləri müəyyən etmək üçün alətdir

ControlFlag-ın imkanlarına misal olaraq, tərtibatçılar OpenSSL və cURL layihələrinin mənbə kodlarını təhlil etdilər:

  • Anormal konstruksiyalar “(s1 == NULL) ∧ (s2 == NULL)” və “(s1 == NULL) | (s2 == NULL)" , ümumi istifadə olunan nümunə ilə uyğun gəlmir "(s1 == NULL) || (s2 == NULL)". Kod həmçinin “(-2 == rv)” (mənfi yazı xətası idi) və “BIO_puts(bp, “:”) <= 0)” ifadələrindəki anomaliyaları da müəyyən etdi (müvəffəqiyyətlə tamamlanmasının yoxlanılması kontekstində). funksiyası “== 0” olmalıdır).
  • cURL-də ədədi tipə malik olan “s->keepon” struktur elementindən istifadə edərkən statik analizatorlar tərəfindən aşkar edilməyən, lakin TRUE boolean dəyəri ilə müqayisə edilən xəta aşkar edildi.

ControlFlag 1.0 versiyasının xüsusiyyətləri arasında C dili üçün standart şablonlara tam dəstək və şərti “if” ifadələrində anomaliyaları aşkar etmək imkanı var. Məsələn, “if (x = 7) y = x;” kod fraqmentini təhlil edərkən. Sistem müəyyən edəcək ki, “if” ifadəsi adətən ədədi dəyərləri müqayisə etmək üçün “dəyişən == ədəd” konstruksiyasından istifadə edir, buna görə də “if” ifadəsindəki “dəyişən = ədəd”in hərf səhvindən qaynaqlanması ehtimalı yüksəkdir. Dəstə GitHub-da mövcud C dili depolarını endirməyə və onlardan model yaratmaq üçün istifadə etməyə imkan verən skript daxildir. Dərhal kodu yoxlamağa başlamağa imkan verən hazır modellər də mövcuddur.

Mənbə: opennet.ru

Добавить комментарий