Fase 1: Análisis de Requisitos, Historias de Usuario y Preparación del Proyecto
Objetivo
Que los estudiantes comprendan el flujo de desarrollo de una aplicación profesional, desde la planificación hasta la implementación, utilizando herramientas de control de versiones, entornos virtuales y mejores prácticas en Python.
Conceptos Clave
- Programación en red: Uso de sockets para la comunicación cliente-servidor.
- Diseño modular: Organización del código en clases y métodos.
- Entornos virtuales: Aislamiento de dependencias con venv.
- Control de versiones: Uso de Git y GitHub.
- Interfaces gráficas: Uso de tkinter para desarrollar la GUI del cliente.
- Historias de usuario: Identificación de requerimientos clave mediante ejemplos prácticos.
Historias de Usuario
- HU1: Como usuario, quiero conectarme al servidor con un apodo único, para identificarme en el chat.
- HU2: Como usuario, quiero enviar mensajes al chat y que otros los reciban, para comunicarme con los demás.
- HU3: Como usuario, quiero recibir mensajes enviados por otros usuarios en tiempo real, para estar informado de las conversaciones.
- HU4: Como administrador, quiero registrar y gestionar conexiones de clientes, para mantener el control del servidor.
Instrucciones: Fase 1
- Crear un directorio de proyecto
mkdir chat_app
cd chat_app
Inicializar un repositorio Git
git init
git branch -M main
- Configurar un entorno virtual
python3 -m venv env
source env/bin/activate # En Windows: env\Scripts\activate
- Crear el archivo .gitignore Contenido sugerido para ignorar archivos innecesarios:
env/
__pycache__/
*.pyc *.pyo
Crear un archivo requirements.txt Inicialmente vacío. Agregaremos dependencias más adelante.
Estructurar el proyecto
mkdir src
touch src/server.py src/client.py
mkdir tests
touch tests/test_server.py tests/test_client.py
Planificar la arquitectura inicial
El servidor manejará conexiones y permitirá la comunicación entre clientes.
El cliente tendrá una interfaz de línea de comandos (CLI) en esta fase inicial.
Codificar clases base En server.py:
"""
Módulo: server.py
Descripción: Define el servidor del sistema de chat local.
"""
import socket
import threading
class ChatServer:
def __init__(self, host, port):
"""Inicializa el servidor con la dirección y puerto especificados."""
pass
def start_server(self):
"""Inicia el servidor y espera conexiones entrantes."""
pass
def handle_client(self, client_socket, client_address):
"""Maneja la comunicación con un cliente específico."""
pass
def broadcast(self, message, sender_socket):
"""Envía un mensaje a todos los clientes excepto al remitente."""
pass
En client.py:
"""
Módulo: client.py
Descripción: Define el cliente del sistema de chat local.
"""
import socket
class ChatClient:
def __init__(self, host, port):
"""Inicializa el cliente con la dirección del servidor y el puerto."""
pass
def connect_to_server(self):
"""Establece conexión con el servidor."""
pass
def send_message(self, message):
"""Envía un mensaje al servidor."""
pass
def receive_messages(self):
"""Recibe mensajes del servidor."""
pass
Agregar y confirmar cambios en Git
git add .
git commit -m "Fase 1: Configuración inicial y clases base con métodos vacíos"
Pruebas
En esta fase, no se ejecuta ningún código, pero verifica que los archivos y directorios existen.
Asegúrate de que el entorno virtual esté activo antes de cualquier ejecución futura.
Conclusiones
En esta primera fase, los estudiantes aprenden a configurar un proyecto profesional, organizarlo en módulos y versionarlo con Git. Esto sienta las bases para futuras fases en las que se llenarán los métodos y se implementará la lógica del servidor y cliente.