Al escribir software, es inevitable que se produzcan errores en su código. Puede ser en forma de errores de sintaxis, errores lógicos, errores en tiempo de ejecución, errores de rendimiento, errores de datos, o peor aún.
La naturaleza casi omnipresente de los errores al escribir software hace que las pruebas de software sean un paso importante en el desarrollo de software. Unas pruebas adecuadas y eficaces no sólo dan como resultado un software de alta calidad que satisface las necesidades de los usuarios, sino también un software que cumple las normativas y que tiene pocas o ninguna vulnerabilidad que pueda ser aprovechada por los atacantes.
Las pruebas desoftware pueden realizarse en forma de pruebas automatizadas, pruebas unitarias, pruebas de integración o pruebas de todo el software mediante pruebas del sistema.
Sin embargo, una cuestión importante que surge durante las pruebas de software es cómo determinar si su software ha sido probado exhaustivamente. ¿Son suficientes las pruebas que ha realizado con el software?
¿Ha probado completamente todas las partes de su software, o hay trozos de código que no se han probado en absoluto?
Este tipo de preguntas son inevitables cuando se realizan pruebas de software, y esto es lo que hace que la cobertura del código sea tan importante.
La La cobertura del código es una métrica de las pruebas de software que le indica qué parte de su código ha sido ejecutada y, por tanto, probada por las pruebas que ha realizado en el software que está probando. Los resultados de la cobertura del código se expresan en porcentaje.

Este porcentaje muestra qué parte de su código ha sido cubierta por las pruebas que ha ejecutado sobre el código. Por ejemplo, si ejecuta una prueba y obtiene una cobertura del código del 60%, significa que el 40% de su código no ha sido cubierto por las pruebas que ha escrito y, por tanto, podría haber errores y vulnerabilidades en el código no probado.
Por este motivo, la cobertura del código le permite analizar la eficacia y la exhaustividad de las pruebas que ha realizado en su software. Esto tiene la ventaja de garantizar que el software se pruebe adecuada y exhaustivamente antes de su lanzamiento. Esto reduce los errores en el software de producción que podrían afectar a la experiencia de los usuarios con el software.
Por mucho que una cobertura de código del 100% no signifique necesariamente que el software que está escribiendo esté totalmente libre de errores, es conveniente aspirar a una cobertura de código elevada para garantizar la eficacia de las pruebas de su software.
En industrias críticas como la aeroespacial y la médica, donde los errores de software podrían provocar la muerte, las normativas exigen una cobertura del software del 100% durante las pruebas.
Tipos de métricas de cobertura del código

Existen varios tipos de métricas de cobertura del código que pueden medirse mientras se prueba el software. Entre ellos se incluyen:
- Cobertura desentencias - mide el porcentaje de sentencias ejecutables en el código fuente que se han ejecutado durante las pruebas.
- Cobertura defunciones - mide el porcentaje de funciones definidas que se han llamado durante las pruebas.
- Cobertura deramas - mide el porcentaje de ramas o caminos posibles que se han ejecutado desde todos los puntos de decisión del código fuente. Se utiliza para garantizar que todas las ramas que surgen de las estructuras de control de decisiones, como las sentencias if, switch y if else, se han probado por completo.
- Cobertura decondiciones - mide el porcentaje de expresiones booleanas que se han probado tanto para valores verdaderos como falsos.
- Cobertura debucles - mide el porcentaje de bucles del código fuente que se han ejecutado durante las pruebas.
- Cobertura derutas - mide el porcentaje de todas las rutas de ejecución posibles en el código fuente que se han probado.
Las métricas anteriores suelen incluirse en un informe de cobertura del código.
Mejores prácticas de cobertura del código
Existen ciertas prácticas recomendadas a la hora de realizar la cobertura del código para garantizar la eficacia y la calidad de la misma. Entre ellas se incluyen:

Tener objetivos de cobertura claros
En cualquier prueba de software que se emprenda, establezca porcentajes de cobertura objetivo para cada métrica de cobertura de pruebas que sea apropiada. Esto tiene la ventaja no sólo de proporcionar objetivos de prueba claros, sino también de ayudar a reducir los defectos en el software dirigiendo los esfuerzos del equipo en aumentar la cobertura del código. También ayuda a garantizar que las pruebas de software reciben la atención que merecen durante el desarrollo del software.
Centrarse en la calidad de las pruebas
Es importante tener en cuenta que la cobertura del código simplemente muestra el porcentaje de código que se ha probado y no muestra si se han probado correctamente o si el software está libre de errores. Por lo tanto, en lugar de centrarse simplemente en conseguir que la cobertura del código se acerque al 100 por cien, el énfasis debe ponerse en escribir pruebas de calidad y eficaces que prueben correctamente el software y añadan valor.
Aumentar la cobertura del código en el código que cambia con frecuencia
Aunque conseguir cifras elevadas de cobertura del código en grandes proyectos puede resultar difícil, se pueden realizar esfuerzos para garantizar que la cobertura del código mejore con el tiempo.
Una buena forma de hacerlo es exigir una cobertura del código elevada, superior al 90%, en cada nueva confirmación que se realice en la base de código del proyecto.
Imponer una cobertura del código a nivel de commit no sólo es realista y factible, sino que también garantiza que cualquier nuevo cambio que se haga en el software tenga una cobertura del código excelente.
Medir y analizar los datos de cobertura del código
Utilice los resultados obtenidos de la cobertura del código para identificar las áreas que aún necesitan pruebas y también para guiar los futuros esfuerzos de pruebas dando prioridad a las áreas con baja cobertura de código.
Analice los datos de cobertura del código para identificar las áreas críticas de una aplicación que aún no se han probado y dirija sus esfuerzos a probar completamente las áreas críticas no probadas. El uso de los datos de cobertura del código para mejorar y priorizar el software da como resultado un software mejor probado y con menos defectos.
Cobertura del código frente a cobertura de las pruebas

Aunque ambas se utilizan para determinar la eficacia de las pruebas, la cobertura del código y la cobertura de las pruebas son fundamentalmente diferentes en su uso y en lo que miden.
La cobertura de las pruebas es una métrica utilizada para determinar hasta qué punto las pruebas escritas cubren los requisitos del software. Implica probar cada uno de los requisitos del software y ayuda a determinar lo bien que se ha probado el software en lo que respecta al cumplimiento de sus requisitos.
Los resultados de la cobertura de las pruebas muestran el porcentaje de los requisitos del software que se han probado. La cobertura de las pruebas suele ser realizada por profesionales de la garantía de calidad.
La cobertura del código, por otro lado, es una métrica de pruebas de software que se utiliza para determinar el porcentaje del código fuente que ha sido ejecutado por las pruebas escritas.
Los resultados de una cobertura de código muestran hasta qué punto las declaraciones, funciones, rutas, bucles, ramas y condiciones del código fuente han sido ejecutadas por las pruebas unitarias escritas. La cobertura del código se utiliza para evaluar lo bien que las pruebas escritas cubren el código fuente y la suelen realizar los desarrolladores de software.
La cobertura del código es una métrica importante que hay que medir al realizar pruebas de software. Aquí tiene algunas herramientas que le ayudarán con la cobertura del código:
Trébol
Trébol es una herramienta de cobertura de código abierto desarrollada inicialmente por Atlassian, una empresa de software australiana que desarrolla productos para equipos de desarrollo de software. La herramienta está escrita puramente en Java y puede ejecutarse en cualquier sistema operativo que cumpla los requisitos del entorno de ejecución de Java.

Clover puede utilizarse para realizar la cobertura de código en código escrito en lenguajes de programación Java, Groovy o AspectJ. Es compatible con marcos de pruebas como JUnit, TestNG y Spock, y también puede integrarse con IDEs como IntelliJ IDEA y Eclipse.
Clover puede utilizarse para medir métricas de cobertura de código como la cobertura de métodos, sentencias, ramas, global y por prueba.
A partir de un ejercicio de cobertura del código, puede generar informes HTML altamente configurables que muestren los resultados de la cobertura del código además de las principales áreas de riesgo del software y que puedan utilizarse en optimizaciones de pruebas.
Los informes también pueden generarse en PDF, XML, JSON o texto sin formato. Las principales ventajas de Clover son que puede integrarse con muchas herramientas diferentes y que se está desarrollando y mejorando activamente.
JaCoCo
JaCoCo es una biblioteca gratuita de cobertura de código para el lenguaje de programación Java desarrollada por el equipo de EclEmma. La biblioteca se implementa en EclEmma, que es una herramienta gratuita de cobertura de código Java para el IDE Eclipse.

JaCoCo proporciona un rico análisis de cobertura cuyos resultados se resumen y resaltan inmediatamente en el editor de código fuente Java y permite a los usuarios desglosar los resultados de cobertura hasta el nivel de método.
Los resultados se presentan mediante un código de colores personalizable que resalta las líneas de código que han sido cubiertas total o parcialmente, o que aún no han sido cubiertas por las pruebas ejecutadas en el código fuente. Permite fusionar y considerar diferentes ejecuciones de pruebas para llegar a una cobertura total del código fuente.
JaCoCo es una herramienta ligera y no requiere modificar sus proyectos ni realizar ninguna otra configuración para utilizarla en el análisis de la cobertura del código.
Cobertura
Cobertura es una herramienta de cobertura de código Java gratuita y de código abierto que se basa en Jcoverage y se puede utilizar por sí sola, a través de un script de Ant, o a través del plugin de Maven. Utilizarlo a través de un plugin de Maven es la forma más común de utilizar Cobertura para la cobertura de código.

La cobertura mide el porcentaje de líneas o ramas que han sido ejecutadas por pruebas realizadas sobre un código fuente Java. Proporciona métricas como la cobertura de líneas, que muestra el porcentaje de sentencias ejecutadas durante las pruebas, y también la cobertura de ramas, que muestra el porcentaje de ramas cubiertas durante las pruebas.
También muestra un factor de complejidad que aumenta a medida que aumenta el número de ramas en su código Java.
Los resultados de la cobertura del código se presentan en HTML o XML, mostrando qué partes del código fuente no se han probado. Además de mostrar los resultados de la cobertura de las pruebas, Cobertura también puede utilizarse para localizar código no probado y errores, así como para identificar código inalcanzable.
Estambul
Estambul es una herramienta de cobertura de código para código Javascript con soporte para ES6 . Esta herramienta puede instalarse en cualquier proyecto Javascript como dependencia de desarrollo utilizando el gestor de paquetes node.

Estambul proporciona métricas de cobertura de código como la cobertura de sentencias, ramas, funciones y líneas. También muestra las líneas del código fuente que no han sido cubiertas por las pruebas. Para ello, añade contadores de líneas a su código JavaScript, de modo que pueda realizar un seguimiento de la medida en que sus pruebas unitarias ejecutan su código fuente.
Los resultados de cobertura del código obtenidos por Istanbul pueden mostrarse en el terminal o en forma de HTML. Además, Istanbul ofrece soporte para aplicaciones que generan subprocesos, cobertura de código fuente de proyectos Babel y TypeScript.
Pytest-cov

Pytest-cov es un complemento gratuito de Python que se utiliza para generar informes de cobertura de código para código Python. Se instala mediante el instalador de paquetes Pip de Python y se maneja desde la línea de comandos.
Su informe de cobertura de código muestra las sentencias de su proyecto Python, las que no están cubiertas por pruebas, y proporciona un porcentaje de cobertura de pruebas que muestra el porcentaje de su código Python cubierto por pruebas.
Pytest-cov ofrece compatibilidad con subprocesos, compatibilidad con xdist y un comportamiento pytest coherente. El comportamiento por defecto de Pytest-cov mientras realiza las pruebas es borrar los archivos de datos de cobertura existentes para garantizar datos nuevos y limpios para cada nueva ejecución de prueba. Sin embargo, también permite a los usuarios combinar los resultados de las pruebas de cobertura de código de ejecuciones de pruebas anteriores.
Cobertura.py

Cobertura.py es una herramienta de cobertura de código para programas Python, y se instala en los proyectos mediante pip.
Por defecto, mide la cobertura de líneas o sentencias y proporciona resultados que muestran el número de sentencias del programa, las omitidas por las pruebas y el porcentaje de cobertura de la prueba, y también muestra las líneas de su código fuente Python que han sido omitidas por las pruebas. Sin embargo, aún puede configurarse para medir la cobertura de ramas en programas Python.
Coverage.py también puede utilizarse para saber qué pruebas ejecutaron qué líneas del código fuente. Su informe de cobertura del código puede presentarse en el terminal y también en formatos HTML, XML, JSON y LCOV.
SimpleCov

SimpleCov es una robusta herramienta de cobertura de código para el lenguaje de programación Ruby. Utiliza la biblioteca de cobertura integrada en Ruby para recopilar datos relevantes que se utilizarán para determinar la cobertura del código después de ejecutar las pruebas.
Lo mejor de SimpleCov es su presentación de los resultados de la cobertura del código. Además, fusiona los resultados de los distintos tipos de pruebas realizadas, de modo que el informe generado muestra los resultados de todas las pruebas realizadas, lo que permite identificar fácilmente las partes del código no probadas.
También formatea el código fuente con códigos de colores que pueden utilizarse fácilmente para identificar las partes probadas y no probadas del código. Por defecto, SimpleCov mide e informa de la cobertura de líneas de las pruebas. Sin embargo, puede configurarse para medir e informar sobre la cobertura de rama de las pruebas realizadas.
Cubierta profunda
Profundo Cover es una herramienta de cobertura de código precisa para el código Ruby. Ofrece informes de cobertura de líneas más precisos al garantizar que una línea se considera cubierta sólo cuando se ejecuta por completo y no parcialmente.
Además, ofrece soporte para la cobertura de nodos y ramas que puede utilizarse opcionalmente para averiguar si existen algunas ramas no tomadas por las pruebas.
Deep Cover no sólo es fácil de usar sin necesidad de configuraciones, sino que puede integrarse en proyectos que utilicen otras herramientas de cobertura de código, como la biblioteca de cobertura de código incorporada de Ruby o SimpleCov. En estos casos, Deep Cover hace que las herramientas sean más estrictas al marcar las líneas como ejecutadas sólo si todo lo que hay en la línea de código se ejecuta por completo.
Conclusión
Por mucho que una mayor cobertura del código no se traduzca necesariamente en un software libre de errores, es una métrica crucial que debe tenerse en cuenta a la hora de probar el software. La cobertura del código es importante para evaluar en qué medida las pruebas escritas comprueban realmente el código fuente de un software.
Además, trabajar en la mejora de la cobertura del código durante las pruebas da como resultado un software mejor probado y menos propenso a errores en la producción. Para realizar la cobertura del código mientras se prueba el software, considere la posibilidad de utilizar las herramientas sugeridas en el artículo.
También puede explorar las herramientas de pruebas de carga basadas en la nube.