Implementación de análisis estático y pruebas unitarias en entornos en contenedores, parte 1

Por Miroslaw Zielinski

Domingo, 19 de mayo de 2020

6  min leer

¿Alguna vez se ha quedado atascado al configurar C/C++test 2020 en entornos en contenedores? Aquí hay un tutorial de cómo puede hacer eso y más.

Cómo configurar Parasoft C / C ++ test 2020.1 para entornos de desarrollo en contenedores

El lanzamiento de Prueba de Parasoft C / C ++ 2020.1 trae una colección de mejoras que facilitan su uso con contenedores Docker. Lo guiaré a través de los pasos para configurar la prueba C / C ++ 2020.1 para que funcione en entornos de desarrollo en contenedores.

A los equipos de desarrollo integrados les encantan los contenedores Docker

Las implementaciones en contenedores de herramientas de desarrollo se están convirtiendo en el pan y la mantequilla de los equipos de desarrollo integrados. Aunque los contenedores se desarrollaron inicialmente para resolver problemas con la implementación de microservicios y aplicaciones basadas en la web, recientemente ganaron popularidad entre los equipos integrados, especialmente los equipos grandes que usan contenedores para administrar cadenas de herramientas complejas.

Cuando se trata de administrar entornos de desarrollo complejos, especialmente en el espacio crítico para la seguridad, los equipos generalmente enfrentan los siguientes desafíos:

  • Sincronizar actualizaciones para todo el equipo a una nueva versión de una herramienta como un compilador, construir una cadena de herramientas, etc.
  • Reaccionar dinámicamente a un nuevo parche de seguridad para la biblioteca o el kit de desarrollo de software (SDK) y similares.
  • Garantizar la coherencia de la cadena de herramientas para todos los miembros del equipo y la infraestructura automatizada (CI / CD).
  • Capacidad para versionar el entorno de desarrollo y restaurarlo para dar servicio a la versión anterior del producto que fue certificado con la cadena de herramientas específica.
  • Incorporación y creación de nuevos desarrolladores.

Todos estos problemas se resuelven fácilmente con contenedores. No es de extrañar los equipos aman los contenedores! Echemos un vistazo a cómo configurar la prueba C / C ++ para su uso en un entorno en contenedores.

Uso de Parasoft C / C ++ Test Professional con una cadena de herramientas de compilación en contenedores

Es fácil configurar Parasoft C / C ++ test Professional para que funcione con una cadena de herramientas de compilación y el entorno de ejecución implementado en contenedores. Admitimos implementaciones basadas en contenedores de Linux y Docker. Aquí hay una descripción general de alto nivel de cómo se ve ese tipo de configuración:

Como puede ver, la prueba C / C ++ accede al compilador en contenedor (GNU GCC) y a los entornos de ejecución. En esta configuración específica, hay dos contenedores Docker separados:

  • Uno para el compilador y las herramientas de construcción
  • Otro para el entorno de ejecución (por ejemplo, versión reducida de Linux embebido)

Veamos cómo configurar C / C ++ test Professional para que funcione con una cadena de herramientas de compilación y un entorno de ejecución en el contenedor. En el ejemplo, usaremos la última GCC imagen de contenedor disponible a través de Docker Hub.

Veamos cómo configurar C / C ++ test Professional para que funcione con una cadena de herramientas de compilación y un entorno de ejecución en el contenedor. En el ejemplo, usaremos la última GCC imagen de contenedor disponible a través de Docker Hub.

Las siguientes instrucciones asumen que tiene un Motor Docker correctamente instalado y configurado en su entorno. Y lo mismo para Prueba C / C ++ Professional 2020.1.

Paso 1: Inicie la prueba de Parasoft C / C ++

  1. Asegúrate de que Docker funcione. Comencemos con una prueba rápida e imprimamos el número de versión del compilador GCC incluido en la imagen "más reciente" del contenedor GCC.
  2. Antes de comenzar la prueba de Parasoft C / C ++, establecer una variable ambiental dedicada CPPTEST_CONTAINER_NAME al nombre del contenedor. Esta es una manera fácil de decirle a la prueba C / C ++ qué contenedor debe usarse para invocar el compilador o el enlazador. Funciona muy bien con los trabajos de Jenkins.
  3. Además, te recomiendo que establecer la variable CPPTEST_INSTALL para apuntar al directorio de instalación de prueba de C / C ++. Es una configuración sencilla. Una vez configuradas las variables, podemos iniciar la prueba C / C ++.
  4. Para su espacio de trabajo, seleccione una ubicación en algún lugar del directorio HOME (más sobre esto más adelante).


Paso 2: cree un proyecto de demostración

Para hacer que la creación de un proyecto de demostración sea muy simple, creemos el proyecto predeterminado "HelloWorld" usando el asistente estándar de "Nuevo proyecto".

  1. Elija el menú Archivo> Nuevo> Proyecto C ++ y luego elija “Proyecto C ++ Hello World”.
  2. Ingrese el nombre de elección para su proyecto. Debería parecerse más o menos a la siguiente captura de pantalla.
  3. Presione Acabado para crear el proyecto predeterminado para nuestro ejemplo.


Paso 3: modificar la configuración del compilador

Una vez creado el proyecto, modifique un par de elementos en la configuración de compilación de prueba de C / C ++.

  1. Haga clic derecho en el proyecto y seleccione Propiedades y luego Parasoft>C/C++test>Build Settings.
  2. En el panel Configuración de compilación, modifique dos elementos en la sección Configuración del compilador:
    • Familia. Cambie para que coincida con el compilador instalado en el contenedor. En el momento de escribir este blog, la última imagen "gcc" contenía el compilador GNU GCC 9.2, que solicitaba seleccionar la configuración del compilador "GNU GCC 9.x (x86_64)".
    • Ejecutables del compilador predeterminado. Los ejecutables predeterminados del compilador deben reemplazarse con envoltorios especiales para invocar el compilador en el contenedor en lugar del compilador normal que se instala directamente en el sistema operativo host. Estos envoltorios, remote-gcc y remote-g ++, se envían en la distribución de prueba C / C ++ 2020.1. En la captura de pantalla a continuación, estoy usando una variable ambiental auxiliar para el directorio de instalación de prueba de C / C ++. Puede establecer una variable similar para su entorno o utilizar rutas completas para localizar los scripts de envoltura.


Paso 4: Verifique que el contenedor se esté ejecutando

Asegúrese de que el contenedor con su cadena de herramientas de compilación esté funcionando antes de usar la prueba Parasoft C / C ++.

Los contenedores del compilador que configuramos en el paso anterior están diseñados para ejecutar los comandos del compilador en el contenedor en ejecución, lo que es más rápido que iniciar el contenedor para cada invocación.

Si Implementaciones de CI / CD, iniciar el contenedor antes de que se ejecute la prueba de C / C ++ y detenerlo después puede ser parte del trabajo de Jenkins. En este ejemplo, asumimos que se utiliza una base de GUI. Podemos crear configuraciones de ejecución de eclipse para este propósito. Sugiero crear dos configuraciones de tipo "Aplicación C / C ++" y nombrarlas de la siguiente manera:

  • "Iniciar contenedor de gcc"
  • "Detener contenedor de gcc"
  1. Seleccione el menú Ejecutar> Ejecutar configuraciones ...
  2. Cree dos configuraciones de ejecución denominadas "Iniciar contenedor gcc" y "Detener contenedor gcc".
  3. En la pestaña Principal para ambas configuraciones, ingrese su ruta a Docker como la "Aplicación C / C ++" como se muestra a continuación:

  1. Si "Iniciar contenedor de gcc", en la pestaña de argumentos ingrese el siguiente comando:

style = ”padding-left: 40px;”>ejecutar –rm -d -it –name gcc -v $ {env_var: HOME}: $ {env_var: HOME}
-v
$ {env_var: CPPTEST_INSTALL}: $ {env_var: CPPTEST_INSTALL} gcc

Como se muestra en la siguiente captura de pantalla:


La parte interesante de este comando son las opciones -v, que se utilizan para mapear volúmenes.

La primera opción -v asigna el directorio HOME local al sistema de archivos contenedor. La intención aquí es permitir el acceso al código fuente para el compilador que opera dentro del contenedor y también para la prueba Parasoft C / C ++, que se ejecuta en el sistema operativo host.

Estoy usando HOME en mi ejemplo por conveniencia porque coloqué mi espacio de trabajo directamente en HOME.

Para configuraciones reales, puede mapear estrictamente solo la parte del sistema de archivos que contiene el árbol de origen y el espacio de trabajo de eclipse con el proyecto.

La segunda opción -v asigna la ubicación del directorio de instalación de prueba de C / C ++ para permitir el acceso a los archivos de encabezado de prueba de C / C ++ dentro del contenedor.

  1. Si "Detener contenedor de gcc", en la pestaña de argumentos ingrese el siguiente comando como se muestra en la imagen a continuación:

detener gcc

  1. Usemos la configuración de ejecución "Iniciar contenedor gcc" para ejecutar el contenedor.

La consola de Eclipse debería mostrarle el hash del contenedor. Para asegurarse de que todo esté bien, puede cambiar a la línea de comando e invocar el siguiente comando:

Si ve nuestro contenedor "gcc" en la lista, puede comenzar a usar la prueba C / C ++ para probar su código.

  1. Seleccionemos el proyecto en el navegador. En el menú de Parasoft, seleccione Probar usando> Integrado> Prueba unitaria> Generar pruebas unitarias.

Debería ver un nuevo directorio de "pruebas" creado dentro de su proyecto con una única prueba unitaria creada para la función "principal".

  1. Una vez que se generan los casos de prueba, está listo para ejecutarlos. Para la ejecución, seleccione Probar usando> Integrado> Prueba unitaria> Ejecutar pruebas unitarias en el contenedor.

La prueba C / C ++ debería invocar una colección de compilaciones en el contenedor y vincular líneas de comando, terminando con una creación y ejecución binaria de prueba en el contenedor.

¡Eso es! Con estos pasos, preparó la prueba de Parasoft C / C ++ para realizar actividades de prueba utilizando la cadena de herramientas de compilación en el contenedor.

Si necesita cambiar el compilador de un proyecto o modificar algo en el entorno de ejecución en tiempo de ejecución, puede actualizar la imagen del contenedor o cambiarla a una versión diferente. (Recuerde actualizar la variable CPPTEST_CONTAINER_NAME).

Estén atentos a la Parte 2 próximamente. Explicaré cómo crear una imagen de contenedor con Parasoft C / C ++ test Standard.

Vea cómo los contenedores y la prueba de Parasoft C/C++ se adaptan a su proceso de CI/CD y aumentan la productividad.

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.