Testing estructural

También denominado testing de arquitectura o estructura de software, es un tipo de testing basado en pruebas de caja blanca y técnicas estáticas que aplica a todos los niveles de software. Su objetivo es cubrir un conjunto de elementos estructurales de los componentes integrados o de sistema.

## Técnicas de testing

### Cobertura de sentencias

La cobertura de sentencias puede ser medida como el ***porcentaje de sentencias ejecutables que han sido utilizadas por los casos de pruebas***. Esta medición puede realizarse a través de herramientas especificas denominadas "***Herramientas de analisis de coberura***" (“Coverage Analysis Tools ”) o ***Analizadores de Cobertura*** (“Coverage Analyzers”).

La cobertura de sentencias nos permite detectar "***Código muerto***", es decir, código que no es utilizado en ningún momento por los casos de prueba que tengamos definidos.Si tenemos código muerto en nuestro sistema, no se podrá lograr el %100 de cobertura de sentencias. Por otro lado, es importante remarcar que ***no nos permite encontrar "Código faltante"***, es decir, código inexistente y necesario para cumplir con las especificaciones requeridas.

### Cobertura de condiciones

El método de cobertura de condiciones se refiere a **caminos a través** del **diagrama de flujo de control,** con este método sólo se considera el resultado final de una condición, a pesar de que la condición resultante ***puede estar constituida por múltiples condiciones atómicas***, aunque aquellos fallos debidos a una implementación errónea de las partes de una decisión combinada pueden no ser detectados.

Éste método tiene por objetivo ***detectar defectos que resulten de la implementación de condiciones múltiples (condiciones combinadas)***, estas condiciones múltiples están constituidas por condiciones atómicas, que se combinan con el uso de operadores lógicos como: OR, AND, XOR, etc. (Por ejemplo (a>2) OR (b<6)). Las condiciones atómicas no contienen operadores lógicos, sólo contienen operadores relacionales y el operador NOT (=, >, <, etc.).

Hay tres tipos de cobertura de condición.

* Cobertura de **condición simple** (“simple condition coverage”).
* Cobertura de **condición múltiple** (“multiple condition coverage”).
* **Mínima cobertura de condición múltiple** (“minimum multiple condition coverage”).

#### *Cobertura de condición simple*

Cada sub-condición atómica de una sentencia condicional combinada tiene que tomar, al menos una vez, los valores lógicos verdadero (“true) así como falso (“false”).

#### *Cobertura de condiciones múltiples*

Todas las combinaciones que puedan ser creadas utilizando permutaciones de las sub condiciones atómicas deben formar parte de las pruebas.

#### *Mínima cobertura de condición múltiple*

Todas las combinaciones que puedan ser creadas utilizando los resultados lógicos de cada sub-condición deben ser parte de las pruebas, sólo si el cambio del resultado de una sub-condición cambia el resultado de la condición combinada.

### Cobertura de decisiones

La cobertura de decisiones (“Decision coverage” o "Branch coverage") se centra en el ***flujo de control en un segmento de programa***, es decir, no en los nodos sino en las aristas del diagrama de flujo de control, por ende, cuando realizamos una cobertura de decisiones t***odas las aristas del diagrama de flujo de control tienen que ser cubiertas al menos una vez.***

El criterio de salida de esta prueba es lograr la cobertura de un porcentaje específico de todas las decisiones, ***denominado cobertura de decisión:***

```

 C
 1
 =
 (
 N
 u
 m
 e
 r
 o
 d
 e
 d
 e
 c
 i
 s
 i
 o
 n
 e
 s
 e
 j
 e
 c
 u
 t
 a
 d
 a
 s

 /

 N
 u
 m
 e
 r
 o
 d
 e
 d
 e
 c
 i
 s
 i
 o
 n
 e
 s
 t
 o
 t
 a
 l
 e
 s
 )
 ∗
 100

 {\displaystyle C1 = (Numero de decisiones ejecutadas / Numero de decisiones totales) \* 100}

```

Para lograr una cobertura de decisión del 100% se requiere, al menos, ***los mismos casos de prueba que requiere la cobertura de sentencia***. La cobertura de decisiones ***no detecta "sentencias o código muerto"***, tampoco se considera suficiente para probar ***condiciones complejas o bucles de forma extensiva***.