Intel ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ систСмы машинного обучСния ControlFlag для выявлСния ошибок Π² ΠΊΠΎΠ΄Π΅

Компания Intel ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π° Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, связанныС с ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ControlFlag, Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π½Π° созданиС систСмы машинного обучСния для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ качСства ΠΊΠΎΠ΄Π°. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ инструмСнтарий позволяСт Π½Π° основС ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Π½Π° большом ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°, Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² исходных тСкстах, написанных Π½Π° высокоуровнСвых языках, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ C/C++. БистСма ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для опрСдСлСния Π² ΠΊΠΎΠ΄Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΎΡ‚ опрСдСлСния ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ сочСтания Ρ‚ΠΈΠΏΠΎΠ², Π΄ΠΎ выявлСния ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ значСния NULL Π² указатСлях ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Код ControlFlag написан Π½Π° языкС Π‘++ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

БистСма самообучаСтся ΠΏΡƒΡ‚Ρ‘ΠΌ построСния статистичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ массива ΠΊΠΎΠ΄Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² GitHub ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… рСпозиториях. На стадии обучСния систСма опрСдСляСт Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ построСния конструкций Π² ΠΊΠΎΠ΄Π΅ ΠΈ строит синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ связСй ΠΌΠ΅ΠΆΠ΄Ρƒ этими шаблонами, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’ ΠΈΡ‚ΠΎΠ³Π΅ формируСтся эталонноС Π΄Π΅Ρ€Π΅Π²ΠΎ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… исходных тСкстов.

Для провСряСмого ΠΊΠΎΠ΄Π° выполняСтся ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ процСсс опрСдСлСния шаблонов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ с эталонным Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ расхоТдСния с сосСдними вСтвями ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² провСряСмом шаблонС. БистСма Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² шаблонС, Π½ΠΎ ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ исправлСниС. НапримСр Π² ΠΊΠΎΠ΄Π΅ OpenSSL Π±Ρ‹Π»Π° выявлСна конструкция «(s1 == NULL) ∧ (s2 == NULL)», которая Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»Π°ΡΡŒ Π² синтаксичСском Π΄Π΅Ρ€Π΅Π²Π΅ всСго 8 Ρ€Π°Π·, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ блиТайшая Π²Π΅Ρ‚ΠΊΠ° со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ «(s1 == NULL) || (s2 == NULL)» Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»Π°ΡΡŒ ΠΎΠΊΠΎΠ»ΠΎ 7 тысяч Ρ€Π°Π·. БистСма Ρ‚Π°ΠΊΠΆΠ΅ выявила аномалию «(s1 == NULL) | (s2 == NULL)» которая Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»Π°ΡΡŒ Π² Π΄Π΅Ρ€Π΅Π²Π΅ 32 Ρ€Π°Π·Π°.

Intel ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ систСмы машинного обучСния ControlFlag для выявлСния ошибок Π² ΠΊΠΎΠ΄Π΅

ΠŸΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° «if (x = 7) y = x;» систСма ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ «if» для сравнСния числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция «ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ == число», поэтому с большой Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ «ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ = число» Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ «if» Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΎΠΉ. Π’Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ‹Π»ΠΎΠ²ΠΈΠ»ΠΈ Π±Ρ‹ ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, Π½ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½ΠΈΡ… ControlFlag Π½Π΅ примСняСт Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Π° отталкиваСтся ΠΎΡ‚ статистики использования всСвозмоТных конструкций Π² большом числС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

Π’ качСствС экспСримСнта ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ControlFlag Π² исходных тСкстах ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ cURL, которая часто приводится ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ качСствСнного ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π±Ρ‹Π»Π° выявлСна нСзамСчСнная статичСскими Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ошибка ΠΏΡ€ΠΈ использовании элСмСнта структуры «s->keepon», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π» числовой Ρ‚ΠΈΠΏ, Π½ΠΎ сравнивался с Π±ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ TRUE. Π’ ΠΊΠΎΠ΄Π΅ OpenSSL, ΠΏΠΎΠΌΠΈΠΌΠΎ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с «(s1 == NULL) ∧ (s2 == NULL)», Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ выявлСны Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² выраТСниях «(-2 == rv)» (минус Π±Ρ‹Π» ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΎΠΉ) ΠΈ «BIO_puts(bp, «:»)

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru