Descripción general de las características de PVS-Studio versión 7.07

Cuadro 30

El propósito de este artículo es una demostración general de las capacidades del analizador estático PVS-Studio. La forma más fácil y visual de hacer esto es mostrar el funcionamiento de la herramienta con ejemplos. La verificación del proyecto se mostrará utilizando el complemento para Visual Studio, iniciando el analizador en el sistema operativo Linux e importando los resultados del análisis a SonarQube.

Información general


PVS-Studio es un analizador de código estático escrito en C, C ++, C # y Java. PVS-Studio realiza una amplia gama de comprobaciones de código, pero es más poderoso para encontrar errores tipográficos y las consecuencias de un Copiar-Pegar fallido (ejemplos: uno , dos , tres , cuatro ). El análisis estático es un buen complemento para uno de los métodos más antiguos y confiables para detectar defectos: la revisión del código. Algunos errores son difíciles de encontrar durante una revisión conjunta del código (por ejemplo, los mismos errores tipográficos). Por ejemplo:

int trans_rest(transcoder_settings *trans)
{
  ....
  for(i=0; i<16; i++);
  {
    trans->eq.eq.preamp[i]   = 0.0;
    for(j=0; j<32; j++)
    {
      trans->eq.eq.boost[i][j] = 0.0;
    }
  }
}

Para aquellos que no han notado, prestar atención a la coma después de la primera para . O:

private class ObjectArrayComparer : IEqualityComparer<object[]>
{
  public bool Equals(object[] x, object[] y)
  {
    ....
    for (int i = 0; i < x.Length; i++)
    {
      if (!object.Equals(x[0], y[0])) 
      {
        return false;
      }
    }
    return true;
  }
  ....
}

Los mismos elementos siempre se comparan. Para no perder el tiempo buscando tales errores, vale la pena introducir un analizador estático. Puede descargar y probar PVS-Studio en este enlace.

Plugin para estudio visual


PVS-Studio tiene un complemento para Visual Studio 2010-2019. Antes de proceder directamente a la verificación, demostraré las capacidades del complemento. Repasemos algunos puntos que pueden plantear preguntas en el espíritu de "¿de qué se trata todo esto?"

Cuadro 13


Llamaré la atención sobre el elemento Suprimir mensajes, que abre una ventana para trabajar con advertencias de analizador suprimido y ahora explicaré qué es este elemento. El hecho es que PVS-Studio puede suprimir las advertencias, lo que facilita comenzar a usar el analizador incluso en un proyecto grande. Esto le permite incorporar rápida y fácilmente un analizador estático en el proceso de desarrollo.

Si su proyecto es pequeño, la implementación del analizador será bastante simple. Sin embargo, si el proyecto está "con historia", entonces probablemente tenga dudas: quién participará en el procesamiento y filtrado de los resultados, cuánto tiempo necesita dedicar a esto, etc. Intentaré disiparlos.

El uso ideal del analizador en este caso es el siguiente. Lo ejecuta en su proyecto y ve un montón de mensajes del analizador. Luego, utilizando el mecanismo de supresión de advertencia, indique a PVS-Studio que no muestre estos mensajes. Porque Dado que su proyecto se ha desarrollado durante mucho tiempo, en el informe del analizador seguramente habrá pocas advertencias relacionadas con algunos defectos críticos. Además, durante el proceso de desarrollo, usted y sus colegas solo ven los errores relacionados con el código nuevo o modificado. Esas advertencias que se han suprimido son ahora su deber técnico, al que puede regresar gradualmente. El mecanismo de supresión de advertencia se describe con más detalle aquí .

Cuadro 14


A continuación, vaya al elemento "Mostrar códigos CWE en la ventana de salida". PVS-Studio es una herramienta para pruebas de seguridad de aplicaciones estáticas (Static Application Security Testing, SAST). Las alertas de PVS-Studio se pueden clasificar según la enumeración de debilidad común (CWE). Para conocer la clasificación de las alertas de PVS-Studio de acuerdo con CWE, por qué se necesita CWE, qué es, etc., le sugiero que lea los siguientes enlaces:


Pasemos a la pestaña "Opciones".

Cuadro 6

En la sección "Errores detectables (C, C ++)", podemos controlar la visualización de los tipos de mensajes del analizador. Esos mensajes de diagnóstico que por alguna razón no son relevantes para este proyecto pueden ocultarse o deshabilitarse. Por ejemplo, es poco probable que los diagnósticos MISRA interesen a nadie más que a los desarrolladores integrados. Por lo tanto, están deshabilitados por defecto . El usuario que primero decidió usar el analizador, el número de advertencias MISRA puede asustar y entrar en un estupor. Y la parte de los usuarios que lanzaron deliberadamente el analizador para verificar que su proyecto cumple con los estándares MISRA puede simplemente activarlos en la configuración.

Cuadro 10

Aquí puede ingresar rutas / máscaras para excluir algunos archivos o carpetas del análisis. Puede elegir una máscara por la ruta (Máscara de ruta) o una máscara por el nombre del archivo (Máscara de nombre de archivo). Son necesarios si desea excluir del análisis bibliotecas de terceros, archivos generados automáticamente, etc. Después de configurar las máscaras de exclusión, los mensajes de los archivos correspondientes a ellos desaparecerán de la ventana de salida de PVS-Studio y no se incluirán en el siguiente escaneo. Por lo tanto, la exclusión de archivos y directorios a través de máscaras puede reducir significativamente el tiempo de análisis general de todo el proyecto.

Más detalles aquí .

Cuadro 8

También puede filtrar la salida del analizador de acuerdo con el texto que contiene. Por ejemplo, en el informe de su analizador hay advertencias que mencionan la función my_super_function en el texto , pero está seguro de que todas estas advertencias son falsas. Luego puede agregar la palabra my_super_function en este campo. Todas las advertencias que contengan esta palabra se filtrarán. Bueno, por si acaso, dejaré un enlace aquí a la sección correspondiente de la documentación .

Nota. En PVS-Studio hay otras formas de marcar advertencias falsas en código o macros. Se describen en la documentación en la sección Suprimir alertas falsas .

Una vez que hayamos terminado con una descripción general de la configuración, pasemos a verificar el proyecto. Como habrás notado, el artículo tenía varias configuraciones relacionadas con proyectos de C ++, pero no había detalles para C # y Java. Simplemente hay más configuraciones para C ++ que para C #, por lo que decidimos detenernos en estas breves revisiones. Pero para un cambio de historia, verifiquemos con la ayuda del complemento para Visual Studio no un C ++, sino un proyecto C # y veamos cómo se ve el informe del analizador.

Naturalmente, después de la primera verificación del proyecto, deberá volver a la configuración para reducir el porcentaje de falsos positivos. Los falsos positivos son inevitables, pero su porcentaje puede reducirse estableciendo un valor aceptable. Consulte el artículo: " Características del analizador PVS-Studio que utiliza el ejemplo EFL Core Libraries, 10-15% de falsos positivos ".

Foto 1

Seleccione el elemento "Analizar solución con PVS-Studio".

Imagen 2

Aparecerá una ventana con una barra de progreso.

Cuadro 3

Y luego podemos ver el informe del analizador.

Cuadro 11

Por cierto, aquí también puedes filtrar algunas advertencias. Por ejemplo, puede ocultar la primera advertencia en nuestro informe seleccionándola y haciendo clic en el elemento "Marcar mensajes seleccionados como falsas alarmas". Para obtener más detalles, consulte nuevamente la sección Suprimir alertas falsas .

Linux


Anteriormente probamos el proyecto C #. Ahora intentemos verificar el código escrito en C ++. Para agregar variedad al artículo, lo probaremos en Linux. Por cierto, en Windows, Linux y macOS, puede verificar proyectos en cualquier lenguaje (C, C ++, C #, Java).

Cuadro 20

Clonamos un repositorio.

Cuadro 18

Lanzamos un script de configuración para el ensamblaje.

Cuadro 16

Lanzamos PVS-Studio en modo rastreo y ensamblamos el proyecto. Se requiere una utilidad strace instalada . En lugar del comando make, en su caso puede haber cualquier comando para comenzar a construir el proyecto con todos los parámetros necesarios.

Cuadro 12

Analizamos los archivos del proyecto utilizando los resultados del paso anterior. El modificador -a le permite especificar qué advertencias deben incluirse en el informe.

Cuadro 4

Convertimos el registro a html y disfrutamos de los resultados.

Describí solo una opción para verificar un proyecto en Linux y de manera muy formal, sin entrar en detalles. Hay otras formas de verificar el proyecto, por ejemplo, escribiendo la llamada del analizador en el archivo MAKE. Para una revisión más detallada, recomiendo consultar los siguientes enlaces:

Sonarquube


SonarQube es una plataforma de código abierto para el análisis continuo y la medición de la calidad del código, que admite una gran cantidad de lenguajes de programación y le permite recibir informes sobre métricas como duplicación de códigos, cumplimiento de estándares de codificación, cobertura de pruebas, complejidad del código, posibles errores, etc.

PVS-Studio tiene un complemento para importar resultados de análisis a SonarQube, intentemos usarlo.

Cuadro 9

Para comenzar, obtenemos el informe del analizador y el archivo de configuración sonar-project.properties.

Cuadro 27

A continuación, necesitamos un comando de inicio del escáner.

Cuadro 28

Resultado :)

Cuadro 23

Además, el archivo de configuración se puede crear (o editar). Por ejemplo, en la captura de pantalla anterior, habilitamos la adición del identificador MISRA a las advertencias del analizador. Sí, es decir, por defecto, MISRA está desactivado aquí. Si necesita verificar su código para el cumplimiento de MISRA, agregue "activo" a su archivo de configuración para incluir.

Cuadro 25

En la pestaña Medidas, hay varias métricas de código y gráficos disponibles.

Cuadro 26

También puede construir gráficos usando la sección PVS-Studio. Puede obtener más información sobre la integración de los resultados del análisis PVS-Studio en SonarQube en esta sección del manual.

PVS-Studio Java


Ahora miramos la configuración de los proyectos de C ++, probamos el proyecto en C #, pero Java de alguna manera se cayó del artículo. Es necesario arreglar esto y decir de qué se trata el analizador PVS-Studio Java. El analizador tiene varias formas diferentes de integrarse en un proyecto. Dependiendo del sistema de compilación, puede usar el complemento para Maven o Gradle. También puede usar el núcleo del analizador directamente. El uso de los complementos Gradle, Maven o kernel directamente le permite trabajar fácilmente con Sonar Qube o CI (Jenkins). Si tiene estos complementos habilitados, el proyecto Java se verifica mediante análisis estático directamente durante el proceso de construcción y, como resultado, recibirá no solo su proyecto ensamblado, sino también un registro del analizador PVS-Studio.

El analizador PVS-Studio Java también se puede utilizar como complemento para IntelliJ IDEA. En este caso, el análisis de la estructura del proyecto se lleva a cabo mediante este IDE, y el complemento proporciona una interfaz gráfica conveniente para trabajar con el analizador.

Cuadro 40

Sugiero leer con más detalle en la sección sobre cómo iniciar PVS-Studio Java .

Además, al marcar un proyecto Java, puede suprimir los mensajes del analizador para que la integración en un proyecto grande sea rápida e indolora.

En IntelliJ IDEA, se ve así.

Cuadro 42

En esta ventana vemos el informe del analizador.

Cuadro 43

Al hacer clic derecho en el mensaje seleccionado, vemos ese menú contextual. En él podemos seleccionar el elemento resaltado y el mensaje desaparecerá de la salida del analizador.

Cuadro 44

También podemos suprimir todos los mensajes del analizador.

Para suprimir las advertencias del analizador en Gradle, ejecute el comando:

./gradlew pvsSuppress "-Ppvsstudio.report=/path/to/report.json"
  "-Ppvsstudio.output=/path/to/suppress_base.json"

Para suprimir las advertencias del analizador en Maven, ejecute el comando:
mvn pvsstudio:pvsSuppress "-Dpvsstudio.report=/path/to/report.json"
  "-Dpvsstudio.output=/path/to/suppress_base.json"

Lea más sobre el mecanismo de supresión aquí .

Para resumir


El propósito de este artículo era mostrar las capacidades del analizador estático PVS-Studio, cómo trabajar fácilmente con él utilizando el complemento para Visual Studio y Linux. Gracias a la capacidad de integrarse con la plataforma SonarQube, puede proporcionar un análisis continuo y una gestión de calidad de su código, que es solo una de las muchas características descritas en la documentación.

La integración del analizador estático en el sistema CI le permite detectar errores inmediatamente después de construir el proyecto. Esto reduce el costo de encontrar y corregir errores. A continuación hay enlaces a artículos con integraciones con los servicios en la nube más populares:

  1. PVS-Studio va a las nubes: Travis CI
  2. PVS-Studio va a las nubes: Azure DevOps
  3. PVS-Studio va a las nubes: CircleCI
  4. PVS-Studio va a las nubes: GitLab CI / CD
  5. Inicie PVS-Studio en TeamCity


Si desea compartir este artículo con una audiencia de habla inglesa, utilice el enlace a la traducción: Ekaterina Nikiforova. PVS-Studio 7.07: Descripción general de las características .

All Articles