X
BLOG

Integración del análisis estático en los flujos de trabajo de desarrollo modernos

Integración del análisis estático en los flujos de trabajo de desarrollo modernos Tiempo de leer: 8 minutos

Expectativas de la herramienta de análisis estático moderna

La imagen popular que vemos con frecuencia entre nuestros clientes es una Entorno de desarrollo basado en Git con un enfoque dinámico de ramificación y fusión. Los equipos esperan que el análisis estático se integre a la perfección en este tipo de flujos de trabajo.

Con bases de código grandes y complejas, los equipos esperan que las herramientas modernas de análisis estático:

  • Integre estrechamente con las prácticas de CI / CD.
  • Ayúdelos a concentrarse en su trabajo diario y ofrezca comentarios rápidos sin largas demoras.
  • Habilite el filtrado de problemas preexistentes y presente solo violaciones nuevas y relevantes en la rama de funciones.
  • Permitir el intercambio y la gestión eficaces de supresiones / exenciones.

Con la versión 2020.2, hemos introducido una colección de mejoras para Parasoft C / C ++test que lo hacen aún mejor para los flujos de trabajo modernos. En este post destacaré algunas de las novedades más interesantes:

  • Adaptación automática del alcance del análisis estático para una retroalimentación más rápida.
  • Centrarse en problemas relevantes aumenta la productividad.
  • El cómodo acceso a los resultados del análisis estático de CI / CD permite una reparación más rápida.
  • Gestión de supresiones para compartir fácilmente.

Adaptación automática del alcance del análisis estático para una retroalimentación más rápida

Las sesiones de análisis estático, especialmente en bases de código grandes, pueden ser largas. Esto es problemático para los desarrolladores que trabajan en pequeños incrementos de funcionalidad o corrección de errores. Les gusta recibir comentarios rápidos sobre los archivos más recientes que modifican y corregir el código cuando todo está fresco en su memoria. Prefieren la velocidad del análisis a la precisión en esta fase.

In Prueba de Parasoft C / C ++ 2020.2, mejoramos nuestra integración de Git. Ahora puede adaptar automáticamente el alcance del análisis para centrarse solo en las modificaciones de código recientes.

Los desarrolladores pueden especificar una rama principal / de referencia para compararla con su rama de desarrollo actual. La prueba Parasoft C / C ++ comparará y calculará automáticamente el delta para el análisis.

Infografía que muestra a la persona en la estación de trabajo verificando el código, escaneos completos, resultados de SA y resultados de la solicitud
Figura 1: Comparación de la rama principal y la rama de desarrollo actual

En lugar de ejecutar el análisis en todo el proyecto, lo que puede llevar un tiempo considerable, incluso horas, lo ejecutamos en el conjunto mínimo de archivos que la herramienta selecciona automáticamente. Puede reducir drásticamente la duración de la sesión de análisis.

Naturalmente, algunas de las verificaciones, que requieren una vista del proyecto a nivel de sistema, no serán 100% precisas. Recomendamos combinar ejecuciones rápidas y restringidas con exploraciones de CI / CD extensas y completas.

Ejecutar análisis estático en el conjunto mínimo de archivos

Para habilitar esta función, los usuarios deben especificar dos opciones. Vea la captura de pantalla a continuación para ver un ejemplo de un archivo “localsettings” para usar en la edición estándar de prueba de C / C ++, usando la marca de línea de comando -localsettings para cpptestcli.

Captura de pantalla del código para la configuración de prueba local para los escaneos rápidos
Figura 2: archivo de configuración local

scope.scontrol.files.filtr.mode decide si el alcance del análisis se calculará basándose en la comparación de ramas o en archivos modificados localmente. Para comparar dos ramas y enfocar el análisis solo en archivos modificados, los usuarios deben proporcionar una rama de referencia, utilizando la opción scope.scontrol.ref.branch.

Para C / C ++ Test Professional, puede utilizar el mismo archivo de configuración local para configurar esta funcionalidad. El archivo de configuración local debe agregarse a la configuración profesional de prueba de C / C ++ usando Menú de Parasoft> Preferencias> Parasoft> Configuración avanzada de prueba de C / C ++> Archivo de configuración.

Esta nueva funcionalidad mejora la productividad de los desarrolladores al acortar la duración de las sesiones de análisis y enfocar el análisis solo en archivos modificados. Pero los desarrolladores pueden querer enfocar aún más su análisis estático. ¡Siga leyendo para obtener más información!

Centrarse en problemas relevantes aumenta la productividad

Con frecuencia, los equipos deben trabajar con bases de código desarrolladas sin tener en cuenta el cumplimiento. Puede ser un código heredado que no cumpla con las normas o un prototipo desarrollado sin cumplimiento. Intentar hacer cumplir un estándar de codificación en este tipo de situación puede ser una verdadera pesadilla.

Los equipos saben que el código limpio es imprescindible en algún momento. Pero este no es su objetivo principal. Primero, quieren asegurarse de no introducir ningún problema nuevo y no aumentar la deuda de cumplimiento.

El problema es que lleva mucho tiempo distinguir entre infracciones nuevas y preexistentes. Incluso con la integración de Git y el alcance reducido del análisis, tan pronto como el desarrollador modifique el archivo para agregar un nuevo código, todas las violaciones preexistentes se mostrarán en el informe. Revisar esos problemas puede llevar horas.

Los equipos pueden remediar esta situación problemática basando los resultados del análisis estático. La versión 2020.2 de la prueba C / C ++ proporciona una opción para especificar el informe de referencia con el estado aceptado del proyecto al ejecutar la sesión de análisis.

El informe de referencia compara los resultados completos de la sesión de análisis. Filtra los hallazgos preexistentes e informa solo los problemas nuevos.

Infografía que muestra resultados de referencia y resultados actuales combinados con nuevos resultados
Figura 3: Resultados de referencia + Resultados actuales = Mis nuevos resultados

Para los desarrolladores, significa que en lugar de revisar cientos de violaciones, pueden concentrarse en estas tres que aparecieron después de las modificaciones de su código.

Habilitación de la base de resultados

Para habilitar la línea de base de resultados, los usuarios deben generar primero el informe de referencia.

Standard Edition

Para el estándar de prueba C / C ++, siga los pasos a continuación para generar el informe de referencia.

  1. Ejecute análisis estático en el estado de referencia del código base (ejecución de análisis estático regular). Busque el archivo results.xml en la carpeta de informes que elija.
  2. Puede almacenar el informe de referencia en SCM o utilizarlo desde la unidad local.
  3. Para ver solo resultados nuevos basados ​​en el código recién agregado, ejecute el análisis en su rama actual y especifique las dos opciones adicionales en su archivo localsettings (marca -localsettings para cpptestcli):
Captura de pantalla del código para utilizar el informe de la versión anterior como referencia
Figura 4: Análisis de ejecución

Edición profesional

Para los profesionales de pruebas de C / C ++, utilice una opción dedicada para generar el informe de referencia.

  1. Genere el informe de referencia ejecutando un análisis estático en el estado de referencia del código base. Para generar el informe, especifique una opción adicional en el archivo de configuración avanzada de prueba de C / C ++: Menú de Parasoft> Preferencias> Parasoft> Configuración avanzada de prueba de C / C ++> Archivo de configuración.
Captura de pantalla del código para generar el informe de referencia
Figura 5: Genere el informe de referencia

2. Guarde el informe de referencia en el SCM si lo desea o utilícelo desde la unidad local.

3. Para ver únicamente los nuevos resultados, ejecute el análisis en su rama actual con dos opciones adicionales en el archivo de configuración avanzada: Menú de Parasoft> Preferencias> Parasoft> Configuración avanzada de prueba de C / C ++> Archivo de configuración.

Captura de pantalla del código para utilizar el informe de la versión anterior como referencia
Figura 6: Utilice el informe de la versión anterior como referencia

Todos los ejemplos del archivo de configuración local con report.xml especificado, también puede incluir rutas relativas o absolutas.

El acceso conveniente a los resultados del análisis estático de CI / CD permite una reparación más rápida

Al discutir la integración de Git y el alcance reducido del análisis para una retroalimentación más rápida, mencioné anteriormente que estos escaneos reducidos deben complementarse con los escaneos completos y extensos en el CI / CD.

Acceso a resultados de CI / CD

Con este enfoque, surge una pregunta importante: ¿Cómo habilita un usuario los resultados de CI / CD para que los desarrolladores puedan tomar medidas y corregirlos? Hay varias formas de hacer que los resultados estén disponibles:

      • A través de la interfaz web de la plataforma CI / CD.
      • Compartido desde el Servidor de informes Parasoft DTP.
      • Entregado directamente a los IDE de los desarrolladores.

La mayoría de los equipos prefieren la última opción porque pueden acceder a los resultados a través de la interfaz que más usan: ¡su IDE!

Acceso a los resultados del análisis estático

Nuestra última versión también mejora la extensión de Visual Studio Code al permitir la descarga de resultados de análisis estáticos de DTP. Esta funcionalidad ha estado disponible en nuestros complementos para Eclipse y Visual Studio.

La operación de descarga de resultados es sencilla. Los usuarios invocan un comando dedicado de la paleta de comandos: "Prueba C / C ++: Cargar resultados de DTP ...".

Infografía que muestra a la persona en la estación de trabajo verificando el código, escaneos completos, resultados de SA y resultados de la solicitud
Figura 7: Operación de descarga de resultados

La extensión preguntará la ubicación del servidor DTP seguido de las credenciales, y luego el proyecto y filtro DTP.

¡Voila! Los resultados están disponibles en la vista Problemas, ya que se generaron localmente.

Los desarrolladores también pueden hacer clic en el mensaje de infracción. Los lleva directamente a la línea de origen donde se requiere una reparación. Es increíblemente productivo.

Gestión de supresiones para compartir fácilmente

Los equipos que se toman en serio la integración del análisis estático comprenden que la gestión eficaz de las supresiones o exenciones es fundamental para su éxito. Los usuarios de Parasoft pueden almacenar información de supresión directamente en el código fuente en forma de comentarios de código o utilizar una base de datos externa como Parasoft DTP o TCM.

El almacenamiento de información de supresiones en forma de comentarios de código es probablemente la forma más eficaz de gestionar estas excepciones. Pero muchos equipos no pueden hacerlo, especialmente cuando entregan código a un contratista externo que puede estar usando diferentes herramientas. O tal vez haya una política interna que prohíba hacerlo.

Hemos introducido una nueva tercera forma de suprimir las infracciones que no requieren realizar ninguna edición de archivos de código. Esto elimina la contaminación de los archivos de origen con cualquier información de supresión.

Almacenamiento de supresiones en texto sin formato

Este nuevo método de supresión permite almacenar las supresiones en un archivo de texto sin formato. Hay un archivo de supresión por carpeta de código fuente. Los archivos de supresión tienen un nombre estandarizado: parasoft.suppress. A partir de la versión 2020.2, todos Herramientas de análisis estático de Parasoft están preconfigurados para incluir archivos parasoft.suppress en el análisis. No se requiere configuración adicional para habilitar esta funcionalidad.

Los usuarios pueden agregar nuevas entradas de supresión a parasoft.suppress utilizando una acción de IU dedicada o agregando estas entradas manualmente. Las IU del complemento Eclipse, el complemento Visual Studio y la extensión Visual Studio se amplían para admitir el nuevo tipo de supresión.

La entrada de supresión es solo texto sin formato y contiene una colección de atributos que identifican las infracciones que se deben suprimir. Vea la captura de pantalla como ejemplo de una entrada de supresión y una lista de todos los atributos que se admiten en las entradas de supresión.

Captura de pantalla que muestra líneas de código de entrada de supresión
Figura 8: Entrada de supresión

Los desarrolladores pueden usar expresiones regulares básicas ('*', '?') Para el atributo de mensaje, lo que permite suprimir múltiples infracciones con una entrada de supresión. Por ejemplo, cuando un mensaje contiene un nombre de parámetro.

Si es necesario, una sola entrada de supresión puede suprimir múltiples infracciones. Sin embargo, la información sobre cada infracción suprimida individual también estará disponible en los informes generados. Y, si está configurado para ello, se propaga al servidor DTP.

Infografía y captura de pantalla que muestra la combinación de código
Figura 9: Fusionando

Los archivos de supresión (parasoft.suppress) están diseñados para almacenarse en SCM. Cuando se crea una rama, la información de supresión es parte de ella. Agregar una nueva entrada al archivo de supresión lo hace visible en el proceso de revisión del código y el archivo pasa por la cadena de aprobación. Después de fusionar el código, los archivos de supresión pasan a formar parte de esta operación al igual que el código fuente. Simple y llanamente.

Juntándolo todo

Los flujos de trabajo de desarrollo modernos se estandarizan en función de Git SCM y se centran en CI / CD. Las grandes bases de código y una alta frecuencia de ramificación requieren la implementación de herramientas de análisis estático que puedan enfocar y producir automáticamente resultados relevantes para el trabajo actual del desarrollador.

Debido al código fuente abierto, heredado y prototipo con el que los proyectos necesitan trabajar con frecuencia, los equipos deben determinar su propio ritmo y construir sus propios planes para lograr el cumplimiento de los estándares de codificación. La línea base de resultados ayuda a establecer una política estricta para el nuevo código y un plan para abordar problemas preexistentes de manera rápida y eficiente.

Novedades de la versión 2020.2 de la prueba Parasoft C / C ++: Vea el seminario web

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 para la 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