Pregunta

¿Qué es la cobertura de código y cómo la mide USTED?

Me hicieron esta pregunta con respecto a nuestra cobertura de código de prueba de automatización. Parece ser que, fuera de las herramientas automatizadas, es más arte que ciencia. ¿Hay ejemplos reales de cómo usar la cobertura de código?

¿Fue útil?

Solución

La cobertura del código es una medida de cuántas líneas / bloques / arcos de su código se ejecutan mientras se ejecutan las pruebas automáticas.

La cobertura del código se recopila mediante el uso de una herramienta especializada para instrumentar los binarios para agregar llamadas de rastreo y ejecutar un conjunto completo de pruebas automatizadas contra el producto instrumentado. Una buena herramienta le dará no solo el porcentaje del código que se ejecuta, sino que también le permitirá profundizar en los datos y ver exactamente qué líneas de código se ejecutaron durante una prueba en particular.

Nuestro equipo utiliza Magellan , un conjunto interno de herramientas de cobertura de código . Si usted es una tienda .NET, Visual Studio tiene herramientas integradas para recopilar la cobertura del código. También puede rodar algunas herramientas personalizadas, como este artículo describe.

Si es una tienda de C ++, Intel tiene algunos herramientas que se ejecutan para Windows y Linux, aunque no las he usado. También he oído que existe la herramienta gcov para GCC, pero no sé nada al respecto y no puedo darle un enlace.

En cuanto a cómo lo usamos: la cobertura del código es uno de nuestros criterios de salida para cada hito. En realidad, tenemos tres métricas de cobertura de código: cobertura de pruebas unitarias (del equipo de desarrollo), pruebas de escenario (del equipo de prueba) y cobertura combinada.

Por cierto, aunque la cobertura del código es una buena métrica de la cantidad de pruebas que está haciendo, no es necesariamente una buena métrica de qué tan bien está probando su producto. Hay otras métricas que debe usar junto con la cobertura del código para garantizar la calidad.

Otros consejos

La cobertura del código básicamente prueba que cuánto de su código está cubierto bajo las pruebas. Por lo tanto, si tiene una cobertura de código del 90%, significa que hay un 10% de código que no está cubierto por las pruebas. Sé que podrías estar pensando que el 90% del código está cubierto, pero tienes que mirar desde un ángulo diferente. ¿Qué le impide obtener una cobertura del código del 100%?

Un buen ejemplo será este:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

Ahora, en el código anterior hay dos caminos / ramas. Si siempre está presionando el " SÍ " entonces no está cubriendo la otra parte y se mostrará en los resultados de la Cobertura del Código. Esto es bueno porque ahora sabes lo que no está cubierto y puedes escribir una prueba para cubrir la otra parte. Si no hubo cobertura de código, entonces estás sentado en una bomba de tiempo para explotar.

NCover es una buena herramienta para medir la cobertura del código.

Solo recuerde, tener "100% de cobertura de código" no significa que todo se pruebe por completo, aunque significa que se prueba cada línea de código, no significa que se prueben en todas las situaciones (comunes) ...

Usaría la cobertura de código para resaltar bits de código para los que probablemente debería escribir pruebas. Por ejemplo, si la herramienta de cobertura de código que muestra myImportantFunction () no se ejecuta mientras se ejecutan mis pruebas unitarias actuales, probablemente deberían mejorarse.

Básicamente, el 100% de cobertura de código no significa que su código sea perfecto. Úselo como guía para escribir pruebas más completas (unitarias).

Complementando algunos puntos a muchas de las respuestas anteriores:

La cobertura del código significa, qué tan bien su conjunto de prueba está cubriendo su código fuente. es decir, en qué medida el código fuente está cubierto por el conjunto de casos de prueba.

Como se menciona en las respuestas anteriores, hay varios criterios de cobertura, como rutas, condiciones, funciones, declaraciones, etc. Pero los criterios adicionales que se deben cubrir son

  1. Cobertura de condición: todas las expresiones booleanas se evaluarán para verdadero y falso.
  2. Cobertura de decisión: no solo las expresiones booleanas se evaluarán para verdadero y falso una vez, sino para cubrir todo el cuerpo if-elseif-else posterior.
  3. Cobertura de bucle: significa que cada bucle posible se ha ejecutado una vez, más de una vez y cero tiempo. Además, si tenemos una suposición sobre el límite máximo, entonces, si es factible, pruebe los tiempos límite máximos y, uno más que los tiempos límite máximos.
  4. Cobertura de entrada y salida: pruebe todas las llamadas posibles y su valor de retorno.
  5. Cobertura del valor del parámetro (PVC). Para verificar si se prueban todos los valores posibles para un parámetro. Por ejemplo, una cadena podría ser cualquiera de estos comúnmente: a) nulo, b) vacío, c) espacios en blanco (espacio, tabulaciones, nueva línea), d) cadena válida, e) cadena no válida, f) cadena de un solo byte, g ) cadena de doble byte. Si no se prueba cada valor de parámetro posible, puede dejar un error. Probar solo uno de estos podría dar como resultado una cobertura de código del 100% a medida que se cubre cada línea, pero como solo se prueba una de las siete opciones, significa que solo el 14.2% de cobertura del valor del parámetro.
  6. Cobertura de herencia: en el caso de una fuente orientada a objetos, al devolver un objeto derivado referido por clase base, se debe evaluar la cobertura a evaluar, si se devuelve un objeto hermano.

Nota: El análisis de código estático encontrará si hay algún código inalcanzable o código colgado, es decir, código no cubierto por ninguna otra llamada de función. Y también otra cobertura estática. Incluso si el análisis de código estático informa que el código 100% está cubierto, no proporciona informes sobre su conjunto de pruebas si se prueba toda la cobertura de código posible.

La cobertura del código se ha explicado bien en las respuestas anteriores. Así que esta es más una respuesta a la segunda parte de la pregunta.

Hemos utilizado tres herramientas para determinar la cobertura del código.

  1. JTest - una herramienta patentada construida sobre JUnit. (También genera pruebas unitarias).
  2. Cobertura : una herramienta de cobertura de código fuente abierto que se puede combinar fácilmente con pruebas JUnit para generar informes.
  3. Emma - otro - este hemos utilizado para un propósito ligeramente diferente al de las pruebas unitarias. Se ha utilizado para generar informes de cobertura cuando los usuarios finales acceden a la aplicación web. Esto, junto con las herramientas de prueba web (ejemplo: Canoo) puede brindarle informes de cobertura muy útiles que le indican cuánto código se cubre durante el uso típico del usuario final.

Utilizamos estas herramientas para

  • Revise que los desarrolladores hayan escrito buenas pruebas unitarias
  • Asegúrese de atravesar todo el código durante las pruebas de recuadro negro

La cobertura del código es simplemente una medida del código que se prueba. Hay una variedad de criterios de cobertura que se pueden medir, pero generalmente son las diversas rutas, condiciones, funciones y declaraciones dentro de un programa las que componen la cobertura total. La métrica de cobertura del código es solo un porcentaje de las pruebas que ejecutan cada uno de estos criterios de cobertura.

En cuanto a cómo hago para hacer un seguimiento de la cobertura de la prueba de unidad en mis proyectos, utilizo herramientas de análisis de código estático para realizar un seguimiento.

Para Perl está el excelente Devel :: Cover que utilizo regularmente en mis módulos

Si la compilación y la instalación son administradas por Module :: Build, simplemente puede ejecutar ./Build testcover para obtener un buen sitio HTML que le indica la cobertura por sub, línea y condición, con buena colores que facilitan ver qué ruta de código no se ha cubierto.

En las respuestas anteriores, la cobertura del código se ha explicado bien. Solo estoy agregando algunos conocimientos relacionados con las herramientas si está trabajando en plataformas iOS y OSX , Xcode ofrece la posibilidad de probar y monitorear la cobertura del código.

Enlaces de referencia:

https: // desarrollador .apple.com / library / archive / documentation / DeveloperTools / Conceptual / testing_with_xcode / chapters / 07-code_coverage.html

https://medium.com/zendesk-engineering/code -coverage-and-xcode-6b2fb8756a51

Ambos son enlaces útiles para aprender y explorar la cobertura de código con Xcode.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top