# AN-004: Requisitos No Funcionales **Proyecto:** Sistema de Registro de Estudiantes - Inter Rapidísimo **Rol:** Arquitecto de Software **Fecha:** 2026-01-07 --- ## 1. Resumen Este documento define los atributos de calidad (requisitos no funcionales) que el sistema debe cumplir, estableciendo métricas medibles y criterios de aceptación. --- ## 2. Requisitos No Funcionales ### RNF-001: Rendimiento - Tiempo de Respuesta | Atributo | Valor | |----------|-------| | **ID** | RNF-001 | | **Categoría** | Rendimiento | | **Prioridad** | Alta | | **Métrica** | Tiempo de respuesta < 200ms (P95) | **Descripción:** El sistema debe responder a las solicitudes del usuario en menos de 200 milisegundos en el percentil 95. **Criterios de Aceptación:** | Operación | Tiempo Máximo | |-----------|---------------| | Consulta lista de estudiantes | < 150ms | | Consulta catálogo materias | < 100ms | | Inscripción en materia | < 200ms | | Crear/actualizar estudiante | < 200ms | | Consulta compañeros de clase | < 150ms | **Medición:** - Herramienta: Application Insights / Logs estructurados - Ambiente: Producción simulada - Carga: 100 usuarios concurrentes --- ### RNF-002: Rendimiento - Throughput | Atributo | Valor | |----------|-------| | **ID** | RNF-002 | | **Categoría** | Rendimiento | | **Prioridad** | Media | | **Métrica** | >= 500 requests/segundo | **Descripción:** El sistema debe soportar al menos 500 solicitudes por segundo sin degradación. **Criterios de Aceptación:** - [ ] API soporta 500 req/s con latencia < 200ms - [ ] Sin errores 5xx bajo carga normal - [ ] CPU < 80% bajo carga máxima --- ### RNF-003: Seguridad - OWASP Top 10 | Atributo | Valor | |----------|-------| | **ID** | RNF-003 | | **Categoría** | Seguridad | | **Prioridad** | Crítica | | **Estándar** | OWASP Top 10 2021 | **Descripción:** El sistema debe estar protegido contra las 10 vulnerabilidades más críticas según OWASP. **Controles por Vulnerabilidad:** | # | Vulnerabilidad | Control Implementado | |---|----------------|----------------------| | A01 | Broken Access Control | Validación de permisos en cada endpoint | | A02 | Cryptographic Failures | HTTPS obligatorio, hashing de datos sensibles | | A03 | Injection | Consultas parametrizadas (EF Core), validación de entrada | | A04 | Insecure Design | Clean Architecture, validación en dominio | | A05 | Security Misconfiguration | Headers de seguridad, CORS restrictivo | | A06 | Vulnerable Components | Auditoría de dependencias (`dotnet list package --vulnerable`) | | A07 | Auth Failures | Rate limiting, validación de sesión | | A08 | Data Integrity Failures | Validación de DTOs, firma de respuestas | | A09 | Logging Failures | Logs estructurados sin datos sensibles | | A10 | SSRF | Validación de URLs, no fetch de recursos externos | **Criterios de Aceptación:** - [ ] Análisis SAST sin vulnerabilidades críticas - [ ] Headers de seguridad configurados (CSP, X-Frame-Options, etc.) - [ ] Sin secretos en código fuente - [ ] HTTPS en todos los endpoints --- ### RNF-004: Seguridad - Validación de Entrada | Atributo | Valor | |----------|-------| | **ID** | RNF-004 | | **Categoría** | Seguridad | | **Prioridad** | Alta | **Descripción:** Toda entrada del usuario debe ser validada tanto en frontend como en backend. **Reglas de Validación:** | Campo | Regla Frontend | Regla Backend | |-------|----------------|---------------| | Nombre | Required, MaxLength(100) | FluentValidation | | Email | Required, EmailFormat | ValueObject + Validator | | IDs | Numeric | Tipo fuerte (int) | **Criterios de Aceptación:** - [ ] Ningún input llega a la BD sin validación - [ ] Mensajes de error claros y sin información sensible - [ ] Sanitización de HTML en campos de texto --- ### RNF-005: Usabilidad - Responsive Design | Atributo | Valor | |----------|-------| | **ID** | RNF-005 | | **Categoría** | Usabilidad | | **Prioridad** | Alta | | **Estándar** | Mobile First | **Descripción:** La interfaz debe adaptarse correctamente a diferentes tamaños de pantalla. **Breakpoints Soportados:** | Dispositivo | Ancho | Soporte | |-------------|-------|---------| | Mobile | 320px - 480px | Obligatorio | | Tablet | 481px - 768px | Obligatorio | | Desktop | 769px - 1024px | Obligatorio | | Large Desktop | > 1024px | Obligatorio | **Criterios de Aceptación:** - [ ] UI funcional en Chrome, Firefox, Safari, Edge - [ ] Sin scroll horizontal en mobile - [ ] Formularios usables con teclado virtual - [ ] Touch targets >= 44px --- ### RNF-006: Usabilidad - Accesibilidad | Atributo | Valor | |----------|-------| | **ID** | RNF-006 | | **Categoría** | Usabilidad | | **Prioridad** | Media | | **Estándar** | WCAG 2.1 Nivel AA | **Descripción:** El sistema debe ser accesible para usuarios con discapacidades. **Criterios de Aceptación:** - [ ] Contraste de colores >= 4.5:1 - [ ] Navegación completa por teclado - [ ] Labels en todos los inputs - [ ] Atributos ARIA donde corresponda - [ ] Textos alternativos en imágenes --- ### RNF-007: Mantenibilidad - Cobertura de Tests | Atributo | Valor | |----------|-------| | **ID** | RNF-007 | | **Categoría** | Mantenibilidad | | **Prioridad** | Alta | | **Métrica** | >= 80% cobertura | **Descripción:** El código debe tener una cobertura de tests unitarios mínima del 80%. **Distribución de Tests:** | Capa | Cobertura Mínima | Tipo de Tests | |------|------------------|---------------| | Domain | 90% | Unit tests | | Application | 85% | Unit + Integration | | Adapters | 70% | Integration | | Frontend | 75% | Unit + Component | **Criterios de Aceptación:** - [ ] Cobertura global >= 80% - [ ] Todas las reglas de negocio con tests - [ ] Tests ejecutables en CI/CD --- ### RNF-008: Mantenibilidad - Calidad de Código | Atributo | Valor | |----------|-------| | **ID** | RNF-008 | | **Categoría** | Mantenibilidad | | **Prioridad** | Media | **Descripción:** El código debe seguir estándares de calidad medibles. **Métricas:** | Métrica | Umbral | |---------|--------| | Complejidad ciclomática | < 10 por método | | Duplicación de código | < 3% | | Archivos | < 100 líneas | | Métodos | < 30 líneas | | Warnings del compilador | 0 | **Herramientas:** - .NET: `dotnet format`, Roslyn Analyzers - Angular: ESLint, Prettier --- ### RNF-009: Disponibilidad | Atributo | Valor | |----------|-------| | **ID** | RNF-009 | | **Categoría** | Disponibilidad | | **Prioridad** | Media | | **Métrica** | 99% uptime | **Descripción:** El sistema debe estar disponible el 99% del tiempo durante horario laboral. **Criterios de Aceptación:** - [ ] Health checks implementados - [ ] Reinicio automático ante fallos - [ ] Graceful shutdown - [ ] Logs de errores para diagnóstico --- ### RNF-010: Escalabilidad | Atributo | Valor | |----------|-------| | **ID** | RNF-010 | | **Categoría** | Escalabilidad | | **Prioridad** | Baja | **Descripción:** La arquitectura debe permitir escalado horizontal sin cambios de código. **Criterios de Aceptación:** - [ ] Aplicación stateless - [ ] Configuración externalizada - [ ] Base de datos separada de aplicación - [ ] Contenedores Docker funcionales --- ## 3. Matriz de Priorización | ID | Requisito | Prioridad | Impacto | Esfuerzo | |----|-----------|-----------|---------|----------| | RNF-003 | Seguridad OWASP | Crítica | Alto | Alto | | RNF-001 | Tiempo respuesta | Alta | Alto | Medio | | RNF-004 | Validación entrada | Alta | Alto | Medio | | RNF-005 | Responsive | Alta | Alto | Medio | | RNF-007 | Cobertura tests | Alta | Medio | Alto | | RNF-002 | Throughput | Media | Medio | Medio | | RNF-006 | Accesibilidad | Media | Medio | Medio | | RNF-008 | Calidad código | Media | Medio | Bajo | | RNF-009 | Disponibilidad | Media | Alto | Medio | | RNF-010 | Escalabilidad | Baja | Bajo | Alto | --- ## 4. Estrategia de Validación ### Tests de Rendimiento ```bash # k6 para load testing k6 run --vus 100 --duration 30s tests/performance/api-load.js ``` ### Tests de Seguridad ```bash # OWASP ZAP scan docker run -t owasp/zap2docker-stable zap-baseline.py -t https://localhost:5001 ``` ### Tests de Accesibilidad ```bash # Lighthouse CI npx lighthouse https://localhost:4200 --only-categories=accessibility ``` --- ## 5. Aprobación | Rol | Nombre | Fecha | Firma | |-----|--------|-------|-------| | Arquitecto | Sistema | 2026-01-07 | ✓ | | Líder Técnico | Pendiente | - | - | | QA Lead | Pendiente | - | - |