Ejercicios

Tema 6: Control de calidad

Análsis estático

  1. Corrige el programa ugly.py para que pase todas las pruebas de PyLint sin pasar parámetros especiales por la linea de comandos, aunque se permite deshabilitar alguna opción mediante directivas. Además, el código tiene algunos problemas con casos esquina y de calidad del algoritmo, arréglalo para que funcione bien siempre e indique al usuario los errores por consola.

    Hint

    Mete el código en una función para que no se queje del uso de variables globales.

    Hint

    Usa una directiva disable=W0402 para evitar el warning por usar el módulo string, que es apropiado usar.

    Solución

  2. Modifica el programa anterior para que pase los controles de PyChecker. También puedes usar alguna directiva dentro del código para deshabilitar cosas que no son erráticas.

    Hint

    La directiva no-stringiter puede ser de utilidad.

    Solución

Pruebas de unidad

  1. Escribe algunas pruebas de unidad con doctest para la clase Racional que programamos en el tema de orientación a objetos. Recuerda que en la vida real, usaríamos la clase Fractional.

    Hint

    Programar __repr__ será necesario para poder evaluar el estado del objeto de forma sencilla. No hace falta que el objeto sea sintácticamente Python, como tampoco lo es la representación por defecto.

    Hint

    Llama a los tests en if __name__ == "__main__".

    Solución

  2. Escribe algunas pruebas de unidad con unittest para las clase Racional anterior.

    Hint

    Si el fichero de la clase Racional se llama racional.py, llama al nuevo fichero test_racional.py y crea otro fichero runtests.py que ejecute este test y el de los siguientes ejercicios.

    Hint

    Importar las clases de pruebas en runtests.py e invocar unittest.main () debe ser suficiente.

    Hint

    Para probar con assertRaises que acceder a entero tira una excepción en los casos que debe, envuelve el acceso al atributo en una lambda. Esto es así porque esa aserción espera que le pases una función para ella ejecutarla controladamente y realizar la comprobación.

    Solución

  3. Escribe algunas pruebas de unidad con unittest para alguna de las clases del ejercicio del tema de orientación a objetos. Usa un mockup del fichero para probar la entrada y salida. Un mockup es una clase que da una implementación ficticia de otro objeto lo suficientemente completa para probar el objeto que nos interesa. La clase StringIO es un mockup sobradamente completo para este propósito.

    Hint

    Crea el mockup en el fixture del objeto.

    Solución

  4. Juega con las pruebas de unidad anteriores desde la consola utilizando el método TestCase.debug ().