ControlFlag 1.0 шығарылымы, C кодындағы қателерді анықтау құралы

Intel компаниясы ControlFlag 1.0 құралының бірінші негізгі шығарылымын шығарды, ол бар кодтың үлкен көлеміне үйретілген машиналық оқыту жүйесін пайдалана отырып, бастапқы кодтағы қателер мен ауытқуларды анықтауға мүмкіндік береді. Дәстүрлі статикалық анализаторлардан айырмашылығы, ControlFlag дайын ережелерді қолданбайды, онда барлық мүмкін нұсқаларды қамтамасыз ету қиын, бірақ бар жобалардың үлкен санында әртүрлі тілдік құрылымдарды пайдалану статистикасына негізделген. ControlFlag коды C++ тілінде жазылған және MIT лицензиясы бойынша ашық көзі болып табылады.

Жүйе GitHub және ұқсас қоғамдық репозиторийлерде жарияланған ашық бастапқы жобалардың бар код массивінің статистикалық үлгісін құру арқылы оқытылады. Жаттығу сатысында жүйе кодта құрылымдарды құрудың типтік үлгілерін анықтайды және бағдарламада кодтың орындалу ағынын көрсететін осы үлгілер арасындағы байланыстардың синтаксистік ағашын құрады. Нәтижесінде барлық талданатын бастапқы кодтарды әзірлеу тәжірибесін біріктіретін анықтамалық шешім қабылдау ағашы қалыптасады. Қаралып отырған код анықтамалық шешім ағашымен тексерілетін үлгілерді анықтаудың ұқсас процесінен өтеді. Көршілес тармақтармен үлкен сәйкессіздіктер тексерілетін үлгіде аномалия бар екенін көрсетеді.

ControlFlag 1.0 шығарылымы, C кодындағы қателерді анықтау құралы

ControlFlag мүмкіндіктерінің мысалы ретінде әзірлеушілер OpenSSL және cURL жобаларының бастапқы кодтарын талдады:

  • Аномалды конструкциялар “(s1 == NULL) ∧ (s2 == NULL)” және “(s1 == NULL) | (s2 == NULL)" , олар жиі қолданылатын үлгіге сәйкес келмейді "(s1 == NULL) || (s2 == NULL)». Код сонымен қатар “(-2 == rv)” (минус қате болды) және “BIO_puts(bp, “:”) <= 0)” (нұсқаулардың сәтті аяқталуын тексеру контексінде) өрнектеріндегі ауытқуларды анықтады. функциясы «== 0» болуы керек).
  • cURL ішінде сандық түрі бар «s->keepon» құрылым элементін пайдалану кезінде статикалық анализаторлар анықтамаған қате анықталды, бірақ логикалық мәні TRUE.

ControlFlag 1.0 нұсқасының мүмкіндіктерінің ішінде Си тіліне арналған стандартты үлгілерді толық қолдау және шартты «if» өрнектеріндегі ауытқуларды анықтау мүмкіндігі бар. Мысалы, «if (x = 7) y = x;» код фрагментін талдау кезінде. Жүйе «егер» мәлімдемесі әдетте сандық мәндерді салыстыру үшін «айнымалы == сан» құрылымын пайдаланатынын анықтайды, сондықтан «егер» өрнегіндегі «айнымалы = сан» қатеден туындаған болуы ықтимал. Жинақ GitHub жүйесінде бар C тілінің репозиторийлерін жүктеп алуға және оларды үлгіні құру үшін пайдалануға мүмкіндік беретін сценарийді қамтиды. Кодты бірден тексеруді бастауға мүмкіндік беретін дайын үлгілер де бар.

Ақпарат көзі: opennet.ru

пікір қалдыру