X
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 basado en patrones análisis estático): 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 prevenir defectos como fugas de recursos, problemas de rendimiento y seguridad, errores lógicos y mal uso de API.
  • Análisis estático basado en flujo: Este tipo de análisis estático implica encontrar y analizar las diversas rutas que se pueden tomar a través del código, tanto por "control" (es decir, el orden en el que se pueden ejecutar las líneas) como por datos (es decir, las secuencias en las que se puede crear una variable o entidad similar, cambiado, usado y destruido). Esto puede exponer problemas que conducen a defectos críticos como daños en la memoria (sobrescritura de búfer), violaciones de acceso a la memoria, eliminación de referencias de puntero nulo, condiciones de carrera o interbloqueos. También puede detectar problemas de seguridad al señalar 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 que implican escanear (es decir, hacer que un programa examine) el código fuente. Esta es una forma muy rápida y fácil de exponer defectos críticos. Alcanza el 100% de cobertura 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

El análisis de código 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 ha lanzado una excepción no controlada y no ha podido procesarla correctamente. Un sistema de control puede responder rápida y correctamente bajo prueba durante 3 días, pero perder memoria y dirigirse a un bloqueo en su cuarto día de producción. Arreglar todos los defectos detectados mediante el uso de un herramienta de análisis de código estático no ofrece garantía contra otros defectos que causarán fallas como estas.

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 la notificación de incidentes. Como bien análisis estático, proporciona detalles técnicos completos para permitir al desarrollador aislar y corregir 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 detectar una falla interna que indica que ha ocurrido una falla externa que de otro modo no sería observable o que ocurrirá después de que la prueba haya terminado.

***

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.

Prueba Parasoft