316 lines
8.3 KiB
Markdown
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 | - | - |
|