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