Informe de Graduacion Virtual
Informe de Graduacion Virtual
Guatemala,
2023
Vo.Bo.:
(f)
Ing. Ludwing Cano
Tribunal Examinador:
(f)
Ing. Ludwing Cano
(f)
MSc. Douglas Barrios
(f)
El objetivo de este proyecto fue crear una interfaz de usuario intuitiva y útil para el
manejo de las horas de extensión, permitiendo a los usuarios acceder de manera fácil y
eficiente a esta información.
En este sentido, agradezco a los participantes de las pruebas por su tiempo y disposición
para colaborar con el proyecto.
Por el soporte económico, afectivo, moral y social, agradezco a mis padres, a mis herma-
nos, a mis mascotas y a mi familia cercana por estar conmigo en esta travesía. Comparto
con todos ustedes este logro y los que vienen.
En resumen, el proyecto se enfocó en crear una aplicación web robusta y amigable para
facilitar el acceso y la administración de las horas de extensión en la Universidad del Valle
de Guatemala. Espero que este proyecto sea de utilidad para la comunidad universitaria y
sirva como una herramienta para mejorar la gestión de las horas de extensión.
iii
Índice
Prefacio iii
Resumen ix
Abstract x
1. Introducción 1
2. Justificación 2
3. Objetivos 3
3.1. Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2. Objetivos específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4. Alcance 4
4.1. Entregables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.2. Límites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5. Marco teórico 6
5.1. Aplicaciones Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.1.1. ¿Qué es una aplicación web? . . . . . . . . . . . . . . . . . . . . . . . . 6
5.1.2. Beneficios de una aplicación web . . . . . . . . . . . . . . . . . . . . . 6
5.1.3. Aplicaciones web más populares . . . . . . . . . . . . . . . . . . . . . 7
5.1.4. ¿Cómo funcionan las aplicaciones web? . . . . . . . . . . . . . . . . . . 7
5.1.5. Diferencias entre una aplicación web y un sitio web . . . . . . . . . . . 8
5.1.6. Diferencias entre una aplicación web y una aplicación nativa . . . . . . 8
5.2. Librerías y recursos para el desarrollo frontend . . . . . . . . . . . . . . . . . 8
5.2.1. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2.2. Typescript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.2.3. Babel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
iv
5.2.4. HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.2.5. CSS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.2.6. Sass/SCSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.2.7. Material UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.2.8. React . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.2.9. React-Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2.10. Redux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2.11. React-Redux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2.12. Yarn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2.13. RESTful API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2.14. Axios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2.15. Firebase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6. Metodología 16
6.1. Stack de tecnología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.1.1. Comparación de popularidad . . . . . . . . . . . . . . . . . . . . . . . 16
6.1.2. Cuadros de pros y contras . . . . . . . . . . . . . . . . . . . . . . . . 17
6.1.3. Tecnología escogida (React, Angular, Vue) . . . . . . . . . . . . . . . . 18
6.1.4. ¿Por qué Typescript? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.1.5. Lenguaje de programación escogido . . . . . . . . . . . . . . . . . . . . 19
6.1.6. Redux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.1.7. Material UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.1.8. SCSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.2. Arquitectura y patrones de diseño . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.2.1. Pros y contras: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.2.2. Elección de arquitectura: . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3. Creación, instalación y configuraciones iniciales . . . . . . . . . . . . . . . . . 23
6.3.1. React and Typescript . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2. React-Redux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.3. React-Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3.4. Material UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3.5. SCSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3.6. Github . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3.7. Firebase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3.8. Axios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4. Funcionalidades, componentes, reductores y estilos . . . . . . . . . . . . . . . 25
7. Resultados 27
7.1. Pruebas de experiencia de usuario y usabilidad . . . . . . . . . . . . . . . . 27
7.1.1. Experiencia de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7.1.2. Usabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.1.3. Observaciones: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.2. Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.2.1. Pruebas de performance en la Home Page . . . . . . . . . . . . . . . . 28
7.2.2. Pruebas de performance en el Dashboard y la navegación entre funcio-
nalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.2.3. Observaciones: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.3. Aplicación de funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
v
7.3.1. Home Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.3.2. Log In Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.3.3. Search Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.3.4. Current Projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.3.5. Create Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.3.6. Own Projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.3.7. Project Participants . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.3.8. Project Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.3.9. Observaciones: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
8. Discusión 35
8.1. Experiencia de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.2. Usabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.3. Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8.4. Integración de funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8.5. Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8.6. Alcance del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9. Conclusiones 37
10.Recomendaciones 38
11.Bibliografía 39
12.Anexos 40
12.1. Encuestas a participantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
13.Glosario 41
vi
Lista de figuras
vii
Lista de cuadros
viii
Resumen
El proyecto consistió en la creación de una aplicación web utilizando React como tec-
nología principal enfocada en el frontend. La aplicación se desarrolló con el objetivo de
administrar y facilitar la visibilidad y acceso a las horas de extensión de la Universidad del
Valle de Guatemala.
En resumen, el proyecto logró su objetivo de crear una aplicación web robusta con una
interfaz de usuario amigable y útil para el manejo de las horas de extensión.
ix
Abstract
The project consisted of creating a web application using React as the main technology
focused on the frontend. The application was developed with the aim of managing and
facilitating visibility and access to the outreach hours of Universidad del Valle de Guatemala.
During the development process, usability and user experience tests were conducted
through surveys. The results of these tests allowed for significant improvements in the user
interface, ensuring a more intuitive and satisfying user experience.
In summary, the project successfully achieved its goal of creating a robust web application
with a friendly and useful user interface for managing outreach hours.
x
CAPÍTULO 1
Introducción
El mundo laboral es tan competitivo para la juventud actual, que la experiencia laboral
y la participación en proyectos se ha convertido en una necesidad. La práctica profesional es
fundamental para que los estudiantes puedan desarrollar sus habilidades y actitudes hacia
un determinado trabajo, puesto o carrera, demostrar todo lo que saben y aprender un poco
sobre el oficio.
Las prácticas te permiten crear vínculos y relaciones con profesionales y ampliar tu red.
El campo de trabajo es dinámico y profesional, y las relaciones que se desarrollan durante
las prácticas pueden determinar el futuro y la carrera del estudiante.
Actualmente la Universidad del Valle de Guatemala cuenta con diferentes maneras con
las cuales sus estudiantes pueden ganar experiencia comprobable dentro de sus campos de
estudio mientras siguen estudiando. Una de estas oportunidades son las horas de extensión.
Actualmente la UVG no cuenta con un sistema para el control de las horas de extensión,
ya que todo este proceso se realiza de forma manual según el director de carrera. Por lo
tanto,se plantea realizar una aplicación web en donde las instituciones puedan publicar los
proyectos disponibles, los directores pueden llevar un registro de los alumnos inscritos, de
sus horas y avances y los alumnos pueden buscar y registrarse a proyectos de interés.
1
CAPÍTULO 2
Justificación
Con base en las estadísticas e investigaciones realizadas por expertos dentro del ámbito
de marketing y analytics (Affde, 2021), se determinó que las empresas u organizaciones que
no tienen un sitio web tienden a perder un alcance del 25 %; por otro lado, los estudiantes
actualmente carecen de información sobre las horas de extensión, más que por medio de
correos o anuncios esporádicos. Los estudiantes actualmente no pueden ver de forma ac-
cesible cuantas horas han trabajado o llevar un récord sobre el trabajo realizado que sea
eficiente. Todo esto les sucede a los estudiantes de todas las facultades con requisitos de
horas de extensión, por lo tanto, se propone una solución informática, una aplicación web,
para aumentar el alcance y optimizar la inscripción, creación o monitoreo de proyectos de
voluntariado.
2
CAPÍTULO 3
Objetivos
Desarrollar una solución útil, con tecnologías web, con la cual los directores de carrera
tengan la posibilidad de observar, evaluar y presentar opciones de proyectos o empresas
al estudiantado para realizar horas de extensión.
Crear un sistema que permita a los estudiantes registrarse, ingresar, observar y suscri-
birse a proyectos presentados por ciertas empresas, cargar información, multimedia o
documentación acerca del progreso en proyectos existentes y actualizar su información.
3
CAPÍTULO 4
Alcance
Una propuesta de desarrollo frontend de una plataforma que sea capaz de gestionar la
información de los proyectos para los estudiantes, directores y organizaciones, enfocando
a las necesidades que presentan cada uno de los tipos de usuarios de la plataforma. La
aplicación web incluye distintas funcionalidades para los usuarios, siendo estas:
– Estudiantes
• Visualizar, buscar y filtrar proyectos
• Ver los Proyectos Recomendados
• Acceder a la descripción de los proyectos de su interés
• Aplicar al proyecto en el que desea participar
• Editar su perfil
• Adjuntar documentación que valide el trabajo realizado en un proyecto
– Organizaciones
• Visualizar, buscar y filtrar proyectos creados por ellos
• Crear y editar un proyecto
• Ver los participantes dentro de un proyecto
• Editar su perfil
– Directores
• Visualizar, buscar y filtrar proyectos creados por ellos
• Crear y editar un proyecto
• Ver los participantes dentro de un proyecto
• Editar su perfil
• Revisar solicitudes de empresas para nuevos proyectos
• Aceptar o rechazar postulaciones de estudiantes
4
4.1. Entregables
4.2. Límites
5
CAPÍTULO 5
Marco teórico
Una aplicación web es un programa que se ejecuta en un navegador web. Es una for-
ma en que las empresas o instituciones pueden intercambiar información y proveer servicios
de forma remota. Estas instituciones utilizan estas aplicaciones para que el usuario pueda
interactuar de forma conveniente y segura. Las funcionalidades más comunes de estas apli-
caciones son: carretas de compras, búsquedas y filtros de productos, mensajes instantáneos,
entre otros. Todas estas funcionalidades complejas se logran sin que los usuarios instalen o
configuren algún programa, sino haciendo el uso de su navegador. (Aws, 2023)
Las aplicaciones web nos proveen de muchos beneficios, entre los cuales se encuentran:
6
– Simplicidad para el usuario: Los usuarios no necesita descargar o instalar las apli-
caciones, lo que hace que sea sumamente accesible para ellos, eliminando los requeri-
mientos generales de capacidad de la máquina, además que una aplicación web se le
puede dar mantenimiento de una forma sencilla, incluso con actualizaciones de segu-
ridad, lo que significa que todos los usuarios tienen la última versión de desarrollo, lo
que disminuye considerablemente el riesgo a brechas de seguridad.
(Aws, 2023)
E-Commerce: Servicios en línea que permiten buscar, filtrar y pagar por productos
de variedad, según la necesidad del cliente.
Correo electrónico: Utilizadas para acceso empresarial o personal a los correos elec-
trónicos, incluyendo regularmente herramientas de comunicación como reuniones en
línea y mensajería instantánea, además de conversaciones grupales privadas.
Bancas virtuales: Se les provee a los usuarios una plataforma para realizar transac-
ciones o movimientos bancarios en línea.
(Aws, 2023)
La arquitectura puede ser client-side or server-side, cada uno con características, pros y
contras, además de distintos scripts.
7
– Arquitectura server-side: Se centra en el procesamiento de datos. Recibe requeri-
mientos del cliente y envía de vuelta una respuesta. Estos requerimientos usualmente
son para agregar más datos, para editar los existentes o eliminar lo que sea requerido.
En algunas ocasiones el servidor puede devolver contenido HTML completo, lo cuál se
conoce como Server Side Rendering.
(Aws, 2023)
Los sitios web son recursos antiguos que se utilizan para desplegar contenido estático.
Se debe instalar y correr programas con funcionalidades complejas. Por otro lado, las apli-
caciones web se crearon para crear un puente entre los programas y sitios estáticos, con
implementación de datos dinámicos y funciones interactivas al alcance de un navegador y
una URL.
Los desarrolladores tiene que construir diferentes versiones para cada sistema operativo
y que cumplan con los requisitos mínimos, términos y condiciones, entre otros factores para
que sean aprobados en las tiendas respectivas para los distintos dispositivos.
(Aws, 2023)
5.2.1. JavaScript
8
5.2.2. Typescript
5.2.3. Babel
5.2.4. HTML5
Es un lenguaje de hiper texto de alto nivel, el cuál es utilizado para renderizar contenido
en el navegador. La versión 5 incluye nuevos elementos, además de mejoras en funcionalidades
y reducción de otras. (Mozilla, 2023b)
W3C (World Wide Web Consortium) es una comunidad internacional donde los miem-
bros se encargan de establecer los estándares para el desarrollo web. Con base a estos están-
dares, existe documentación oficial en la que se puede revisar los patrones o estructuras uti-
lizadas para mantener una buena práctica con los elementos y comportamientos de HTML5.
(W3C, 2023)
5.2.5. CSS3
Sus siglas en ingles significan ”Cascade Style Sheets”. Es un lenguaje de hojas de estilos,
utilizado para describir la presentación de un documento escrito en HTML o en XML (inclu-
yendo dialectos provenientes de XML, tales como: SVG, MatchML o XHTML. Se encarga
de describir como los elementos son renderizados en el navegador y su versión tres adjunta
nuevas funciones y características que se pueden utilizar. Entre los usos más comunes se
encuentran:
Colores
Imágenes de fondo
Bordes
9
Tamaños
Posiciones
Visibilidad
Márgenes
(Mozilla, 2023a)
5.2.6. Sass/SCSS
Es un lenguaje de hojas de estilos que se compila para devolver CSS, o en otras pala-
bras, un pre-procesador de CSS. Te permite utilizar variables, reglas anidadas, mezcladores,
funciones, entre otros. Este lenguaje permite organizar largas hojas de estilos y facilita com-
partir los estilos en el proyecto. (SASS, 2023)
5.2.7. Material UI
MUI, por sus siglas en ingles, es una libería de React que ofrece herramientas de interfaz
de usuario para llevar a cabo nuevas funcionalidades de forma más rápida y eficaz. La librería
ofrece componentes predeterminados y personalizables, con lo cuál los desarrolladores pueden
establecer una paleta de colores, temas y estilos por defecto para los distintos componentes
y así reducir la carga de CSS.
En sus nuevas versiones se incluye el soporte del lenguaje tipado Typescript, o el uso
tradicional de JavaScript. Incluye además un sistema de grillas y contenedores para el manejo
de la adaptabilidad a los diferentes dispositivos o resoluciones del navegador, lo que deja al
desarrollador concentrarse en las funciones complejas o adicionales sin preocuparse por los
componentes o estilos. (UI, 2023)
5.2.8. React
Generalmente se utiliza para la creación de SPAs (Single Page Aplications), lo que per-
mite tener un único documento HTML con un elemento principal (”root”). Al inicio se
utilizaban clases de JavaScript para la creación de los componentes de React, pero actual-
mente se utilizan funciones en ES6. Algunas caracteristicas, buenas prácticas y estándares
son los siguientes:
10
Funciones puras
Reutilización de componentes
Manejo del estado de los componentes de forma local o global (Mediante Stores, Con-
text o Hooks.
Adicional a los elementos mencionados, existe documentación oficial para los estándares,
funcionalidades y librerías adicionales que pueden interactuar con React.
React permite realizar aplicaciones web interactivas y dinámicas de forma más ordenada
y con código limpio, además de que es más práctico de mantener y documentar.
El manejo del estado y del ciclo de vida de React es fundamental para el buen funciona-
miento e interacción con el usuario, así que React ofrece Hooks para manejar el comporta-
miento y propiedades de los componentes, entre ellos se pueden mencionar:
useState: Nos permite el manejo de propiedades locales, o el estado local. Este Hook
consta de una función y un valor, con la función se puede establecer uno o mas nuevos
valores, de cualquier tipo.
useMemo: Se utiliza para realizar cálculos complejos una sola vez, a menos que la
cambie la propiedad en la cual se aplica, esto para disminuir complejidad y tiempo de
ejecución al hacer un nuevo renderizado.
useRef: Muy similar a las referencias en JavaScript, este Hook nos permite incluir y
manejar referencias en el código JSX.
(Meta, 2023)
11
5.2.9. React-Router
Esta librería permite navegar en un proyecto de React, así que siendo una aplicación de
una sola página, React-Router nos permite conservar el estado global, renderizar los compo-
nentes necesarios y evitar refrescar el navegador cuando se cambia de ruta. Los componentes
que provee esta librería, y que cada uno cuenta con características y casos de uso específicos,
son:
– BrowserRouter
– HashRouter
– MemoryRouter
– NativeRouter
– Router
– StaticRouter
(Remix, 2023)
5.2.10. Redux
Redux funciona de forma independiente, aunque se puede combinar con React o con
alguna otra librería de visualización. Es bastante liviano, al rededor de 2kB, incluyendo
dependencias, pero incluye un amplio ecosistemas para agregar dependencias. (Abramov,
2023b)
5.2.11. React-Redux
Esta librería permite la interacción de los componentes de React con Redux, por medio
de una Store, que es la encargada del manejo global de los estados y datos que podrán
utilizar los distintos componentes del proyecto. Aunque existen distintas implementaciones,
las nuevas versiones de React-Redux permiten la interacción con el estado usando Hooks.
Estos son Hooks son useSelector y useDispatch.
– Tipos de eventos
12
– Acciones
– Reductores
– Selectores (opcional)
useSelector se utiliza para obtener porciones del estado global para utilizar según sea nece-
sario. Dentro del estado global, que es un objeto, existen secciones que se pueden utilizar a
conveniencia a lo largo del proyecto, es decir, cada reductor se incluye dentro de uno reductor
padre que es el que se incluye en la Store.
Por otro lado, useDispatch es una función que se utiliza para enviar acciones de cierto tipo
e invocar los reductores respectivos, esto cuando por alguna acción del usuario se modifica
el estado global. Dentro de las acciones pueden incluirse llamadas a una API. (Abramov,
2023a)
5.2.12. Yarn
– Instalar paquetes
Cada versión de los paquetes tiene su versión, por lo que deben ser compatibles entre sí
para poder funcionar, de existir alguna dependencia de paquetes.
13
Otra ventaja es que los interfaces de programación son agnósticas a la implementación,
lo que permite que sea utilizada en cualquier programa que cumpla con el contrato
establecido.
– REST API: También conocida como RESTful API, es una interfaz de programación
que une la arquitectura REST con las funciones o contratos de una API.
(RedHat, 2020)
5.2.14. Axios
Es un intermediario que utiliza una promesa para interceptar los requerimientos y las
respuestas a un servicio o API. L información se puede envíar o recibir con un JSON (aplica-
tion/json), Multipart / FormData (multipart/form-data), URL encoded form (application/x-
www-form-urlencoded), Posting HTML forms, etc.
Funcionalidades:
– Captura del progreso para los navegadores y para el servidor con información adicional
(rango de velocidad, tiempo restante)
14
– Compatible con formularios y tipo de dato Blob
(Axios, 2023)
5.2.15. Firebase
Configuración remota
Extensiones
Autenticación
Hosting
Almacenamiento en la nube
(Google-Developers, 2023)
15
CAPÍTULO 6
Metodología
React
Typescript
Redux
Material UI
SCSS
Según State of JS (2022) las tres tecnologías que encabezan la lista de mayor popularidad
son: React, Angular y Vue. Además un estudio realizado por StackOverflow (2022) se muestra
en la Figura 1, nos provee de un porcentaje de las tecnologias web en frontend y backend.
16
Figura 1: Estudio de popularidad de tecnologías web entre desarrolladores profesionales
React:
Pros Cons
Fuerte soporte de la comunidad Una considerable cantidad de código boi-
lerplate
Vasto ecosistema de librerías y herra- Actualizaciones frecuentes que podrían
mientas requerir
Excelente performance
17
Angular:
Pros Cons
Excelente performance Curva amplia de aprendizaje
Escalable Código base pesado
Funcionalidades de seguridad robustas Poca flexibilidad
Vue:
Pros Cons
Integración sencilla con aplicaciones exis- Escalabilidad limitada
tentes
Sintaxis simple Falta de documentación oficial
Un ecosistema en crecimiento con libre- Una comunidad pequeña
rías y herramientas
18
Casos de uso
Casos no recomendados
StackOverFlow, 2022
Con base en los beneficios y casos de uso, se ha escogido a Typescript como lenguaje de
programación, ya que la aplicación es medianamente grande, con datos de usuarios sensibles
y variedad de tipos de datos que deben ser tratados apropiadamente para evitar la mayor
cantidad de errores. React, librerías de terceros, herramientas y documentación han migrado
a Typescript, lo cual facilita el desarrollo.
19
6.1.6. Redux
Aunque existen ciertas Stores para el manejo del estado en React, Redux, además de
ser creado por Dan Abramov, quien trabaja en Meta, ofrece una mayor documentación y
soporte que otras librerías como MobX, React Context, RxJS, entre otros. Mientras que React
Context API es esta diseñado como un mecanismo de inyección de dependencia que permite
que los datos estén disponibles en el árbol de componentes sin ser introducidos manualmente,
Redux es un manejador del estado completo, capaz de permitir a una aplicación hacer y
revertir acciones y proveer herramientas avanzadas de depuración para los desarrolladores
Fernandez, 2023. Por lo tanto se ha elegido a Redux como manejador del estado en la
aplicación.
6.1.7. Material UI
Aunque existen librerias de estilos o componentes para Bootstrap y Tailwind, las cuales se
caracterizan por su consistente experiencia de usuario, documentación solida y alta velocidad
de desarrollo, Material UI provee una libertad artística mientras se crean aplicaciones únicas,
estilizadas y con aspecto moderno, en otras palabras ofrece mayor flexibilidad y libertad a
los desarrolladores. Por lo tanto, se ha elegido a Material UI como librería de componentes
y estilos por la alta gama de opciones que ofrece, además que es de uso exclusivo de React.
6.1.8. SCSS
Aunque SCSS y Less son ambos preprocesadores de CSS, sus mayores diferencias radican
en la sintaxis, "queda a la discreción del desarrollador cual procesador utilizar"(Sharma,
2021). Less ofrece es un procesador muy robusto que ofrece funcionalidades para cálculos
complejos y mixins, SCSS ofrece opciones similares, con otra lógica de implementación y
ya que para el proyecto SCSS es requerido para cambios pequeños, ya que Material UI se
encarga de los themes de los componentes, se ha elegido a SCSS como preprocesador de
CSS.
20
Roos, 2022
De las anteriormente mencionadas, las arquitecturas aplicables con React son SPA y SSR
con Re-Hydration.
Todas los requerimientos a las API’s se mandan y obtienen desde el cliente (navegador)
para luego generar código estático que sera interpretado por el navegador. A continuación
en la figura 2 se presenta el proceso de integración y flujo del CSR, además de las tablas de
comparación de pros y contras:
21
Pros Cons
Tiempo corto de respuesta al primer bit Posible lapso alto entre la renderizado y
después del requerimiento del navegador la interactividad
al servidor
Buena experiencia de usuario para apli- No recomendado para el buen manejo de
caciones altamente interactivas SEO y previsualización de medios socia-
les
Pruebas autónomas para el Frontend Complejidad y tecnología heterogénea
Separación de preocupaciones entre el Recursos computacionales en el cliente
cliente y el servidor
HTTP APIs disponibles del lado del
cliente
22
Pros Cons
Rendimiento mejorado y renderizado mas Complejidad incrementada en el código
rápido de paginas en el frontend base debido a la necesidad de manejar
el renderizado del lado del servidor y del
cliente
Mejor SEO y un mejor indexado de bús- Carga incrementada del servidor y poten-
queda de contenido dinámico ciales problemas de rendimiento por lle-
var a cabo del renderizado en el servidor
Habilidad para pre-renderizar paginas y Capacidad limitada de cache en el nave-
mejorar le experiencia de los usuarios con gador, ya que el HTML es generado en el
conexiones de internet lentas servidor y no en el cliente
Seguridad mejorada y protección contra Potenciales retos con el SEO, por motivos
ataques de cross-site scripting de indexado o con los motores de búsque-
da.
Soporte para conexiones de red lentas Habilidad limitada para realizar ciertas
acciones o accesos a información en el
cliente hasta que el primer proceso de hi-
dratación haya sido completado.
Aunque el SSR ofrece funcionalidades para mejorar el rendimiento, los motores de bús-
queda y la carga del frontend, la arquitectura seleccionada es Client-Side Rendering. El
principal motivo de esta elección es la intervención del servidor, ya que el alcance del pro-
yecto se limita a Frontend únicamente, otra razón es la complejidad que agrega SSR y las
funciones que ofrece no se encuentran dentro del scope del proyecto.
6.3.2. React-Redux
– Se creo el archivo store.ts, en el cual se agregaron las dependencias para Redux dev
tools, la configuracion de la store y el persistor, con su respectiva whitelist.
23
– En el render principal se agregaron los componentes Provider y PersistGate como
ancestros del componente principal App.
6.3.3. React-Router
– Dentro del archivo index.tsx, se agregó el componente BrowserRouter como padre del
componente principal App.
6.3.4. Material UI
6.3.5. SCSS
Se utilizó el comando yarn add sass para utilizar archivos .scss en los componentes
requeridos.
6.3.6. Github
6.3.7. Firebase
– Se creó una nueva aplicacion en Firebase para el hosting del frontend del proyecto.
6.3.8. Axios
Se instalaron las dependencias necesarias para Axios con yarn add axios. Posterior-
mente, se crearon constantes globales para el Host’s URL.
24
6.4. Funcionalidades, componentes, reductores y estilos
Para un nuevo componente se crearon los archivos .tsx con un nombre descriptivo
Para el manejo del estado en Redux se siguió el patrón Tipos, acciones, reductores.
En el caso de una acción para enviar datos al servidor, se siguió el mismo patrón, pero
esta vez se uso el Hook useDispatch.
Para los estilos se aplicó el estándar BEM como convención para el nombre de las
clases y el patrón mobile-first. Por otros lados se evitó usar estilos inline o dentro de
los componentes, así que se crearon archivos .scss para cada componente.
Luego de completar una funcionalidad, se crearon pruebas unitarias simples para los
componentes.
Se crearon ramas para las distintas funcionalidades para posteriormente hacer push al
repositorio.
Landing Page
Manejo de multimedia
Inicio de sesión
Ver proyectos en los que se ha aplicado o se encuentran activos para el usuario estu-
diante
25
Modificar el perfil para todos los usuarios
26
CAPÍTULO 7
Resultados
27
7.1.2. Usabilidad
7.1.3. Observaciones:
7.2. Performance
Se utilizó un Profiler de React dev tools para determinar el tiempo de renderizado para
los paginas criticas de la aplicación (Home Page, Login, Dashboard and navigation)
28
Figura 6: Performance de carga de la Home Page
Tiempo de renderizado: 26.2ms, desde el inicio de sesión hasta la carga del dashboard y
navegación entre funcionalidades.
29
7.2.3. Observaciones:
30
7.3.2. Log In Page
31
7.3.4. Current Projects
32
7.3.6. Own Projects
33
7.3.8. Project Details
7.3.9. Observaciones:
34
CAPÍTULO 8
Discusión
Con base a los resultados obtenidos en las encuestas realizadas y como se muestra en
la figura 3, la percepción de los usuarios es que la interfaz de usuarios es intuitiva y fácil
de manejar. La implementación se base en los diseños provistos, así que temas de paleta de
colores, colores, tipos de letra, espaciado, entre otros, esta fuera del alcance del proyecto,
dejando que el frontend fuera fiel a los diseños y mantuviera la consistencia a través de
la aplicación. Ya que el mayor porcentaje de los usuarios encontrar la interfaz intuitiva, la
aplicación cumple con lo determinado dentro del alcance.
8.2. Usabilidad
Los usuarios fueron capaces de realizar tareas de forma parcial o completa, dejando
a un porcentaje pequeños son lograr completar las tareas, como se muestra en la figura
4, así que la aplicación funciona y es utilizable para realizar las distintas funcionalidades
establecidas previamente. 2 % de los usuarios no lograron completar sus tareas, lo que nos
deja con un punto atípico dentro del porcentaje de los que si lograron completarlas de forma
parcial o completa. Ya que la prueba fue realizada con un limite de tiempo, esto causó
que un cierto porcentaje de usuarios no lograra completar todas las tareas asignadas. Para
disminuir esos porcentajes se necesita un manual de usuario con las especificaciones básicas,
para disminuir el porcentaje de los usuarios que no lograron realizar las tareas y disminuir la
curva de aprendizaje y familiarización con la aplicación. El mayor porcentaje de los usuarios
encontraron la aplicación útil y funcional.
35
8.3. Performance
Con los datos obtenidos en las figuras 4 y 5, se observa que los tiempos de renderizado son
bajos y mantienen un tiempo aceptable para no afectar la experiencia del usuario. Posibles
retrasos con las imágenes o los datos no son responsabilidad del frontend, ya que los tiempos
de respuesta del servidor no están dentro del alcance del proyecto y las pruebas.
Todas las funcionalidades minimas necesarias han sido implementadas, como se mues-
tra en las figuras 7 - 11. La aplicación Web es funcional y bug free. Aunque interfaz tiene
como base los diseños, se ha tomado libertad creativa para modificar elementos a discre-
ción, sin embargo se han mantenido las reglas de negocios respecto a las funcionalidades
e integraciones necesarias. Los usuarios estudiante, director y organización, respectivamen-
te, son capaces de realizar el proceso de aplicación, revisión, creación, búsqueda, filtrado,
recomendación y visualización de proyectos de horas de extensión.
8.5. Seguridad
Se tomaron las precauciones básicas de seguridad para el Cross Site Scripting (XSS),
manejo correcto del localstorage, rutas protegidas, uso de tokens para realizar los requeri-
mientos, restricciones de los tipos de documentos que se pueden subir al servidor, desinfección
de los inputs del usuario en los formularios, entre otros. La seguridad de la aplicación no
se encuentra dentro del alcance del proyecto, sin embargo se realizaron estas medidas
adicionales para mantener la solidez de la aplicación.
36
CAPÍTULO 9
Conclusiones
– Se desarrolló una solución útil, con tecnologías web, con la cual los directores de carrera
tengan la posibilidad de observar, evaluar y presentar opciones de proyectos o empresas
al estudiantado para realizar horas de extensión.
– Se creó un sistema que permita a los estudiantes registrarse, ingresar, observar y sus-
cribirse a proyectos presentados por ciertas empresas, cargar información, multimedia
o documentación acerca del progreso en proyectos existentes.
37
CAPÍTULO 10
Recomendaciones
– Se recomienda a los desarrolladores que desean ampliar las funcionalidades que con-
serven el patrón establecido, las buenas prácticas, un código limpio y que documenten
apropiadamente.
– En futuras mejoras se puede incluir el uso del SSR para mejorar el SEO e implementar
búsquedas dinámicas.
38
CAPÍTULO 11
Bibliografía
39
CAPÍTULO 12
Anexos
40
CAPÍTULO 13
Glosario
Hook categoría de funciones que permiten que el código base llame al código de extensión.
41
Scope tambien conocido como alcance, es el área del programa donde se reconoce un ele-
mento que tiene un nombre identificador.. 41
SEO Optimización de motores de búsqueda: el proceso de mejorar su sitio para los motores
de búsqueda.. 41
41