Lançamento do ControlFlag 1.0, ferramenta para identificação de erros em código C

A Intel publicou o primeiro grande lançamento da ferramenta ControlFlag 1.0, que permite identificar erros e anomalias no código-fonte usando um sistema de aprendizado de máquina treinado em uma grande quantidade de código existente. Ao contrário dos analisadores estáticos tradicionais, o ControlFlag não aplica regras prontas, nas quais é difícil fornecer todas as opções possíveis, mas é baseado em estatísticas sobre o uso de diversas construções de linguagem em um grande número de projetos existentes. O código ControlFlag é escrito em C++ e é de código aberto sob a licença MIT.

O sistema é treinado através da construção de um modelo estatístico da matriz de código existente de projetos de código aberto publicados no GitHub e repositórios públicos semelhantes. Na fase de treinamento, o sistema determina padrões típicos de construção de estruturas no código e constrói uma árvore sintática de conexões entre esses padrões, refletindo o fluxo de execução do código no programa. Como resultado, é formada uma árvore de tomada de decisão de referência que combina a experiência de desenvolvimento de todos os códigos-fonte analisados. O código em revisão passa por um processo semelhante de identificação de padrões que são verificados em uma árvore de decisão de referência. Grandes discrepâncias com ramos vizinhos indicam a presença de uma anomalia no padrão verificado.

Lançamento do ControlFlag 1.0, ferramenta para identificação de erros em código C

Como exemplo das capacidades do ControlFlag, os desenvolvedores analisaram os códigos-fonte dos projetos OpenSSL e cURL:

  • Construções anômalas “(s1 == NULL) ∧ (s2 == NULL)” e “(s1 == NULL) | (s2 == NULL)" , que não correspondem ao padrão comumente usado "(s1 == NULL) || (s2 == NULO)". O código também identificou anomalias nas expressões “(-2 == rv)” (o sinal de menos foi um erro de digitação) e “BIO_puts(bp, “:”) <= 0)” (no contexto de verificação da conclusão bem-sucedida do função deveria ter sido “== 0").
  • No cURL foi descoberto um erro que não foi detectado pelos analisadores estáticos ao utilizar o elemento de estrutura “s->keepon”, que possuía tipo numérico, mas foi comparado com o valor booleano TRUE.

Entre os recursos da versão ControlFlag 1.0, está o suporte completo a templates padrão para a linguagem C e a capacidade de detectar anomalias em expressões condicionais “if”. Por exemplo, ao analisar o fragmento de código “if (x = 7) y = x;” O sistema determinará que a instrução “if” geralmente usa a construção “variável == número” para comparar valores numéricos, portanto, é altamente provável que a “variável = número” na expressão “if” seja causada por um erro de digitação. O kit inclui um script que permite baixar repositórios de linguagem C existentes no GitHub e usá-los para construir o modelo. Também estão disponíveis modelos prontos, permitindo que você comece imediatamente a verificar o código.

Fonte: opennet.ru

Adicionar um comentário