Seminario web destacado: MISRA C++ 2023: todo lo que necesita saber | Vea ahora

Prácticas recomendadas para el uso de herramientas de análisis estático

Foto de cabeza de Ricardo Camacho, Director de Cumplimiento de Seguridad y Seguridad
3 de junio de 2021
6 min leer

Las herramientas de análisis estático ayudan a los desarrolladores a detectar errores de codificación en una etapa temprana del SDLC. Parasoft tiene un conjunto de herramientas que pueden automatizar las comprobaciones de calidad del código. Este artículo destaca las mejores prácticas a adoptar al usar estas herramientas.

Como le dirá cualquier codificador y evaluador de control de calidad, el análisis estático es una parte fundamental del flujo de trabajo. De la misma manera que las vacunas requieren múltiples ensayos, cualquier proyecto requiere un análisis de la calidad del código en múltiples frentes.

Con ese fin, Parasoft proporciona herramientas de análisis estático para ayudar a automatizar el proceso. Esto también aumenta las mejores prácticas para ser más ágiles en respuesta a los cambios y actualizaciones necesarios. Pero tener una comprensión fundamental del análisis estático, su herramienta y las mejores prácticas es un conocimiento fundamental crítico.

Edúquese o vuelva a familiarizarse con estos conceptos aquí. Este blog responde a las siguientes preguntas:

  1. ¿Qué es el análisis de código estático?
  2. ¿Cómo se realiza el análisis estático?
  3. ¿Qué son las herramientas de calidad del código?
  4. ¿Cómo verifico la calidad de mi código?
  5. ¿Cuáles son las mejores prácticas de análisis de código estático?
  6. ¿Puede automatizar el análisis de código estático?

Imagen de arte vectorial de computadora portátil que muestra herramientas de análisis estático

¿Qué es el análisis de código estático?

En pocas palabras, el proceso de análisis de código estático identifica defectos y errores en el código fuente. Si bien el análisis se puede automatizar, la revisión del código generalmente es un esfuerzo conjunto en nombre de los desarrolladores y los evaluadores de QA/QC por igual.

Pero el análisis estático permite una reparación más inmediata y es parte integral del proceso de desarrollo. Independientemente de la industria, la función o el lenguaje, el análisis estático sigue siendo una parte fundamental de cualquier flujo de trabajo de desarrollo.

¿Cómo se realiza el análisis estático?

La realización de un análisis estático requiere una serie de pasos sencillos.

  1. Primero, por supuesto, es necesario que haya un código fuente para probar su calidad.
  2. A continuación, utilice herramientas de análisis estático y ejecute un analizador de código estático.
  3. Revise las secciones marcadas que no cumplen con el conjunto de reglas prescrito. Esto puede incluir falsos positivos o incluso desviaciones esperadas.
  4. Los codificadores abordan los errores críticos primero y luego abordan los problemas menores.
  5. Progreso a la fase de prueba.

Pero lo mejor del análisis estático es que no requiere la ejecución de código. Todo lo que hay que hacer es ejecutar el análisis para identificar los problemas que deben solucionarse sin riesgos indebidos.

Descubra los beneficios y las estrategias de las pruebas continuas para el desarrollo de software integrado.

¿Cuándo debemos medir la calidad del código?

La mejor práctica general sobre cuándo realizar un análisis estático es antes de la revisión del código y después de que se haya escrito el código. La auditoría del código fuente en esa etapa reduce la pérdida de tiempo al resolver errores más rápidamente.

imagen que muestra el código en una pantalla y parte de él sale de la pantalla con un efecto 3D

Diferentes tipos de análisis de código estático

Uno de los tipos más comunes de análisis de código estático es SAST o pruebas de seguridad de aplicaciones estáticas. Esto también se considera una práctica recomendada para las pruebas de seguridad de aplicaciones, pero se puede aplicar en otros lugares. Para identificar todas las clases de errores, es posible que sea necesario utilizar varios estándares de codificación (MISRA, AUTOSAR, CERT, CWE, etc.).

Como tal, es mejor familiarizarse con varios tipos de análisis de código estático y los errores que deben detectar.

  • RENDIMIENTO: Estas pruebas identifican errores que reducirán el rendimiento general. También se pueden utilizar para garantizar que los desarrolladores se mantengan actualizados con las mejores prácticas actuales.
  • SEGURIDAD: Obviamente, una prueba crítica, el análisis del código fuente relacionado con la seguridad encuentra riesgos de seguridad como criptografía débil, problemas de configuración y errores de inyección de comandos específicos del marco.
  • FIABILIDAD: Estas pruebas ayudan a prevenir problemas de funcionalidad. Ningún desarrollador quiere lidiar con un mensaje de servicio de emergencia que no responde a las 4 de la mañana. Este tipo de análisis de código estático es especialmente útil para encontrar pérdidas de memoria o problemas de subprocesos.
  • ESTILO: Este estilo de análisis estático anima a los equipos a adoptar estilos de codificación uniformes para facilitar su uso, comprensión y corrección de errores. También permite a los desarrolladores no perder tiempo identificando violaciones de estilo; la prueba los encuentra en su lugar.
Cómo elegir una herramienta de análisis estático moderna

Análisis estático basado en patrones

Estos métodos son algunos de los más esenciales cuando se trata de pruebas de calidad de código. Los ingenieros pueden causar inadvertidamente fallas o daños en la memoria con un error. El análisis estático basado en patrones extrae las causas de estos problemas mediante patrones en el código que pueden ser errores.

Esto puede ser tan simple como verificadores de sintaxis o algo más sofisticado. Otra nota: estas pruebas de análisis estático rara vez arrojan falsos positivos.

Análisis de flujo

Este método revisa el código en busca de construcciones problemáticas en un conjunto de reglas mediante la simulación de rutas de decisión. Úselo para encontrar desbordamientos de búfer, desreferencias de puntero nulo, datos contaminados y similares.

Análisis de métricas

Aunque es una prueba menos compleja, el análisis de métricas ayuda a medir las características del código. Esto incluye la complejidad del código, la capacidad de mantenimiento, la capacidad de prueba y más.

¿Qué errores puede detectar el análisis de código estático?

Cada regla o directriz de análisis estático aborda diferentes cuestiones. Algunos problemas que afectan la confiabilidad pueden ser pérdidas de recursos para C o excepciones de puntero nulo en C ++. MISRA C: 2012 La Directiva 4.12 existe para evitar el uso de memoria dinámica que puede provocar fallas de tiempo de ejecución sin almacenamiento, lo cual no es deseable.

La directriz establece: "Los identificadores 'calloc', 'malloc', 'realloc', 'align_alloc' y 'free' no deben usarse y no se expandirá ninguna macro con uno de estos nombres". Por lo tanto, el siguiente código producirá una infracción.

int * p1 = (int *) malloc (10); / * Violación * / free (p1); /* Violación */

La solución recomendada es preasignar un bloque de memoria y administrarlo según sea necesario mediante su propio equivalente definido de "malloc" y "free". De manera similar, en C ++, la solución común es sobrecargar los operadores "nuevo" y "eliminar".

La intención del software, el lenguaje y la plataforma afectan los tipos de errores que puede detectar el análisis de código estático.

Imagen que muestra una barra de búsqueda que dice "Prácticas recomendadas"

Mejores prácticas de análisis estático

Hay algunos mitos que hay que disipar antes de entrar en las mejores prácticas de análisis de código estático. Por ejemplo, los analizadores estáticos no son productos de un solo uso ni el análisis dinámico es mejor o peor que el análisis estático.

Pero, en general, existen mejores prácticas concretas junto con las mejores prácticas emergentes que los desarrolladores deberían adoptar cuando se trata de análisis estático para la calidad del código.

  • Identifica el alcance del problema.
  • Haga que el código sea legible para otros desarrolladores.
  • Escriba el código teniendo en cuenta la reutilización.
  • Mantenga la extensibilidad disponible si una aplicación necesita nuevas funciones en el futuro.
  • Desarrolle código que utilice recursos mínimos sin dejar de ejecutarse rápidamente.
  • Utilice análisis dinámico y estático.

Escribir código con todas estas cosas en mente asegura menos errores en general. Pero junto con el análisis de código estático, simplifica aún más la identificación de errores y el proceso de QA / QC.

Vea cómo integrar fácilmente el análisis estático en su canalización de CI/CD.

Desviaciones de análisis de código estático

Como se mencionó anteriormente, el análisis de código estático identifica errores basados ​​en conjuntos de reglas dados. Eso significa que, si alguna línea desafía una regla, se marcará. Por supuesto, como en la vida real, existen algunas excepciones a estas reglas en diferentes tipos de software.

En situaciones como estas, los desarrolladores permiten desviaciones. Las reglas pueden ajustarse a las circunstancias y permitir problemas especiales. Un equipo puede decidir sí o no sobre si esa desviación es aceptable o no. Esto también se documenta ya que viola las reglas originales.

Análisis estático frente a análisis dinámico

El análisis estático es lo que parece: una revisión aislada del código fuente. El análisis dinámico, por otro lado, prueba el código a medida que se ejecuta en una máquina / procesador virtual o incluso real.

Piense en el análisis estático como un pincel aquí y el análisis dinámico como un peine de dientes finos. Puede identificar defectos más sutiles, ya que revisa cómo el código interactúa con otros sistemas, sensores o periféricos.

La gran diferencia es que el análisis dinámico no puede encontrar fallas en una base de código completa. Solo puede encontrar problemas en extractos de código ejecutado. Otra práctica recomendada es utilizar métodos de prueba de análisis tanto estáticos como dinámicos para producir el código más eficaz y eficiente.

Imagen que muestra dos codificadores mirando el monitor con código en la pantalla. Uno de los codificadores apunta al monitor, el otro tiene las manos en el teclado.

Cómo elegir una herramienta de análisis de código estático

Conjunto de Parasoft de herramientas para automatizar las pruebas de software funciona en diversos flujos de trabajo y composiciones de equipo. Cuando se trata de análisis de código estático, eso suena igual de cierto. Hacerlo puede acelerar el ciclo de desarrollo, reducir las tasas de defectos y proporcionar una mejora continua. La identificación de qué herramienta podría funcionar mejor para sus necesidades comienza simplemente con el idioma base del código fuente.

No solo proporcionamos soluciones C / C ++, sino Parasoft también es compatible con Java con Jtest y el lenguaje .NET con dotTEST. ¿Por qué quedarse atascado haciendo más trabajo del necesario cuando puede acelerar el proceso y obtener mejores resultados?

¡Aprenda cómo introducir e integrar sistemáticamente una solución avanzada de análisis estático en su proyecto!

“MISRA”, “MISRA C” y el logotipo del triángulo son marcas comerciales registradas de The MISRA Consortium Limited. © The MISRA Consortium Limited, 2021. Todos los derechos reservados.