Seminario web destacado: Pruebas de API mejoradas con IA: un enfoque de prueba sin código | Vea ahora

Uso de la prueba Parasoft C / C ++ con CMake para análisis estático

Foto de cabeza de Miroslaw Zielinski, director de gestión de productos de Parasoft
10 abril 2023
3 min leer

Es posible que haya estado usando CMake en su análisis estático. Pero, ¿ha intentado usar la prueba Parasoft C/C++ con CMake? Aquí hay un desglose de cómo usar C/C++test para ejecutar análisis estáticos en proyectos basados ​​en CMake.

CMake es una de las herramientas más populares para crear, probar y empaquetar software. Parasoft C/C++test agiliza la integración con proyectos basados ​​en CMake simplificando el gestión de construcción proceso. Cuanto más grande es el proyecto, mayor es el impacto.

El equipo de Parasoft desarrolló estas mejoras durante la implementación de nuestra solución de prueba para un fabricante de automóviles grande y conocido.

Nuestro objetivo era introducir capacidades de análisis estático y pruebas unitarias en proyectos grandes y complejos que se basan en la plataforma AUTOSAR adaptable. Estos proyectos estaban compuestos por múltiples bibliotecas estáticas y dinámicas y muchos ejecutables.

En esta publicación de blog, explicaré cómo integrar Prueba C / C ++ capacidades de análisis estático en proyectos basados ​​en CMake. Puede hacer lo mismo para las pruebas unitarias..

Integración del análisis estático en proyectos basados ​​en CMake

Para realizar análisis de código estático, herramientas como la prueba C/C++ requieren información sobre la compilación del proyecto. Generalmente, todo lo que se necesita son líneas de comando de compilación para invocar los archivos que se pretenden analizar.

Con la prueba C/C++, existen diferentes formas de integrarse en el proceso de compilación. Diferentes sistemas de construcción pueden requerir diferentes enfoques. Con los proyectos basados ​​en CMake, existen excelentes opciones disponibles para hacer que el análisis estático sea sencillo y requiera cambios mínimos en el flujo de trabajo. Permite una integración fluida con la prueba C/C++.

Los scripts de CMake se pueden configurar fácilmente para generar información de tiempo de compilación como un archivo JSON. Por lo general, obtiene un archivo JSON por compilación. Este archivo JSON contiene todo lo que el analizador estático necesita para realizar la exploración de código. El archivo JSON con líneas de comando de compilación se crea en el momento de la generación del script de compilación. C/C++test entiende este formato y puede usarlo directamente como entrada para realizar un análisis estático.

Cómo ejecutar análisis estático en proyectos basados ​​en CMake

El procedimiento para ejecutar el análisis estático en proyectos basados ​​en CMake implica los siguientes pasos:

  1. Habilite la generación del archivo JSON con comandos de compilación. Esta es una actividad que se realiza una sola vez.
  2. Genere sus scripts de compilación. Esto incluirá la generación de archivos JSON de información de compilación.
  3. Ejecute un análisis estático alimentando la información de compilación del archivo JSON como entrada al analizador estático.

¡Eso es!

Un ejemplo de análisis estático en proyectos basados ​​en CMake

Veamos un ejemplo de ejecución de análisis estático en proyectos basados ​​en CMake. Si aún no lo ha hecho, instalar la edición estándar de C++test.

Sigue estos pasos

Después de la instalación, vaya al directorio de instalación y a la subcarpeta de ejemplos. Haga una copia del ejemplo del temporizador e ingrese al directorio del temporizador. (Estos pasos utilizan Linux como plataforma de desarrollo).

Debería ver el siguiente contenido:

Fragmento de código del proyecto de muestra para integrar capacidades de análisis estático de prueba de C/C++ en proyectos basados ​​en CMake. Hacer una copia del ejemplo del Timer e ingresar al directorio del Timer.

Este ejemplo está preparado para ser construido con un archivo MAKE “estático” que se encuentra en el directorio principal o usando los scripts de construcción generados por CMake.

Cree una carpeta de compilación dentro del directorio Timer usando cd. Llame a la generación de scripts de compilación usando CMake.

Captura de pantalla de la línea de comandos, que llama a la generación de scripts de compilación usando CMake.

Si enumeramos el contenido del directorio de compilación después de la generación, veremos que se generó el archivo compile_commands.json.

Para el siguiente proyecto de ejemplo, ya se ha habilitado la generación de archivos JSON de información de compilación.

Fragmento de código del proyecto de muestra para integrar capacidades de análisis estático de prueba de C/C++ en proyectos basados ​​en CMake. Generación de archivos JSON de información de compilación.

Ahora estamos listos para ejecutar el análisis estático usando el archivo compile_commands.json generado. Una gran ventaja es que podemos agregar el archivo .json directamente a la interfaz de línea de comandos del producto estándar de prueba Parasoft C / C ++:

Eso es. Se realiza el análisis estático y se devuelven los resultados.

Ejemplo de resultados de análisis estático ejecutando pruebas C/C++ con proyectos basados ​​en CMake

Este enfoque de integración se puede utilizar para la integración continua (CI) o localmente en el escritorio del desarrollador. La única modificación que podría ser necesaria es habilitar la generación del archivo compile_command.json.

Cómo habilitar el archivo de generación en su proyecto

Si no tiene habilitada la generación del archivo compile_command.json en su proyecto, puede hacerlo de dos maneras.

Opción 1

Establezca las opciones CMAKE_EXPORT_COMPILE_COMMANDS en ON en el archivo CMakeLists.txt.

Ejemplo

establecer (CMAKE_EXPORT_COMPILE_COMMANDS ON)

Opción 2

Agréguelo a la invocación de la línea de comandos de cmake al generar los scripts de compilación.

Ejemplo

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS = 1

Eso es todo lo que hay que hacer para integrar el análisis estático en proyectos basados ​​en CMake.

Vea cómo integrar el análisis estático en sus proyectos basados ​​en CMake.

Publicación relacionada + Recursos