Python: análisis de cubrimiento de código

Una herramienta muy potente que tiene perl es el módulo Devel::Cover. Para python hay un módulo equivalente, coverage. Este tipo de programas, lo que hace es un análisis de cubrimiento de código, orientado sobre todo a los test. Esto es muy útil para saber si nuestros test de la aplicación cubren la totalidad del código (caso ideal) y si no, cuanto nos falta para llegar a ello, resaltando las partes de código ejecutadas y las que no.

Para instalarlo, podemos bajarnos las fuentes y compilarlas o usar el repositorio.

$ sudo apt-get install python-coverage

Es un programa muy fácil de usar. El programa dispone de una pequeña ayuda:

$ python-coverage help
Coverage.py, version 3.2
Measure, collect, and report on code coverage in Python programs.

usage: coverage [options] [args]

Commands:
    annotate    Annotate source files with execution information.
    combine     Combine a number of data files.
    erase       Erase previously collected coverage data.
    help        Get help on using coverage.py.
    html        Create an HTML report.
    report      Report coverage stats on modules.
    run         Run a Python program and measure code execution.
    xml         Create an XML report of coverage results.

Use "coverage help " for detailed help on any command.
Use "coverage help classic" for help on older command syntax.
For more information, see http://nedbatchelder.com/code/coverage

Generación de informes

Lo primero que tenemos que hacer es ejecutar el programa. Esto lo que hará es generar un fichero .coverage con la información de cubrimiento.

$ python-coverage run example02.py

Para ver los resultados, usamos la opción report:

$  python-coverage report -m example02.py
Name        Stmts   Exec  Cover   Missing
-----------------------------------------
example02      14     14   100%  

Luego podemos generar el fichero html:

$ python-coverage html -d coverhtml
$ firefox coverhtml/index.html


Usar la API

Esto no acaba aquí. Si uno quiere, puede hacer un programa para ejecutar el análisis en los puntos del programa que se quiera y luego generar un informe.

La API está bien explicado, y la verdad, es bastante sencillo.Un ejemplo:

__________________________________________________
# -*- coding: utf-8 -*-
import coverage
cov = coverage.coverage()
cov.start()
def cuadrados(lista):
    """ Calcula el cuadro de los números de la lista
    >>> l = [0,1,2,3]
    >>> cuadrados(l)
    [0, 1, 4, 9]
    """
    return [n ** 2 for n in lista]

def _test():
    import doctest
    doctest.testmod()

_test()

cov.stop()
cov.html_report(directory='covhtml')
_______________________________________________


$ python mycov.py

El programa crea un directorio covhtml con los resultados.



Referencias

1 comentarios:

Ruymán Reyes Castro dijo...

Interesante, interesante. Tendré que pasarle alguna prueba a yacf ....

Publicar un comentario en la entrada

Por favor, no escriba al estilo SMS y use signos de puntuación en caso necesario