Reporte resultado de pruebas Sprint 3 - jcrinconv/MISW4203-2026-12-ing-sw-apps-moviles GitHub Wiki
Reporte Resultado de Pruebas — Sprint 3
Iteración: HU06 + HU07 + HU08 (+ accesibilidad transversal HU01–HU08)
Fecha: 2026-05-23
Importante: El presente documento muestra el detalle de las ejecuciones de pruebas E2E con Espresso y manuales exploratorias. Para ver el detalle de los resultados de desempeño y accesibilidad, dirigirse a los reportes correspondientes: Micro-optimizaciones Sprint 3 Perfilamiento Sprint 3 Mejoras de accesibilidad Reporte Accessibility Scanner
Ejecutivo
Se completó la implementación y validación de las historias de usuario HU06 (Consultar detalle de coleccionista), HU07 (Crear un álbum) y HU08 (Asociar tracks con un álbum). Como dimensión transversal nueva en este sprint, se ejecutó un análisis completo de accesibilidad sobre la totalidad de las pantallas implementadas (HU01–HU08) usando Accessibility Scanner, identificando y corrigiendo issues en cuatro categorías: touch targets, contraste de color, escalado de texto y soporte para lector de pantalla.
La estrategia de pruebas sigue el enfoque TNT con automatización E2E usando Espresso y MockWebServer, complementada con exploración manual y perfilamiento con Android Profiler.
Resultado General: ✅ FINALIZADO
1. Continuidad desde Sprint 2
1.1 Estado de las suites anteriores
Las pruebas automatizadas de HU01–HU05 se mantienen activas como suite de regresión. No se identificaron regresiones al incorporar las nuevas funcionalidades del Sprint 3.
| Suite | Tests | Estado Sprint 3 |
|---|---|---|
AlbumsListTest.kt (HU01) |
7 | ✅ Regresión pasada |
AlbumDetailFragmentTest.kt (HU02) |
3 | ✅ Regresión pasada |
HomeFragmentTest.kt (Navegación) |
5 | ✅ Regresión pasada |
MusicianListTest.kt (HU03) |
5 | ✅ Regresión pasada |
MusicianDetailFragmentTest.kt (HU04) |
8 | ✅ Regresión pasada |
CollectorListTest.kt (HU05) |
7 | ✅ Regresión pasada |
Total acumulado Sprint 1–2: 35 tests — todos pasan sin modificaciones.
2. Pruebas Sprint 3: Nuevas Historias de Usuario
2.1 HU06 — Consultar detalle de coleccionista
Archivo: app/src/androidTest/java/com/misw/app/CollectorDetailTest.kt
Tests Implementados (5 tests):
| # | Nombre | Tipo | Descripción | Resultado |
|---|---|---|---|---|
| 1 | testVisibilityOfAllComponents |
Positivo | Nombre, email, barra de búsqueda, tabs y RecyclerView visibles; estados de error/vacío ocultos | ✅ Pass |
| 2 | testCollectorInformationIsCorrect |
Positivo | Nombre contiene "Manolo" y email es "[email protected]" | ✅ Pass |
| 3 | testTabSwitchingContent |
Positivo | Tab Álbumes muestra "Discovery"; al cambiar a Artistas muestra "Axl Rose" | ✅ Pass |
| 4 | testSearchFiltering |
Positivo | Buscar "Discovery" muestra resultado; texto inexistente muestra empty state con el texto buscado; limpiar restaura lista | ✅ Pass |
| 5 | testErrorState |
Negativo | API retorna 500 en detalle: se muestra llErrorState, se ocultan RecyclerView y empty state |
✅ Pass |
Cobertura de escenarios:
- ✅ Visibilidad de todos los componentes
- ✅ Datos del coleccionista (nombre, email)
- ✅ Navegación por tabs (álbumes / artistas favoritos)
- ✅ Búsqueda con resultado, sin resultado, y limpieza
- ✅ Estado de error HTTP 500
2.2 HU07 — Crear un álbum
Archivo: app/src/androidTest/java/com/misw/app/AlbumCreateTest.kt
Tests Implementados (10 tests):
| # | Nombre | Tipo | Descripción | Resultado |
|---|---|---|---|---|
| 1 | testVisibilityOfComponents |
Positivo | Campos nombre, URL portada, día, spinner mes, año y botones "Crear" y "Cancelar" visibles | ✅ Pass |
| 2 | testEmptyFieldsValidation |
Negativo | Click en "Crear" sin datos: mensajes de error en nombre, URL portada y descripción | ✅ Pass |
| 3 | testSuccessfulAlbumCreation |
Positivo | Flujo completo con Faker: completar formulario, confirmar modal "Sí", retorno a lista de álbumes (searchBar visible) | ✅ Pass |
| 4 | testCancelButton |
Positivo | Botón "Cancelar" sin datos: retorna a lista de álbumes directamente | ✅ Pass |
| 5 | testCancelModalIfFieldsNotEmpty |
Positivo | Botón "Cancelar" con datos: muestra modal "¿Desea cancelar la creación del álbum?" | ✅ Pass |
| 6 | testCancelModalNoSelected |
Positivo | Modal cancelar → "No": permanece en pantalla "Crear álbum" | ✅ Pass |
| 7 | testCancelModalYesSelected |
Positivo | Modal cancelar → "Sí": retorna a lista con título "Álbumes" | ✅ Pass |
| 8 | testAlbumListModalIfFieldsNotEmpty |
Positivo | Back (toolbar) con datos: muestra modal "¿Desea volver al listado de álbumes?" | ✅ Pass |
| 9 | testAlbumListModalNoSelected |
Positivo | Modal back → "No": permanece en pantalla "Crear álbum" | ✅ Pass |
| 10 | testAlbumListModalYesSelected |
Positivo | Modal back → "Sí": retorna a lista con título "Álbumes" | ✅ Pass |
Cobertura de escenarios:
- ✅ Visibilidad de todos los campos del formulario
- ✅ Validación de campos obligatorios (nombre, URL portada, descripción)
- ✅ Creación exitosa con confirmación modal
- ✅ Cancelación sin datos (directa) y con datos (modal de confirmación)
- ✅ Navegación back con y sin datos (modal de confirmación)
- ✅ Flujos "No" y "Sí" de cada modal
2.3 HU08 — Asociar tracks con un álbum
HU08 cuenta con dos suites: una de navegación y acceso al formulario, y otra de comportamiento completo del formulario.
2.3.1 TrackAssociateTest.kt — Navegación (2 tests)
Archivo: app/src/androidTest/java/com/misw/app/TrackAssociateTest.kt
| # | Nombre | Tipo | Descripción | Resultado |
|---|---|---|---|---|
| 1 | testAssociateTracksButtonIsVisible |
Positivo | Botón btnAssociateTracks visible en el detalle del álbum |
✅ Pass |
| 2 | testAssociateTracksButtonNavigatesToAssociateScreen |
Positivo | Click en botón navega a pantalla "Asociar canción" | ✅ Pass |
2.3.2 TrackAssociateViewTest.kt — Formulario (33 tests)
Archivo: app/src/androidTest/java/com/misw/app/TrackAssociateViewTest.kt
| # | Nombre | Tipo | Descripción | Resultado |
|---|---|---|---|---|
| 1 | testTrackAssociateScreenDisplaysInputFields |
Positivo | Campos nombre, minutos y segundos visibles | ✅ Pass |
| 2 | testTrackAssociateScreenDisplaysButtons |
Positivo | Botones "Cancelar" y "Asociar" visibles | ✅ Pass |
| 3 | testCancelButtonNavigatesBack |
Positivo | Botón cancelar sin datos: retorna a detalle del álbum (tvTrackCount visible) |
✅ Pass |
| 4 | testCanEnterTrackName |
Positivo | Escritura en etTrackName persiste el valor ingresado |
✅ Pass |
| 5 | testCanEnterDuration |
Positivo | Escritura en etMinutos y etSegundos persiste los valores |
✅ Pass |
| 6 | testSuccessfulTrackAssociation |
Positivo | Completar formulario, confirmar modal "Sí": retorna a detalle del álbum | ✅ Pass |
| 7 | testTrackNameFieldHasCorrectHint |
Positivo | Hint de etTrackName es "Nombre de la canción" |
✅ Pass |
| 8 | testMinutesFieldHasCorrectHint |
Positivo | Hint de etMinutos es "mm" |
✅ Pass |
| 9 | testSecondsFieldHasCorrectHint |
Positivo | Hint de etSegundos es "ss" |
✅ Pass |
| 10 | testAssociateButtonIsEnabledByDefault |
Positivo | Botón "Asociar" habilitado y visible por defecto | ✅ Pass |
| 11 | testCancelButtonIsEnabledByDefault |
Positivo | Botón "Cancelar" habilitado y visible por defecto | ✅ Pass |
| 12 | testCompleteTrackAssociationFlow |
Positivo | Flujo completo con "Bohemian Rhapsody" 5:55, confirmar, retorna a detalle | ✅ Pass |
| 13 | testEmptyTrackNameValidation |
Negativo | Nombre vacío: permanece en "Asociar canción" | ✅ Pass |
| 14 | testEmptyMinutesValidation |
Negativo | Minutos vacíos: permanece en "Asociar canción" | ✅ Pass |
| 15 | testEmptySecondsValidation |
Negativo | Segundos vacíos: permanece en "Asociar canción" | ✅ Pass |
| 16 | testInvalidSecondsNumberValidation |
Negativo | Segundos > 59 (75): permanece en "Asociar canción" | ✅ Pass |
| 17 | testInvalidMinutesNumberValidation |
Negativo | Minutos con letras ("abc"): permanece en "Asociar canción" | ✅ Pass |
| 18 | testZeroDurationIsValid |
Borde | Duración 0:00 es válida, confirmar modal, retorna a detalle | ✅ Pass |
| 19 | testMaxValidSeconds |
Borde | Segundos máximos (59): válido, confirmar, retorna a detalle | ✅ Pass |
| 20 | testFormattingWithPaddedZeros |
Borde | Duración 5:9 formateada como 05:09, retorna a detalle | ✅ Pass |
| 21 | testLongTrackNameIsAccepted |
Borde | Nombre muy largo (72 caracteres): aceptado, retorna a detalle | ✅ Pass |
| 22 | testClearingFieldsAndReenteringData |
Positivo | Limpiar campos y reingresar: nuevos valores persisten y se asocian correctamente | ✅ Pass |
| 23 | testTrackNameWithSpecialCharacters |
Positivo | Nombre con caracteres especiales (#, -, '): aceptado y confirmado | ✅ Pass |
| 24 | testCancelModalIfNameNotEmpty |
Positivo | Cancelar con nombre ingresado: muestra modal "¿Desea cancelar la asociación de la canción?" | ✅ Pass |
| 25 | testCancelModalIfMinutesNotEmpty |
Positivo | Cancelar con minutos ingresados: muestra modal de cancelación | ✅ Pass |
| 26 | testCancelModalIfSecondsNotEmpty |
Positivo | Cancelar con segundos ingresados: muestra modal de cancelación | ✅ Pass |
| 27 | testCancelModalNoSelected |
Positivo | Modal cancelar → "No": permanece en "Asociar canción" | ✅ Pass |
| 28 | testCancelModalYesSelected |
Positivo | Modal cancelar → "Sí": retorna a detalle del álbum | ✅ Pass |
| 29 | testAlbumDetailModalIfNameNotEmpty |
Positivo | Back (toolbar) con nombre: muestra modal "¿Desea volver al detalle del álbum?" | ✅ Pass |
| 30 | testAlbumDetailModalIfMinutesNotEmpty |
Positivo | Back con minutos ingresados: muestra modal de retorno a detalle | ✅ Pass |
| 31 | testAlbumDetailModalIfSecondsNotEmpty |
Positivo | Back con segundos ingresados: muestra modal de retorno a detalle | ✅ Pass |
| 32 | testAlbumDetailModalNoSelected |
Positivo | Modal back → "No": permanece en "Asociar canción" | ✅ Pass |
| 33 | testAlbumDetailModalYesSelected |
Positivo | Modal back → "Sí": retorna a detalle del álbum | ✅ Pass |
Cobertura de escenarios HU08:
- ✅ Visibilidad de todos los campos y botones
- ✅ Hints correctos por campo
- ✅ Flujo de asociación exitosa (básico y completo)
- ✅ Validaciones: nombre vacío, minutos vacíos, segundos vacíos, segundos > 59, minutos con letras
- ✅ Casos borde: duración 0:00, segundos máximos (59), padding de ceros, nombre muy largo
- ✅ Modal de cancelación: apertura por campo nombre/minutos/segundos, flujos "Sí" y "No"
- ✅ Modal de back (toolbar): apertura por campo nombre/minutos/segundos, flujos "Sí" y "No"
- ✅ Edición y reingreso de datos
3. Infraestructura de Pruebas
La infraestructura establecida en Sprint 2 se mantiene sin cambios para Sprint 3. Las suites de HU07 y HU08 añaden un dispatcher con rutas POST además de GET:
// AlbumCreateTest — dispatcher con POST
request.method == "POST" && request.path?.contains("albums") == true ->
MockResponse().setResponseCode(201).setBody(albumResponse)
// TrackAssociateViewTest — dispatcher con POST a /albums/1/tracks
path.startsWith("/albums/1/tracks") && request.method == "POST" ->
MockResponse().setResponseCode(200).setBody(trackResponse)
MockWebServer: simula GET y POST de forma determinística por HU
JavaFaker: usado en HU07 para nombres de álbum y contenido de descripción
CacheManager.clearCache(): limpieza antes de cada test
EspressoIdlingResource: sincronización con Retrofit/Coroutines en todos los tests
4. Matriz de Cobertura TNT
Nivel │ Tipo │ Técnica │ Objetivo │ Estado
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Aceptación │ E2E, caja negra, +/- │ Automatizada (Espresso + MockWebServer: │ OB001 │ ✅
│ │ escenarios +, - y borde para HU06, HU07, HU08) │ │
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Aceptación │ E2E, caja negra, regresión │ Automatizada (Espresso: regresión sobre │ OB001 │ ✅
│ │ HU01–HU05, 35 tests, 0 fallos) │ │
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Sistema │ Funcional, caja negra, +/- │ Manual exploratoria (escenarios desde CA de │ OB002 │ ✅
│ │ HU06, HU07 y HU08) │ │
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Sistema │ Funcional, caja negra, +/- │ Manual (verificación de formularios, modales, │ OB002 │ ✅
│ │ tipografía, presentación visual HU07–HU08) │ │
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Sistema │ No funcional, compatibilidad │ Manual (ejecución en matriz de dispositivos │ OB003 │ ✅
│ │ Android 13–16) │ │
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Sistema │ No funcional, ciclo de vida │ Manual (background/foreground, rotación, │ OB004 │ ✅
│ │ persistencia de estado HU01–HU08) │ │
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Sistema │ No funcional, desempeño │ Perfilamiento (Android Profiler: memoria y threads │ OB004 │ ✅
│ │ para HU06–HU08, pre y post micro-optimizaciones) │ │
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Sistema │ No funcional, accesibilidad │ Automatizada + Manual (Accessibility Scanner: │ OB006 │ ✅
│ │ HU01–HU08; 4 categorías corregidas en PR #107) │ │
───────────────┼───────────────────────────────────┼────────────────────────────────────────────────────────┼──────────┼────────
Sistema │ Funcional, caja negra, negativa │ Automatizada (validaciones de formulario HU07–HU08: │ OB005 │ ✅
│ │ campos vacíos, valores fuera de rango, error HTTP 500) │ │
5. Métricas
Total de Tests Espresso Sprint 3: 50
├─ CollectorDetailTest: 5 (HU06)
├─ AlbumCreateTest: 10 (HU07)
├─ TrackAssociateTest: 2 (HU08 — navegación)
└─ TrackAssociateViewTest: 33 (HU08 — formulario)
Acumulado total (Sprint 1 + 2 + 3): 85 tests
Distribución Sprint 3:
Escenarios positivos: 39
Escenarios negativos/error: 7
Escenarios de borde: 4
Cobertura E2E estimada Sprint 3: ~92%
Validaciones cubiertas (HU07–HU08): 100% de campos requeridos y valores inválidos
Regresión Sprint 1–2: 35/35 tests pasan ✅
6. Resultados del Perfilamiento Sprint 3
6.1 Metodología
Se utilizó Android Profiler (Memory Profiler + CPU Profiler) para capturar el consumo de memoria (heap) y el conteo de threads activos al navegar por cada nueva HU. Las mediciones se tomaron antes y después de aplicar las micro-optimizaciones del Sprint 3. Los dispositivos son los mismos que en Sprint 2.
Referencia completa: Perfilamiento y resultados Sprint 3
6.2 Dispositivos
| Dispositivo | RAM | Android |
|---|---|---|
| Infinix HOT 30 PLAY | 8 GB | 13 |
| Motorola G15 | 4 GB | 15 |
| Samsung A15 | 8 GB | 16 |
6.3 Micro-optimizaciones Sprint 3 con impacto en perfilamiento
Referencia: micro-optimizaciones Sprint 3
| # | Optimización | Impacto |
|---|---|---|
| 1 | Caching de instancias Retrofit en variable privada | Reducción de overhead de reflexión por llamada |
| 2 | RecyclerView + DiffUtil en tracklist (HU02/HU08) | Elimina recreación completa de vistas al actualizar datos |
| 3 | SimpleDateFormat en companion object |
Reducción de allocations en pantallas con fechas (HU01, HU07) |
| 4 | Normalización viewport vector drawable (ícono búsqueda 512×510 → 24×24) | Reducción de cómputo gráfico innecesario |
| 5 | ConstraintLayout reemplaza LinearLayout con layout_weight |
Elimina doble pasada de medición en botones |
| 6 | Eliminación de fondo redundante en AppBarLayout | Reducción de overdraw |
| 7 | Limpieza de recursos sin uso + centralización en strings.xml |
Reducción de tamaño de APK |
7. Accesibilidad Sprint 3
7.1 Herramienta y cobertura
Se utilizó Accessibility Scanner (Google) para analizar todas las pantallas de la aplicación (HU01–HU08). El análisis se ejecutó sobre dispositivo físico y se documentaron todas las issues encontradas.
Referencia del análisis: Reporte Accessibility Scanner
Referencia de correcciones: Mejoras de accesibilidad
7.2 Issues identificadas y corregidas
| Categoría | Problema identificado | Solución aplicada |
|---|---|---|
| Touch targets | Múltiples elementos interactivos con área < 48×48 dp (botón crear: 27 dp, barras de búsqueda, FAB, botones de formulario) | Eliminación de alturas fijas restrictivas; android:minHeight="48dp" con padding vertical |
| Contraste de color | Color wild_strawberry con ratio < 4.5:1; subtítulos en gris sobre fondos oscuros en listas de coleccionistas y álbumes |
Actualización a #D81B60 (>4.5:1); subtítulos de gris a blanco (>7:1); texto de botones de blanco a negro en fondos con degradado claro |
| Escalado de texto | Clipping en campo de descripción con layout_height fijo (120 dp) al aumentar fuente del sistema; spinners con alto fijo |
Reemplazo por wrap_content; android:minLines="5" en descripción; android:dropDownHeight="wrap_content" en spinners |
| Lector de pantalla | Content descriptions estáticas o ausentes en adaptadores; jerarquía de nodos incompleta para TalkBack | Content descriptions dinámicas: coleccionistas anuncian nombre y correo; álbumes anuncian título, artista, descripción y calificación; reorganización de jerarquía de nodos |
Implementación: PR #107
Todas las issues de prioridad crítica y alta fueron corregidas y validadas en el mismo sprint, cubriendo la totalidad de las pantallas del producto (HU01–HU08).
8. Pruebas Manuales Exploratorias Sprint 3
8.1 HU06 — Detalle de coleccionista
| Escenario | Criterio de Aceptación | Resultado |
|---|---|---|
| Positivo: Información del coleccionista visible | Nombre, email y teléfono del coleccionista se muestran correctamente | ✅ |
| Positivo: Tab Álbumes | Muestra álbumes del coleccionista con nombre | ✅ |
| Positivo: Tab Artistas favoritos | Muestra artistas favoritos del coleccionista | ✅ |
| Positivo: Búsqueda dentro del detalle | Filtrar por nombre de álbum o artista funciona correctamente | ✅ |
| Positivo: Navegación hacia atrás | Back button regresa al listado de coleccionistas | ✅ |
| Negativo: Error de carga | Se muestra estado de error cuando la API falla | ✅ |
Hallazgos
Cuando se navega a coleccionista, esta habilitada la posibilidad de ver el listado de artistas favoritos. En caso de ser un cantante, se puede ver el detalle del cantante. Si es una banda, falla la carga, porque no se tiene implementado esa característica. Se requiere implementar la funcionalidad, o ajustar el mensaje de retorno error.
https://github.com/user-attachments/assets/3e15ab43-7bbb-482c-8829-02c05ab9338a
Issue creada: HU06-FIX01 - Ajuste en detalle de coleccionista al ver detalle artista favorito - banda
Importante: La issue no ha sido asignada, debería hacerse el planning del sprint 4 para asignar responsable, e incluirla dentro del mismo.
8.2 HU07 — Crear álbum
| Escenario | Criterio de Aceptación | Resultado |
|---|---|---|
| Positivo: Formulario accesible desde listado | Botón de crear álbum visible y funcional en el listado | ✅ |
| Positivo: Creación exitosa | Formulario completo + confirmación modal → álbum creado, retorno a lista | ✅ |
| Negativo: Campos requeridos vacíos | Se muestran mensajes de error inline por campo | ✅ |
| Positivo: Cancelación sin datos | Botón cancelar sin datos retorna directamente al listado | ✅ |
| Positivo: Cancelación con datos | Botón cancelar con datos muestra modal de confirmación | ✅ |
| Positivo: Back toolbar con datos | Flecha back con datos muestra modal de confirmación | ✅ |
| Positivo: Tipografía y layout | Fuentes y alineaciones coinciden con el prototipo | ✅ |
8.3 HU08 — Asociar tracks
| Escenario | Criterio de Aceptación | Resultado |
|---|---|---|
| Positivo: Formulario accesible desde detalle de álbum | Botón "Asociar canción" visible en el detalle del álbum | ✅ |
| Positivo: Asociación exitosa | Completar nombre y duración, confirmar → track aparece en tracklist | ✅ |
| Negativo: Campos vacíos o valores inválidos | Validación informa el error apropiado (toast/inline) | ✅ |
| Positivo: Cancelación con datos | Modal de confirmación al cancelar con datos ingresados | ✅ |
| Positivo: Back toolbar con datos | Modal de confirmación al presionar back con datos ingresados | ✅ |
| Positivo: Tipografía y layout | Campos mm y ss claramente diferenciados, hints correctos | ✅ |
9. Conclusiones
9.1 Evaluación por Objetivo
| Objetivo | Criterio | Resultado |
|---|---|---|
| OB001 | ≥85% CA cubiertos con Espresso para HU06, HU07, HU08 | ✅ ~92% cobertura, 50 tests nuevos |
| OB002 | Pruebas manuales complementarias sobre HU06–HU08 | ✅ Escenarios exploratorios ejecutados y documentados |
| OB003 | Compatibilidad en matriz de dispositivos Android 13–16 | ✅ Perfilamiento en 3 dispositivos documentado |
| OB004 | Estado background/foreground e integridad en HU01–HU08 | ✅ ViewModels persisten estado correctamente |
| OB005 | 100% flujos de error y validaciones informan al usuario | ✅ Validaciones de formulario + error HTTP 500 cubiertos en HU06–HU08 |
| OB006 | Issues de accesibilidad identificadas y corregidas | ✅ 4 categorías corregidas en PR #107 sobre HU01–HU08 |
9.2 Evolución Sprint 2 → Sprint 3
| Aspecto | Sprint 2 (acum.) | Sprint 3 (acum.) |
|---|---|---|
| Tests Espresso | 35 | 85 (+143%) |
| HUs cubiertas | HU01–HU05 | HU01–HU08 |
| Escenarios negativos | 10 | 17 |
| Escenarios de borde | 5 | 9 |
| Cobertura de modales | No | Sí (HU07: 6 tests, HU08: 10 tests) |
| Pruebas de accesibilidad | No | Sí (Accessibility Scanner + correcciones) |
| Pantallas con content descriptions dinámicas | No | Sí (HU01–HU08) |
| Micro-optimizaciones | 5 (Sprint 2) | 7 (Sprint 3) |
9.3 Resumen
El Sprint 3 logró:
- Cobertura E2E completa de HU06, HU07 y HU08 con especial profundidad en los flujos de formulario y modales de HU08 (33 tests en
TrackAssociateViewTest) - Incorporación de la dimensión de accesibilidad sobre la totalidad del producto (HU01–HU08), corrigiendo issues en touch targets, contraste, escalado de texto y soporte para lectores de pantalla
- Suite de regresión estable: los 35 tests de Sprints 1 y 2 pasan sin modificaciones
- Perfilamiento documentado sobre tres dispositivos físicos con diferentes versiones de Android
- Siete micro-optimizaciones de rendimiento implementadas y verificadas