Lanzamento de ControlFlag 1.0, unha ferramenta para identificar erros no código C

Intel publicou a primeira versión importante da ferramenta ControlFlag 1.0, que permite identificar erros e anomalías no código fonte mediante un sistema de aprendizaxe automática adestrado nunha gran cantidade de código existente. A diferenza dos analizadores estáticos tradicionais, ControlFlag non aplica regras preparadas, nas que é difícil proporcionar todas as opcións posibles, senón que se basea en estatísticas sobre o uso de varias construcións lingüísticas nun gran número de proxectos existentes. O código ControlFlag está escrito en C++ e é de código aberto baixo a licenza MIT.

O sistema adestrase construíndo un modelo estatístico da matriz de código existente de proxectos de código aberto publicados en GitHub e repositorios públicos similares. Na fase de adestramento, o sistema determina patróns típicos para construír estruturas no código e constrúe unha árbore sintáctica de conexións entre estes patróns, reflectindo o fluxo de execución de código no programa. Como resultado, fórmase unha árbore de toma de decisións de referencia que combina a experiencia de desenvolvemento de todos os códigos fonte analizados. O código obxecto de revisión sofre un proceso similar de identificación de patróns que se comproban cunha árbore de decisións de referencia. As grandes discrepancias coas ramas veciñas indican a presenza dunha anomalía no patrón que se está a comprobar.

Lanzamento de ControlFlag 1.0, unha ferramenta para identificar erros no código C

Como exemplo das capacidades de ControlFlag, os desenvolvedores analizaron os códigos fonte dos proxectos OpenSSL e cURL:

  • Construcións anómalas “(s1 == NULL) ∧ (s2 == NULL)” e “(s1 == NULL) | (s2 == NULL)" , que non coinciden co patrón de uso habitual "(s1 == NULL) || (s2 == NULL)". O código tamén identificou anomalías nas expresións "(-2 == rv)" (o menos foi un erro de dixitación) e "BIO_puts(bp, ":") <= 0)" (no contexto da comprobación da finalización exitosa do función debería ser "== 0").
  • En cURL, descubriuse un erro que non foi detectado 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.

Entre as características da versión ControlFlag 1.0, hai soporte total para modelos estándar para a linguaxe C e a capacidade de detectar anomalías en expresións condicionais "se". Por exemplo, ao analizar o fragmento de código "se (x = 7) y = x;" O sistema determinará que a instrución "se" adoita utilizar a construción "variable == número" para comparar valores numéricos, polo que é moi probable que a "variable = número" na expresión "se" sexa causada por un erro tipográfico. O kit inclúe un script que che permite descargar os repositorios de linguaxe C existentes en GitHub e usalos para construír o modelo. Tamén están dispoñibles modelos preparados, o que lle permite comezar a comprobar o código inmediatamente.

Fonte: opennet.ru

Engadir un comentario