Um dia do suporte ao usuário do PVS-Studio

Quadro 1

Congratulamo-nos com quaisquer discussões temáticas sobre o tema da qualidade do código. Somos contatados por clientes, estudantes e quaisquer outros usuários de toda a Internet. Independentemente do país, fuso horário ou idioma. Linguagem falada, é claro. Entre as linguagens de programação, ainda estamos interessados ​​em um conjunto limitado. Agora é C, C ++, C # e Java. Os benefícios da comunicação são muitos. Implementamos algumas ofertas de usuários imediatamente, porque eles são realmente úteis. Frequentemente, simplesmente ajudamos o projeto de outra pessoa, explicando os avisos do analisador, que acabam sendo um erro. Esta nota é sobre um desses casos.

Sobre o analisador


O PVS-Studio é uma ferramenta para detectar erros e possíveis vulnerabilidades no código fonte dos programas escritos em C, C ++, C # e Java. É executado no Windows, Linux e macOS.

Para comunicação, existem três formas de feedback:

  1. Comentários
  2. Pedido de avaliação
  3. Pedido de preço

Quinta à noite


Um usuário ativo que tentou o analisador em seu código começou a enviar avisos falsos. Antes que eu pudesse responder, três cartas se acumularam. Este era o fim do dia útil e restava pouca força (à questão da confiabilidade da revisão manual do código). Nossa equipe estava se preparando ativamente para o grande lançamento, que durou alguns dias.

Decidi adiar a resposta para sexta-feira ou mesmo para a próxima semana:

Olá Konstantin.

Analisamos avisos. Na próxima semana vou comentar sobre lugares suspeitos :-)

Isso indica que a análise estática do código é muito eficiente e a revisão manual do código será inferior à verificação automática em muitos casos, principalmente no final do dia útil.

Com a permissão do usuário, vou falar sobre a correspondência:

Carta 1

Falsos positivos V712:

uint32_t StartUpCounter = 0, HSEStatus = 0; RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); // V712... 

Carta 2

Há um V715 falso positivo:

 { // V715 ... lpmode.cpp 356 HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); 

Carta 3

Palitos de árvore de Natal, lugar encantado! Tudo está lá, jura (veja o código das cartas anteriores):

V560 Uma parte da expressão condicional é sempre verdadeira: (StartUpCounter! = ((Uint16_t) 0x5000)). lpmode.cpp 356

V776 Loop potencialmente infinito. A variável na condição de saída do loop 'HSEStatus == 0' não altera seu valor entre as iterações. lpmode.cpp 356

Talvez eu não entenda alguma coisa? Mas, na prática, tudo funciona e, se o quartzo não iniciar, sairemos desta seção com tempo limite ;-)

Carta 4 (resposta)

Olá Konstantin.

Analisamos avisos. Na próxima semana vou comentar sobre lugares suspeitos :-)

Carta 5

Inferno Eu só vi seu código depois de escrever com visão lateral - a declaração do foi ignorada ... Tudo se encaixou! Muito olho borrado%)

faça {...} enquanto (...);

Conclusão


Como você deve ter notado, havia quatro avisos do analisador no mesmo local, mas ainda levou tempo para convencer o usuário de um erro. Em tal situação, uma revisão manual nem teria chance.

Uma história semelhante com um final feliz: " Como o PVS-Studio se mostrou mais atento do que três programadores e meio ".

Use analisadores estáticos em seu projeto. Eles não substituem a revisão de código com um colega, mas são um complemento útil ao controle de qualidade do código.



Se você deseja compartilhar este artigo com um público que fala inglês, use o link para a tradução: Svyatoslav Razmyslov. Um dia do suporte ao usuário do PVS-Studio .

Source: https://habr.com/ru/post/pt467563/


All Articles