Binuksan ng Intel ang ControlFlag machine learning system code upang matukoy ang mga bug sa code

Natuklasan ng Intel ang mga pagpapaunlad na nauugnay sa proyekto ng pagsasaliksik ng ControlFlag na naglalayong lumikha ng isang machine learning system upang mapabuti ang kalidad ng code. Ang toolkit na inihanda ng proyekto ay nagbibigay-daan, batay sa isang modelo na sinanay sa isang malaking halaga ng umiiral na code, upang matukoy ang iba't ibang mga error at anomalya sa mga pinagmulang teksto na nakasulat sa mataas na antas ng mga wika tulad ng C/C++. Ang sistema ay angkop para sa pagtukoy ng iba't ibang uri ng mga problema sa code, mula sa pagtukoy ng mga typo at maling kumbinasyon ng uri, hanggang sa pagtukoy ng mga nawawalang NULL value check sa mga pointer at mga problema sa memorya. Ang ControlFlag code ay nakasulat sa C++ at open sourced sa ilalim ng lisensya ng MIT.

Ang system ay self-learning sa pamamagitan ng pagbuo ng istatistikal na modelo ng umiiral na code array ng mga bukas na proyekto na inilathala sa GitHub at mga katulad na pampublikong repositoryo. Sa yugto ng pagsasanay, tinutukoy ng system ang mga tipikal na pattern para sa pagbuo ng mga istruktura sa code at bubuo ng syntactic tree ng mga koneksyon sa pagitan ng mga pattern na ito, na sumasalamin sa daloy ng pagpapatupad ng code sa programa. Bilang resulta, nabuo ang isang reference na puno sa paggawa ng desisyon na pinagsasama ang karanasan sa pagbuo ng lahat ng nasuri na source code.

Ang code na sinusuri ay sumasailalim sa isang katulad na proseso ng pagtukoy ng mga pattern na sinusuri sa isang reference decision tree. Ang malalaking pagkakaiba sa mga kalapit na sangay ay nagpapahiwatig ng pagkakaroon ng anomalya sa pattern na sinusuri. Pinapayagan ka rin ng system na hindi lamang makilala ang isang error sa template, ngunit magmungkahi din ng pagwawasto. Halimbawa, sa OpenSSL code, ang konstruksyon na "(s1 == NULL) ∧ (s2 == NULL)" ay natukoy, na lumitaw sa syntax tree nang 8 beses lamang, habang ang pinakamalapit na sangay na may halagang "(s1 == NULL) || (s2 == NULL)” naganap halos 7 libong beses. Nakakita rin ang system ng anomalya β€œ(s1 == NULL) | (s2 == NULL)” na lumitaw nang 32 beses sa puno.

Binuksan ng Intel ang ControlFlag machine learning system code upang matukoy ang mga bug sa code

Kapag sinusuri ang fragment ng code "kung (x = 7) y = x;" Natukoy ng system na ang pagbuo ng "variable == number" ay kadalasang ginagamit sa operator na "if" upang ihambing ang mga numeric na halaga, kaya malaki ang posibilidad na ang indikasyon na "variable = number" sa expression na "if" ay sanhi ng isang typo. Ang mga tradisyunal na static analyzer ay makakahuli ng ganoong error, ngunit hindi katulad nila, ang ControlFlag ay hindi nag-aplay ng mga yari na panuntunan, kung saan mahirap ibigay ang lahat ng posibleng mga opsyon, ngunit batay sa mga istatistika ng paggamit ng iba't ibang mga istraktura sa isang malaking bilang. ng mga proyekto.

Bilang isang eksperimento, gamit ang ControlFlag sa source code ng cURL utility, na kadalasang binabanggit bilang isang halimbawa ng mataas na kalidad at nasubok na code, ang isang error na hindi natukoy ng mga static na analyzer ay natukoy kapag ginagamit ang structure element na "s->keepon", na may numeric na uri, ngunit inihambing sa Boolean na halaga TRUE . Sa OpenSSL code, bilang karagdagan sa nabanggit na problema sa "(s1 == NULL) ∧ (s2 == NULL)", natukoy din ang mga anomalya sa mga expression na "(-2 == rv)" (ang minus ay isang typo) at "BIO_puts(bp, ":")

Pinagmulan: opennet.ru

Magdagdag ng komento