academia/docs/PLAN_ACTIVIDADES.md

17 KiB

Plan de Actividades - Prueba Técnica Senior .NET/Angular

Información del Proyecto

  • Cargo: Desarrollador Master .NET/Angular
  • Empresa: Inter Rapidísimo
  • Proyecto: Sistema de Registro de Estudiantes
  • Stack: .NET 10 + GraphQL (HotChocolate) + Angular 21 + SQL Server

Procesos de Fábrica de Software

Código Proceso Descripción
AN Análisis Levantamiento de requisitos, historias de usuario
DI Diseño Arquitectura, modelos, prototipos UI/UX
DE Desarrollo Codificación, implementación
QA Quality Assurance Testing, revisión de código
DV DevOps CI/CD, containerización, despliegue
DO Documentación Técnica, usuario, API
SE Seguridad Validaciones, autenticación, OWASP

Tabla de Actividades

Fase 1: Análisis y Planificación (AN)

# Actividad Detalle Rol Proceso
1.1 Análisis de requisitos funcionales Identificar y documentar los 9 requisitos del enunciado, criterios de aceptación por cada uno Analista AN
1.2 Identificación de reglas de negocio Documentar restricciones: máx 3 materias, 3 créditos/materia, 5 profesores con 2 materias c/u, restricción de profesor único Analista AN
1.3 Definición de historias de usuario Crear historias con formato "Como [rol] quiero [acción] para [beneficio]" con criterios de aceptación Product Owner AN
1.4 Análisis de requisitos no funcionales Definir: rendimiento (<200ms respuesta), seguridad (OWASP Top 10), usabilidad (responsive), mantenibilidad Arquitecto AN
1.5 Identificación de riesgos técnicos Mapear riesgos: complejidad de validaciones, integración frontend-backend, manejo de concurrencia Líder Técnico AN

Fase 2: Diseño de Arquitectura (DI)

# Actividad Detalle Rol Proceso
2.1 Diseño de arquitectura backend Definir Clean Architecture: Domain, Application, Infrastructure, GraphQL. Diagrama de capas y dependencias Arquitecto Backend DI
2.2 Diseño del modelo de dominio Crear diagrama de entidades: Student, Subject, Professor, Enrollment. Definir agregados y value objects Arquitecto Backend DI
2.3 Diseño de base de datos Modelo E-R normalizado (3FN), índices, constraints, scripts DDL con integridad referencial DBA/Arquitecto DI
2.4 Diseño de esquema GraphQL Definir Types, Queries, Mutations, Inputs, Payloads. Diseñar resolvers y DataLoaders para N+1 Arquitecto Backend DI
2.5 Diseño de arquitectura frontend Definir estructura Angular: standalone components, signals, lazy loading, Apollo Client para GraphQL Arquitecto Frontend DI
2.6 Diseño de componentes UI Wireframes de pantallas: listado estudiantes, formulario inscripción, selección materias, vista compañeros UI/UX Designer DI
2.7 Definición de contratos GraphQL Schema GraphQL completo, DTOs de request/response, interfaces de servicios, contratos entre capas Arquitecto DI
2.8 Diseño de estrategia de manejo de errores Definir excepciones de dominio, error handling en GraphQL (Union types para errores), respuestas estandarizadas Arquitecto DI

Fase 3: Configuración del Entorno (DV)

# Actividad Detalle Rol Proceso
3.1 Inicialización del repositorio Crear estructura de carpetas, .gitignore, README, CLAUDE.md con convenciones del proyecto DevOps DV
3.2 Configuración solución .NET Crear solución con 4 proyectos (Domain, Application, Infrastructure, GraphQL), referencias entre proyectos Backend Dev DV
3.3 Configuración proyecto Angular ng new con standalone, configurar ESLint, Prettier, paths aliases, Apollo Angular para GraphQL Frontend Dev DV
3.4 Configuración de base de datos Docker compose para SQL Server, scripts de inicialización, connection strings por ambiente DevOps/DBA DV
3.5 Configuración de variables de entorno User secrets para desarrollo, appsettings por ambiente, environment.ts en Angular DevOps DV
3.6 Configuración de herramientas de calidad EditorConfig, .NET analyzers, ESLint rules, Husky para pre-commit hooks DevOps DV

Fase 4: Desarrollo Backend (DE)

# Actividad Detalle Rol Proceso
4.1 Implementar capa Domain Entidades (Student, Subject, Professor, Enrollment), Value Objects, interfaces de repositorios, excepciones de dominio Backend Dev DE
4.2 Implementar reglas de negocio en Domain Validaciones en entidades: EnrollmentPolicy (max 3 materias), ProfessorConstraint (no repetir profesor) Backend Dev DE
4.3 Implementar capa Application - DTOs Records inmutables para requests/responses, mappers con Mapster o extension methods Backend Dev DE
4.4 Implementar capa Application - Servicios StudentService, EnrollmentService con casos de uso: Create, Update, Delete, GetAll, GetById, GetClassmates Backend Dev DE
4.5 Implementar validadores FluentValidation Validators para CreateStudentInput, EnrollStudentInput con reglas de negocio Backend Dev DE
4.6 Implementar capa Infrastructure - DbContext Configurar EF Core 10, Fluent API para mapeos, configuraciones de entidades, seeding de datos iniciales Backend Dev DE
4.7 Implementar capa Infrastructure - Repositorios Repositorios genérico y específicos, Unit of Work, queries optimizadas con Include/ThenInclude Backend Dev DE
4.8 Implementar GraphQL Types StudentType, SubjectType, ProfessorType, EnrollmentType con HotChocolate Backend Dev DE
4.9 Implementar GraphQL Queries Resolvers para: students, student(id), subjects, availableSubjects(studentId), classmates(studentId), professors Backend Dev DE
4.10 Implementar GraphQL Mutations createStudent, updateStudent, deleteStudent, enrollStudent, unenrollStudent con Payloads de respuesta Backend Dev DE
4.11 Implementar DataLoaders DataLoaders para evitar N+1: StudentByIdDataLoader, SubjectByIdDataLoader, ProfessorByIdDataLoader Backend Dev DE
4.12 Implementar middleware de errores ExceptionHandlingMiddleware, mapeo de excepciones de dominio a errores GraphQL Backend Dev DE
4.13 Configurar Dependency Injection Registrar servicios por capa en Program.cs, configurar HotChocolate con servicios Backend Dev DE
4.14 Implementar migraciones EF Core Crear migración inicial, script de seed para profesores y materias predefinidas Backend Dev DE

Fase 5: Desarrollo Frontend (DE)

# Actividad Detalle Rol Proceso
5.1 Configurar Apollo Angular Instalar apollo-angular, configurar ApolloModule con endpoint GraphQL, cache policies Frontend Dev DE
5.2 Implementar GraphQL Queries en Angular Archivos .graphql o queries en TypeScript para students, subjects, classmates Frontend Dev DE
5.3 Implementar GraphQL Mutations en Angular Mutations para crear/editar estudiante, inscribir/desinscribir materias Frontend Dev DE
5.4 Implementar capa Core - Servicios StudentService, SubjectService, EnrollmentService usando Apollo Client Frontend Dev DE
5.5 Implementar capa Core - Interceptores HttpErrorInterceptor para manejo global de errores, LoadingInterceptor para indicador de carga Frontend Dev DE
5.6 Implementar capa Shared - Componentes UI ButtonComponent, InputComponent, CardComponent, TableComponent, ModalComponent, AlertComponent Frontend Dev DE
5.7 Implementar capa Shared - Directivas y Pipes HighlightDirective, TooltipDirective, TruncatePipe, CreditsPipe Frontend Dev DE
5.8 Implementar feature Students - Listado Tabla con estudiantes usando Apollo watchQuery, búsqueda, paginación, acciones CRUD Frontend Dev DE
5.9 Implementar feature Students - Formulario Reactive form para crear/editar estudiante con validaciones, mutation de Apollo Frontend Dev DE
5.10 Implementar feature Enrollment - Selección materias Componente con query availableSubjects, validación visual de restricción de profesor, contador de créditos Frontend Dev DE
5.11 Implementar feature Enrollment - Vista compañeros Query classmates con listado de nombres por materia inscrita Frontend Dev DE
5.12 Implementar gestión de estado Signals para estado local, Apollo cache para estado del servidor, optimistic updates Frontend Dev DE
5.13 Implementar manejo de errores UI Toast notifications, estados de error en formularios, manejo de errores GraphQL Frontend Dev DE
5.14 Implementar responsive design CSS con mobile-first, breakpoints para tablet/desktop, Angular Material responsive Frontend Dev DE
5.15 Implementar loading states Skeletons, spinners, estados de carga con Apollo loading state Frontend Dev DE

Fase 6: Integración GraphQL (DE)

# Actividad Detalle Rol Proceso
6.1 Configurar CORS Permitir origen del frontend en desarrollo y producción, headers para GraphQL Backend Dev DE
6.2 Configurar Banana Cake Pop Playground integrado de HotChocolate para testing de queries/mutations Backend Dev DE
6.3 Implementar health checks Endpoint /health para verificar conectividad a BD y servicios Backend Dev DE
6.4 Configurar Apollo DevTools Habilitar Apollo DevTools en desarrollo para debugging de queries y cache Frontend Dev DE
6.5 Implementar caché de Apollo Configurar cache policies: cache-first para datos estáticos, network-only para datos dinámicos Frontend Dev DE
6.6 Generar tipos TypeScript Usar GraphQL Code Generator para generar tipos desde el schema GraphQL Frontend Dev DE

Fase 7: Seguridad (SE)

# Actividad Detalle Rol Proceso
7.1 Implementar validación de entrada Sanitización de inputs, validación en frontend y backend, prevención de inyección Security Dev SE
7.2 Configurar headers de seguridad Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, HSTS Security Dev SE
7.3 Implementar rate limiting Limitar requests por IP para prevenir DoS, configurar en middleware GraphQL Security Dev SE
7.4 Configurar query complexity Limitar profundidad y complejidad de queries GraphQL para prevenir ataques Security Dev SE
7.5 Validar OWASP Top 10 Revisar: Injection, Broken Auth, XSS, Insecure Design, Security Misconfiguration Security Dev SE
7.6 Configurar logging seguro No loguear datos sensibles, structured logging con Serilog, niveles apropiados Security Dev SE

Fase 8: Testing (QA)

# Actividad Detalle Rol Proceso
8.1 Unit tests - Domain Tests para reglas de negocio: validación max 3 materias, restricción profesor, cálculo créditos QA/Backend Dev QA
8.2 Unit tests - Application Tests para servicios, mappers, validators usando mocks de repositorios QA/Backend Dev QA
8.3 Integration tests - GraphQL Tests de queries y mutations con WebApplicationFactory, base de datos in-memory QA/Backend Dev QA
8.4 Unit tests - Angular Components Tests con Jest/Jasmine para componentes, servicios con Apollo testing utilities QA/Frontend Dev QA
8.5 E2E tests Tests con Playwright para flujos críticos: registro estudiante, inscripción materias QA QA
8.6 Tests de reglas de negocio Casos de prueba específicos para restricciones: intentar 4ta materia, mismo profesor QA QA
8.7 Code review Revisión de código aplicando checklist: SOLID, Clean Code, convenciones, seguridad Líder Técnico QA
8.8 Análisis de código estático Ejecutar analyzers .NET, ESLint, corregir code smells, vulnerabilidades, duplicación QA QA

Fase 9: Optimización y Rendimiento (DE)

# Actividad Detalle Rol Proceso
9.1 Optimizar queries EF Core Revisar N+1 (usar DataLoaders), AsNoTracking para lecturas, proyecciones con Select, índices en BD Backend Dev DE
9.2 Implementar caché backend Response caching para queries estáticas, memory cache para datos frecuentes Backend Dev DE
9.3 Optimizar bundle Angular Lazy loading de rutas, tree shaking, análisis de bundle size Frontend Dev DE
9.4 Optimizar rendimiento UI OnPush change detection, trackBy en ngFor, debounce en búsquedas Frontend Dev DE
9.5 Comprimir assets Minificación CSS/JS, compresión gzip/brotli DevOps DE

Fase 10: Documentación (DO)

# Actividad Detalle Rol Proceso
10.1 Documentar arquitectura Diagrama C4 (Context, Container, Component), decisiones de arquitectura (ADR) Arquitecto DO
10.2 Documentar esquema GraphQL Schema completo con descripciones, ejemplos de queries/mutations en Banana Cake Pop Backend Dev DO
10.3 Documentar modelo de datos Diagrama E-R, diccionario de datos, scripts de creación comentados DBA DO
10.4 README del proyecto Instrucciones de instalación, configuración, ejecución, estructura del proyecto Líder Técnico DO
10.5 Documentar decisiones técnicas Por qué Clean Architecture, por qué GraphQL vs REST, por qué Signals vs RxJS Arquitecto DO
10.6 Manual de despliegue Pasos para deploy, variables de entorno requeridas, checklist pre-producción DevOps DO

Fase 11: Entrega y Despliegue (DV)

# Actividad Detalle Rol Proceso
11.1 Configurar Dockerfile GraphQL Multi-stage build, imagen optimizada, health check, non-root user DevOps DV
11.2 Configurar Dockerfile frontend Build con Node, serve con Nginx, configuración de proxy para GraphQL DevOps DV
11.3 Crear docker-compose Orquestación de GraphQL API, frontend, SQL Server, configuración de red y volúmenes DevOps DV
11.4 Pruebas de despliegue Verificar funcionamiento end-to-end en ambiente containerizado DevOps/QA DV
11.5 Preparar entregables Empaquetar código fuente, scripts BD, documentación, instrucciones de ejecución Líder Técnico DV
11.6 Validación final Checklist de requisitos cumplidos, demo funcional, revisión de calidad Líder Técnico DV

Resumen por Proceso

Proceso Actividades Peso
Análisis (AN) 5 5%
Diseño (DI) 8 15%
DevOps (DV) 12 10%
Desarrollo Backend (DE) 14 30%
Desarrollo Frontend (DE) 15 25%
Seguridad (SE) 6 5%
Testing (QA) 8 5%
Documentación (DO) 6 5%
TOTAL 74 100%

Criterios de Calidad Senior

Competencias Demostradas

Área Evidencia
Arquitectura Clean Architecture, separación de concerns, principios SOLID
GraphQL Schema bien diseñado, DataLoaders para N+1, error handling
Código Limpio Naming conventions, SRP, métodos pequeños, sin duplicación
Testing Cobertura de reglas críticas, tests unitarios y de integración
Seguridad OWASP compliance, validación de inputs, query complexity limits
Rendimiento Queries optimizadas, caching estratégico, Apollo cache
Mantenibilidad Código autodocumentado, arquitectura desacoplada, DTOs
DevOps Containerización, configuración por ambiente
Documentación Schema GraphQL documentado, README completo

Diferenciadores Senior vs Junior

Aspecto Junior Senior (Este proyecto)
Arquitectura Monolítico, acoplado Clean Architecture, capas bien definidas
API REST básico GraphQL con HotChocolate, DataLoaders
Validaciones Solo en frontend Frontend + Backend + Domain
Errores Try-catch genéricos Excepciones de dominio, Union types para errores
Testing Manual o ninguno Unit + Integration + E2E automatizados
Estado Frontend Variables globales Signals + Apollo Cache
BD EF directo en controller Repository + Unit of Work + Specifications
Seguridad Ninguna OWASP, headers, rate limiting, query complexity

Orden de Ejecución Recomendado

Bloque 1: Fundamentos
├── AN (1.1-1.5) → Requisitos claros
├── DI (2.1-2.8) → Arquitectura definida
└── DV (3.1-3.6) → Ambiente configurado

Bloque 2: Backend Core
├── DE (4.1-4.7) → Domain + Application + Infrastructure
└── DE (4.8-4.14) → GraphQL API funcional

Bloque 3: Frontend Core
├── DE (5.1-5.7) → Core + Shared + Apollo config
└── DE (5.8-5.15) → Features completas

Bloque 4: Integración
└── DE (6.1-6.6) → Frontend ↔ Backend conectados

Bloque 5: Calidad
├── SE (7.1-7.6) → Seguridad implementada
├── QA (8.1-8.8) → Tests ejecutados
└── DE (9.1-9.5) → Optimizaciones aplicadas

Bloque 6: Entrega
├── DO (10.1-10.6) → Documentación completa
└── DV (11.1-11.6) → Despliegue validado

Nota: Ejecutar los bloques secuencialmente. Dentro de cada bloque, las actividades pueden paralelizarse según disponibilidad de recursos.