266 lines
8.2 KiB
Markdown
266 lines
8.2 KiB
Markdown
# Reporte de Defectos - Pruebas Manuales QA
|
|
|
|
**Fecha:** 2026-01-07
|
|
**Tester:** QA Automation con Playwright
|
|
**Ambiente:** k3s (academia.ingeniumcodex.com)
|
|
**Estado:** Completado
|
|
|
|
---
|
|
|
|
## Resumen Ejecutivo
|
|
|
|
| Severidad | Cantidad | Corregidos |
|
|
|-----------|----------|------------|
|
|
| Critica | 1 | 1 |
|
|
| Alta | 1 | 1 |
|
|
| Media | 1 | 1 |
|
|
| Baja | 1 | 1 |
|
|
|
|
**Todos los defectos han sido corregidos y validados.**
|
|
|
|
---
|
|
|
|
## DEF-001: SQL Server OOMKilled - Memoria Insuficiente
|
|
|
|
### Clasificacion
|
|
- **ID:** DEF-001
|
|
- **Severidad:** CRITICA
|
|
- **Componente:** Infraestructura / SQL Server
|
|
- **Estado:** CORREGIDO
|
|
|
|
### Descripcion
|
|
SQL Server se reinicia continuamente debido a falta de memoria (OOMKilled). El pod entra en CrashLoopBackOff impidiendo el funcionamiento de la aplicacion.
|
|
|
|
### Pasos para Reproducir
|
|
1. Desplegar la aplicacion en k3s con los manifiestos originales
|
|
2. Esperar 2-3 minutos
|
|
3. Observar que SQL Server se reinicia repetidamente
|
|
|
|
### Resultado Esperado
|
|
SQL Server debe iniciar y permanecer estable sin reinicios.
|
|
|
|
### Resultado Actual
|
|
- Exit Code: 137 (SIGKILL - OOMKilled)
|
|
- SQL Server se reinicia cada ~2 minutos
|
|
- Errores en logs: 17300, 17312, 28709 (recursos insuficientes)
|
|
|
|
### Evidencia
|
|

|
|
|
|
### Solucion Implementada
|
|
Se modifico `deploy/k3s/sqlserver.yaml`:
|
|
- Aumentar memoria limite a 1.5Gi
|
|
- Aumentar MSSQL_MEMORY_LIMIT_MB a 1024
|
|
- Aumentar initialDelaySeconds del liveness probe a 120
|
|
- Aumentar failureThreshold a 5
|
|
|
|
**Resultado post-correccion:** SQL Server estable con 691Mi de RAM y 0 reinicios.
|
|
|
|
---
|
|
|
|
## DEF-002: Mensajes de Restriccion en Ingles
|
|
|
|
### Clasificacion
|
|
- **ID:** DEF-002
|
|
- **Severidad:** ALTA
|
|
- **Componente:** Frontend / Localizacion
|
|
- **Estado:** CORREGIDO
|
|
|
|
### Descripcion
|
|
Los mensajes de restriccion en la pagina de inscripcion se muestran en ingles en lugar de espanol, rompiendo la consistencia del idioma de la aplicacion.
|
|
|
|
### Pasos para Reproducir
|
|
1. Navegar a la pagina de inscripcion de un estudiante
|
|
2. Inscribir al estudiante en una materia
|
|
3. Observar los mensajes de restriccion en las otras materias
|
|
|
|
### Resultado Esperado
|
|
Los mensajes deben mostrarse en espanol:
|
|
- "Ya inscrito"
|
|
- "Ya tienes una materia con este profesor"
|
|
- "Maximo 3 materias alcanzado"
|
|
|
|
### Resultado Actual
|
|
Los mensajes se muestran en ingles:
|
|
- "Already enrolled"
|
|
- "Already have a subject with this professor"
|
|
- "Maximum 3 subjects reached"
|
|
|
|
### Evidencia
|
|

|
|

|
|
|
|
### Soluciones Propuestas
|
|
|
|
#### Solucion A: Traducir en el frontend (servicio)
|
|
- **Descripcion:** Crear un diccionario de traducciones en el EnrollmentService
|
|
- **Pros:** Cambio localizado, rapido de implementar
|
|
- **Contras:** Duplica logica de traduccion
|
|
|
|
#### Solucion B: Traducir en el backend (GraphQL)
|
|
- **Descripcion:** Retornar mensajes en espanol desde la API
|
|
- **Pros:** Fuente unica de verdad
|
|
- **Contras:** Requiere cambios en backend
|
|
|
|
#### Solucion C: Usar i18n en Angular
|
|
- **Descripcion:** Implementar sistema de internacionalizacion completo
|
|
- **Pros:** Escalable para multiples idiomas
|
|
- **Contras:** Mayor complejidad, over-engineering para este caso
|
|
|
|
### Solucion Unificada Recomendada
|
|
Implementar Solucion A: traducir los mensajes en el frontend ya que la API retorna codigos/mensajes en ingles y el frontend es responsable de la presentacion.
|
|
|
|
**Archivo a modificar:** `src/frontend/src/app/features/enrollment/pages/enrollment-page/enrollment-page.component.ts`
|
|
|
|
```typescript
|
|
private readonly translations: Record<string, string> = {
|
|
'Already enrolled': 'Ya inscrito',
|
|
'Already have a subject with this professor': 'Ya tienes una materia con este profesor',
|
|
'Maximum 3 subjects reached': 'Maximo 3 materias alcanzado'
|
|
};
|
|
|
|
translateMessage(message: string): string {
|
|
return this.translations[message] || message;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## DEF-003: Error Gramatical en Pluralizacion
|
|
|
|
### Clasificacion
|
|
- **ID:** DEF-003
|
|
- **Severidad:** MEDIA
|
|
- **Componente:** Frontend / Pagina Companeros
|
|
- **Estado:** CORREGIDO
|
|
|
|
### Descripcion
|
|
En la pagina de companeros de clase, cuando hay exactamente 1 companero, el texto muestra "1 companeros" (plural) en lugar de "1 companero" (singular).
|
|
|
|
### Pasos para Reproducir
|
|
1. Crear dos estudiantes
|
|
2. Inscribir ambos en la misma materia
|
|
3. Ver la pagina de companeros de cualquiera de los dos
|
|
4. Observar el contador junto al nombre de la materia
|
|
|
|
### Resultado Esperado
|
|
- 0 companeros
|
|
- 1 companero (singular)
|
|
- 2 companeros (plural)
|
|
|
|
### Resultado Actual
|
|
- 1 companeros (incorrecto)
|
|
|
|
### Evidencia
|
|

|
|
|
|
### Soluciones Propuestas
|
|
|
|
#### Solucion A: Condicional simple en template
|
|
```html
|
|
{{ count }} {{ count === 1 ? 'companero' : 'companeros' }}
|
|
```
|
|
|
|
#### Solucion B: Pipe de pluralizacion
|
|
```typescript
|
|
@Pipe({ name: 'pluralize' })
|
|
export class PluralizePipe {
|
|
transform(count: number, singular: string, plural: string): string {
|
|
return count === 1 ? singular : plural;
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Solucion C: Usar Angular i18n con ICU
|
|
```html
|
|
{count, plural, =1 {companero} other {companeros}}
|
|
```
|
|
|
|
### Solucion Unificada Recomendada
|
|
Implementar Solucion A (condicional simple) por ser la mas directa y no requerir cambios estructurales.
|
|
|
|
**Archivo a modificar:** `src/frontend/src/app/features/classmates/pages/classmates-page/classmates-page.component.html`
|
|
|
|
---
|
|
|
|
## DEF-004: Favicon No Encontrado (404)
|
|
|
|
### Clasificacion
|
|
- **ID:** DEF-004
|
|
- **Severidad:** BAJA
|
|
- **Componente:** Frontend / Assets
|
|
- **Estado:** CORREGIDO
|
|
|
|
### Descripcion
|
|
El navegador intenta cargar `/favicon.ico` pero recibe un error 404. Esto genera errores en la consola del navegador.
|
|
|
|
### Pasos para Reproducir
|
|
1. Abrir la aplicacion en el navegador
|
|
2. Abrir las herramientas de desarrollador (F12)
|
|
3. Observar la pestana de red o consola
|
|
|
|
### Resultado Esperado
|
|
El favicon debe cargarse correctamente o no debe haber referencia al mismo.
|
|
|
|
### Resultado Actual
|
|
```
|
|
Failed to load resource: the server responded with a status of 404 ()
|
|
@ https://academia.ingeniumcodex.com/favicon.ico
|
|
```
|
|
|
|
### Evidencia
|
|
Error visible en consola del navegador durante las pruebas.
|
|
|
|
### Soluciones Propuestas
|
|
|
|
#### Solucion A: Agregar favicon
|
|
- **Descripcion:** Crear y agregar un favicon.ico al proyecto
|
|
- **Pros:** Mejora UX, profesionalismo
|
|
- **Contras:** Requiere crear el asset
|
|
|
|
#### Solucion B: Remover referencia
|
|
- **Descripcion:** Quitar la referencia al favicon en index.html
|
|
- **Pros:** Elimina el error
|
|
- **Contras:** Sin icono en pestanas del navegador
|
|
|
|
### Solucion Unificada Recomendada
|
|
Implementar Solucion A: crear un favicon simple basado en el logo "S" de la aplicacion.
|
|
|
|
**Archivos a modificar:**
|
|
- Crear `src/frontend/src/favicon.ico`
|
|
- Verificar referencia en `src/frontend/src/index.html`
|
|
|
|
---
|
|
|
|
## Capturas de Pantalla
|
|
|
|
| Archivo | Descripcion |
|
|
|---------|-------------|
|
|
| 01-error-inicial-carga.png | Error de conexion al servidor (DEF-001) |
|
|
| 02-listado-estudiantes.png | Listado de estudiantes funcionando |
|
|
| 03-formulario-nuevo-estudiante.png | Formulario de creacion |
|
|
| 04-validacion-email-invalido.png | Validacion de email funcionando |
|
|
| 05-estudiante-creado.png | Confirmacion de creacion exitosa |
|
|
| 06-pagina-inscripcion.png | Pagina de inscripcion |
|
|
| 07-mensajes-en-ingles-defecto.png | Mensajes en ingles (DEF-002) |
|
|
| 08-maximo-materias-ingles.png | Mensaje maximo materias en ingles |
|
|
| 09-error-gramatical-companeros.png | Error "1 companeros" (DEF-003) |
|
|
| 10-dialogo-confirmacion-eliminar.png | Dialogo de confirmacion correcto |
|
|
| 11-validacion-mensajes-espanol.png | Mensajes traducidos a espanol (DEF-002 VALIDADO) |
|
|
| 12-validacion-pluralizacion.png | Pluralizacion corregida (DEF-003 VALIDADO) |
|
|
|
|
---
|
|
|
|
## Historial de Cambios
|
|
|
|
| Fecha | Cambio |
|
|
|-------|--------|
|
|
| 2026-01-07 | Creacion del documento |
|
|
| 2026-01-07 | DEF-001 identificado y corregido (SQL Server OOM) |
|
|
| 2026-01-07 | DEF-002, DEF-003, DEF-004 identificados |
|
|
| 2026-01-07 | Soluciones propuestas para todos los defectos |
|
|
| 2026-01-08 | DEF-002 corregido (mensajes traducidos a espanol) |
|
|
| 2026-01-08 | DEF-003 corregido (pluralizacion "companero/companeros") |
|
|
| 2026-01-08 | DEF-004 corregido (favicon SVG agregado) |
|
|
| 2026-01-08 | Todas las correcciones validadas con Playwright |
|