Paglabas ng ControlFlag 1.0, isang tool para sa pagtukoy ng mga error sa C code

Inilathala ng Intel ang unang pangunahing pagpapalabas ng tool na ControlFlag 1.0, na nagbibigay-daan sa iyong tukuyin ang mga error at anomalya sa source code gamit ang isang machine learning system na sinanay sa isang malaking halaga ng umiiral na code. Hindi tulad ng mga tradisyunal na static analyzer, ang ControlFlag ay hindi nag-aaplay ng mga yari na panuntunan, kung saan mahirap ibigay ang lahat ng posibleng opsyon, ngunit batay sa mga istatistika sa paggamit ng iba't ibang mga construct ng wika sa isang malaking bilang ng mga umiiral na proyekto. Ang ControlFlag code ay nakasulat sa C++ at open sourced sa ilalim ng lisensya ng MIT.

Ang system ay sinanay sa pamamagitan ng pagbuo ng istatistikal na modelo ng umiiral na hanay ng code ng mga open-source 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.

Paglabas ng ControlFlag 1.0, isang tool para sa pagtukoy ng mga error sa C code

Bilang halimbawa ng mga kakayahan ng ControlFlag, sinuri ng mga developer ang mga source code ng OpenSSL at cURL na mga proyekto:

  • Maanomalyang konstruksyon β€œ(s1 == NULL) ∧ (s2 == NULL)” at β€œ(s1 == NULL) | (s2 == NULL)" , na hindi tumutugma sa karaniwang ginagamit na pattern "(s1 == NULL) || (s2 == NULL)". Tinukoy din ng code ang mga anomalya sa mga expression na "(-2 == rv)" (ang minus ay isang typo) at "BIO_puts(bp, ":") <= 0)" (sa konteksto ng pagsuri sa matagumpay na pagkumpleto ng function na ito ay dapat na "== 0").
  • Sa cURL, may natuklasang error na hindi natukoy ng mga static na analyzer kapag ginagamit ang structure element na "s->keepon", na may numeric na uri, ngunit inihambing sa boolean value na TRUE.

Kabilang sa mga tampok ng bersyon ng ControlFlag 1.0, mayroong ganap na suporta para sa mga karaniwang template para sa wikang C at ang kakayahang makakita ng mga anomalya sa mga kondisyong "if" na expression. Halimbawa, kapag sinusuri ang fragment ng code "kung (x = 7) y = x;" Tutukuyin ng system na ang β€œif” statement ay karaniwang gumagamit ng β€œvariable == number” na construction para ihambing ang mga numeric na value, kaya malaki ang posibilidad na ang β€œvariable = number” sa β€œif” na expression ay sanhi ng typo. Ang kit ay may kasamang script na nagbibigay-daan sa iyong mag-download ng mga kasalukuyang C language repository sa GitHub at gamitin ang mga ito para buuin ang modelo. Available din ang mga ready-made na modelo, na nagbibigay-daan sa iyong agad na simulan ang pagsuri sa code.

Pinagmulan: opennet.ru

Magdagdag ng komento