Documentación del Software¶
1. ¿Por qué es Importante la Documentación?¶
La documentación es un aspecto crucial en el desarrollo de software que:
- Comunica: Explica el funcionamiento a desarrolladores y usuarios
- Facilita uso: Ayuda a usuarios a utilizar el software
- Facilita mantenimiento: Permite que otros desarrolladores entiendan el código
- Asegura calidad: Documente requisitos, decisiones, riesgos
- Reduce dependencia: No depender de una sola persona que "sabe cómo funciona"
- Escala el conocimiento: El conocimiento se comparte y persiste
Sin documentación:¶
- Solo el autor original entiende el código
- Cuando se va, el conocimiento se va con él
- Cambios se hacen de forma arriesgada (sin entender impacto)
- Nuevos desarrolladores tardan meses en entender
- Usuarios no saben cómo usar la aplicación
Con documentación:¶
- Código entendible para cualquiera
- Decisiones quedan registradas
- Nuevos desarrolladores se integran rápido
- Usuarios saben qué hacer
- Cambios seguros y con contexto
2. Tipos de Documentación¶
2.1 Documentación Técnica¶
Destinada a: Desarrolladores, arquitectos, DevOps
Manuales Técnicos¶
Incluyen:
- Arquitectura del software (diagrama general)
- Configuración del entorno de desarrollo
- Configuración del entorno de producción
- Guías para que nuevos desarrolladores contribuyan
- Procesos de build, deploy, testing
Ejemplo de estructura:
MANUAL TÉCNICO - Sistema de Gestión de Tareas
1. ARQUITECTURA
- Diagrama de componentes
- Módulos principales
- Flujo de datos
2. CONFIGURACIÓN DEL DESARROLLO
- Requisitos (Java 11+, Maven 3.6+, PostgreSQL 12)
- Clonar repositorio
- Instalar dependencias
- Configurar base de datos local
- Ejecutar tests
3. GUÍA DE CONTRIBUCIÓN
- Nombrado de ramas
- Proceso de commit
- Requisitos de código (tests, coverage)
- Proceso de pull request
- Code review checklist
4. DESPLIEGUE
- Proceso de despliegue a staging
- Proceso de despliegue a producción
- Rollback procedures
- Monitoreo
Especificaciones de Diseño¶
Describen:
- Estructura del software (clases, interfaces, módulos)
- Diagramas UML (clases, secuencias, estados)
- Decisiones de diseño y por qué
- Patrones de diseño usados
- Consideraciones de rendimiento
Ejemplo:
ESPECIFICACIÓN DE DISEÑO - Módulo de Autenticación
DIAGRAMA DE CLASES:
Usuario
├─ email: String
├─ passwordHash: String
├─ verificarPassword(String): boolean
└─ cambiarPassword(String): void
FLUJO DE AUTENTICACIÓN:
1. Usuario ingresa credenciales
2. Sistema busca usuario en BD
3. Compara hash de password
4. Si match, crea JWT token
5. Token se envía al cliente
DECISIONES DE DISEÑO:
- Se usa JWT en lugar de sesiones por:
* Escalabilidad (sin estado en servidor)
* Compatible con arquitectura de microservicios
* Fácil de usar en aplicaciones móviles
2.2 Documentación de Usuario¶
Destinada a: Usuarios finales, administradores, soporte
Manuales de Usuario¶
Contienen:
- Cómo instalar el software
- Cómo usar las funcionalidades principales
- Guías paso a paso
- Resolución de problemas comunes
- Preguntas frecuentes (FAQs)
Ejemplo de manual de usuario:
MANUAL DE USUARIO - Sistema de Gestión de Tareas
INSTALACIÓN:
Paso 1: Descargar el instalador desde www.ejemplo.com
Paso 2: Ejecutar el instalador
Paso 3: Seguir el asistente
Paso 4: Reiniciar el ordenador
CREAR UNA NUEVA TAREA:
Paso 1: Hacer clic en el botón "Nueva Tarea"
Paso 2: Ingresar el nombre de la tarea
Paso 3: (Opcional) Seleccionar fecha de vencimiento
Paso 4: (Opcional) Asignar a un usuario
Paso 5: Hacer clic en "Guardar"
PREGUNTAS FRECUENTES:
P: ¿Cómo cambio mi contraseña?
R: Ve a Configuración > Cuenta > Cambiar Contraseña
P: ¿Puedo compartir tareas con otros usuarios?
R: Sí, edita la tarea y agrega usuarios...
Tutoriales y Guías¶
- Instrucciones paso a paso para tareas comunes
- Videos tutoriales
- Casos de uso reales
- Dirigidos a usuarios sin experiencia técnica
2.3 Documentación en el Código¶
Ubicación: Dentro del código fuente mismo
Comentarios en el Código¶
Sirven para:
- Explicar por qué se hace algo (no qué - eso es el código)
- Advertencias sobre efectos secundarios
- Explicar decisiones de diseño importantes
- Notas sobre partes complejas
Buen comentario (explica el por qué):
// Usamos caché aquí porque esta operación es costosa (3 segundos)
// sin caché, el dashboard sería demasiado lento
// Se invalida cada 5 minutos o cuando hay cambios
Map<String, DashboardData> cache = new HashMap<>();
Mal comentario (explica lo obvio):
// Suma dos números
public int suma(int a, int b) {
return a + b; // El código ya lo dice
}
Documentación de API (Javadoc)¶
- Documentación de clases, métodos, parámetros
- Generada automáticamente a partir de comentarios especiales
- Accesible como referencia web
Ejemplo:
/**
* Calcula el total de un pedido aplicando descuentos.
*
* @param pedido El pedido a procesar (no puede ser null)
* @param cliente El cliente que hace el pedido
* @return El total final después de descuentos
* @throws IllegalArgumentException si el pedido es null
*
* @see Descuento#aplicar(double)
*/
public double calcularTotal(Pedido pedido, Cliente cliente) {
if (pedido == null) {
throw new IllegalArgumentException("Pedido no puede ser null");
}
// Implementación...
}
Etiquetas Javadoc comunes:
@param nombreParam - Describe un parámetro
@return - Describe el valor de retorno
@throws ExceptionType - Excepciones que puede lanzar
@see OtraClase - Referencia cruzada
@author NombreAutor - Quién escribió esto
@deprecated - Indica que está obsoleto
@since version1.0 - Desde qué versión existe
3. Principios de Buena Documentación¶
3.1 Claridad¶
¿Qué significa?: Usar lenguaje simple y directo
Cómo lograrlo:
- Evitar jerga técnica innecesaria
- Explicar términos técnicos cuando sea necesario
- Usar frases cortas y simples
- Estructurar con títulos y secciones
- Ejemplos donde sea posible
Ejemplo MALO (confuso):
El subsistema implementa una arquitectura hexagonal
mediante inyección de dependencias invirtiendo el
control y aplicando el patrón SOLID.
Ejemplo BUENO (claro):
La aplicación está organizada en capas:
1. Controladores: Reciben solicitudes HTTP
2. Servicios: Contienen la lógica de negocio
3. Repositorios: Acceden a la base de datos
Esto permite cambiar la BD sin afectar la lógica de negocio.
3.2 Concisión¶
¿Qué significa?: Ser breve, sin información innecesaria
Cómo lograrlo:
- Incluir solo información relevante
- Ir al punto sin rodeos
- Evitar repeticiones
- Usar listas en lugar de párrafos largos
Ejemplo MALO (demasiado largo):
Para cambiar de contraseña, primero debes acceder al
menú de configuración que está en la esquina superior
derecha de la pantalla. Una vez allí, buscarás una
opción que dice "Cuenta" o "Perfil", dependiendo de
la versión del software que estés usando. Luego...
Ejemplo BUENO (conciso):
Para cambiar contraseña:
1. Configuración (esquina superior derecha)
2. Cuenta > Cambiar Contraseña
3. Ingresa contraseña actual y nueva
4. Guardar
3.3 Consistencia¶
¿Qué significa?: Mismo estilo, formato y términos en toda la documentación
Cómo lograrlo:
- Usar plantillas estándar
- Definir guía de estilo (naming, formatos)
- Todos usan el mismo lenguaje para los mismos conceptos
- Mismo formato para ejemplos
Ejemplo de inconsistencia:
En un documento dicen "Usuario"
En otro dicen "Perfil de usuario"
En otro dicen "Cuenta"
→ Confusión: ¿son lo mismo?
Ejemplo consistente:
Establecer: "Usuario" = Persona registrada
"Usuario activo" = Usuario que ha iniciado sesión
"Perfil de usuario" = Página con datos del usuario
Todos los documentos usan estos términos igual.
3.4 Actualización Regular¶
¿Qué significa?: Mantener la documentación sincronizada con el código
Cómo lograrlo:
- Actualizar documentación cuando haces cambios
- Revisar documentación regularmente
- Incluir "fecha de última actualización"
- Control de versiones para documentación
Ejemplo de problema:
Documentación dice: "Máximo 100 usuarios por proyecto"
Código en versión 2.5 permite 1000
→ Documentación obsoleta causa confusión
3.5 Accesibilidad¶
¿Qué significa?: Documentación fácil de encontrar y acceder
Cómo lograrlo: s - Disponible en línea (accesible desde navegador) - Disponible en dispositivos móviles - Sistema de navegación intuitivo - Búsqueda robusta - Múltiples formatos (web, PDF, etc.)
Estructura de accesibilidad:
DOCUMENTACIÓN
├─ Para usuarios
│ ├─ Guía rápida de inicio
│ ├─ Manual completo
│ ├─ FAQs
│ └─ Vídeos tutoriales
├─ Para desarrolladores
│ ├─ Arquitectura
│ ├─ Guía de instalación
│ ├─ API Reference (Javadoc)
│ └─ Guía de contribución
└─ Para administradores
├─ Instalación
├─ Configuración
├─ Respaldo y recuperación
└─ Troubleshooting
4. Documentación como Requisito de Calidad¶
La documentación es parte de la calidad del software:
Con documentación completa:
- Nuevos desarrolladores entienden código rápido
- Cambios son más seguros
- Menos dependencia de personas
- Usuarios entienden cómo usar
- Fácil de mantener y escalar
Sin documentación:
- Código inexplicable
- Cambios rompen cosas
- Solo una persona sabe
- Usuarios no saben qué hacer
- Deuda técnica crece
Actividades¶
-
AC907. Elige una aplicación que usas regularmente (Spotify, Gmail, Whatsapp, etc.).
Tu tarea: Escribe un manual de usuario para una funcionalidad específica dirigido a usuarios sin experiencia técnica.
Incluye:
- Introducción: Qué es la funcionalidad
- Requisitos previos: Qué necesitas antes
- Pasos paso a paso: Números, claros, simples
- Capturas de pantalla o descripciones visuales
- Problemas comunes: Qué puede salir mal y cómo arreglarlo
- Preguntas frecuentes: 3-5 FAQs
Requisitos:
- Máximo 2 páginas
- Lenguaje simple (sin jerga técnica)
- Una persona sin experiencia debe entenderlo sin problemas
- Incluir ejemplos concretos
Nota: Escrito por ti, no por IA. Demuestra que entiendes la funcionalidad.
-
AC908. Coge un proyecto/código que hayas escrito (de cualquier asignatura).
Tu tarea: Añade documentación de calidad:
- Javadoc: Documenta 5 métodos importantes con:
- Descripción clara de qué hace
- @param para cada parámetro
- @return explicando qué devuelve
- @throws si lanza excepciones
-
Comentarios: Añade comentarios explicando el "por qué" en partes complejas
-
README.md: Crea un README que incluya:
- Descripción del proyecto
- Requisitos para ejecutar
- Cómo instalar/ejecutar
- Estructura del proyecto
- Ejemplos de uso
- Especificación de diseño: Documenta: - Arquitectura general (diagrama si es posible) - Decisiones de diseño importantes - Patrones usados
Entrega: Código documentado + archivos de documentación (README, especificación)
Criterios de evaluación:
- ¿Es clara la documentación?
- ¿Es concisa (sin información innecesaria)?
- ¿Es consistente (mismo estilo)?
- ¿Es accesible (fácil de leer)?
- ¿Permite a otros entender tu código?