8.3 KiB
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 |
| 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
# k6 para load testing
k6 run --vus 100 --duration 30s tests/performance/api-load.js
Tests de Seguridad
# OWASP ZAP scan
docker run -t owasp/zap2docker-stable zap-baseline.py -t https://localhost:5001
Tests de Accesibilidad
# 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 | - | - |