Skip to content

Sprint 2 Review

isinning1 edited this page May 13, 2024 · 4 revisions

Sprint 2 Review

Introducción

Durante el Sprint 2 de la aplicación Vinilos, el equipo se centró en implementar tres historias de usuario críticas para el sistema, relacionadas con la gestión de artistas y la navegación general del menú. Además, el equipo abordó la optimización del rendimiento, corrigiendo cuellos de botella en la carga de datos y aplicando técnicas modernas para evitar errores ANR. Este informe detalla la implementación de estas historias de usuario, las estrategias de perfilamiento, microoptimización y las pruebas realizadas.

Objetivos del Sprint

  1. Historia de Usuario 03: Consultar el listado de artistas

    • Proveer un listado de artistas con desplazamiento fluido.
    • Mejorar la eficiencia de la carga usando caché local.
  2. Historia de Usuario 04: Consultar la información detallada de un artista

    • Presentar información detallada de un artista, incluyendo biografía y discografía.
    • Permitir la navegación entre artistas relacionados de forma optimizada.
  3. Historia de Usuario 07: Gestionar Menú

    • Habilitar la navegación fluida desde el menú principal hacia otras actividades.
    • Centralizar la funcionalidad común para las actividades dentro de una base compartida.

Implementaciones y Resultados

1. Patrón MVVM

Para mantener el código modular y escalable, se utilizó el patrón Model-View-ViewModel (MVVM):

  • Modelos: Performer, Album y otros modelos definieron la estructura de datos.
  • ViewModel: PerformerViewModel y AlbumViewModel manejan la lógica de datos y proporcionan observables.
  • Vistas: PerformerActivity y AlbumActivity representan las interfaces con el usuario.

2. Listado de Artistas

  • PerformerViewAdapter: Un adaptador especializado para poblar el RecyclerView con artistas. La implementación del patrón ViewHolder mejoró significativamente el rendimiento durante el desplazamiento.
  • PerformerListener: Un patrón de escucha para capturar los eventos de selección y navegar a PerformerDetailActivity.
  • PerformerRepository: Gestiona la obtención y almacenamiento en caché de los datos para reducir la dependencia de la red.

3. Menú de Navegación

La clase abstracta VinilosActivityBase centraliza el menú para navegar hacia las actividades de álbumes y artistas, y gestiona los errores mediante un método showError.

4. Microoptimizaciones y Análisis de Desempeño

Para mantener el rendimiento de la aplicación y mejorar la experiencia del usuario:

  • Estrategias de Caché: Utilizamos almacenamiento local siguiendo este tutorial para reducir las llamadas a la red.
  • Uso de Glide y Picasso: Herramientas para cargar imágenes eficientemente.
  • Patrón ViewHolder: Minimiza la creación de vistas durante el desplazamiento.
  • Profiling: Siguiendo este tutorial, se identificaron problemas como consultas ineficientes en la base de datos y procesos que bloqueaban el hilo principal.

5. Manejo de Hilos y Co-rutinas

Para evitar errores ANR, el equipo implementó las siguientes técnicas:

  • Co-rutinas de Kotlin: Delegando procesos pesados al hilo IO con Dispatchers.IO.
  • Estrategias de Caching: La implementación de estructuras de caché permitió evitar llamadas duplicadas a la red, agilizando el rendimiento de las vistas.

6. Pruebas de Desempeño

  • Firebase Test Lab: Opcionalmente, se evaluó la estabilidad de la aplicación en diferentes dispositivos.

Analisis de desempeño

Resultados Obtenidos

  • HU03: El listado de artistas se despliega de manera eficiente, sin bloqueos ni demoras.
  • HU04: Los detalles del artista muestran información completa, con navegación entre elementos relacionados.
  • HU07: El menú permite una navegación coherente entre las actividades.

Conclusiones

El Sprint 2 proporcionó una base sólida para la aplicación Vinilos, alcanzando un rendimiento óptimo y minimizando errores ANR. Las microoptimizaciones y técnicas de perfilamiento fueron clave para lograr la fluidez en la experiencia de usuario. Continuaremos refinando estos procesos en sprints futuros.

Clone this wiki locally