Vea cómo la solución de calidad continua de Parasoft ayuda a controlar y administrar los entornos de prueba para ofrecer software de alta calidad con confianza. Regístrese para la demostración >>

BLOG

Análisis estático y análisis dinámico

Análisis estático y análisis dinámico Tiempo de leer: 3 minutos

Por Boguslaw Czwartkowski, Gerente de Servicios Profesionales de Parasoft

El análisis de código estático es un término amplio que se utiliza para describir varios tipos diferentes de análisis:

  • Análisis de código estático (también conocido como análisis estático basado en patrones): este tipo de análisis estático busca patrones de código que violen las reglas de codificación definidas. Además de garantizar que el código cumpla con las expectativas uniformes de cumplimiento normativo o iniciativas internas, también ayuda a los equipos a evitar defectos como fugas de recursos, problemas de rendimiento y seguridad, errores lógicos y uso indebido de API.
  • Análisis estático basado en flujo: Este tipo de análisis estático consiste en encontrar y analizar las diversas rutas que se pueden tomar a través del código, tanto por "control" (es decir, el orden en que se pueden ejecutar las líneas) como por datos (es decir, las secuencias en las que una variable o entidad similar puede ser creada, cambiada, usada y destruida). Esto puede exponer problemas que conducen a defectos críticos, como daños en la memoria (sobrescrituras de búfer), violaciones de acceso a la memoria, desreferencias de puntero nulo, condiciones de carrera o interbloqueos. También puede detectar problemas de seguridad señalando rutas que eluden el código crítico para la seguridad (por ejemplo, el código que realiza la autenticación o el cifrado).
  • Análisis de métricas: Esto implica medir y visualizar varios aspectos del código. Puede ayudar a detectar defectos existentes, pero con mayor frecuencia advierte sobre posibles dificultades para prevenir y detectar defectos futuros cuando se mantiene el código. Esto se hace encontrando complejidad y dificultad de manejo, como componentes demasiado grandes, anidamiento excesivo de bucles, series de decisiones demasiado largas y dependencias intrincadas entre componentes.

Por qué el análisis de código estático es tan valioso

Lo que todos estos tipos de análisis estático tienen en común es que implican escanear (es decir, hacer que un programa examine) el código fuente. Esta es una manera muy rápida y fácil de exponer defectos críticos. Consigue una cobertura del 100% y sus resultados son 100% objetivos. Es casi imposible argumentar en contra de hacerlo continuamente.

Más allá del alcance del análisis estático

Escaneo estático proporciona información para ayudar a predecir lo que puede suceder cuando el código se integra y ejecuta. Detecta defectos basándose en lo que la herramienta considera un defecto (normalmente, esto se puede personalizar para adaptarse a sus preferencias y prioridades). Sin embargo, no puede decirle cuando el sistema bajo prueba o en producción NO hace lo que se espera que haga, o hace algo que nadie esperaba que hiciera.

El desafío aquí es observar el comportamiento inesperado. Por ejemplo, puede parecer que una transacción procede correctamente para un usuario (o probador o herramienta de ejecución de prueba), mientras que un componente en realidad ha lanzado una excepción no controlada y no pudo procesarla correctamente. Un sistema de control puede responder de forma rápida y correcta bajo prueba durante 3 días, pero tener fugas de memoria y provocar un bloqueo en su cuarto día de producción. La reparación de todos los defectos detectados mediante el uso de una herramienta de análisis de código estático no ofrece ninguna garantía frente a otros defectos que provocarán errores como estos.

Por eso es importante aplicar la definición de falla al comportamiento interno y externo, incluso después de la integración. La falla interna debe detectarse antes de que se manifieste externamente.

Análisis dinámico: detección de errores en tiempo de ejecución

En Parasoft, nos referimos a esta actividad como detección de errores en tiempo de ejecución, una forma de análisis dinámico. Aquí, las distinciones entre los tipos de prueba comienzan a difuminarse. Pruebas de seguridad de aplicaciones dinámicas es una prueba analítica en el sentido de que la intención es examinar el elemento de prueba en lugar de ejercitarlo. Es una prueba de caja blanca en la que examinamos el comportamiento interno en lugar de externo. Sin embargo, el código bajo prueba debe ejecutarse, y eso se hace ejecutando las mismas pruebas de caja negra que se utilizan para las pruebas dinámicas.

Detección de errores en tiempo de ejecución detecta e informa una falla interna en el instante en que ocurre, por lo que es fácil para el evaluador correlacionarla con precisión con las acciones de prueba para informar incidentes. Al igual que un buen análisis estático, proporciona detalles técnicos completos para permitir que el desarrollador aísle y corrija el defecto subyacente. La detección de errores en tiempo de ejecución amplía la capacidad de las pruebas empíricas en todos los niveles, desde la unidad hasta la aceptación, al hacer posible la detección de una falla interna que indica que ocurrió una falla externa que de otro modo no sería observable o que ocurrirá después de que se detenga la prueba.

***

Fotografía: Dexxus

Escrito por

parasoft

Las herramientas de prueba de software automatizadas líderes en la industria de Parasoft respaldan todo el proceso de desarrollo de software, desde que el desarrollador escribe la primera línea de código hasta las pruebas unitarias y funcionales, hasta las pruebas de rendimiento y seguridad, aprovechando los entornos de prueba simulados en el camino.

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