Un día de soporte al usuario PVS-Studio

Imagen 1

Agradecemos cualquier discusión temática sobre el tema de la calidad del código. Nos contactan clientes, estudiantes y cualquier otro usuario de todo el Internet. Independientemente del país, zona horaria o idioma. Lengua hablada, por supuesto. Entre los lenguajes de programación, todavía estamos interesados ​​en un conjunto limitado. Ahora es C, C ++, C # y Java. Los beneficios de la comunicación son muchos. Implementamos algunas ofertas de usuarios de inmediato, porque Son realmente útiles. A menudo, simplemente ayudamos al proyecto de otra persona, explicando las advertencias del analizador, que al final resultan ser un error. Esta nota es sobre uno de esos casos.

Sobre el analizador


PVS-Studio es una herramienta para detectar errores y vulnerabilidades potenciales en el código fuente de programas escritos en C, C ++, C # y Java. Se ejecuta en Windows, Linux y macOS.

Para la comunicación, hay 3 formas de retroalimentación:

  1. Retroalimentación
  2. Solicitud de prueba
  3. Solicitud de precio

Jueves noche


Un usuario activo que probó el analizador en su código comenzó a enviar advertencias falsas. Antes de que pudiera responder, se acumularon 3 letras. Este era el final de la jornada laboral y quedaba poca fuerza (a la cuestión de la fiabilidad de la revisión manual del código). Nuestro equipo se estaba preparando activamente para el gran lanzamiento, que dejó unos días.

Decidí posponer la respuesta al viernes o incluso a la próxima semana:

Hola Konstantin

Analizamos advertencias. La semana que viene comentaré lugares sospechosos :-)

Esta es una nota de que el análisis de código estático es muy eficiente, y la revisión manual de código será inferior a la verificación automática en muchos casos, especialmente al final de la jornada laboral.

Con el permiso del usuario, le contaré sobre la correspondencia:

Letra 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... 

Letra 2

Hay un falso positivo V715:

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

Carta 3

Palitos de árbol de Navidad, lugar encantado! Todo está ahí, jura (ver código de letras anteriores):

V560 Una parte de la expresión condicional siempre es verdadera: (StartUpCounter! = ((Uint16_t) 0x5000)). lpmode.cpp 356

V776 Bucle potencialmente infinito. La variable en la condición de salida de bucle 'HSEStatus == 0' no cambia su valor entre iteraciones. lpmode.cpp 356

¿Quizás no entiendo algo? Pero en la práctica, todo funciona, y si el cuarzo no comienza, entonces salimos de esta sección por tiempo de espera ;-)

Carta 4 (respuesta)

Hola Konstantin

Analizamos advertencias. La semana que viene comentaré lugares sospechosos :-)

Carta 5

El infierno Solo vi su código después de escribir con visión lateral: se omitió la declaración do ... ¡Todo encajó! Todo un ojo borroso%)

do {...} while (...);

Conclusión


Como habrás notado, hubo 4 advertencias del analizador en el mismo lugar, pero aún así tomó tiempo convencer al usuario de un error. En tal situación, una revisión manual ni siquiera tendría una oportunidad.

Una historia similar con un final feliz: " Cómo PVS-Studio resultó ser más atento que tres programadores y medio ".

Use analizadores estáticos en su proyecto. No son un sustituto de la revisión de código con un colega, pero son un complemento útil para el control de calidad del código.



Si desea compartir este artículo con una audiencia de habla inglesa, utilice el enlace a la traducción: Svyatoslav Razmyslov. One Day de PVS-Studio Soporte al usuario .

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


All Articles