Intel abriu o código do sistema de aprendizaxe automática ControlFlag para identificar erros no código

Intel descubriu desenvolvementos relacionados co proxecto de investigación ControlFlag, destinado a crear un sistema de aprendizaxe automática para mellorar a calidade do código. O kit de ferramentas elaborado polo proxecto permite, a partir dun modelo adestrado nunha gran cantidade de código existente, detectar diversos erros e anomalías en textos fonte escritos en linguaxes de alto nivel como C/C++. O sistema é axeitado para identificar varios tipos de problemas no código, desde detectar erros tipográficos e combinacións de tipos incorrectas ata detectar comprobacións NULL perdidas en punteiros e problemas de memoria. O código ControlFlag está escrito en C++ e é de código aberto baixo a licenza MIT.

O sistema é de autoaprendizaxe construíndo un modelo estatístico da matriz de código existente de proxectos abertos publicados en GitHub e repositorios públicos similares. Na etapa de aprendizaxe, o sistema determina patróns típicos para construír estruturas no código e constrúe unha árbore sintáctica de enlaces entre estes patróns, que reflicte o fluxo de execución de código no programa. Como resultado, fórmase unha árbore de decisións de referencia que combina a experiencia de desenvolver todos os textos fonte analizados.

O código que se está a probar pasa por un proceso similar de identificación de patróns que se comproban cunha árbore de decisións de referencia. As grandes discrepancias coas sucursais veciñas indican a presenza dunha anomalía no modelo que se está a comprobar. O sistema tamén permite non só identificar un erro no modelo, senón tamén suxerir unha corrección. Por exemplo, no código OpenSSL, atopouse a construción "(s1 == NULL) ∧ (s2 == NULL)", que ocorreu só 8 veces na árbore de sintaxe, mentres que a rama máis próxima co valor "(s1 == NULL) || (s2 == NULL)" ocorreu unhas 7 mil veces. O sistema tamén detectou unha anomalía “(s1 == NULL) | (s2 == NULL)" que ocorreu 32 veces na árbore.

Intel abriu o código do sistema de aprendizaxe automática ControlFlag para identificar erros no código

Ao analizar o fragmento de código "se (x = 7) y = x;" o sistema determinou que a construción "variable == número" adoita usarse na instrución "se" para comparar valores numéricos, polo tanto, con alta probabilidade, a indicación "variable == número" na expresión "se" é causada por unha errata. Os analizadores estáticos tradicionais tamén detectarían tal erro, pero a diferenza deles, ControlFlag non usa regras preparadas nas que sexa difícil prever todas as opcións posibles, senón que se basea nas estatísticas de uso de todo tipo de construcións nun gran número de proxectos.

Como experimento, usando ControlFlag no código fonte da utilidade cURL, que adoita citarse como exemplo de código verificado e de alta calidade, detectouse un erro desapercibido polos analizadores estáticos ao usar o elemento de estrutura "s->keepon". que tiña un tipo numérico, pero se comparou co valor booleano TRUE . No código OpenSSL, ademais do problema anterior con "(s1 == NULL) ∧ (s2 == NULL)", tamén había anomalías nas expresións "(-2 == rv)" (o menos foi un erro de tipografía). ) e "BIO_puts(bp, ":")

Fonte: opennet.ru

Engadir un comentario