Tutorial de cobertura de código: pruebas de ramas, declaraciones y decisiones

¿Qué es la cobertura del Código?

La cobertura del código es una medida que describe el grado en que se ha probado el código fuente del programa. Es una forma de prueba de caja blanca que encuentra las áreas del programa que no se han probado con un conjunto de casos de prueba. También crea algunos casos de prueba para aumentar la cobertura y determinar una medida cuantitativa de la cobertura del código.

En la mayoría de los casos, el sistema de cobertura de código recopila información sobre el programa en ejecución. También combina eso con información del código fuente para generar un informe sobre la cobertura del código del conjunto de pruebas.

¿Por qué utilizar las pruebas de cobertura de código?

Estas son algunas de las principales razones para utilizar la cobertura de código:

  • Le ayuda a medir la eficiencia de la implementación de pruebas.
  • Ofrece una medida cuantitativa.
  • Define el grado en que se ha probado el código fuente.

Métodos de cobertura de código

A continuación se presentan los principales métodos de cobertura de código

  • Cobertura de declaración
  • Cobertura de decisiones
  • Cobertura de sucursales
  • TogglCobertura
  • Cobertura MEV

Cobertura de estados de cuenta

Cobertura de estados de cuenta Es una técnica de prueba de caja blanca en la que todas las sentencias ejecutables del código fuente se ejecutan al menos una vez. Se utiliza para calcular la cantidad de sentencias del código fuente que se han ejecutado. El objetivo principal de la cobertura de sentencias es cubrir todas las rutas, líneas y sentencias posibles del código fuente.

La cobertura de la declaración se utiliza para derivar un escenario basado en la estructura del código bajo prueba.

Cobertura de estados de cuenta

In Blanco Box Pruebas , el evaluador se concentra en cómo funciona el software. En otras palabras, el evaluador se concentrará en el funcionamiento interno del código fuente en relación con los diagramas de flujo de control o diagramas de flujo.

Generalmente, en cualquier software, si miramos el código fuente, habrá una amplia variedad de elementos como operadores, funciones, bucles, controladores excepcionales, etc. Según la entrada al programa, es posible que algunas de las declaraciones del código no se ejecuten. . El objetivo de la cobertura de declaraciones es cubrir todas las rutas, líneas y declaraciones posibles en el código.

Entendamos esto con un ejemplo, cómo calcular la cobertura del estado de cuenta.

Escenario para calcular la cobertura del extracto para un código fuente determinado. Aquí estamos tomando dos escenarios diferentes para verificar el porcentaje de cobertura del estado de cuenta para cada escenario.

Código fuente:

Prints (int a, int b) {                       ------------  Printsum is a function 
    int result = a+ b; 
    If (result> 0)
    	Print ("Positive", result)
    Else
    	Print ("Negative", result)
    }                                        -----------   End of the source code 

Escenario 1:

Si A = 3, B = 9

Cobertura de estados de cuenta

Las declaraciones marcadas en color amarillo son aquellas que se ejecutan según el escenario.

Número de declaraciones ejecutadas = 5, Número total de declaraciones = 7

Cobertura del estado de cuenta: 5/7 = 71%

Cobertura de estados de cuenta

Así mismo veremos el escenario 2,

Escenario 2:

Si A = -3, B = -9

Cobertura de estados de cuenta

Las declaraciones marcadas en color amarillo son aquellas que se ejecutan según el escenario.

Número de declaraciones ejecutadas = 6

Número total de declaraciones = 7

Cobertura de estados de cuenta

Cobertura del estado de cuenta: 6/7 = 85%

Cobertura de estados de cuenta

Pero en general, si ve, todas las declaraciones están cubiertas por ambos escenarios. Entonces podemos concluir que la cobertura general del estado de cuenta es del 100%.

Cobertura de estados de cuenta

¿Qué cubre la Cobertura del Estado de Cuenta?

  1. Declaraciones no utilizadas
  2. Código muerto
  3. Ramas no utilizadas
  4. Declaraciones faltantes

Pruebas de cobertura de decisiones

Cobertura de decisiones es una técnica de prueba de caja blanca que informa los resultados verdaderos o falsos de cada expresión booleana del código fuente. El objetivo de la prueba de cobertura de decisiones es cubrir y validar todo el código fuente accesible comprobando y garantizando que cada rama de cada punto de decisión posible se ejecute al menos una vez.

En este tipo de cobertura, las expresiones pueden volverse complejas, lo que dificulta alcanzar una cobertura del 100 %. Por eso, se utilizan varios métodos para informar esta métrica. Estos métodos priorizan las combinaciones más críticas. Si bien es similar a la cobertura de decisiones, proporciona una mayor sensibilidad al flujo de control.

Pruebas de cobertura de decisiones

Ejemplo de cobertura de decisiones

Considere el siguiente código:

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }

Escenario 1:

El valor de a es 2

Pruebas de cobertura de decisiones

Se ejecutará el código resaltado en amarillo. Aquí se marca el resultado “No” de la decisión si (a>5).

Cobertura de decisión = 50%

Escenario 2:

El valor de a es 6

Pruebas de cobertura de decisiones

Se ejecutará el código resaltado en amarillo. Aquí se marca el resultado “Sí” de la decisión Si (a>5).

Cobertura de decisión = 50%

Caso de prueba Valor de A Salida Cobertura de decisiones
1 2 2 50%
2 6 18 50%

Pruebas de cobertura de sucursales

Cobertura de sucursales es un método de prueba de caja blanca en el que se prueba cada resultado de un módulo de código (declaración o bucle). El propósito de la cobertura de ramificaciones es garantizar que cada condición de decisión de cada ramificación se ejecute al menos una vez. Ayuda a medir fracciones de segmentos de código independientes y a descubrir secciones que no tienen ramificaciones.

Por ejemplo, si los resultados son binarios, es necesario probar los resultados Verdaderos y Falso.

La fórmula para calcular la cobertura de sucursales:

Pruebas de cobertura de sucursales

Ejemplo de cobertura de sucursales

Para conocer la cobertura de sucursales, consideremos el mismo ejemplo usado anteriormente.

Considere el siguiente código:

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }                                       

Pruebas de cobertura de sucursales

La cobertura de sucursal también considerará la sucursal incondicional.

Caso de prueba Valor de A Salida Cobertura de decisiones Cobertura de sucursales
1 2 2 50% 33%
2 6 18 50% 67%

Ventajas de la cobertura de Sucursales:

Las pruebas de cobertura de sucursales ofrecen las siguientes ventajas:

  • Le permite validar todas las ramas del código.
  • Le ayuda a garantizar que ninguna ramificación provoque ninguna anomalía en el funcionamiento del programa.
  • El método de cobertura de sucursales elimina los problemas que ocurren debido a las pruebas de cobertura de estados de cuenta
  • Le permite encontrar aquellas áreas que no se prueban mediante otros métodos de prueba.
  • Le permite encontrar una medida cuantitativa de cobertura de código.
  • La cobertura de sucursales ignora las sucursales dentro de las expresiones booleanas.

Prueba de cobertura de condición

Cobertura de condición o la cobertura de expresión es un método de prueba utilizado para probar y evaluar las variables o subexpresiones en la declaración condicional. El objetivo de la cobertura de condiciones es comprobar los resultados individuales de cada condición lógica. La cobertura de condiciones ofrece una mejor sensibilidad al flujo de control que la cobertura de decisiones. En esta cobertura, sólo se consideran expresiones con operandos lógicos.

Por ejemplo, si una expresión tiene operaciones booleanas como AND, OR, XOR, lo que indica posibilidades totales.

La cobertura de condición no ofrece garantía sobre la cobertura de decisión completa.

La fórmula para calcular la Cobertura de Condición:

Prueba de cobertura de condición

Ejemplo:

Prueba de cobertura de condición

Para la expresión anterior, tenemos 4 combinaciones posibles.

  • TT
  • FF
  • TF
  • FT

Considere la siguiente entrada

X = 3

Y = 4

(X VERDADERO La cobertura de condición es ¼ = 25%
A = 3

B = 4

(a>b) FALSO

Cobertura de máquina de estados finitos

La cobertura de máquinas de estados finitos es, sin duda, el tipo de método de cobertura de código más complejo, ya que trabaja sobre el comportamiento del diseño. En este método de cobertura, es necesario buscar cuántos estados específicos del tiempo se visitan y transitan. También verifica cuántas secuencias se incluyen en una máquina de estados finitos.

Qué tipo de cobertura de código elegir

Esta es sin duda la respuesta más difícil de dar. Para seleccionar un método de cobertura, el evaluador debe verificar que el

  • El código bajo prueba tiene uno o varios defectos no descubiertos.
  • coste de la posible sanción
  • costo de la reputación perdida
  • costo de venta perdida, etc.

Cuanto mayor sea la probabilidad de que los defectos causen costosas fallas de producción, más severo será el nivel de cobertura que deberá elegir.

Cobertura de código versus cobertura funcional

Cobertura de código Cobertura funcional
La cobertura del código le indica qué tan bien su banco de pruebas ha ejercido el código fuente. La cobertura funcional mide qué tan bien su banco de pruebas ha cubierto la funcionalidad del diseño.
Nunca utilice una especificación de diseño. Utilice la especificación de diseño
Hecho por desarrolladores Realizado por probadores

Herramientas de cobertura de código

Aquí hay una lista de herramientas importantes de cobertura de códigos:

Nombre de la herramienta DESCRIPCIÓN
Cobertura Es una herramienta de cobertura de código fuente abierto. Mide la cobertura de la prueba instrumentando una base de código y analiza qué líneas de código se ejecutan y cuáles no cuando se ejecuta el conjunto de pruebas.
Trébol Clover también reduce el tiempo de prueba al ejecutar únicamente las pruebas que cubren el código de la aplicación que se modificó desde la compilación anterior.
DevPartner DevPartner permite a los desarrolladores analizar Java Código para la Calidad y Complejidad del Código.
Emma EMMA admite cobertura de clases, métodos, líneas y bloques base, niveles de archivos fuente agregados, clases y métodos.
Kalistick Kalistick es una aplicación de terceros que analiza los códigos con diferentes perspectivas.
CoView y CoAnt El software de codificación es una herramienta de cobertura de código para métricas, creación de objetos simulados, capacidad de prueba de código, cobertura de rutas y ramas, etc.
Diana para C++ BulseyeCoverage es una herramienta de cobertura de código para C++ y C.
Sonar Sonar es una herramienta de cobertura de código abierto que le ayuda a gestionar la calidad del código.

Ventajas y desventajas de utilizar la cobertura de código

Ventajas de la cobertura del código Desventajas de la cobertura del código
Útil para evaluar una medida cuantitativa de la cobertura del código. Incluso cuando no se implementa ninguna característica específica en el diseño, la cobertura del código aún reporta una cobertura del 100%.
Le permite crear casos de prueba adicionales para aumentar la cobertura. No es posible determinar si probamos todos los valores posibles de una característica con la ayuda de la cobertura del código.
Le permite encontrar las áreas de un programa que no se ejercitan mediante un conjunto de casos de prueba. La cobertura del código tampoco indica cuánto y qué tan bien ha cubierto su lógica.
En el caso de que la función especificada no se haya implementado o no esté incluida en la especificación, las técnicas basadas en estructuras no pueden encontrar ese problema.

Resumen

  • La cobertura del código es una medida que describe el grado en que se ha probado el código fuente del programa.
  • Le ayuda a medir la eficiencia de la implementación de pruebas.
  • Cinco métodos de cobertura de código son 1.) Cobertura de declaración 2.) Cobertura de condición 3) Cobertura de sucursal 4) Toggle Cobertura 5) Cobertura FSM
  • La cobertura de declaraciones implica la ejecución de todas las declaraciones ejecutables en el código fuente al menos una vez.
  • La cobertura de decisiones informa los resultados verdaderos o falsos de cada expresión booleana.
  • En la cobertura de la sucursal, se prueba cada resultado de un módulo de código.
  • Condicional revelará cómo se evalúan las variables o subexpresiones en la declaración condicional.
  • La cobertura de máquina de estados finitos es sin duda el tipo de método de cobertura de código más complejo.
  • Para seleccionar un método de cobertura, el evaluador debe verificar el costo de la posible penalización, la pérdida de reputación, la pérdida de ventas, etc.
  • La cobertura del código le indica qué tan bien su banco de pruebas ha ejercido el código fuente, mientras que la cobertura funcional mide qué tan bien se ha cubierto la funcionalidad del diseño.
  • Cobertura, JTest, Clover, Emma, ​​Kalistick son algunas herramientas importantes de cobertura de código
  • La cobertura de código le permite crear casos de prueba adicionales para aumentar la cobertura
  • La cobertura del código no le ayuda a determinar si probamos todos los valores posibles de una característica.