Terminar el proyecto y seguir aprendiendo

Ciencia y tecnologíaTerminar el proyecto y seguir aprendiendo

Terminar un proyecto pequeño exige algo más que conseguir una ejecución afortunada. En esta lección comprobarás el gestor completo, prepararás instrucciones para utilizarlo y elegirás una mejora proporcionada. El objetivo es que puedas abrirlo dentro de unas semanas, entender su estructura y modificarlo sin depender de copiar otra aplicación entera.

Revisar la entrega local

Tu carpeta debe contener app.py, logica.py y almacenamiento.py. tareas.json aparecerá cuando guardes. El archivo temporal tareas.json.tmp puede quedar si una escritura se interrumpe antes del reemplazo; no lo confundas con el archivo principal ni lo borres sin revisar su contenido si necesitas recuperar una sesión.

Comprueba que app.py contiene las dos funciones auxiliares de la lección dieciocho, las importaciones de la diecinueve, una única función main actualizada y un único bloque de arranque. Si una llamada indica que no existe listar_tareas probablemente sustituiste más contenido del indicado. Recupera esa función desde la versión anterior.

Antes de la demostración guarda una copia de la carpeta con los datos que quieras conservar. Realiza las pruebas con información inventada. Las pruebas no deberían modificar tu única agenda de uso real. Separar el entorno de práctica del de uso evita que una comprobación de archivo dañado se convierta en un problema innecesario.

Una demostración completa

En una carpeta de prueba sin tareas.json inicia la aplicación y lista. Debe informar de que no hay tareas. Añade «Leer» y «Practicar». Intenta añadir solo espacios y confirma que siguen existiendo dos elementos. Completa el primero y comprueba que el segundo permanece pendiente.

Prueba los números cero y tres para completar. Ambos deben rechazarse cuando solo hay dos tareas. Introduce una palabra y observa el aviso de entero. Guarda, sal y abre otra vez. Deben conservarse las dos tareas y el estado terminado de la primera. Registra esta secuencia en la hoja final del cuaderno.

Después añade «Cambio temporal» y sal sin guardar confirmando s. Al reiniciar no debe aparecer. Por último prueba el archivo dañado sobre una copia y verifica que el arranque se detiene sin reemplazarlo. Restaura los datos correctos al terminar para que la siguiente ejecución no empiece con un fallo provocado.

Automatizar las comprobaciones principales

Crea en tu ordenador un archivo llamado pruebas.py junto a los tres módulos. Este archivo forma parte de tu trabajo práctico y puedes escribirlo copiando el ejemplo. Usa una carpeta temporal para las comprobaciones de almacenamiento y no toca el tareas.json del programa principal.

from pathlib import Path
from tempfile import TemporaryDirectory
from logica import agregar_tarea, completar_tarea
from almacenamiento import cargar, guardar


def probar():
    tareas = []
    assert agregar_tarea(tareas, " Leer ") is True
    assert tareas[0]["titulo"] == "Leer"
    assert agregar_tarea(tareas, "   ") is False
    assert agregar_tarea(tareas, "Practicar") is True
    assert len(tareas) == 2
    assert completar_tarea(tareas, 0) is False
    assert completar_tarea(tareas, 3) is False
    assert completar_tarea(tareas, 1) is True
    assert tareas[0]["hecha"] is True
    assert tareas[1]["hecha"] is False
    with TemporaryDirectory() as carpeta:
        ruta = Path(carpeta) / "prueba.json"
        assert cargar(ruta) == []
        guardar(ruta, tareas)
        assert cargar(ruta) == tareas
        for contenido in ("{", '{"otra": 1}'):
            ruta.write_text(contenido, encoding="utf-8")
            try:
                cargar(ruta)
            except ValueError:
                pass
            else:
                raise AssertionError("Debía rechazarse el archivo")
            assert ruta.read_text(encoding="utf-8") == contenido
    print("Pruebas del gestor superadas")


if __name__ == "__main__":
    probar()

TemporaryDirectory crea una carpeta de pruebas y la elimina al salir del bloque. pass indica que no hay ninguna instrucción adicional en esa rama: recibir ValueError era precisamente el comportamiento esperado. La rama else provoca un fallo si el documento incorrecto se acepta. Esa estructura comprueba un rechazo en lugar de un resultado normal.

Ejecuta pruebas.py de forma habitual, sin opciones que desactiven aserciones. El mensaje final confirma esos casos concretos. No demuestra que el programa esté libre de cualquier problema posible. Por ejemplo, las preguntas del menú y la confirmación de salida siguen necesitando la demostración manual anterior.

Escribir instrucciones de uso

Prepara una nota breve con la orden de ejecución que funciona en tu equipo. Explica que los tres módulos deben permanecer juntos, que los datos se guardan junto a app.py y que la opción cero guarda antes de salir. Añade cómo crear una copia de tareas.json con la aplicación cerrada.

Indica también sus límites: una persona, una instancia abierta y guardado explícito. No hay sincronización ni recordatorios. Si alguien utiliza el programa por primera vez debería saber estas condiciones sin inspeccionar el código. Documentar un límite real es más útil que añadir una promesa vaga de facilidad de uso.

Elegir una mejora pequeña

Una ampliación razonable sería mostrar cuántas tareas siguen pendientes. Ya escribiste una función para contarlas. Puedes integrarla en el listado y comprobar tres casos: agenda vacía, todas terminadas y mezcla de estados. La mejora aprovecha lo aprendido sin obligarte a cambiar el formato del archivo.

Otra posibilidad es permitir devolver una tarea a pendiente mediante una opción diferente. Antes de programarla escribe qué ocurre si ya estaba pendiente y cómo se elige el número. No alteres silenciosamente la operación completar para que cambie de sentido. Mantener nombres y comportamiento coherentes evita sorpresas.

Deja para una etapa posterior las cuentas de usuario, la sincronización y las interfaces web. Introducen problemas nuevos que merecen su propio aprendizaje. Puedes consultar el tutorial oficial de Python como referencia de ampliación. Está orientado a lectores con bases de programación, así que ahora resultará más aprovechable que al comenzar desde cero.

Errores habituales

  • Confundir pasar unas pruebas con garantizar cualquier uso posible.
  • Modificar datos reales durante comprobaciones destructivas.
  • Añadir varias mejoras antes de comprobar la primera.
  • Entregar un módulo principal sin sus archivos importados.

Lo que deberías recordar

  • Una entrega útil incluye código, pruebas e instrucciones de uso.
  • La demostración completa complementa las comprobaciones de funciones.
  • Cada mejora debe incluir nuevos criterios de aceptación.
  • Mantener un alcance pequeño facilita aprender con autonomía.

Ejercicio práctico

Completa la vigésima hoja con la demostración, los resultados de pruebas.py y una mejora elegida. Redacta un plan de cuatro semanas: reconstruir un ejercicio sin mirar, ampliar una función, añadir sus pruebas y explicar el proyecto a otra persona. Anota tareas concretas que puedas realizar en sesiones breves.

Vuelve a la lección que corresponda cuando una parte no te resulte clara y repite su ejercicio con otros datos. Utiliza después el gestor para una lista pequeña de práctica. Conserva tus anotaciones junto al proyecto: contienen las decisiones, los fallos corregidos y las pruebas que te permitirán continuar trabajando por tu cuenta.

Repasa las lecciones que necesites y aplica el proyecto final con una lista de tareas propia antes de añadir nuevas funciones.

Volver al índice del curso de programación desde cero.

Últimos posts

Artículos más vistos

Horóscopo diario
Menú diario