code coverage - tutorial - ¿Cómo funcionan las herramientas de cobertura de código?
tutorial django (5)
¿De qué manera las herramientas de cobertura de código como NCover saben qué partes del código se ejecutaron y qué partes no?
Aquí hay un documento técnico sobre Cómo implementar herramientas de cobertura de prueba para idiomas arbitrarios .
Mi compañía crea una familia de herramientas de cobertura de prueba para Java, C #, C ++, PHP, COBOL, PLSQL, ... basadas en este principio.
De this fuente:
NCover usa la API de perfil .NET Framework para monitorear la ejecución de una aplicación. Cuando CLR carga un método, NCover recupera el IL y lo reemplaza con código IL instrumentado
En resumen, se engancha en la compilación justo a tiempo.
Sin embargo, no todas las herramientas funcionan de la misma manera. Otras herramientas funcionan modificando el bytecode de su aplicación una vez que el código ha sido compilado.
Requiere que ejecute sus pruebas una vez con el análisis de cobertura de código habilitado, y luego simplemente cuenta el número de bloques (es decir, bloques de alcance) cubiertos y se compara con el número total de bloques en el proyecto (s) que está probando.
El razonamiento básico es que si se cubre cada posible combinación de bloques de códigos, se cubren todas las rutas de códigos 1 . El principal argumento en contra de poner demasiado peso en los números de cobertura de código es que los bloques "fáciles" como getters y setters, que no dan ningún valor real (y apenas podrían salir mal ...) cuentan tanto como más bloques de código propensos a errores .
1) Como señaló en un comentario, la redacción anterior de esta oración era incorrecta. Por favor, lea los comentarios para una discusión sobre esto.
Sé que esta es una pregunta antigua, pero si todavía está interesado, puede ver un ejemplo de cómo se realiza dicha instrumentación para aplicaciones .NET mirando el proyecto de código abierto OpenCover .
OpenCover inserta puntos de instrumentación en puntos significativos en el código.
- Para la cobertura de línea de código, utiliza los puntos de secuencia tomados de un archivo PDB
- Para la cobertura de bifurcación, instrumenta las instrucciones COND_BRANCH instrumentando el (los) objetivo (s) de salto y la siguiente instrucción después de la instrucción de bifurcación, es decir, sin salto.
- Para instrumentación de método, instrumenta la primera instrucción de cualquier método.
Todas estas reglas se aplican en CoverageInstrumentation.cpp vez que se han localizado los puntos adecuados utilizando Mono.Cecil y se pasan al perfilador desde el host de la consola.
El código fuente de PartCover también está disponible (como se indica), pero esto es mucho más difícil de seguir, pero también utiliza puntos de secuencia de PDB para determinar dónde instrumenta el código.
Cita directamente de las preguntas FAQ NCover: NCover informa el porcentaje de sucursales en el código que se han tomado durante el transcurso de sus pruebas automatizadas. Lo logra instrumentando el código fuente en cada rama, y escribiendo los puntos de ''golpe'' en un archivo. Estos puntos de ''golpe'' se comparan con el total de puntos posibles que podrían haber sido ''golpeados''.