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:
- Comentários
- Pedido de avaliação
- 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 1Falsos positivos V712:uint32_t StartUpCounter = 0, HSEStatus = 0; RCC->CR |= ((uint32_t)RCC_CR_HSEON); { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
Carta 2Há um V715 falso positivo: {
Carta 3Palitos 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 356V776 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 356Talvez 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 5Inferno 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 .