X
BLOG

Introducción a la extensión de código de Visual Studio para análisis estático C / C ++

Introducción a la extensión de código de Visual Studio para análisis estático C / C ++ Tiempo de leer: 6 minutos

En esta publicación de blog, compartiré un par de sugerencias sobre cómo configurar y usar nuestra nueva extensión de análisis estático de prueba C / C ++ para el editor de código de Visual Studio.

La popularidad del editor de Visual Studio Code (VS Code) está creciendo a un ritmo rápido. En la última Encuesta anual para desarrolladores de Stack Overflow, VS Code dominó el Entornos y herramientas de desarrollo categoría.

Es rápido, simple, personalizable, extensible y se ejecuta en las tres plataformas de desarrollo líderes: Windows, Linux y Mac. Su popularidad no se limita a los equipos que desarrollan con JavaScript o TypeScript. A menudo lo vemos en uso para desarrollar software C / C ++ crítico para la seguridad.

VS Code es compatible con un vasto ecosistema de extensiones disponibles a través del mercado. Sin embargo, existe un número limitado de extensiones para el análisis estático C / C ++.

Hasta el Versión 2020.1 de la prueba Parasoft C / C ++ en abril, no había nada que pudiera ayudarlo a cumplir con los estándares de codificación MISRA, CERT y AUTOSAR C ++ sin la necesidad de dejar el editor para verificar los resultados. Me refiero a que el soporte completo de estándares, Clang-Tidy, es genial, pero cubre solo una fracción de estos estándares.

Decidimos llenar este vacío y proporcionar una extensión para este gran editor para ayudar a verificar el código que acaba de escribir con su estándar de codificación preferido, revisar los resultados y corregirlos o suprimirlos, todo dentro del Código VS.

En esta publicación, me centraré en el análisis estático para C / C ++, pero también admitimos C # con la extensión de análisis estático para Parasoft dotTEST.

Cómo comenzar con la prueba C / C ++ para VS Code

La forma más sencilla de empezar a trabajar con la extensión de análisis estático de Parasoft para el editor de código de Visual Studio es a través del Mercado de Microsoft.

Inicie VS Code y vaya a Extensiones (Ctrl + Mayús + X). En el campo de búsqueda, escriba "C ++ test" e instale la extensión.

Después de la instalación, la extensión le dará la bienvenida con el siguiente mensaje:

El mensaje informa que para ejecutar el análisis estático con la extensión VS Code es necesario descargar el estándar de prueba C / C ++, que es el motor de análisis estático de la línea de comandos que utiliza la extensión de código de Visual Studio de prueba de C / C ++.

Después de descargar la distribución estándar de prueba de C / C ++, simplemente descomprímalo en cualquier directorio que desee e instale la licencia de prueba (o completa). Su licencia debe contener la función de línea de comandos. Puede instalar la licencia editando el archivo cpptestcli.properties ubicado en el directorio principal de la distribución o coloque el archivo cpptestcli.properties en su directorio de inicio y coloque la información de licencia allí.

Para nuestro experimento aquí, vamos usar el proyecto de ejemplo de Timer que se envía con la prueba C / C ++. En el código VS, cambie a Explorer y use "Agregar carpeta al espacio de trabajo ..." para agregar el / examples / Timer a su espacio de trabajo.

Para realizar la configuración simple de la extensión, haga clic en el inicio rápido de la prueba C / C ++ en la barra de estado:

Verá estas opciones de configuración:

Configúrelos de la siguiente manera:

  • Seleccione la instalación de prueba de C / C ++: Señale el lugar donde desempaquetó el estándar de prueba C / C ++.
  • Seleccionar la configuración del compilador: Seleccione el compilador más cercano a lo que está usando para su proyecto, por ejemplo, “GNU GCC 9.x (x86_64)” si usa GCC 9.2.
  • Seleccionar configuración de prueba: Define qué verificadores de análisis estáticos se utilizarán para escanear su proyecto. Quedémonos con el predeterminado.

Para sus proyectos reales, es posible que deba configurar una configuración más para comenzar a usar el análisis estático. Lo abordaremos más tarde. Por ahora, con estos ajustes realizados, seleccione la carpeta Timer en Explorer.

Desde el menú contextual, seleccione "Prueba C / C ++: Analizar archivo (s) seleccionado (s) ...". El panel SALIDA comenzará a mostrar la información sobre los pasos posteriores del análisis estático.

Una vez realizado el análisis, el panel PROBLEMAS mostrará todos los hallazgos informados por el análisis estático. Debería verse como a continuación:

Puede analizar los hallazgos haciendo clic en las líneas del panel PROBLEMAS. Cuando seleccione un hallazgo, la extensión de prueba C / C ++ lo llevará al código fuente donde puede ver por qué se informa el problema.

Si la razón no está clara, haga clic con el botón derecho en el hallazgo en el panel PROBLEMAS y elija "Mostrar la documentación para ". Le mostrará la descripción detallada.

Si prefiere ignorar el hallazgo, haga clic con el botón derecho y seleccione "Suprimir la infracción de ". Esta operación agregará un comentario especial a su archivo de origen, lo que evitará que el analizador informe este hallazgo en el futuro.

O tu puedes "Eliminar la infracción de " de la vista y no te preocupes por ello en esta carrera. Estas opciones de menú se muestran en la imagen de arriba.

Establecer líneas de comando de compilación para análisis estático

Mencioné que para sus proyectos reales es posible que deba configurar una opción más para comenzar a trabajar con el análisis estático. Se trata de la construir información, más específicamente, líneas de comando de compilación.

El motor de análisis estático necesita conocer las líneas de comando de compilación para cada archivo que se va a analizar. Dependiendo de cómo se construya su proyecto, puede aplicar diferentes estrategias para proporcionar esta información.

Veamos cómo sucedió para nuestro ejemplo de Timer.

Cambie al panel SALIDA, que aún debería contener la salida de nuestra ejecución de análisis.

Desplácese hacia arriba. En la segunda línea de la salida, debería ver la línea de comando para el estándar de prueba C / C ++ que fue ejecutado por la extensión. Comenzará con "cpptestcli". La parte interesante está al final de esta línea de comandos.

En este caso, se le dijo al motor de análisis estático de prueba C / C ++ que "rastreara" la compilación para obtener la información de las líneas de comando de compilación que necesita. También puede aplicar esta estrategia para otros sistemas de compilación. Funciona muy bien:

Cpptestcli ejecuta el comando de compilación que se especifica después de la opción -trace. La información de compilación se escanea y guarda automáticamente en el archivo cpptest.bdf, que ahora está visible en la carpeta "Timer" y se utiliza como entrada para el análisis estático.

Todo genial, pero ¿Qué sucede si quiero volver a ejecutar el análisis estático? Bueno, con la configuración predeterminada, la prueba C / C ++ volverá a ejecutar su compilación. No es una buena opción para los proyectos reales.

Así es como puede cambiarlo.

  • Abra la configuración de la extensión.
  • Presiona Ctr + Shift + P.
  • Escriba "Prueba C / C ++: Inicio rápido" y seleccione "Abrir configuración ...". (O use el inicio rápido de prueba de C / C ++ en la barra de estado).

Verá la configuración de la extensión como se muestra aquí:

La configuración de la información de compilación es parte de la configuración del Patrón de línea de comandos. En el panel de configuración, seleccionar temporizador (junto a Usuario y espacio de trabajo) para modificar la configuración solo para la carpeta Timer.

Ir al patrón de línea de comando, muévase hasta el final y personalice el patrón para reemplazar "-trace make clean all" con "-input $ {workspaceFolder} /cpptest.bdf" como se muestra a continuación:

Con esta configuración, siempre que ejecute el análisis estático, la prueba C / C ++ no volverá a ejecutar su proceso de compilación, sino que simplemente cargará el contenido del cpptest.bdf que se generó durante la primera compilación y realizará el análisis mucho más rápido. Puede obtener más información sobre los archivos de datos de compilación .

Configuración para CMake

Para aquellos de ustedes que usan CMake para sus proyectos, hay una opción más disponible para simplificar el proceso de configuración. La prueba C / C ++ puede tomar el archivo compile_commands.json que CMake puede generar automáticamente como entrada para el análisis.

Configure compile_commands.json generación de archivos para nuestro ejemplo de Timer en este artículo.

Cuando termines visita el panel de configuración una vez más (Ctr + Shift + P, escriba "C / C ++ prueba: Inicio rápido" y seleccione "Abrir configuración ..." o utilice el inicio rápido "C / C ++ prueba" en la barra de estado).

Ir al patrón de línea de comando campo y modificarlo como se muestra a continuación:

¡Eso es! Puede utilizar el archivo generado automáticamente por la compilación de CMake y simplificar su configuración.

Hay un par de otras opciones y comandos interesantes disponibles en la extensión, que te invito a explorar. Por ejemplo, puede importar los resultados del análisis estático del archivo que se genera como parte de su canalización de CI / CD y revisarlo localmente.

Espero que esta publicación te ayude a comenzar tu viaje con la extensión de prueba C / C ++ para el editor de código de Visual Studio.

Escrito por

Miroslaw Zielinski

Gerente de producto para las soluciones de prueba integradas de Parasoft, las especialidades de Miroslaw incluyen C / C ++, RTOS, análisis de código estático, pruebas unitarias, gestión de la calidad del software para aplicaciones críticas de seguridad y cumplimiento del software con los estándares de seguridad.

Reciba las últimas noticias y recursos sobre pruebas de software en su bandeja de entrada.

Prueba Parasoft