Congratulamo-nos com qualquer conversa sobre a qualidade do código. Nossos clientes, estudantes e outros usuários de todos os cantos da Internet nos escrevem. Independentemente do país, fuso horário ou idioma. Bem, linguagem falada, não programação. Entre as linguagens de programação, até agora estamos interessados em um conjunto limitado. No momento, é C, C ++, C # e Java. Existem muitos benefícios na comunicação. Implementamos algumas sugestões de usuários imediatamente, porque elas são realmente úteis. Frequentemente, apenas ajudamos o projeto de alguém, explicando os avisos do analisador, que acabam sendo erros. Esta nota é sobre esse caso.
Sobre o analisador
O PVS-Studio é uma ferramenta projetada para detectar erros e possíveis vulnerabilidades no código fonte dos programas, escritos em C, C ++, C # e Java. Funciona em ambiente Windows, Linux e macOS.
Existem três formulários de feedback para entrar em contato conosco:
- 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, já havia três e-mails. Era o fim do dia útil e eu estava cansado (falando sobre a questão da confiabilidade da revisão manual do código). Nossa equipe estava se preparando ativamente para um lançamento forjado, que estava a alguns dias de distância.
Decidi responder na sexta-feira ou até na próxima semana:
Olá ConstantineAnalisaremos seus avisos. Na próxima semana vou comentar sobre lugares suspeitos :-)Esta nota é sobre a eficácia da análise de código estático. A revisão manual do código será inferior à verificação automática em muitos casos, especialmente no final do dia.
Com a permissão do usuário, cito nossos e-mails:
Email 1Avisos V712 falso-positivos: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));
Email 2V715 falso positivo para o mesmo fragmento: {
Email 3Gatos sagrados, um lugar tão assombrado! O analisador reclama do mesmo fragmento (veja o código dos emails 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 receba alguma coisa? Mas, na prática, tudo funciona e, se o quartzo não iniciar, sairemos desse fragmento com o tempo limite ;-)Email 4 (resposta)Olá ConstantineAnalisaremos seus avisos. Na próxima semana vou comentar sobre lugares suspeitos :-)Email 5Droga! Somente após o seu e-mail, notei que a declaração "do" foi perdida ... Finalmente, tudo caiu em um buraco! Parece que perdi completamente a nitidez dos olhos%)faça {...} enquanto (...);Conclusão
Como você deve ter notado, havia quatro avisos do analisador para o mesmo fragmento, mas ainda levou tempo para convencer o usuário de que havia um erro. Em tal situação, a revisão manual nem teria chance.
Uma história semelhante com 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 por colegas, mas adicionam suporte ao controle de qualidade do código.