2009-03-24 15 views
18

¿Hay alguna herramienta/biblioteca que calcule el porcentaje de "condición/decisión de cobertura" del código python. Encontré solo coverage.py pero solo calcula el porcentaje de "cobertura de estado".condición de cobertura en python

Respuesta

7

Coverage.py now includes branch coverage.

Para lo curioso: el código no se modifica antes de ejecutarse.La función de seguimiento rastrea qué líneas siguen en la ejecución y compara esa información con el análisis estático del código de bytes compilado para encontrar posibilidades de ruta no ejecutadas.

2

¿Está buscando cyclomatic complexity (Wikipedia)? Básicamente, calcula el número de rutas a través de un fragmento de código. Hay algunos proyectos para calcular eso para el código de Python, por ejemplo PyMetrics o this one. Google sin duda traerá más.

Pero no conozco ninguna integración adicional con las pruebas unitarias que le mostrarán la cobertura.

+0

> ¿Está buscando la complejidad ciclomática (Wikipedia)? No. Gracias por la información interesante. > Pero no conozco ninguna integración adicional con las pruebas unitarias que le muestren la cobertura. Yo también;) –

+0

La complejidad ciclomática no está relacionada básicamente con la cobertura del estado. –

2

No conozco ninguna herramienta de cobertura de sucursal para Python, aunque he contemplado la posibilidad de escribir una. Mi idea era comenzar con el AST e insertar instrumentación adicional para cada punto de ramificación. Es factible, pero hay algunos casos difíciles.

Por ejemplo,

raise SomeException(x) 

cobertura de sucursales para este necesita para comprobar que SomeException (x) se crea una instancia totalmente y no levantó su propia excepción.

assert x, "Oh No!: %r" % (x, y) 

Esto necesita comprobar que el texto en el lado derecho de la declaración de aserción se evalúa completamente.

return args.name or os.getenv("NAME") or die("no name present") 

Cada uno de los dos primeros términos debe verificarse para la ruta de verdadero/falso, pero no la última. De hecho, el último quizás ni siquiera regrese.

Hubo muchos casos de los que preocuparse y no tuve ninguna necesidad apremiante aparte de la curiosidad, así que no fui a ninguna parte con eso. También me preguntaba si obtendría muchos falsos positivos en los que necesitaría alguna manera de reprimir advertencias específicas.

Si quiere probar esta ruta, comience con Python 2.6 o 3.0. En esas versiones, el módulo AST está documentado y puede crear sus propios nodos AST antes de generar el código o el archivo .pyc.

+0

"o morir" es bastante divertido de leer, y posiblemente fue divertido de escribir;) – myroslav

+0

Yo era programador de Perl antes de cambiar a Python. Eso es un Perl-ismo. Perl nunca fue conocido como un lenguaje aburrido. –

1

El mismo mantenedor de coverage.py tiene un artículo que habla de una forma de get coverage information at the bytecode level. El método es un poco tonto: se trata de volver a armar los archivos .pyc con números de línea ajustados. Sin embargo, proporciona la mayor granularidad en la medición de cobertura que podría pedir.

2

No lo he usado yo mismo, pero si está dispuesto a reemplazar el análisis de cobertura con mutation testing, he oído hablar de un probador de mutaciones llamado "molestar".

Mientras estaba haciendo google, también me encontré con a list of python testing tools que menciona algunas posibles herramientas de cobertura de código.

Cuestiones relacionadas