Muchos de nuestros artículos están dedicados a cualquier cosa, pero no a la herramienta PVS-Studio en sí. Pero hacemos mucho para que sea conveniente para los desarrolladores usar nuestra herramienta. Pero esto es precisamente lo que suele estar detrás de escena. Decidí solucionar esta situación y hablar sobre el complemento PVS-Studio para Visual Studio. Si está utilizando Visual Studio, este artículo es para usted.
¿Qué es el análisis de código estático y por qué es necesario?
El análisis de código estático es el proceso de identificación de errores y deficiencias en el código fuente de los programas. El análisis estático se puede considerar como un proceso de revisión de código automatizado. Una
revisión de código colaborativo es una excelente metodología. Pero también tiene un inconveniente significativo: un alto costo. Es necesario reunir regularmente a varios programadores para revisar el nuevo código o volver a revisar el código después de hacer recomendaciones.
Por un lado, quiero revisar regularmente el código. Por otro lado, es demasiado caro. La compensación es herramientas de análisis de código estático. Procesan incansablemente el código fuente de los programas y le dan al programador recomendaciones para que presten mayor atención a ciertas secciones del código. Por supuesto, el programa no reemplaza una revisión completa del código ejecutado por un equipo de programadores. Sin embargo, la relación beneficio / precio hace que el uso del análisis estático sea una práctica muy útil para muchas empresas. Si el lector está interesado en números específicos, entonces propongo familiarizarse con el artículo "
PVS-Studio ROI ".
Hay una gran cantidad de analizadores de código estático comerciales y gratuitos. Una gran lista de analizadores estáticos está disponible en Wikipedia:
Lista de herramientas para el análisis de código estático . La lista de lenguajes para los que existen analizadores de código estático también es bastante grande (C, C ++, C #, Java, Ada, Fortran, Perl, Ruby, ...). Naturalmente, le informaremos sobre el analizador
PVS-Studio .
La principal ventaja del análisis estático es la posibilidad de una reducción significativa en el costo de eliminar defectos en el programa. Cuanto antes se identifique el error, menor será el costo de corregirlo. Entonces, de acuerdo con los datos provistos en el libro "Código perfecto" de McConnell, corregir un error en la etapa de prueba costará diez veces más que en la etapa de construcción (escritura):
Figura 1. El costo promedio de la reparación de defectos según el momento de su introducción y detección (S. McConnell "Código perfecto" toma los datos de la tabla del libro).Las herramientas de análisis estático le permiten identificar una gran cantidad de errores en la fase de diseño, lo que reduce significativamente el costo de desarrollar todo el proyecto. Por ejemplo, el analizador de código estático PVS-Studio puede iniciarse en segundo plano inmediatamente después de la compilación, y si se encuentra un posible error, se lo notificará al programador. Más sobre este modo se describirá a continuación.
Analizador de código estático PVS-Studio
PVS-Studio es un analizador estático que detecta errores y vulnerabilidades potenciales en el código fuente de las aplicaciones en C, C ++ (también se admiten extensiones:
C ++ / CLI y
C ++ / CX ), C # y Java en plataformas Windows, Linux y macOS. El analizador se integra perfectamente con Visual Studio 2010-2019 e IntelliJ IDEA. En este artículo, veremos más de cerca el trabajo de PVS-Studio para verificar el código en C, C ++ y C #. Puede leer sobre cómo usar PVS-Studio para probar el código Java en IntelliJ IDEA
aquí .
Después de instalar PVS-Studio e integrarse en Visual Studio, los usuarios reciben un elemento adicional "PVS-Studio" en el menú principal y una ventana para trabajar con mensajes de diagnóstico (ver Figura 2).
Figura 2. Los elementos principales agregados por el analizador PVS-Studio durante la integración en Visual Studio.Configuraciones iniciales
El analizador está listo para funcionar inmediatamente después de la instalación. En la mayoría de los casos, no necesita configurar nada para completar la primera ejecución. La única configuración que puede necesitar al principio es la exclusión de bibliotecas de terceros. Después de todo, aún no editará nada en los archivos de origen, por ejemplo, la biblioteca jpeg, por lo que no es necesario verificarlo. Además, la exclusión de carpetas adicionales reducirá el tiempo de análisis del proyecto. Los directorios excluidos del análisis se establecen aquí: PVS-Studio> Opciones ...> No verificar archivos> PathMasks (ver Figura 3).
Figura 3. Edición de una lista de directorios que el analizador no verificará.Si uno de los nombres especificados está en la ruta completa del archivo, entonces el análisis no se realizará. Por defecto, los nombres de algunos directorios ya están incluidos en la lista. Sin embargo, en su proyecto, la carpeta con la biblioteca ZLib puede no llamarse "zlib", sino, por ejemplo, "zip_lib". Por lo tanto, debe editar esta lista. Para comenzar a editar, haga clic en el botón con tres puntos.
Ejemplos de máscaras válidas para la lista PathMasks:
- c: \ Libs \: se excluirán todos los archivos de proyecto ubicados en esta carpeta y sus subcarpetas.
- \ Libs \ or * \ Libs \ *: se excluirán todos los archivos ubicados en directorios cuya ruta contiene la subcarpeta Libs. Si no se especifican los caracteres "*", se seguirán agregando automáticamente, por lo que ambas opciones de grabación son las mismas.
- Libs o * Libs *: se excluirán todos los archivos, cuya ruta contiene una subcarpeta que tiene 'Libs' como nombre o un fragmento de un nombre. También en este caso, se excluirán los archivos que contengan Libs en el nombre, por ejemplo, c: \ project \ mylibs.cpp. Para evitar confusiones, le recomendamos que utilice siempre barras.
Además de excluir carpetas enteras, puede especificar máscaras para excluir archivos individuales. Para esto, hay una configuración FileNameMasks. Para obtener más detalles sobre cómo trabajar con listas de exclusión, consulte la documentación:
Configuración: No verificar archivos .
Verificación de proyecto
Una vez completada la configuración inicial, puede comenzar a verificar el proyecto. PVS-Studio para Visual Studio admite la comprobación de proyectos C ++ (.vcxproj) y C # (.csproj). También puede intentar comprobar de inmediato una solución que contenga proyectos de este tipo en su totalidad. Para hacer esto, seleccione el elemento del menú Extensiones> PVS-Studio> Verificar> Solución (ver Figura 4).
Figura 4. Verificación de la solución utilizando el analizador PVS-Studio.Si hay dificultades con la verificación, le recomendamos que consulte la sección "
¿No puede verificar? " En nuestro sitio web. Estos no son ni idea "verifique que el enchufe está enchufado" receptáculos. La sección describe situaciones típicas con las que los usuarios nos han contactado y sugiere opciones para la acción.
Trabajando con una lista de mensajes de diagnóstico
Después de verificar, todos los mensajes de diagnóstico se mostrarán en una ventana especial. Una ventana tiene muchos controles. Todos ellos sirven para mostrar exactamente aquellos mensajes de diagnóstico que son de interés para el usuario. Sin embargo, al principio, la ventana puede parecer complicada. Veamos todos los controles (ver Figura 5).
Figura 5. Una ventana con mensajes de diagnóstico.- En realidad, la ventana PVS-Studio.
- Menú adicional Le permite acceder a opciones como: marcar una advertencia como falsa, ocultar mensajes, agregar archivos a las excepciones (más sobre esto a continuación).
- El botón incluye el mensaje "algo salió mal". Por ejemplo, no puede preprocesar uno de los archivos.
- Ir al mensaje anterior / siguiente. Esto abre el archivo correspondiente y el cursor se coloca en la línea con un posible error. También siempre puede seleccionar diagnósticos de la lista haciendo doble clic. Puede asignar teclas de acceso rápido para saltar al mensaje anterior / siguiente. Por defecto, estos son Alt + '[' y Alt + ']'.
- Botones que incluyen alertas en diferentes niveles. Ahora se incluyen los dos primeros niveles de diagnóstico. Al mismo tiempo, se muestran 90 advertencias del primer nivel y 6700 advertencias del segundo nivel en la ventana. El nivel del mensaje se muestra en el lado izquierdo de la ventana, en forma de una barra correspondiente al color de la barra en el botón del nivel correspondiente. ¿Por qué hay tantos aspectos positivos? ¿De dónde son las 6700 advertencias? Para demostrar las capacidades de la interfaz, se incluye un conjunto de reglas MISRA , que está contraindicado para aplicaciones ordinarias :).
- Conjuntos activos de reglas de diagnóstico. General: diagnóstico de uso general, Optimización: microoptimización, diagnóstico de 64 bits a 64 bits, diagnóstico estándar MISRA - MISRA C y MISRA C ++. Ahora la ventana muestra todos los tipos de alertas.
- Muestra el número de mensajes marcados como falsas alarmas. Puede habilitar / deshabilitar la visualización de mensajes etiquetados en la configuración, PVS-Studio> Opciones ...> Configuración específica del analizador> Mostrar falsas alarmas.
- Filtros rápidos Por ejemplo, puede dejar en la lista solo mensajes con el código V501 y que están en el proyecto XYZ.
- Algunos diagnósticos sugieren prestar atención no a una, sino a varias líneas. En este caso, aparece una elipsis junto al número de línea. Al hacer clic con el mouse, puede ver una lista de líneas y seleccionar una de ellas.
La tabla con mensajes de diagnóstico se divide en las siguientes columnas:
- Nivel Nivel de fiabilidad en el que se encuentra el error. 1er nivel (rojo): los lugares más sospechosos. 3er nivel (amarillo): lo más probable es una imprecisión menor en el código.
- Asterisco Ella no tiene un propósito específico. El usuario puede interpretarlo a su discreción. Por ejemplo, puede señalar las advertencias más interesantes para un análisis más detallado. Una analogía es marcar letras con un asterisco en un programa de correo electrónico como Thunderbird o Outlook.
- ID Número de mensaje único. Puede ser útil cuando se trabaja con una lista grande. Por ejemplo, puede ir al mensaje con un número específico (consulte el elemento "Ir a ID ..." en el menú contextual ).
- Código Código de mensaje Si hace clic con el mouse, se abrirá una página con una descripción de la advertencia.
- CWE Identifica una advertencia utilizando el código CWE (enumeración de debilidad común). Al hacer clic en el enlace, puede ver una descripción de este CWE en la red.
- Misra Igual que el anterior, pero solo para el estándar MISRA .
- Mensaje El texto del mensaje de diagnóstico.
- Proyecto Nombre del proyecto (puede deshabilitar esta columna usando el menú contextual).
- Archivo Nombre de archivo
- Línea Numero de linea. Importante! Tenga en cuenta que después de algunas líneas hay puntos suspensivos. Ejemplo: "123 (...)". Al hacer clic en este número, obtendrá una lista de todas las líneas de código relacionadas con este mensaje. En este caso, es posible ir a cada una de las líneas de la lista.
Sí, leer todo esto fue agotador. Sin embargo, te aseguro que, al comenzar a usarlo, te sentirás cómodo con la herramienta rápidamente. Y rara vez presionará algo para configurar.
Menú contextual
Entonces, haciendo doble clic en el mensaje, va al fragmento de código deseado. Al presionar el botón derecho del mouse, se abre un menú contextual.
El menú es bastante simple y no debe sobrecargar el artículo con una descripción de cada uno de los elementos. Si algo no está claro, puede ver la documentación.
Sin embargo, quiero detenerme en una característica muy útil. Recuerde que en la configuración puede agregar carpetas / archivos para su exclusión (consulte la Figura 2). Por lo tanto, agregar algo es mucho más fácil de lo que parece.
Preste atención al elemento "No verifique los archivos y oculte todos los mensajes de ...". Cuando hace clic en él, se puede agregar una lista de rutas que se pueden agregar a la excepción (consulte la Figura 6).

Figura 6. Excluyendo archivos del escaneo.Puede seleccionar un solo archivo o uno de los directorios. La figura muestra que la carpeta "SDL2-2.0.9 \ src \ haptic \ windows" está seleccionada. Esto significa que todos los archivos de esta carpeta y todas las subcarpetas se excluirán del análisis. Además, todos los mensajes relacionados con estos archivos desaparecerán inmediatamente de la lista. Muy comodo No necesita reiniciar el análisis para eliminar todos los mensajes relacionados con la prueba.
Modo de análisis incremental
La introducción a PVS-Studio estará incompleta si no habla de una de las características más importantes:
el análisis de código
incremental .
Cuanto antes se encuentre el error, más barato será solucionarlo. Es ideal enfatizar inmediatamente los errores en el texto editado del programa. Sin embargo, es técnicamente difícil y requiere muchos recursos. Por lo tanto, PVS-Studio se inicia en segundo plano en el momento en que el código corregido se compiló correctamente. Por lo tanto, los errores se buscan en el código recién modificado. El hecho de que se realice el análisis puede juzgarse por el ícono en el área de notificación del sistema.
Cuando se encuentra un error, aparece una ventana emergente que advierte sobre el peligro (consulte la Figura 7).
Figura 7. Un mensaje emergente de que se encontraron lugares sospechosos en los archivos editados.Si hace clic en el icono, el IDE se abrirá con el resultado de la verificación del proyecto (ver Figura 2) y será posible examinar los fragmentos de código sospechosos.
De hecho, en lugar de describir este modo, es más fácil intentar trabajar con él. Escribes el código como antes. Y si es necesario, el analizador lo molestará. ¡Pruébalo!
Nosotros mismos utilizamos constantemente este modo. Sí, a veces también cometemos errores de codificación. Y la capacidad de repararlos de inmediato reduce significativamente el tiempo para detectar un defecto y un intento de comprender por qué el programa no se comporta según lo planeado. Es una pena pasar 15-20 minutos depurando y luego encontrar un error tipográfico en el índice. Este es uno de los casos en que PVS-Studio encontró un error en PVS-Studio justo después de que apareciera en el código:
if (in[0] == '\\' && in[1] == '.' && in[1] == '\\') { in += 2; continue; }
Pero estas, por supuesto, son flores. El analizador PVS-Studio a veces puede ser mucho más útil. Aquí está una de las revisiones sobre nuestro analizador: "
Un ejemplo de uso de un analizador estático ". El texto te hace pensar.
Resumo El análisis incremental es algo que definitivamente deberías probar. Lo amarás tan pronto como encuentres un par de errores en el nuevo código.
Características de PVS-Studio
Seamos breves. Es imposible describir de manera concisa todos los diagnósticos disponibles en PVS-Studio. Puede encontrar una lista completa de diagnósticos y su descripción detallada en la documentación:
Descripción de los errores diagnosticados . Nos restringimos a una tabla en la que los diagnósticos se agrupan por tipo. Algunos diagnósticos se incluyen en más de un grupo. El hecho es que la división es muy arbitraria. Por ejemplo, un error tipográfico puede conducir al uso de memoria no inicializada. Por el contrario, algunos errores no encontraron un lugar en la tabla; son demasiado específicos. Sin embargo, la tabla en su conjunto da una idea de la funcionalidad de un analizador de código estático (ver Figura 8).
Figura 8. Características de PVS-Studio.Como puede ver, el analizador se manifiesta lo más posible en áreas como la búsqueda de errores que se han producido debido a errores tipográficos, copiar y pegar. Diagnostica problemas relacionados con la seguridad del código.
Puede averiguar cómo funciona todo esto en la práctica mirando
la base de datos de errores . Recopilamos en esta base de datos todos los errores que encontramos al verificar varios proyectos de código abierto.
SAST
PVS-Studio es una herramienta para pruebas de seguridad de aplicaciones estáticas (SAST): el analizador puede identificar vulnerabilidades potenciales en el código del proyecto y mostrar el identificador de error correspondiente en una determinada clasificación.
PVS-Studio admite las siguientes clasificaciones de error:
- CWE
- SEI CERT
- Misra
Puede habilitar la visualización de códigos CWE utilizando el menú contextual en la ventana del analizador en Mostrar columnas> CWE
Figura 9. Menú contextual y un ejemplo de la salida de códigos CWE.O en el menú anterior (Extensiones> PVS-Studio> Mostrar códigos CWE en la ventana de salida)
Figura 10. El menú de extensión.Los diagnósticos MISRA se incluyen por separado en la configuración:
Figura 11. Lista de errores detectados.Lea más sobre estas clasificaciones
aquí .
Verificación de proyectos desde la línea de comando
PVS-Studio_Cmd.exe es una utilidad para verificar proyectos de C ++ / C # Visual Studio (.vcxproj / .csproj) y soluciones .sln desde la línea de comandos. Puede ser útil para automatizar análisis. El programa se encuentra en el directorio donde se realizó la instalación; de forma predeterminada, es 'C: \ Archivos de programa (x86) \ PVS-Studio'.
El programa tiene muchos
parámetros , pero primero solo necesitamos 3 de ellos:
- --target: el proyecto o archivo de solución a verificar.
- --output: el archivo de plog donde desea escribir el informe.
- --progreso: muestra el progreso de la verificación.
Así será el lanzamiento:
Figura 12. La salida del programa PVS-Studio_Cmd.exeDespués de la ejecución, obtendremos un archivo plog con el informe, la ruta a la que especificamos en las opciones de inicio. Este informe se puede convertir a otros formatos utilizando la utilidad PlogConverter.exe, y para ver el informe en el IDE, simplemente haga doble clic en el archivo plog en el Explorador.
También puede abrir el archivo de informe en el menú de extensiones en Extensiones> PVS-Studio> Abrir / Guardar> Abrir informe de análisis ...
Puede encontrar información detallada sobre la utilidad y sus parámetros en la
documentación .
Supresión de falsas advertencias
Algunos mensajes emitidos por el analizador serán inevitablemente falsos. No se puede hacer nada al respecto. Un analizador estático es solo un programa que no tiene inteligencia artificial y no puede determinar exactamente si encontró un error real o no.
Para combatir los falsos positivos, el analizador proporciona un conjunto de mecanismos diferentes. Se describen en detalle en las siguientes secciones de la documentación:
Conclusión
Por supuesto, aquí no contamos todo sobre el instrumento. Si cuenta todo, el artículo se convertirá en documentación. El objetivo era mostrar lo fácil que es trabajar con la herramienta dentro del entorno de Visual Studio. Puede leer sobre otros entornos y modos de funcionamiento en la documentación y otros artículos ubicados en nuestro
sitio web . Hay, por cierto, muchas cosas interesantes para los programadores. Ven a pasear.
Cabe señalar que PVS-Studio funciona no solo en el entorno de Microsoft. También admitimos el lenguaje Java, podemos trabajar en Linux y macOS, integrarnos en CMake y mucho más. Para más información, consulte la
documentación .
Le deseo un código sin código y espero que disfrute de PVS-Studio. Si tiene alguna pregunta, siempre le ayudaremos y le informaremos.
EscríbenosRecursos adicionales
- Revisión de código
- Análisis de código estático .
- Herramientas de análisis de código estático .
- SAST .
- Tecnologías utilizadas en el analizador PVS-Studio .
- Descarga PVS-Studio y pruébalo.
- Soporte para Visual Studio 2019 .
- Discuta el precio del analizador PVS-Studio para su equipo y cómo comprarlo: compre PVS-Studio .
- Un ejemplo de uso de un analizador estático .
- Respuestas a preguntas frecuentes en conferencias.
- Cómo iniciar PVS-Studio Java
- Cómo ejecutar PVS-Studio en Linux y macOS

Si desea compartir este artículo con una audiencia de habla inglesa, utilice el enlace a la traducción: Sergey Larin.
PVS-Studio para Visual Studio