Sprint 1 - martzb/vinilos-movile-app GitHub Wiki


Release v1.0.1

Publicado automáticamente por el pipeline CI.

Información del release

Campo Valor
Tag v1.0.1
Publicado 26 de Abril 2026
Release URL github.com/martzb/vinilos-movile-app/releases/tag/v1.0.1
APK firmado app-release.apk (5.71 MB)
Generado por github-actions[bot]

Release v1.0.0

Publicado automáticamente por el pipeline CI.

Información del release

Campo Valor
Tag v1.0.0
Publicado 18 de Abril 2026
Release URL github.com/martzb/vinilos-movile-app/releases/tag/v1.0.0
APK firmado app-release.apk (5.71 MB)
Generado por github-actions[bot]

Instalación del APK

El APK está firmado con el keystore del proyecto y puede instalarse en cualquier dispositivo Android:

  1. Descarga app-release.apk desde el release v1.0.1
  2. En el dispositivo: Ajustes → Seguridad → Instalar desde fuentes desconocidas
  3. Abre el archivo .apk descargado e instala

Tareas del Sprint

HU01 – Consultar catálogo de álbumes

# Tarea Responsable Sprint
1 Crear fragmento de lista de álbumes Ruben Sprint 1
2 Consumir endpoint GET /albums Ruben Sprint 1
3 Mostrar portada, nombre y artista en cada tarjeta Diego Sprint 1
4 Ejecutar pruebas E2E de la vista de catálogo Diego Sprint 1

HU02 – Ver detalle de un álbum

# Tarea Responsable Sprint
5 Crear fragmento de detalle de álbum David Sprint 1
6 Implementar navegación desde el listado al detalle David Sprint 1
7 Mostrar tracks, artista, año y descripción del álbum Brian Sprint 1
8 Ejecutar pruebas E2E de la vista de detalle de álbum Brian Sprint 1

Arquitectura

Diagrama de clases

Copia de Diagrama de clases V2

Decisiones de diseño

Separación de responsabilidades:
  • Los Modelos contienen únicamente atributos y relaciones del dominio (álbumes, artistas, coleccionistas, tracks).

  • Los ViewModels concentran la lógica de negocio y exponen métodos para consultar, filtrar, crear o actualizar datos.

  • Las Views se limitan a mostrar la información y a invocar métodos del ViewModel.

Consistencia con MVVM:

  • Se garantiza que la vista nunca interactúe directamente con los modelos.

  • Los ViewModels actúan como puente, manteniendo la aplicación escalable y mantenible.

Diagrama de componentes

Diagrama Componentes Vinilos (2)

Decisiones de diseño

  • Cada entidad del dominio (Album, Artista, Coleccionista, Track) cuenta con un repositorio dedicado que actúa como único punto de acceso a los datos para el ViewModel. El repositorio encapsula la lógica de decisión entre dos fuentes: la API REST a través de VinilosApiService (datos en línea) y la base de datos local Room a través de AlbumDao (caché offline). Esta decisión evita que el ViewModel conozca el origen concreto de los datos, lo que reduce el acoplamiento entre capas y facilita las pruebas unitarias al permitir sustituir cualquier fuente por un doble de prueba sin modificar la lógica de presentación.

  • Cada ViewModel declara sus atributos de estado como MutableLiveData de acceso privado (p. ej. _albumes) y los expone públicamente solo como LiveData de solo lectura (p. ej. albumes). Esta asimetría garantiza que únicamente el propio ViewModel puede mutar el estado, mientras que los Fragments de la capa View únicamente pueden observarlo.

  • Para cada lista de dominio se definió un Adapter independiente (AlbumAdapter, ArtistaAdapter, ColeccionistaAdapter), desacoplado del Fragment que lo usa. Los Fragments delegan en el adaptador exclusivamente la responsabilidad de transformar una lista de entidades en vistas infladas, mientras que ellos mismos se limitan a observar el LiveData del ViewModel y a llamar a submitList(). Esta decisión respeta el principio de responsabilidad única dentro de la propia capa View y hace que cada adaptador sea reutilizable en más de un Fragment sin duplicar lógica de presentación.

Consistencia con MVVM

  • Ningún ViewModel del diagrama contiene referencias a Fragments, Adapters ni a objetos del framework de UI de Android (Context, View, FragmentManager). La comunicación desde el ViewModel hacia la Vista ocurre exclusivamente a través del mecanismo reactivo de LiveData.

  • El diagrama muestra que las dependencias fluyen en un único sentido: la capa View conoce al ViewModel, el ViewModel conoce al Repository, y el Repository conoce al DAO y al ApiService. Ninguna capa inferior referencia a una capa superior. Esta unidireccionalidad es la garantía estructural de que el patrón MVVM se aplica de forma coherente


Pipeline de integración continua

El proyecto cuenta con un pipeline de GitHub Actions que automatiza pruebas, construcción y publicación de releases.

image

Flujo general

Push / PR a main o develop
        ↓
┌─────────────────────────┐
│   JOB 1: Tests y Build  │
│  · Compila el proyecto  │
│  · Ejecuta unit tests   │
│  · Ejecuta pruebas E2E  │
│    (Espresso en emulador│
│     API 34)             │
└────────────┬────────────┘
             │ (si tests pasan)
             ▼
┌─────────────────────────┐
│  JOB 2: APK Release     │
│  · Firma el APK con el  │
│    keystore almacenado  │
│    en GitHub Secrets    │
│  · Verifica que el APK  │
│    fue generado         │
│  · Sube el APK como     │
│    artefacto temporal   │
└────────────┬────────────┘
             │ (solo workflow_dispatch)
             ▼
┌─────────────────────────┐
│  JOB 3: Release y Merge │
│  · Incrementa versión   │
│    en build.gradle.kts  │
│  · Crea rama release_vX │
│  · Merge release → main │
│  · Crea GitHub Release  │
│    con changelog auto   │
│  · Adjunta el APK       │
│    firmado al release   │
│  · Merge main → develop │
│  · Elimina rama release │
└─────────────────────────┘

Cuándo se ejecuta cada job

Evento Tests y Build APK Release Check Release y Merge
Push a develop
Push a main
Pull Request a main
Ejecución manual (workflow_dispatch)

APK instalable

El APK generado en cada release está firmado con el keystore del proyecto y puede instalarse directamente en cualquier dispositivo Android habilitando "Instalar desde fuentes desconocidas" en Ajustes → Seguridad.

Los secrets de firma (KEYSTORE_BASE64, KEYSTORE_PASSWORD, KEY_ALIAS, KEY_PASSWORD) están almacenados en GitHub Secrets y nunca se exponen en el código.


Despliegue del backend

Railway fork del repositorio

image image

Estrategia de Pruebas

Recurso: 1 Laptop de Desarrollo + Emulador Android (AVD)

1. Alcance Crítico (Foco en el Core)

Para garantizar la entrega completa en una semana, el equipo se ha enfocado estrictamente en las siguientes historias de usuario (Flujo de solo lectura):

  • HU01 - Consultar catálogo de álbumes: Visualización y carga de lista desde la API.
  • HU02 - Ver detalle de un álbum: Navegación e información extendida (incluyendo tracks). (Nota: Escenarios de Login y Creación fueron excluidos del alcance crítico).

2. Configuración "Granja Virtual"

Para cubrir la "fragmentación" de dispositivos, se han configurado y validado las pruebas sobre 3 perfiles secuenciales:

  • Perfil "Standard": Pantalla mediana (ej. Pixel 7), 4GB RAM, Android 13.
  • Perfil "Old Gen": Pantalla pequeña (ej. Nexus 5), poca RAM (1GB), Android 9.
  • Perfil "High End": Pantalla grande/Tableta, 8GB RAM, Android 14.

3. El Componente TNT (Ejecución Secuencial)

Debido a la restricción de hardware (1 Laptop), todas las pruebas (Monkey y VRT) se ejecutaron de forma serializada, encendiendo y apagando cada emulador de la Granja Virtual.

Nivel Técnica Herramienta Objetivo
Sistema Monkey Testing Android Monkey 1 sesión de 2,000 eventos (throttle 250ms) por cada perfil para certificar resiliencia en memoria.
Sistema E2E (BDD) Kraken 5 escenarios core escritos en Gherkin (adaptados con IDs reales) para validación de UI.
Manual VRT (Visual Regression) Humano / ADB Captura de Línea Base (vrt-baseline) en los 3 perfiles para comparar UI.
(Nota: Faker.js e inyección de datos dinámicos fue omitido al ser flujos de solo lectura).

4. Plan de Acción Diario (Cronograma Real Ejecutado)

Cronograma de 7 Días

gantt
dateFormat YYYY-MM-DD
axisFormat %d-%m
section Setup
Día 1 - Gherkin y Setup :done, a1, 2026-04-12, 1d
section Ejecución
Día 2 - Robustez Monkey :done, a2, after a1, 1d
Día 3 - Scripting Kraken :done, a3, after a2, 1d
Día 4 - Data Faker (OMITIDO) :done, a4, after a3, 1d
Día 5 - VRT Manual :done, a5, after a4, 1d
section Cierre
Día 6 - Wiki (OMITIDO) :done, a6, after a5, 1d
Día 7 - Video Final :active, a7, after a6, 1d
Loading
  • Día 1: Setup y Gherkin. [Completado] Se escribieron los 5 escenarios .feature basados en HU01 y HU02.
  • Día 2: Robustez. [Completado] Ejecución del Monkey Test (2,000 eventos) en los 3 emuladores sin presentar FATAL EXCEPTION.
  • Día 3: Scripting Kraken. [Completado] Codificación de los Steps técnicos usando los IDs reales de Android (ej. card_visitor).
  • Día 4: Data Integration. [Omitido] No aplica, ya que HU01 y HU02 son flujos de lectura.
  • Día 5: VRT Manual. [Completado] Se extrajeron exitosamente las 3 carpetas de Línea Base Visual (vrt-baseline-standard, old-gen, high-end).
  • Día 6: Wiki y Arquitectura. [Omitido] La documentación MVVM ya existe y se gestiona externamente.
  • Día 7: Cierre. [Completado] El APK se delega a un pipeline automático (CI/CD) y la demostración está finalizado.

5. Oráculo de Decisión (Falla/Pasa)

  • PASA: El Monkey no arroja crash, los scripts de Kraken llegan al final del flujo y la app mantiene el estado esperado en VRT.
  • FALLA: El emulador muestra el diálogo "App not responding" o se detecta una FATAL EXCEPTION en los logs del sistema.

6. Reporte de pruebas Espresso

Las pruebas instrumentadas (Espresso) se ejecutan automáticamente en el emulador Android API 34 dentro del pipeline CI. El reporte completo está disponible como artefacto del job Tests y Build en GitHub Actions.

image

Última ejecución exitosa

Campo Valor
Job Tests y Build
Estado Passed
Artefacto espresso-test-results
Ruta del reporte app/build/reports/androidTests/connected/index.html
Retención 7 días

El artefacto espresso-test-results se puede descargar directamente desde la pestaña Actions → run → Artifacts en GitHub, o con:

gh run download <RUN_ID> --name espresso-test-results --dir ./espresso-report
open espresso-report/app/build/reports/androidTests/connected/index.html

Grabación demostración de pruebas

Evidencia


Backlog Express (Hitos Realizados)

ID Tarea Estado
[QA-01] Definir los 5 escenarios Gherkin (Catálogo y Detalle) Completado
[AUTO-01] Scripting Kraken (Mapeo de IDs reales) Completado
[QA-02] Pruebas de Robustez (Monkey en 3 emuladores) Completado
[QA-03] VRT Manual (Extracción de baselines en 3 emuladores) Completado
[DOC-01] Grabar video demostrativo de los flujos E2E Completado

Tip

Aceleración mediante CI/CD: Las compilaciones del APK se encuentran delegadas a un pipeline de integración continua, lo cual elimina el esfuerzo manual del Día 7, dejando espacio exclusivamente para la creación del material audiovisual final.


Retrospectiva Starfish

Iteración evaluada: Inception

Objetivo: Analizar el desempeño del equipo durante la iteración inicial, identificando fortalezas, debilidades y oportunidades de mejora para optimizar el trabajo en las siguientes iteraciones.

Insumos utilizados:

  • Resultados de la coevaluación entre los miembros del equipo
  • Percepción general del equipo sobre el proceso de trabajo

Sección Brian Martínez David Rojas Diego Rojas Rubén Camargo
Keep Doing — Seguir haciendo - Realizar las tareas a su debido tiempo - Realizar las tareas a su debido tiempo
-Informar por posibles retrasos
-Mantener el enfoque para resolver problemas técnicos
-Seguir documentando con la misma claridad
- Liderar la definición técnica del proyecto (pipeline CI/CD, arquitectura, backlog)
- Documentar decisiones con alto nivel de detalle y claridad
More of — Hacer más - Atender a tiempo las tareas asignadas -Tener mas iniciativa en el planteamiento de las actividades -Participar mas activamente en discusiones técnicas del equipo
-Proponer mas mejoras en procesos o arquitectura
- Compartir más el conocimiento técnico con el equipo (pair programming, walkthroughs del pipeline)
Less of — Hacer menos - No esperar el fin de semana para realizar las tareas -No dialogar tanto con el equipo, ya que reduce la sinergia en el desarrollo de las actividades -Reducir el sobreanálisis o sobreesfuerzo en tareas que no lo requiere
-Evitar aislarnos demasiado en el trabajo individual
- Asumir menos trabajo en solitario sin delegar partes al equipo
Stop Doing — Dejar de hacer - No verificar las entregas asignadas -No pedir ayuda en tareas, para terminar las tareas mas rapidamente -No dejar tareas abiertas sin visibilidad para el equipo
-No recargar el trabajo buscando un mejor balance entre todos
- Evitar centralizar decisiones de infraestructura sin socializar las opciones primero
Start Doing — Empezar a hacer - Comunicar avances a tiempo -Realizar tareas con Pair Programing cuando tenga dificultades en la realizacion de alguna -Comunicar avances y bloqueos de forma más seguida
-Pedir feedback de forma temprana
- Crear espacios cortos (15 min) para explicar al equipo las piezas de CI/CD y arquitectura que configuró

Conclusión general

El equipo demostró capacidad técnica para entregar las historias del Sprint 1 en tiempo, pero identificó como área de mejora prioritaria la comunicación continua durante la ejecución. La tendencia al trabajo individual generó silos de conocimiento y redujo la sinergia entre miembros. Para el siguiente sprint, el equipo se compromete a socializar avances y bloqueos de forma frecuente, practicar pair programming en tareas complejas y distribuir más equitativamente las decisiones técnicas, con el objetivo de construir un equipo más cohesionado y con conocimiento compartido.

Evidencia https://drive.google.com/file/d/11K6eyeg0clLJRjDGxllgyYWJqiwE6hIx/view?usp=sharing


Evidencia de reuniones W1

Reunión semana 1 — Sprint 1

  • Fecha: 13 de Abril 2026
  • Horario: 21:00 – 22:00
  • Medio: Google Meet / Teams
  • Asistentes: Rubén Camargo, Diego Rojas, David Rojas, Brian Martínez

Agenda:

  1. Asignación de historias
  2. Priorización y Distribución de tareas

Evidencia: https://drive.google.com/file/d/1CPIq2WrIAPWwtrsRxA3PJxedS8MgSd1h/view?usp=sharing


Reunión semana 1 — Sprint 1

  • Fecha: 18 de Abril 2026
  • Horario: 21:00 – 22:00
  • Medio: Google Meet / Teams
  • Asistentes: Rubén Camargo, Diego Rojas, David Rojas, Brian Martínez

Agenda:

  1. Entrega parcial de tareas asignadas
  2. Revisión del CI/CD y set de pruebas

Evidencia: https://drive.google.com/file/d/1MQvNlzJ0dvj4QpOluv72498HJt9xPT0C/view?usp=share_link


Reunión semana 2 — Sprint 1

  • Fecha: 24 de Abril 2026
  • Horario: 21:00 – 22:00
  • Medio: Teams
  • Asistentes: Rubén Camargo, Diego Rojas, David Rojas, Brian Martínez

Agenda:

  1. Revisión de rubrica y errores encontrados en los modulos del sprint 1

Evidencia:

https://drive.google.com/file/d/1rX0SeJgshFGx2FMyDhPHXyrBhkATQOrZ/view?usp=sharing


Reunión semana 2 — Sprint 1

  • Fecha: 26 de Abril 2026
  • Horario: 21:00 – 22:00
  • Medio: Teams
  • Asistentes: Rubén Camargo, Diego Rojas, David Rojas, Brian Martínez

Agenda:

  1. Corrección del Issue de superposición de botones}
  2. Creacion Release v1.0.1

Evidencia: https://drive.google.com/file/d/13aFYvBfZfChadQvFEebzIz7VzF630J-2/view?usp=sharing

⚠️ **GitHub.com Fallback** ⚠️