¿Qué es la cobertura del código?
La cobertura de 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 no ejercidas por 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 la información del código fuente para generar un informe sobre la cobertura del código del conjunto de pruebas.
En este tutorial, aprenderá:
- ¿Qué es la cobertura del código?
- ¿Por qué utilizar la cobertura de código?
- Métodos de cobertura de código
- Cobertura de estados de cuenta
- Cobertura de decisiones
- Cobertura de sucursales
- Cobertura de condición
- Cobertura de la máquina de estado finito
- Qué tipo de cobertura de código elegir
- Cobertura de código frente a cobertura funcional
- Herramientas de cobertura de código
- Ventajas y desventajas de usar la cobertura de código
¿Por qué utilizar la cobertura de código?
A continuación, se incluyen algunas de las principales razones para utilizar la cobertura de código:
- Le ayuda a medir la eficiencia de la implementación de la prueba.
- 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 muestran los principales métodos de cobertura de código
- Cobertura de estados de cuenta
- Cobertura de decisiones
- Cobertura de sucursales
- Alternar cobertura
- Cobertura FSM
Cobertura de estados de cuenta
La cobertura de declaraciones es una técnica de prueba de caja blanca en la que todas las declaraciones ejecutables en el código fuente se ejecutan al menos una vez. Se utiliza para calcular el número de declaraciones en el código fuente que se han ejecutado. El objetivo principal de la cobertura de declaraciones es cubrir todas las rutas, líneas y declaraciones posibles en el código fuente.
La cobertura de la declaración se usa para derivar un escenario basado en la estructura del código bajo prueba.
En White Box Testing, 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 gráficos 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, manejadores 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 la declaración 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 de la declaración para un código fuente determinado. Aquí tomamos 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 es una funciónint resultado = a + b;Si (resultado> 0)Imprimir ("Positivo", resultado)DemásImprimir ("Negativo", resultado)} ----------- Fin del código fuente
Escenario 1:
Si A = 3, B = 9
Las declaraciones marcadas en color amarillo son las que se ejecutan según el escenario.
Número de declaraciones ejecutadas = 5, Número total de declaraciones = 7
Cobertura de la declaración: 5/7 = 71%
Asimismo veremos el escenario 2,
Escenario 2:
Si A = -3, B = -9
Las declaraciones marcadas en color amarillo son las que se ejecutan según el escenario.
Número de declaraciones ejecutadas = 6
Número total de declaraciones = 7
Cobertura de la declaración: 6/7 = 85%
Pero en general, si usted ve, todas las declaraciones están siendo cubiertos por 2 nd escenario considerado. Entonces, podemos concluir que la cobertura general de los estados de cuenta es del 100%.
¿Qué cubre la cobertura del estado de cuenta?
- Declaraciones no utilizadas
- Código muerto
- Ramas no utilizadas
- Declaraciones faltantes
Cobertura de decisiones
La 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 las pruebas de cobertura de decisiones es cubrir y validar todo el código fuente accesible comprobando y asegurando que cada rama de cada posible punto de decisión se ejecute al menos una vez.
En esta cobertura, las expresiones a veces pueden complicarse. Por lo tanto, es muy difícil lograr una cobertura del 100%. Es por eso que existen muchos métodos diferentes para informar esta métrica. Todos estos métodos se centran en cubrir las combinaciones más importantes. Es muy similar a la cobertura de decisiones, pero ofrece una mayor sensibilidad para controlar el flujo.
Ejemplo de cobertura de decisiones
Considere el siguiente código:
Demo (int a) {Si (a> 5)a = a * 3Imprimir (a)}
Escenario 1:
El valor de a es 2
Se ejecutará el código resaltado en amarillo. Aquí se marca el resultado "No" de la decisión Si (a> 5).
Cobertura de decisiones = 50%
Escenario 2:
El valor de a es 6
Se ejecutará el código resaltado en amarillo. Aquí se marca el resultado "Sí" de la decisión Si (a> 5).
Cobertura de decisiones = 50%
Caso de prueba | Valor de A | Producción | Cobertura de decisiones |
1 | 2 | 2 | 50% |
2 | 6 | 18 | 50% |
Cobertura de sucursales
La cobertura de rama 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 sucursales es garantizar que cada condición de decisión de cada sucursal se ejecute al menos una vez. Ayuda a medir fracciones de segmentos de código independientes y a descubrir secciones que no tienen ramas.
Por ejemplo, si los resultados son binarios, debe probar tanto los resultados verdaderos como los falsos.
La fórmula para calcular la cobertura de sucursales:
Ejemplo de cobertura de sucursales
Para conocer la cobertura de sucursales, consideremos el mismo ejemplo que usamos anteriormente.
Considere el siguiente código
Demo (int a) {Si (a> 5)a = a * 3Imprimir (a)}
La cobertura de sucursales también considerará sucursales incondicionales
Caso de prueba | Valor de A | Producción | 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 en el código
- Le ayuda a asegurarse de que ninguna derivación conduzca a 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 declaraciones
- Le permite encontrar aquellas áreas que no han sido probadas por otros métodos de prueba.
- Le permite encontrar una medida cuantitativa de la cobertura del código.
- La cobertura de ramas ignora las ramas dentro de las expresiones booleanas
Cobertura de condición
La cobertura de condición o cobertura de expresión es un método de prueba que se utiliza para probar y evaluar las variables o sub-expresiones en la declaración condicional. El objetivo de la cobertura de condiciones es verificar los resultados individuales para 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, solo se consideran las expresiones con operandos lógicos.
Por ejemplo, si una expresión tiene operaciones booleanas como AND, OR, XOR, que indica posibilidades totales.
La cobertura de afecciones no ofrece garantía sobre la cobertura total de decisiones.
La fórmula para calcular la cobertura de condición:
Ejemplo:
Para la expresión anterior, tenemos 4 combinaciones posibles
- TT
- FF
- TF
- PIE
Considere la siguiente entrada
X = 3 Y = 4 |
(x |
CIERTO |
La cobertura de condición es ¼ = 25% |
A = 3 B = 4 |
(a> b) |
FALSO |
Cobertura de la máquina de estado finito
La cobertura de la máquina de estados finitos es sin duda el tipo más complejo de método de cobertura de código. Esto se debe a que actúa sobre el comportamiento del diseño. En este método de cobertura, debe buscar cuántos estados específicos de tiempo se visitan, se transitan. También comprueba 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 probador debe verificar que el
- el código bajo prueba tiene defectos únicos o múltiples no descubiertos
- costo de la posible penalizació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 debe elegir.
Cobertura de código frente a cobertura funcional
Cobertura de código | Cobertura funcional |
La cobertura de código le indica qué tan bien se ha ejercido el código fuente en su banco de pruebas. | La cobertura funcional mide qué tan bien la funcionalidad del diseño ha sido cubierta por su banco de pruebas. |
Nunca use una especificación de diseño | Utilice la especificación de diseño |
Realizado por desarrolladores | Hecho por probadores |
Herramientas de cobertura de código
A continuación, se muestra una lista de herramientas importantes de cobertura de código:
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 están ejecutando y cuáles no cuando se ejecuta la suite de pruebas. |
Trébol | Clover también reduce el tiempo de prueba al ejecutar solo 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 el código Java para determinar la calidad y complejidad del código. |
Emma | EMMA admite la cobertura de clase, método, línea y bloque base, archivos de origen agregados, clases y niveles de método. |
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. |
Bullseye 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 administrar la calidad del código. |
Ventajas de utilizar la cobertura de código
- Útil para evaluar una medida cuantitativa de cobertura de código
- Le permite crear casos de prueba adicionales para aumentar la cobertura
- Le permite encontrar las áreas de un programa que no son ejercidas por un conjunto de casos de prueba.
Desventajas de usar la cobertura de código
- Incluso cuando no se implementa ninguna característica específica en el diseño, la cobertura del código sigue reportando una cobertura del 100%.
- No es posible determinar si probamos todos los valores posibles de una característica con la ayuda de la cobertura del código
- La cobertura del código tampoco dice 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 estructura 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 la prueba.
- Los cinco métodos de Cobertura de código son 1.) Cobertura de declaración 2.) Cobertura de condición 3) Cobertura de sucursal 4) Cobertura alterna 5) Cobertura de 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 prueban todos los resultados de un módulo de código
- Conditional revelará cómo se evalúan las variables o subexpresiones en la declaración condicional
- La cobertura de la máquina de estados finitos es sin duda el tipo más complejo de método de cobertura de código.
- Para seleccionar un método de cobertura, el evaluador debe verificar el costo de la posible penalización, pérdida de reputación, pérdida de venta, etc.
- La cobertura de código le indica qué tan bien se ha ejercido el código fuente en su banco de pruebas, 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 de código no le ayuda a determinar si probamos todos los valores posibles de una función