academia/docs/entregables/01-analisis/requisitos/AN-004-requisitos-no-funcio...

316 lines
8.3 KiB
Markdown

# 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 | - | - |