martes, 9 de abril de 2013

Análisis estático con herramientas (K2 - entender, explicar , razonar)

Objetivos:
  1. Retener defectos y errores típicos identificados mediante el análisis estático y compararlos con los de las revisiones dinámicas (K1).
  2. Describir, mediante ejemplos, los beneficios típicos del análisis estático (K2).
  3. Enumerar los defectos de código y diseño típicos que pueden identificarse mediante herramientas de análisis estático (K1).
Términos usados en este artículo: COMPILADOR, FLUJO DE CONTROL, FLUJO DE DATOS, ANÁLISIS ESTÁTICO.

Antecedentes.




El objetivo del análisis estático es detectar defectos en el código fuente del software y en los modelos de software. 

El análisis estático se realiza sin que la herramienta llegue a ejecutar el software objeto de la revisión; en las pruebas dinámicas se ejecuta el código de software.

El análisis estático permite identificar defectos difíciles de encontrar mediante pruebas dinámicas. 

Al igual que sucede con las revisiones, el análisis estático encuentra defectos en lugar e fallos.

Las herramientas de análisis estático analizan el código del programa (por ejemplo, el flujo de control y flujo de datos) y las salidas generadas, tales como HTML o XML.

Definición: 

Es aquella tarea que consiste en analizar un objeto de prueba (por ejemplo código fuente, script, [guión], ...requisito ) sin ejecutar el objeto de prueba.

Posibles aspectos a ser comprobados con análisis estático:

  • Reglas y estándares de programación.
  • Diseño de un programa (análisis de flujo de control).
  • Uso de datos (análsis del flujo de datos).
  • Complejidad de la estructura de un programa (métricas , por ejemplo número ciclomático).

El valor del análisis estático es:
  1. La detección temprana de defectos antes de la ejecución de las pruebas.
  2. Advertencia temprana sobre aspectos sospechosos del código o del diseño mediante el cálculo de métricas, tales como una medición de alta complejidad.
  3. Identificación de defectos que no se encuentran fácilmente mediante pruebas dinámicas.
  4. Detectar dependencias e inconsistencias en modelos de software, como enlaces.
  5. Mantenibilidad mejorada del código y del diseño.
  6. Prevención de defectos , si se aprende la lección en la fase de desarrollo. 
Entre los defectos habitualmente detectados por la herramienta de análisis estático se encuentran:
  1. Referenciar una variable con un valor indefinido.
  2. Interfaces inconsistentes entre módulos y componentes.
  3. Variables que no se utilizan o que se declaran de forma incorrecta.
  4. Código inaccesible (muerto).
  5. Ausencia de lógica o lógica errónea (posibles bucles infinitos).
  6. Construcciones demasiado complicadas.
  7. Infracciones de los estándares de programación.
  8. Vulnerabilidad de seguridad.
  9. Infracciones de sintaxis del código y modelos de software.
Las herramientas de análisis estático generalmente las utilizan los desarrolladores (cotejar con las reglas predefinidas o estándares de programación) antes y durante las pruebas de componente y de integración, o durante la comprobación del código, para configurar las herramientas de análisis estático pueden producir un gran número de mensajes de advertencias que deben ser bien gestionados para permitir el uso más efectivo de la herramienta.

Los compiladores pueden constituir un soporte para los análisis estáticos, incluyendo el cálculo de métricas.

Aspectos Generales.

Todos los objetos de prueba deben tener una estructura formal.

  • Esto es especialmente importante cuando se utilizan herramientas de pruebas.
  • Con mucha frecuencia no se generan documentos formalmente.
  • En la práctica, lenguajes de modelados, programación y de creación de scripts ("scripting languaje") cumplen con la regla, de la misma forma que algunos diagramas.
El análisis estático de un programa mediante el uso de herramientas se desarrolla con un esfuerzo menor que el necesario en una inspección.

  • Por tanto con mucha frecuencia , el análisis estático se ejecuta de forma previa a que tenga lugar una revisión.
  • Para detectar lógica ausente o errónea (bucles potencialmente infinitos).
  • Para detectar construcciones excesivamente complicadas. Vulnerabilidad en el ámbito de la seguridad, interfaces inconsistentes, etc.

 El valor del análisis estático es la prevención de defectos:

  • Para encontrar defectos tan pronto como sea posible antes de la ejecución de pruebas.
  • Para advertir sobre aspectos sospechosos del código.
  • Para detectar discrepancias en el diseño a través del cálculo de métricas como la medida de alta complejidad.
  • Estos defectos pueden no ser encontrados fácilmente con pruebas dinámicas.
  • Para comprobar la mantenibilidad del código o diseño. 
Herramientas que deben ser utilizadas :

  • Compiladores y
  • herramientas de análisis (analizadores).
Compilador:
  • Detecta errores sintácticos en el código fuente de un programa.
  • Crea datos de referencia del programa (por ejemplo lista de referencia cruzada, llamada jerárquica, tabla de símbolos).
  • Comprueba la consistencia entre los tipos de variables.
  • Detecta variables no declaradas y código inaccesible (código muerto).
Analizador: trata aspectos adiconales tales como:

  • Convenciones y estándares.
  • Métricas de complejidad.
  • Acoplamiento de objetos.

No hay comentarios:

Publicar un comentario