Diseño de Software

Curso
Autor/a

Francisco Alfaro

Fecha de publicación

4 de agosto de 2024





Contenidos

Diseño de Software

Introducción: El diseño de software es una disciplina clave en el desarrollo de aplicaciones robustas, escalables y mantenibles. En este curso, aprenderemos los conceptos fundamentales de diseño de software en Python, desde la configuración del entorno hasta la implementación de pruebas, utilizando herramientas y técnicas modernas.

Motivación: ¿Por qué es importante el diseño de software? Un buen diseño de software permite escribir código limpio, fácil de entender y mantener, reduciendo el riesgo de errores y facilitando la colaboración en equipos de desarrollo. Implementar buenas prácticas de diseño es crucial para proyectos a largo plazo y para el éxito de cualquier equipo de desarrollo de software.

Configuración (Setup)

Entorno de Desarrollo: En esta sección, aprenderemos a configurar un entorno de desarrollo eficiente en Python. Veremos cómo instalar y gestionar diferentes versiones de Python con Pyenv, cómo crear y aislar entornos virtuales con Virtualenv, y cómo utilizar Poetry para la gestión de dependencias y la configuración de proyectos.

Control de Versiones: Git y GitHub son herramientas fundamentales para el control de versiones y la colaboración en proyectos de software. Aprenderemos a trabajar con Git para rastrear cambios en el código y colaborar de manera efectiva en proyectos utilizando flujos de trabajo modernos como Gitflow.

Programación

Principios SOLID: El diseño de software se basa en principios sólidos que facilitan la extensibilidad y el mantenimiento del código. Exploraremos los cinco principios SOLID y cómo aplicarlos en Python para escribir código más modular y fácil de probar.

Patrones de Diseño: Aprenderemos patrones de diseño comunes, como el Singleton, el Factory y el Observer, que nos ayudarán a resolver problemas comunes de diseño de software de manera estructurada y reutilizable.

Refactorización: Refactorizar es el proceso de mejorar la estructura de un código sin cambiar su funcionalidad. Veremos técnicas de refactorización que nos ayudarán a mantener nuestro código limpio y libre de deuda técnica, mejorando su calidad a lo largo del tiempo.

Ecosistema

PEP y Mejores Prácticas: Los Python Enhancement Proposals (PEP) son documentos que definen buenas prácticas y estándares en Python. Exploraremos los PEP más importantes, como el PEP 8 (guía de estilo) y el PEP 20 (el Zen de Python), y cómo integrarlos en nuestro flujo de trabajo.

Paradigmas de Programación: Python soporta múltiples paradigmas de programación, como la programación orientada a objetos (OOP), la programación funcional y la programación estructurada. Veremos cómo utilizar estos paradigmas para resolver diferentes tipos de problemas de manera efectiva.

Tipificación y Pydantic: Python admite anotaciones de tipos, lo que mejora la legibilidad y el mantenimiento del código. Aprenderemos a utilizar herramientas como Pydantic para realizar validación de datos y aprovechar los beneficios de la tipificación estática en Python.

Utilidades (Utilities)

Logging y Estilización: El registro de eventos (logging) es esencial para depurar y monitorear aplicaciones. Aprenderemos a configurar y utilizar el módulo logging de Python para rastrear el comportamiento de nuestras aplicaciones. Además, cubriremos herramientas de estilización de código para mantener la consistencia en proyectos.

Automatización con Pre-commit: Pre-commit es una herramienta que nos permite automatizar tareas antes de realizar un commit. Veremos cómo configurarlo para ejecutar pruebas, verificar el estilo de código, y otras tareas útiles que aseguren la calidad del código en cada commit.

Pruebas (Testing)

Introducción a Pytest: Las pruebas son una parte esencial del ciclo de desarrollo de software. Aprenderemos a escribir pruebas unitarias con Pytest y a medir la cobertura del código para garantizar que todas las partes de nuestra aplicación estén bien probadas.

Mocking y Hypothesis: El mocking nos permite simular dependencias en pruebas, mientras que Hypothesis nos ayuda a generar datos de prueba automáticamente para mejorar la cobertura. Veremos cómo aplicar estas técnicas para escribir pruebas más robustas y confiables.

Documentación

Documentar con Mkdocs: La documentación es clave para que otros desarrolladores puedan entender y contribuir a nuestros proyectos. Aprenderemos a crear documentación estática con Mkdocs y a personalizarla con el tema Mkdocs-Material. También veremos cómo extender la funcionalidad de la documentación utilizando plugins de Mkdocs.

Personalización y Extensiones: Exploraremos opciones avanzadas para personalizar y extender la documentación de nuestros proyectos, agregando funcionalidades como búsqueda, navegación mejorada y soporte para múltiples idiomas.

Extras

Recursos y Herramientas Adicionales: Finalmente, exploraremos algunas herramientas adicionales y recursos útiles para mejorar aún más nuestro flujo de trabajo en el diseño de software, como linters, analizadores estáticos y herramientas de control de calidad del código.