# README ### Proyecto-12 | Identificación | | -------- | | Fundamentos de Ingeniería de Software | | M4B - Docente: Alejandro Adorjan | | Participantes: Fiorella Alvira, Martin Gulla, Agustina Serrón| | Fecha de entrega: 18-oct-2021| | https://github.com/ORT-FIS-202108/proyecto-12.git | # Índice <A HREF="#git">Repositorio Git</A> <A HREF="#glosario">Glosario</A> <A HREF="#elicitacion">Elicitación</A> <A HREF="#evidencia">-Evidencia de actividades de investigación</A> <A HREF="#persona">- -User persona</A> <A HREF="#cuestionario">- -Cuestionario</A> <A HREF="#entrevista">- -Entrevista</A> <A HREF="#inversa">- -Ingenieria inversa</A> <A HREF="#analisis">- -Análisis de documentos</A> <A HREF="#modelo">Modelo conceptual</A> <A HREF="#especificacion">Especificación</A> <A HREF="#funcionales">-Requerimientos funcionales</A> <A HREF="#nofuncionales">-Requerimientos no funcionales</A> <A HREF="#stories">User Stories</A> <A HREF="#case">Use Case</A> <A HREF="#bocetos">Bocetos de IU</A> <A HREF="#validacion">Validación y verificación</A> <A HREF="#reflexiones">Reflexiones</A> <A HREF="#anexo">Anexo</A> <A HREF="#bibliografia">Bibliografía</A> <a id="git"></a> ## Repositorio Git ### Creación y uso de repositorios locales Para este trabajo se creó un repositorio remoto en la plataforma https://github.com, el cual nos permite trabajar de forma remota, teniendo acceso a los documentos y al código en línea. Para llevar a cabo el trabajo, cada integrante trabajará en su repositorio local realizando check-in y check-out al repositorio remoto del equipo. Para esto cada integrante a la hora de hacer un cambio deberá realizar un commit (git add . , y luego git commit -m "realicé cambio en.."), en nuestro caso, como utilizamos la herramienta hackmd.io (nombrado mas adelante), solamente precisamos hacer push mediante una funcionalidad de la página misma. Se crearon dos ramas en el repositorio remoto, una master que fue el de las versiones estables y otra develop en la cual se iban realizando los cambios. Cuando todos estuvimos de a acuerdo hicimos el merge de la rama develop con la rama master, para generar la versión final del trabajo. La metodología de trabajo consistió en realizar diferentes reuniones donde todos trabajábamos simultáneamente por llamada vía Teams, escribiendo en el README.md por medio de la página hackmd.io, en la cual esta incorporada la función de PUSH de git. Al finalizar la reunión, uno de los integrantes realizaba el push y anotaba su nombre, ya que este recurso no permite marcar que usuario fue el que publicó la actualización. En la segunda parte del proyecto se harán más ramas, una para cada integrante donde cada uno irá subiendo código de la aplicación a realizar. <a id="glosario"></a> ### Glosario * Git: sistema de control de versiones distribuido. * Estándar IEEE 830: es un conjunto de recomendaciones para la especificación de los requerimiento o requisitos de software el cuál tiene como producto final la documentación de los acuerdos entre el cliente y el grupo de desarrollo para así cumplir con la totalidad de exigencias estipuladas. * Categoría: Grupo dentro de la aplicación donde se agrupan gastos similares, por ejemplo, gastos de medios de transporte como Omnibus, Uber, Taxi, etc. se puede agrupar en una categoría "Transporte". * User Stories: es una representación de un requisito escrito en una o dos frases utilizando el lenguaje común del usuario. * Uses Cases: Un caso de uso es una descripción escrita de cómo los usuarios realizarán las tareas en la aplicación. <a id="elicitacion"></a> ## Elicitación <a id="evidencia"></a> ### Evidencia de actividades de investigación Se utilizaron las siguientes metodologías: * User persona * Cuestionario * Entrevistas * Ingenieria inversa * Análisis de documentos <a id="persona"></a> #### User persona ![](https://i.imgur.com/IbEPBQ1.png) ![](https://i.imgur.com/4MIPTSk.png) <a id="cuestionario"></a> ### Cuestionario Se realizo un cuestionario, del cual se obtuvieron 13 respuestas. La franja etaría fue de edades entre (18 a 60 años). #### Resultados Concluimos que las personas encuestadas les parece una aplicación pertinente para llevar un control de sus gastos. Además están de acuerdo con que se puedan agregar varios métodos de pago en los gastos. Las principales categorías que sugirieron fueron: gastos de la casa, comida, transporte y viajes. Por ultimo sugieren algunos aspectos que nos gustaría tener en cuenta para la aplicación como por ejemplo: poder compartir gastos con otras personas y tener una plataforma integrada de pago. <a id="entrevistas"></a> ### Entrevistas Se realizaron dos entrevistas por un lado a una mujer de 25 años, tratando de buscar información sobre personas que recién se están independizando y organizando sus gastos. Por otro lado, a un hombre de 40 años, ya padre de familia que tiene más experiencia con la organización de sus gastos. Preguntas: * ¿Organizas tus gastos personales? ¿Si la repuesta es si, como lo realizas? * ¿Que tan importante es para usted tener sus gastos organizados? * ¿Revisas los gastos que realizas por mes, para compararlos con el pasado para realizar cambios en el ahorro? *En relación a la aplicación:* * ¿Te parecería interesante utilizar una aplicación para organizarte? * ¿Que categorías le gustaría tener? (ejemplo : gastos de la casa, comida, etc) * ¿Si pudieras poner un limite de gastos, te gustaría que sea por agrupación de gastos o general del total? * ¿Algo mas que te gustaría que tenga la aplicación? ¿Alguna funcionalidad en particular? #### Resultados Las entrevistas tuvieron respuestas muy distintas a algunas de las preguntas. Por ejemplo, uno de los entrevistados expresó su deseo por tener una aplicación de este estilo, sin embargo, el otro respondió que le seria muy poco eficiente anotar uno por uno los gastos en la aplicación, lo cual le llevaria mucho tiempo, y para solucionar esto dió la idea de poder automatizar la creación de gastos al vincular las tarjetas a la aplicación, lo cual generaría el gasto automaticamente en la app cuando se efectua un pago con la misma. Por otro lado, ambos expresaron la importancia que tiene en su economía personal el llevar un registro de las cuentas del mes. Otro aspecto en el que coincidieron es en algunas de las categorías que a ambos les parece importante tener, como la de gastos de la casa y ocio. <a id="inversa"></a> ### Ingeniería inversa Se tomaron como referencia otras aplicaciones existentes como: CoinKeeper y Expense Manager. Estas nos sirvieron para analizar las categorías por defecto que van a existir en la aplicación como: Gastos de la casa, Comida, Trasporte, entre otras. ![image alt](https://i.imgur.com/g1fpmzC.png "title" =300x550) ![image alt](https://i.imgur.com/rTMZP1Q.png "title" =300x550) <a id="documentacion"></a> #### Documentación Se utilizó la documentación referente al estándar IEEE 830. <a id="modelo"></a> ## Modelo conceptual La aplicación *misGastos*, tiene como fin la gestión de los gastos personales de un usuario. Permitiéndole a este agregar gastos y eliminar, llevando un registro semanal, mensual y anual. La aplicación genera diferentes estadísticas de los gastos del usuario para poder tener un análisis detallado de los mismos. El público objetivo son personas que viven solas o personas que vivan en familia que quieran controlar los gastos. ![](https://i.imgur.com/9BAcJ7p.png) <a id="especificacion"></a> ## **Especificación** **Definición de requerimientos funcionales y no funcionales** **Actores** * Usuario <a id="funcionales"></a> **Requerimientos funcionales** | Código | Requerimiento | Descripción| Actor | Prioridad | | ------ | ------------- | ---------- | ----- | --------- | | RF1 | Ingresar método de pago| El usuario puede ingresar diferentes fondos, ej: tarjeta de crédito, efectivo, etc. Para el caso de las tarjetas el usuario puede elegir si desea que al realizar compras con estas se genere automaticamente un gasto en la aplicación sin necesidad de hacerlo de manera manual. Para cada metodo de pago se eligen los diferentes gastos. Se da la opción de tener un tope o no. Al poner un tope, se envía una notificación cuando se supera el 90% del mismo| Usuario | Alta | | RF2 | Agregar gasto | El sistema debe ser capaz de agregar un gasto a cada categoría. Los gastos tienen un nombre y descripción. | Usuario | Alta | | RF3 | Eliminar gasto| El usuario debe ser capaz de eliminar un gasto realizado |Usuario| Alta | | RF4 | Editar gasto | El usuario debe ser capaz de eliminar un gasto realizado |Usuario| Media | | RF5 | Ver resumen |El usuario debe poder ver un resumen anual, mensual y semanal|Usuario| Media | | RF6 | Agregar categoría | El usuario debe ser capaz de crear una nueva categoría en la cual se van a registrar gastos | Usuario | Media | | RF7 | Eliminar categoría |El usuario debe poder eliminar la categoría que quiera |Usuario | Media | | RF8 | Agregar nota|El usuario debe poder anotar gastos que le gustaría hacer en un futuro, como recordatorio para no olvidarse |Usuario | Media | | RF9 | Compartir gastos con otro usuario de la aplicación |El usuario debe poder elegir a otros usuarios con lo que quiera compartir el gasto y así hacer la divisiones pertinentes |Usuario | Baja | | RF10 | Agregar un ingreso |El usuario debe poder ingresar un tipo de ingreso como por ejmplo: salario, plata extra, etc |Usuario | Alta | <a id="nofuncionales"></a> **Requerimientos no funcionales** | Código | Requerimiento | Descripción| Prioridad | | ------ | ------------- | ---------- | --------- |RNF1|Compatibilidad|Debe ser compatible con Android 9.3.1, IOS 12 |Alta| |RNF2|Color|Color primario: Deep Purple 700, secundario: Teal 700 | Alta | |RNF3|Idiomas|Se puede elegir tener la aplicación en inglés o español |Baja| |RNF4|Fuente| La fuente de la aplicacion debe ser Roboto | Alta| |RFN5|Íconos|Cualquier ícono debe estar relleno|Alta| |RFN6|Lenguajes de programación|Se debe de programar en los siguientes lenguajes: JavaScript ES2015, Nodejs, HTML5, css.|Alta| |RFN7| Botones explicativos|Todos los botones tendrán un mensaje que describa su función de manera corta.|Media| |RFN8| Plataforma de pago integrada | Debe ser posible realizar pagos por medio de la aplicación si se tiene vinculada una tarjeta de crédito (VISA o MasterCard) | Baja | ## User Stories / Use Cases detallados <a id="stories"></a> ### User Stories #### ID: #1 Título: Conocer total de gastos. Narrativa: * Como usuario * Quiero conocer el monto total de mis gastos. * Para para tener una noción de cuánto he gastado en determinado período de tiempo. Criterios de aceptación: A medida que se van agregando gastos quiero poder visualizar un resumen de los gastos efectuados en un lapso de tiempo, ej: semana, mes, año. #### ID: #2 Título: Selección de categoría. Narrativa: * Como usuario * Quiero poder seleccionar una categoría para agrupar mis gastos. * Para organizar de mejor manera los mismos. Criterios de aceptación: Al ingresar un nuevo gasto, se debe poder elegir una categoría en la cual este se guardará. #### ID: #3 Título: Agregar un gasto. Narrativa: * Como usuario * Quiero poder agregar un gasto * Para llevar el control de gastos en el mes Criterios de aceptación: Al ingresar un nuevo gasto, se debe poder agregar un nombre y una descripción del mismo y colocarlo en la categoría deseada <a id="case"></a> ### Use Case #### Case #1 Título: Agregar gasto Actor: Usuario Caso de uso asociado al RF2 Curso Normal: | Acción de los actores | Respuesta del sistema | | -------- | -------- | | 1. Entra en la sección de ingresar gastos (Fig 4,5) | 2. Se despliega el menú para ingresar un gasto | |3. Se ingresan los datos del gasto | 4. El sistema pregunta si los datos ingresados son correctos| Cursos Alternativos: Al ingresar los datos, el usuario no completa todos los campos requeridos, el sistema no le deja avanzar en el proceso de creación de gasto. #### Case #2 Título: Agregar categoría Actor: Usuario Caso de uso asociado al RF6 Curso Normal: | Acción de los actores | Respuesta del sistema | | -------- | -------- | | 1. Entra en la sección de ingresar categoría. (Fig 3) | 2. Se despliega el menú para ingresar una categoría | |3. Se ingresa el nombre de la categoría y se elige un ícono | 4. El sistema pregunta si los datos ingresados son correctos | Cursos Alternativos: Al ingresar la categoría, el usuario repite el nombre de una ya existente, el sistema no le deja avanzar en el proceso de creación de categoría. #### Case #3 Título: Eliminar categoría Actor: Usuario Caso de uso asociado al RF7 Curso Normal: | Acción de los actores | Respuesta del sistema | | -------- | -------- | | 1. Se elige una categoría. (Fig 6) | 2. Se muestran opciones de la categoría (elimina la categoría o renombrar) | | 3. Se elige eliminar categoría| 4. El Sistema pide confirmación | | 5. Se confirma | 6. El Sistema elimina la categoría| Cursos Alternativos: Si la categoría tiene gastos vinculados, entonces el sistema pedirá confirmacion al momento de eliminarla para no perder los gastos de dicha categoría. #### Case #4 Título: Ingresar método de pago Actor: Usuario Caso de uso asociado al RF1 Curso Normal: | Acción de los actores | Respuesta del sistema | | -------- | -------- | |1. Se elige ingresar nuevo método de pago| 2. Se despliega el menu de ingreso de método de pago| |3. Se ingresan los datos y se confirma |4. Verifica que los datos sean los correctos (tipo de tarjeta, número, titular, etc)| Cursos Alternativos: Si el usuario ingresa datos del método de pago no válido, por ejemplo un número incorrecto de tarjeta, el sistema no lo deja avanzar. <a id="bocetos"></a> ## Bocetos de IU ### Vistas usuario Fig 1: página principal de la app. ![image alt](https://i.imgur.com/LGNxqBz.png =200x400) Fig 2: usuario abre el menú. ![image alt](https://i.imgur.com/8B5IiVN.png =200x400) Fig 3: usuario desea agregar una nueva categoría. ![image alt](https://i.imgur.com/YUn6tNF.png =200x400) Fig 4,5: usuario desea agregar un nuevo gasto. ![image alt](https://i.imgur.com/RgnqNI1.png =200x400) ![image alt](https://i.imgur.com/dd7dfQ3.png =200x400) Fig 6: usuario desea eliminar una categoría o renombrarla (manteniendo pulsada la misma). ![image alt](https://i.imgur.com/2pm6sW6.png =200x400) Fig 7: usuario consulta su calendario de gastos. ![image alt](https://i.imgur.com/MtQJrSU.png =200x400) Fig 8: usuario recibe un recordatorio acorde al monto de gastos planeado que ingresó. ![image alt](https://i.imgur.com/9dSrvL0.png =200x400) <a id="validacion"></a> ## Validación y verificación ### Verificacion de la especificacion Realizamos un tabla para ver si cumplimos con todos los aspectos | El requerimiento | RF1 | RF2 | RF3 | RF4 | RF5 | RF6 | RF7 | | ---------------- | --- | --- | --- | --- | --- | --- | --- | | ¿Se encuentran todos los requerimientos correctamente priorizados? | Si | Si | Si | Si | Si | Si | Si| | ¿Es factible? | Si | Si | Si | Si | Si | Si | Si| |¿Es ambiguo? | No | No | No | No | No | No | No| ¿Es consistente? (no se contradice con otro) | Si | Si | Si | Si | Si | Si | Si| ¿Es verificable? | Si | Si | Si | Si | Si | Si | Si| ### Validar la solución con personas no involucradas en el proyecto Se eligieron dos posibles usuarios que no estaban involucrados en el proyecto. Por un lado, una chica joven que se estaba mudando a Montevideo por estudio y por otro lado un hombre adulto, padre de familia. Ambos nos dijeron que la aplicación les resulto fácil de usar y también que cumplía con las cosas que ellos esperaban hacer con la misma. Los dos nos dijeron que usarían la aplicación para organizar sus gastos. <a id="reflexiones"></a> ## Reflexión ### Detalle del trabajo individual Realizamos este trabajo en la plataforma HackMD, la cual nos permitió trabajar online todos juntos sobre el archivo README.md. Los commit que aparecen en el repositorio de git conllevan al trabajo de los tres integrantes, ya que realizábamos reuniones de manera remota para poder avanzar en todas las partes del documento a entregar. ### Reflexión Agustina Este primer obligatorio me pareció muy importante para tener una primera aproximación para aprender git. Considero que es una herramienta muy utilizada en la ingeniería, ya que nos brinda la posibilidad de trabajar remoto con nuestros compañeros. Por otro lado, me resultó interesante la utilización de técnicas de elicitación para luego ayudarnos con la definición de requerimientos funcionales y no funcionales, ya que en un principio no teníamos claros todos los que necesitábamos. En relación con esto logramos hacer varias técnicas lo que nos permitió ver las ventajas y desventajas de cada método. En lo que respecta al equipo me pareció que logramos ayudarnos entre todos y sobre todo llegar bien con los tiempos de entrega. Por último, creo que esto fue un primer acercamiento a un trabajo de la vida real, por lo que me gustó mucho la realización. ### Reflexión Fiorella Considero que tanto la aplicacion de MisGastos como las herramientas que utilizamos para intentar llevarla a cabo son muy importantes y a la vez de mi interés. El primer acercamiento con git me pareció muy útil y es un recurso que seguramente seguiré usando en otras materias y/o proyectos. También aprendí la importancia de la elicitación, ver distintos puntos de vista que nos aportan de manera positiva al proyecto. A su vez me gustó aprender las diferentes formas de llevar a cabo un proyecto satisfactoriamente para el cliente que decida confiar en nuestro trabajo. ### Reflexión Martin Me parecio interesante el tema del proyecto, al ser una aplicacion la cual podria llegar a utilizar yo como usuario, en caso de tener que administrar mi dinero de manera eficiente. La utilizacion de Git fue muy importante para el trabajo en grupo sin la posibilidad de juntarnos en un mismo lugar todos a la vez, igual considero que vamos a sacar mayor provecho de esta herramienta en la segunda parte del proyecto, cuando tengamos que generar codigo y vincular el trabajo de cada integrante en uno solo. En cuanto a la parte de elicitacion, ver como las respuestas de los posibles usuarios varia de uno a otro y de la vision original que teniamos para la aplicacion me parecio muy importante, ya que incorporamos varios requerimientos que no se nos habian ocurrido en un primer momento. <a id="anexo"></a> ### Anexo ### Entrevistas Entrevistado 1: mujer de 24 años * ¿Organizas tus gastos personales? ¿Si la repuesta es si, como lo realizas? Sí, para mis gastos compartidos de convivencia uso la app Splitwise, para organizar mis ingresos y gastos personales uso una planilla de Excel o Google Sheets. * ¿Que tan importante es para usted tener sus gastos organizados? Muy importante * ¿Revisas los gastos que realizas por mes, para compararlos con el pasado para realizar cambios en el ahorro? A veces sí. *En relación a la aplicación:* * ¿Te parecería interesante utilizar una aplicación para organizarte? Sí * ¿Que categorías le gustaría tener? (ejemplo : gastos de la casa, comida, etc) Gastos de la casa, Salidas, Salidas en grupo, Gastos personales (ej. Salud, higiene personal, entretenimiento, hobbies) * ¿Si pudieras poner un limite de gastos, te gustaría que sea por agrupación de gastos o general del total? Por grupo * ¿Algo mas que te gustaría que tenga la aplicación? ¿Alguna funcionalidad en particular? Sería ideal si desde una misma app se pudieran hacer transferencias. Por ejemplo, Splitwise es excelente para simplificar gastos, pero si desde una app como esa también se pudieran hacer transferencias a otros, o pagar cuentas, sería mucho más completa. También llevar una cuenta o lista de compras, para ver qué cosas hace falta comprar en el hogar, por ejemplo, y quizás hasta poder asignar una página web o app del supermercado de preferencia y ya poder acceder a ese sitio desde la app para hacer el pedido. Entrevistado 2: Hombre de 40 * ¿Organizas tus gastos personales? ¿Si la repuesta es si, como lo realizas? Si, tengo planillas de gastos para cosas particulares, para otras no. Cada dos o tres días reviso saldos y planifico gastos que tengo pensados hacer, a medida que uno envejece empezamos a tener más gastos, ya sea por hijos, cuentas de la casa, u otras cosas. Utilizo planillas, centralizo las cosas con tarjetas, lo cual ayuda en la planificación de los gastos ya que tenes todo junto y sabes cuanto vas a tener que pagar mes a mes. * ¿Que tan importante es para usted tener sus gastos organizados? Es muy importante, sino me "desfalco" de un mes a otro, es importante también tener los ahorros como si fueran un gasto, para tener dinero en casos de emergencia. Si uno se desbola, en un par de meses estas gastando el sueldo del mes que entra, lo que no es ideal * ¿Revisas los gastos que realizas por mes, para compararlos con el pasado para realizar cambios en el ahorro? Si, reviso los gastos y los comparo con los de meses anteriores, hay cosas que son naturales que suban o bajen mes a mes, hay otras que intento ahorrar. Con estas comparaciones intento armar una estrategia para disminuir costos para el mes entrante *En relación a la aplicación:* * ¿Te parecería interesante utilizar una aplicación para organizarte? Al nivel de lo que estoy haciendo personalmente, creo que sería más trabajoso utilizar una aplicación, en mi caso, las tarjetas me ayudaron mucho en cuanto a la organización de las cuentas, ver la evolución mes a mes. Yo hago con la tarjeta un gráfico y veo cuanto es que gasto en cada cosa, por ejemplo, en comida, transporte, auto, pagos en cuotas, etc. Si usara una aplicación, ingresar los gastos de todo un mes me podría llevar 4hs, lo cual esta automatizado en las páginas web de las tarjetas que uso. * ¿Que categorías le gustaría tener? (ejemplo: gastos de la casa, comida, etc) Gastos de la casa, impuestos fijos, automóvil, educación, ahorro, ocio * ¿Si pudieras poner un límite de gastos, te gustaría que sea por agrupación de gastos o general del total? Prefiero por categoría, por ejemplo, si ya gasté mucho en cosas como comida, no saldría a comer afuera. Hay veces que, si veo que no gaste tanto como otros meses, intento adelantar pagos de meses próximos * ¿Algo más que te gustaría que tenga la aplicación? ¿Alguna funcionalidad en particular? Estaría bueno poder conectar tarjetas, que hagan automático el ingreso de gastos por medio de las tarjetas, eso podría ser interesante tener. En mi caso, una aplicación donde tengo que ingresar de manera manual los gastos es muy impráctico y lleva mucho tiempo, en cambio, tener una que lo haga de manera automática al vincular las tarjetas puede ser mucho mejor. ![](https://i.imgur.com/nu6t75o.png) ![](https://i.imgur.com/gicVxaw.png) ![](https://i.imgur.com/xWQXWPP.png) ![](https://i.imgur.com/iIqt9Bu.png) ![](https://i.imgur.com/2uTdzWU.png) ![](https://i.imgur.com/5SA0clo.png) <a id="bibliografia"></a> ### Bibliografía * http://zeus.inf.ucv.cl/~bcrawford/AULA_ICI_3242/ERS_IEEE830.pdf. * Chaves, M. A. (2005). La ingeniería de requerimientos y su importancia en el desarrollo de proyectos de software. InterSedes: Revista de las Sedes Regionales, 6(10), 1-13.