Herramientas de usuario

Herramientas del sitio


clase:daw:daw-proyecto:tema01

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
clase:daw:daw-proyecto:tema01 [2026/10/14 13:22] – Specification e Implementation con Forma A (SDD) y Forma B (Plan) por separado; Testing con los cuatro tipos y los tres verbos: unit create sin argumento, arch <reglas>, api/e2e <escenarios> claudeclase:daw:daw-proyecto:tema01 [2026/10/14 14:08] (actual) – Tema nuevo «2. IA y agentes»: los temas 2 a 7 pasan a ser 3 a 8, con sus referencias cruzadas renumeradas claude
Línea 74: Línea 74:
 === Forma B: Plan === === Forma B: Plan ===
  
-El #13 de la tarde, un filtro por provincia en el listado, no es un CRUD: una spec entera sería más papel que código. Se pone el agente en **modo plan** (en el que solo lee: no toca nada) y se le pide el cambio. El agente lee el código y escribe un plan de tareas en ''.kiro/specs/13-filtro-provincia/plan_filtro-provincia.md'':+Cuando el issue no es un CRUD (por ejemplo, el #13: un filtro por provincia en el listado de clientes), en vez de usar SDD se crea directamente un **plan**. Se pone el agente en **modo plan**, en el que solo lee y no toca código, y se le dice lo que se quiere y que escriba el plan en ''plan_filtro-provincia.md''. El agente lee el código, pregunta lo que no esté claro y deja en ese fichero la lista de tareas:
  
 <code> <code>
Línea 81: Línea 81:
 </code> </code>
  
-Se lee y se corrige igual que la spec: que no falte una tarea y que cada una se pueda hacer y probar sola.+Al salir del modo plan, el fichero queda guardado en el worktree. Se lee y se corrige igual que la spec: que no falte una tarea y que cada una se pueda hacer y probar sola. Y aquí acaba la fase: el plan **no se implementa en esta conversación**. Si se hiciera, el contexto estaría lleno de todo lo que el agente ha leído para planificar, y eso empeora lo que programa después.
  
 ==== 3. Implementation ==== ==== 3. Implementation ====
Línea 104: Línea 104:
  
 <code> <code>
-/code impl .kiro/specs/13-filtro-provincia/plan_filtro-provincia.md+/code impl plan_filtro-provincia.md
 </code> </code>
  
-Implementa las tareas del plan que se le pasa.+Implementa las tareas del plan que se le pasa, en una conversación nueva que solo contiene el plan y el código que toca, no la planificación.
  
 En las dos el agente va tarea a tarea: escribe la migración, las clases del backend en sus capas, el componente de Angular y los datos de prueba, siguiendo las **convenciones del proyecto** que tiene escritas. Después de cada tarea pasa los tests unitarios y de arquitectura y la marca como hecha en el fichero de tareas. Mientras tanto no se escribe código: se revisa lo que va saliendo. En las dos el agente va tarea a tarea: escribe la migración, las clases del backend en sus capas, el componente de Angular y los datos de prueba, siguiendo las **convenciones del proyecto** que tiene escritas. Después de cada tarea pasa los tests unitarios y de arquitectura y la marca como hecha en el fichero de tareas. Mientras tanto no se escribe código: se revisa lo que va saliendo.
Línea 130: Línea 130:
 </code> </code>
  
-''unit create'' no lleva nada: genera los tests unitarios de todas las clases que no los tienen (o de la clase o el paquete que se le indique), uno por comportamiento. ''arch create'' recibe las reglas de arquitectura en castellano y las convierte en tests de ArchUnit; se lanza al empezar el proyecto y cuando cambia una regla. ''api create'' y ''e2e create'' reciben los **escenarios** que hay que probar: para la API, cada endpoint con sus errores (alta válida, NIF repetido, sin nombre); para los E2E, los criterios de aceptación de la spec. Cada test se ejecuta al crearlo y se deja pasando.+  * ''unit create'': sin argumento, genera los tests unitarios de todas las clases que no los tienen, uno por comportamiento. Con una clase o un paquete, solo esos. 
 +  * ''arch create <reglas>'': recibe las reglas de arquitectura en castellano y las convierte en tests de ArchUnit. Se lanza al empezar el proyecto y cuando cambia una regla. 
 +  * ''api create <escenarios>'': recibe los escenarios que hay que probar en la API: cada endpoint con sus errores (alta válida, NIF repetido, sin nombre). 
 +  * ''e2e create <escenarios>'': recibe los escenarios de extremo a extremo; lo normal, los criterios de aceptación de la spec. 
 + 
 +Cada test se ejecuta al crearlo y se deja pasando.
  
 Después, lanzarlos a mano, uno a uno, para verlo: Después, lanzarlos a mano, uno a uno, para verlo:
Línea 141: Línea 146:
 </code> </code>
  
-Todo en verde. Después abre ''%%http://localhost:4212%%'', da de alta un cliente, prueba un NIF repetido. El mensaje de error no le gusta y lo pide en la misma conversación. ''./app.sh start'' y listo. Pero el cambio del mensaje rompe el test E2E que comprobaba el texto antiguo. Para eso está el tercer verbo, uno por tipo:+Todo en verde. Después se abre ''%%http://localhost:4212%%'', se da de alta un cliente, se prueba un NIF repetido. El mensaje de error no convence y se pide cambiarlo en la misma conversación. ''./app.sh start'' y listo. Pero el cambio del mensaje rompe el test E2E que comprobaba el texto antiguo. Para eso está el tercer verbo, uno por tipo:
  
 <code> <code>
Línea 150: Línea 155:
 </code> </code>
  
-Hoy solo hace falta el último. El agente mira por qué falla: el test está desactualizado por un cambio **intencionado** del código, así que actualiza el test. Si hubiera sido un error del código, habría arreglado el código y no el test. Y si no lo tuviera claro, no tocaría nada y preguntaría.+Como lo que ha fallado es un test E2E, se lanza ''/test e2e repair''. El agente mira por qué falla: el test está desactualizado por un cambio **intencionado** del código, así que actualiza el test. Si hubiera sido un error del código, habría arreglado el código y no el test. Y si no lo tuviera claro, no tocaría nada y preguntaría.
  
 ==== 5. Review & Finish ==== ==== 5. Review & Finish ====
Línea 225: Línea 230:
  
 ^ Tema ^ Pieza ^ Lo que hace posible ^ ^ Tema ^ Pieza ^ Lo que hace posible ^
-| 2 | Repositorio con instrucciones para el agente, tablero de issues y la skill ''/git-flow'' | Pasos 1, 5 y 6: ramas, worktrees, commits, cierre del issue, publicación | +| 2 | Qué es un agente, Claude Code y OpenCode, skills, MCP, subagentes y bucles | El vocabulario con el que se entiende todo lo demás | 
-| 3 | La aplicación en Docker, una copia por worktree, con datos de prueba, y el script ''app.sh'' | Paso 1: la aplicación propia en su puerto | +| 3 | Repositorio con instrucciones para el agente, tablero de issues y la skill ''/git-flow'' | Pasos 1, 5 y 6: ramas, worktrees, commits, cierre del issue, publicación | 
-| 4 | La skill ''/sdd'' sobre cc-sdd, ''/code impl'' para los planes y el steering con la arquitectura del proyecto | Pasos 2 y 3: especificar o planificar, y que el código salga como tiene que salir | +| 4 | La aplicación en Docker, una copia por worktree, con datos de prueba, y el script ''app.sh'' | Paso 1: la aplicación propia en su puerto | 
-| 5 | La skill ''/test'' y ''/code review'' | Pasos 4 y 5: los tests, la revisión y sus correcciones, y que ''finish'' pueda comprobar que todo está | +| 5 | La skill ''/sdd'' sobre cc-sdd, ''/code impl'' para los planes y el steering con la arquitectura del proyecto | Pasos 2 y 3: especificar o planificar, y que el código salga como tiene que salir | 
-| 6 | CI y despliegue automático, con el mismo ''app.sh'' | Pasos 5 y 6: CI en cada push, despliegue al publicar | +| 6 | La skill ''/test'' y ''/code review'' | Pasos 4 y 5: los tests, la revisión y sus correcciones, y que ''finish'' pueda comprobar que todo está | 
-| 7 | Resumen y lista de comprobación | Todo junto, para tenerlo a mano en la 2ª evaluación |+| 7 | CI y despliegue automático, con el mismo ''app.sh'' | Pasos 5 y 6: CI en cada push, despliegue al publicar | 
 +| 8 | Resumen y lista de comprobación | Todo junto, para tenerlo a mano en la 2ª evaluación |
  
 Las **skills** son las instrucciones que le dicen al agente cómo se hace cada cosa en este proyecto. Las escribe el alumno durante el trimestre, con ayuda del propio agente, y son lo que convierte una lista de pasos en una sola orden. Lo que no necesita inteligencia (arrancar, parar, ver los logs) no es una skill: es un script. Las **skills** son las instrucciones que le dicen al agente cómo se hace cada cosa en este proyecto. Las escribe el alumno durante el trimestre, con ayuda del propio agente, y son lo que convierte una lista de pasos en una sola orden. Lo que no necesita inteligencia (arrancar, parar, ver los logs) no es una skill: es un script.
Línea 236: Línea 242:
 ===== Herramientas ===== ===== Herramientas =====
  
-Todo esto tiene que estar instalado y funcionando antes del tema 2:+Todo esto tiene que estar instalado y funcionando antes del tema 3:
  
-  * **git** y **gh** (la CLI de GitHub) autenticado: ''gh auth status'' debe decir que estás conectado. En Windows, Git se instala con las opciones del tema 2, que traen **bash**: el script del proyecto es de bash y funciona igual en los tres sistemas.+  * **git** y **gh** (la CLI de GitHub) autenticado: ''gh auth status'' debe decir que estás conectado. En Windows, Git se instala con las opciones del tema 3, que traen **bash**: el script del proyecto es de bash y funciona igual en los tres sistemas.
   * **Docker** con Docker Compose: ''docker compose version''.   * **Docker** con Docker Compose: ''docker compose version''.
   * **JDK 25** y **Maven**: ''mvn -v''.   * **JDK 25** y **Maven**: ''mvn -v''.
Línea 254: Línea 260:
 ==== Ejercicio 2 ==== ==== Ejercicio 2 ====
   * Crea en GitHub el repositorio de tu proyecto, vacío, con ''README'' y ''.gitignore''. Es el que se usa en todo el módulo.   * Crea en GitHub el repositorio de tu proyecto, vacío, con ''README'' y ''.gitignore''. Es el que se usa en todo el módulo.
-  * Clónalo y pide al agente que genere en ''backend/'' un Spring Boot con Maven y Java 25, **sin JPA** (la base de datos llega en el tema 3), con un ''GET /api/hola'' que devuelva un texto, y en ''frontend/'' un Angular que lo llame y lo muestre.+  * Crea el tablero del proyecto: en GitHub, menú ''+'' de arriba a la derecha → //New project// → //Start from scratch// → plantilla **Board** → nombre del proyecto → //Create//. Salen las tres columnas, //Todo//, //In Progress// y //Done//. Después, en la pestaña //Projects// del repositorio, //Link a project// para enlazarlo. 
 +  * Clónalo y pide al agente que genere en ''backend/'' un Spring Boot con Maven y Java 25, **sin JPA** (la base de datos llega en el tema 4), con un ''GET /api/hola'' que devuelva un texto, y en ''frontend/'' un Angular que lo llame y lo muestre.
   * Arranca los dos a mano, ''mvn spring-boot:run'' y ''ng serve'', y comprueba en el navegador que el texto aparece.   * Arranca los dos a mano, ''mvn spring-boot:run'' y ''ng serve'', y comprueba en el navegador que el texto aparece.
   * Haz commit y push. En este tema los commits se hacen a mano: ''/git-flow'' llega en el siguiente.   * Haz commit y push. En este tema los commits se hacen a mano: ''/git-flow'' llega en el siguiente.
  
clase/daw/daw-proyecto/tema01.1791976924.txt.gz · Última modificación: por claude · Actualmente bloqueado por: Lorenzo