P5 · Producto final
Publicado: semana 14 · Entrega: semana 16 (presentación y defensa oral) · En equipo, con partes individuales · Tag: p5
El semestre termina cuando el cliente recibe el producto y alguien que no es del equipo lo puede mantener. Esta entrega cierra el proyecto: una revisión de seguridad de la aplicación con OWASP Top 10, la entrega formal al cliente con su aceptación, la documentación para quien venga después, la licencia acordada, la retrospectiva final, el registro de uso de IA completo, la evaluación entre pares, la presentación final y la defensa oral.
Cubre las semanas 15 (seguridad y privacidad, ética, accesibilidad, licencias y procedencia del código generado) y 16 (mantenimiento, código heredado, deuda técnica y deprecación). La revisión de P5 vuelve a correr las de P1 a P4: el producto entregado sigue cumpliendo todo lo anterior.
1. Qué entregan
| Qué | Dónde | Quién |
|---|---|---|
| Revisión de seguridad | docs/seguridad.md |
Equipo |
| Entrega y aceptación del cliente | docs/entrega.md y la evidencia en docs/entrega/ |
Equipo |
| Documentación para quien mantenga el producto | README.md (y CONTRIBUTING.md si lo usan) |
Equipo |
| Licencia | LICENSE |
Equipo, con el cliente |
| Retrospectiva final | docs/retrospectiva-final.md |
Equipo |
| Registro de uso de IA completo | docs/registro-ia.md |
Equipo |
| Evaluación entre pares | En el formato que indique el docente, fuera del repositorio | Cada persona |
| Presentación final y demo | Semana 16, Sesión B | Equipo |
| Defensa oral | Semana 16, laboratorio | Cada persona |
docs/seguridad.md
Con lo de la semana 15, miren su aplicación como la
miraría un atacante: la lista OWASP Top 10:2025
aplicada a su aplicación, antes de entregarla al cliente. Una fila (o una
sección ###) por categoría, de A01 (Broken Access Control) a A10
(Mishandling of Exceptional Conditions), con qué miraron en su código, el
estado (Cumple, Parcial, No cumple o No aplica) y la evidencia (una
prueba, un archivo, una configuración) o lo que queda pendiente.
| Categoría | Qué miramos en nuestra app | Estado | Evidencia o pendiente |
|---|---|---|---|
| A05:2025 Injection | SQL con texto del usuario | Cumple | Todo el SQL usa parámetros (`src/repository.ts`) |
“No aplica” se justifica. “Parcial” dice qué falta y por qué se acepta el
riesgo por ahora; lo que no se corrija antes de la entrega va también a
## Pendientes de docs/entrega.md. Agreguen una sección sobre los datos
personales que guarda la aplicación: cuáles, por qué, quién los ve y cuándo se
borran.
docs/entrega.md
## Qué se entregó: la fecha de la entrega, la URL de producción, las historias terminadas (por id), los accesos que recibió el cliente y cualquier guía para su personal.## Aceptación del cliente: cómo aceptó el cliente el producto (un acta firmada, un correo, un mensaje), qué criterios acordados se cumplen y cuáles no. Enlaza la evidencia, guardada endocs/entrega/(por ejemplo[el correo](entrega/aceptacion-cliente.txt)o un PDF del acta firmada). Quiten de la evidencia los datos personales que no hacen falta (teléfonos, direcciones).## Pendientes: lo que queda por hacer, los errores conocidos y la deuda técnica reconocida, con la prioridad que acordaron con el cliente.
Si el cliente no acepta el producto, no lo escondan: ## Aceptación del cliente dice qué observó y qué hicieron. Lo que se espera es honestidad.
README.md para quien mantenga el producto
El README de P2 y P4 crece hasta ser lo que necesita una persona que hereda el
proyecto sin haber estado en el equipo. Además de ## Instalación,
## Convenciones y ## Despliegue, ahora tiene:
## Arquitectura: los módulos y qué hace cada uno, dónde están las reglas del negocio, cómo se guardan los datos, con enlaces al design doc y a los ADRs.## Cómo contribuir: cómo se prepara el entorno, el flujo de una rama al merge, qué se revisa en un pull request y cómo se registra el uso de IA. Puede ser corta y enlazar unCONTRIBUTING.md.## Licencia: la licencia y por qué se eligió con el cliente.
Una prueba útil: que alguien de otro equipo siga el README desde cero, en el contenedor del curso, y anote dónde se trabó.
LICENSE
El texto completo de la licencia que acordaron con el cliente (semana 15): una
licencia libre conocida (MIT, Apache-2.0, GPL-3.0, AGPL-3.0, MPL-2.0, …) o,
si el cliente lo pide, otra, con el motivo en ## Licencia. El
README de proyectos recuerda que el código queda en
el repositorio del equipo con una licencia acordada.
docs/retrospectiva-final.md
Sobre todo el semestre, con las retrospectivas de cada sprint a la vista:
## Qué funcionó: prácticas que repetirían, con un ejemplo concreto.## Qué no funcionó: con datos (pull requests que esperaron días, el incidente, la demo que salió mal) y la causa.## Qué aprendimos: lo que harían distinto en el próximo proyecto.## Uso de IA: dónde ayudaron las herramientas de IA, dónde fallaron, cómo verificaron lo que produjeron y qué cambió en su forma de usarlas.
docs/registro-ia.md completo
La tabla de P1 (Fecha, Herramienta, Qué se pidió, Qué se aceptó,
Qué se rechazó y por qué) con todo el semestre: cada fila con todas sus
celdas llenas (si no se rechazó nada, la celda lo dice). Si el equipo no usó
herramientas de IA, una fila lo declara. El registro se compara con el código y
con la defensa oral: un cambio grande hecho con una herramienta y sin registro
cuenta como no entregado (reglas generales).
Evaluación entre pares
Cada integrante evalúa, en privado y en el formato que indique el docente, el aporte de cada uno de los demás y el suyo: qué hizo, cómo colaboró, qué tan confiable fue. No va en el repositorio. Junto con la historia de Git, le muestra al equipo y al docente cómo se repartió el trabajo durante el semestre.
Presentación final, demo y defensa oral
- Presentación y demo (semana 16, Sesión B): el problema del cliente, el producto funcionando en producción con una historia completa, una decisión de diseño con sus alternativas, el incidente y lo que aprendieron. Si el cliente puede asistir, mejor.
- Defensa oral (semana 16, laboratorio, individual): el docente pregunta a cada integrante por cualquier parte del producto: una función, una prueba, un ADR, una entrada del registro de IA. Cualquiera tiene que poder explicar cualquier parte, la haya escrito a mano o con una herramienta.
2. Revisión automática
Dentro del contenedor del curso, desde la carpeta del repositorio del equipo, clonado dentro de la carpeta del curso (P1, sección 1):
cd /work/equipo-nombre
make -f /work/projects/p5-producto/Makefile check
Corre las reglas de P1 a P4 y estas:
| Regla | Qué revisa |
|---|---|
P5-SEGURIDAD |
docs/seguridad.md con las categorías A01 a A10, cada una con su estado |
P5-ENTREGA |
docs/entrega.md con sus tres secciones; ## Aceptación del cliente enlaza un archivo que existe en docs/entrega/ |
P5-README |
README.md con ## Arquitectura, ## Cómo contribuir y ## Licencia |
P5-LICENCIA |
LICENSE (o LICENSE.md, LICENSE.txt); aviso si no es una licencia conocida |
P5-RETRO |
docs/retrospectiva-final.md con sus cuatro secciones |
P5-REGISTRO-IA |
El registro de IA con al menos una fila y todas las celdas llenas |
La evaluación entre pares, la presentación y la defensa oral no están en el repositorio: las revisa el docente.
3. Cómo entregar
Con el tag p5, como en P1, antes de la presentación final. Desde el tag, el
repositorio no cambia salvo que el cliente pida una corrección (en un pull
request, con un tag p5.1).
4. Consejos y errores comunes
- Pedir la aceptación el último día. Coordinen con el cliente la fecha de la entrega desde la semana 14; si algo no le convence, todavía hay tiempo.
- Un README que solo entiende el equipo. “Corran el script” no sirve si no dice cuál, dónde ni con qué variables. Pruébenlo con alguien de afuera.
- Licencia sin conversar. El cliente tiene que entender qué permite la licencia (que otros usen el código, que el equipo lo muestre en su portafolio). Anoten la conversación.
- Completar el registro de IA al final, de memoria. Se nota. Si faltan entradas, digan cuáles y por qué, en vez de inventarlas.
- Defensa oral. Repasen juntos el código que escribió otra persona, sobre todo las reglas del negocio y las pruebas. “Eso lo hizo mi compañero” o “lo generó la herramienta” no es una respuesta.
- Una revisión de seguridad de lista. Marcar “Cumple” en las diez
categorías sin evidencia no es una revisión. Prueben de verdad lo que dicen:
una ruta del personal sin token, un
'en un campo de texto, un JSON roto. - Con IA. Una herramienta puede ayudar a redactar la documentación; lo que no puede es saber qué se le complicó al equipo ni qué necesita quien mantenga el producto. Verifiquen cada comando del README corriéndolo.