1. Documentar una aplicación
Una aplicación sin documentación es difícil de usar, de instalar y de mantener. La documentación forma parte del producto: se planifica, se escribe mientras se desarrolla y se actualiza con cada versión.
Tres lectores, tres documentaciones 📚
| Documento | Contenido | Formato habitual |
|---|---|---|
| Documentación del código | Qué hace cada clase y método, parámetros, excepciones | Javadoc, KDoc (Dokka), comentarios |
| Documentación técnica / de diseño | Requisitos, arquitectura, modelo de datos, diagramas UML, decisiones | Markdown en el repositorio, wiki, Confluence |
| README | Qué es, cómo instalarlo y ejecutarlo, cómo contribuir, licencia | Markdown en la raíz del proyecto |
| Guía de instalación y configuración | Requisitos, pasos, parámetros, resolución de problemas | PDF, web |
| Manual de usuario | Tareas explicadas paso a paso con capturas | PDF, web, ayuda integrada |
| Ayuda en línea / contextual | Ayuda de la pantalla o el campo actual | Tooltips, F1, panel de ayuda, sistema de ayuda HTML |
| Notas de la versión (changelog) | Novedades, correcciones y cambios incompatibles | CHANGELOG.md, página de novedades |
| Tutoriales y FAQ | Primeros pasos, casos concretos, dudas frecuentes | Web, vídeo |
2. Documentar el código: Javadoc y KDoc
Los comentarios de documentación se escriben junto al código y una herramienta genera con ellos una web de referencia (la documentación de la API de Java está hecha así). Se documenta qué hace y cómo usarlo, no cómo está programado por dentro.
1/**
2 * Comprueba los datos introducidos en los formularios de la aplicación.
3 * <p>
4 * Todos los métodos son estáticos y no modifican sus argumentos.
5 *
6 * @author Equipo de interfaces
7 * @version 2.1
8 * @since 1.0
9 * @see java.util.regex.Pattern
10 */
11public final class Validador {
12
13 /**
14 * Indica si un NIF español tiene formato válido y su letra de control es correcta.
15 *
16 * @param nif el NIF a comprobar, con o sin espacios; no puede ser {@code null}
17 * @return {@code true} si el NIF es válido
18 * @throws NullPointerException si {@code nif} es {@code null}
19 */
20 public static boolean nifValido(String nif) { … }
21
22 /**
23 * Calcula el precio con descuento.
24 *
25 * @param precio precio original en euros, mayor o igual que 0
26 * @param descuento porcentaje de descuento entre 0 y 100
27 * @return el precio con el descuento aplicado, redondeado a 2 decimales
28 * @throws IllegalArgumentException si algún valor está fuera de rango
29 * @deprecated usar {@link Tarifas#aplicarDescuento(double, int)}
30 */
31 @Deprecated
32 public static double conDescuento(double precio, int descuento) { … }
33}1javadoc -d docs -author -version -encoding UTF-8 -charset UTF-8 -sourcepath src -subpackages com.empresa
2mvn javadoc:javadoc # con Maven: target/site/apidocs
3./gradlew dokkaHtml # Kotlin (KDoc) con Dokka- Etiquetas:
@param,@return,@throws,@see,@since,@deprecated,{@link},{@code}. - La primera frase es el resumen: aparece en los listados.
- En Kotlin (KDoc) se usa Markdown y las mismas etiquetas; en C# comentarios XML (
///); en JavaScript/TypeScript, JSDoc/TSDoc. - El README y la documentación de diseño viven en el repositorio (carpeta
docs/) y se publican con MkDocs, Docusaurus o GitHub Pages.
3. El manual de usuario
El manual explica cómo realizar tareas, no cómo es cada pantalla. Está escrito para alguien que no sabe programar, con el vocabulario del usuario.
- Introducción: para qué sirve la aplicación, a quién va dirigida y convenciones del manual.
- Requisitos e instalación (o cómo acceder, si es web).
- Primeros pasos: iniciar sesión, la pantalla principal, menús.
- Tareas: un apartado por tarea («Dar de alta un cliente», «Emitir una factura»), con pasos numerados, capturas señaladas y el resultado esperado.
- Mensajes de error y qué hacer ante cada uno.
- Preguntas frecuentes, glosario, índice y contacto de soporte.
Buenas prácticas
4. Ayuda integrada en la aplicación
La mejor ayuda es la que aparece en el momento y en el lugar en que se necesita, sin salir de la aplicación.
| Tipo | Ejemplo | Implementación |
|---|---|---|
| Tooltip | Al pasar el ratón sobre un icono | JavaFX Tooltip, Swing setToolTipText, HTML title, Android tooltipText |
| Texto de ayuda del campo | «8 números y una letra» bajo el NIF | Etiquetas de ayuda y placeholder (sin sustituir a la etiqueta) |
| Ayuda contextual (F1) | Abre la ayuda de la pantalla o campo actual | Atajo de teclado que abre la página de ayuda asociada |
| Asistentes (wizards) | Configuración inicial paso a paso | Diálogos encadenados |
| Recorrido guiado (onboarding) | Burbujas que señalan las partes de la interfaz la primera vez | Librerías como Shepherd.js o componentes propios |
| Mensajes de error útiles | «El NIF debe tener 9 caracteres (tiene 8)» | Explicar qué ha pasado y cómo solucionarlo |
| Sistema de ayuda | Ventana de ayuda con índice y buscador | HTML generado (Help+Manual, MkDocs), JavaHelp, CHM en Windows |
1// JavaFX: tooltip y ayuda contextual con F1
2TextField nif = new TextField();
3nif.setTooltip(new Tooltip("8 números y una letra, sin espacios"));
4nif.setUserData("ayuda/clientes.html#nif"); // página de ayuda de este campo
5
6scene.getAccelerators().put(new KeyCodeCombination(KeyCode.F1), () -> {
7 Node foco = scene.getFocusOwner();
8 String pagina = (foco != null && foco.getUserData() != null) ? (String) foco.getUserData() : "ayuda/indice.html";
9 WebView vista = new WebView();
10 vista.getEngine().load(getClass().getResource("/" + pagina).toExternalForm());
11 Stage ventana = new Stage();
12 ventana.setTitle("Ayuda");
13 ventana.setScene(new Scene(vista, 700, 500));
14 ventana.show();
15});Cada campo del formulario tiene un atributo data-ayuda con su explicación. Implementa la ayuda contextual: • Guarda cuál es el último elemento que ha recibido el foco (evento focusin). Al pulsar F1, si ese elemento tiene ayuda, muéstrala en #panel-ayuda (y quita el atributo hidden del panel). Evita la ayuda del navegador con preventDefault. • Si no hay ningún campo con ayuda enfocado, muestra «Selecciona un campo para ver su ayuda». • Al pulsar Escape, oculta el panel. • Además, cada campo debe tener como title su texto de ayuda (tooltip).
5. Guías de instalación y control de versiones de la documentación
1# GestiónClientes
2
3Aplicación de escritorio (JavaFX) para gestionar los clientes y las facturas de una pyme.
4
5## Requisitos
6- Windows 10/11, macOS 13+ o Linux x64
7- 4 GB de RAM · MySQL 8 o MariaDB 10.6
8
9## Instalación
101. Descarga el instalador de la [última versión](https://github.com/empresa/gestion/releases).
112. Ejecuta `GestionClientes-2.1.0.msi` y sigue el asistente.
123. En el primer arranque indica los datos de conexión a la base de datos.
13
14## Desarrollo
15```bash
16git clone https://github.com/empresa/gestion.git
17mvn javafx:run
18```
19
20## Licencia
21MIT — véase [LICENSE](LICENSE).1## [2.1.0] - 2025-09-30
2### Añadido
3- Exportación de facturas a Excel.
4### Corregido
5- La búsqueda de clientes ignoraba las tildes (#142).
6
7## [2.0.0] - 2025-06-12
8### Cambiado
9- Nueva interfaz con modo oscuro. **Incompatible**: requiere Java 21.- Numera las versiones con versionado semántico (MAYOR.MENOR.PARCHE): mayor si rompe la compatibilidad, menor si añade funciones, parche si corrige errores.
- Guarda la documentación en el mismo repositorio que el código para que evolucionen juntos y se revise en cada pull request.
- Indica en cada documento a qué versión corresponde y su fecha.
6. Ejercicios
Documenta una clase con Javadoc
Añade los comentarios Javadoc completos (clase, constructor y métodos, con todas las etiquetas necesarias) a esta clase y genera la documentación HTML: public class Carrito { private final List<Linea> lineas = new ArrayList<>(); public Carrito() { } public void añadir(Producto p, int cantidad) { if (cantidad <= 0) throw new IllegalArgumentException("Cantidad no válida"); lineas.add(new Linea(p, cantidad)); } public double total() { return lineas.stream().mapToDouble(Linea::importe).sum(); } public boolean estaVacio() { return lineas.isEmpty(); } }
Manual de usuario de una tarea
Escribe el apartado del manual de usuario «Emitir una factura» de una aplicación de gestión. Debe tener: objetivo, requisitos previos, pasos numerados con los nombres exactos de los botones, el resultado esperado, dos mensajes de error posibles con su solución y una nota de consejo. Indica dónde irían las capturas.