Plan del proyecto software

Introducción

La fase de planificación es un punto clave en cualquier proyecto. En esta fase se estima el trabajo, el tiempo y el dinero que va a suponer la realización del proyecto. Para ello, se analiza minuciosamente cada una de las partes que componen el proyecto. Este análisis, además de permitir conocer los recursos necesarios, es de gran ayuda en fases posteriores del desarrollo. En este anexo se detalla todo este proceso.

La fase de planificación se puede dividir a su vez en:

  • Planificación temporal.
  • Estudio de viabilidad.

En la primera parte, se elabora un calendario o un programa de tiempos. En estos se estima el tiempo necesario para la realización de cada una de las partes del proyecto. Se debe establecer una fecha fija de inicio del proyecto y una fecha de finalización estimada. Teniendo en cuenta el peso de cada una de las tareas y los requisitos que se deben cumplir para poder empezar a trabajar en cada una de ellas.

La segunda parte se centra en la viabilidad del proyecto. El estudio de viabilidad se puede dividir a su vez en dos apartados:

  • Viabilidad económica: donde se estiman los costes y los beneficios que puede suponer la realización del proyecto.
  • Viabilidad legal: el contexto en el que se ejecuta el proyecto está regulado por una serie de leyes. Se deben analizar todas aquellas que afecten al proyecto. En el caso del software, las licencias y la Ley de Protección de Datos pueden ser los temas más relevantes.

Planificación temporal

Al inicio del proyecto se planteó utilizar una metodología ágil como Scrum para la gestión del proyecto. Aunque no se ha seguido al 100% la metodología al tratarse de un proyecto educativo (no éramos un equipo de 4 a 8 personas, no hubo reuniones diarias, etc.), sí que se ha aplicado en líneas generales una filosofía ágil:

  • Se aplicó una estrategia de desarrollo incremental a través de iteraciones (sprints) y revisiones.
  • La duración media de los sprints fue de una semana.
  • Al finalizar cada sprint se entregaba una parte del producto operativo (incremento).
  • Se realizaban reuniones de revisión al finalizar cada sprint y al mismo tiempo de planificación del nuevo sprint.
  • En la planificación del sprint se generaba una pila de tareas a realizar.
  • Estas tareas se estimaban y priorizaban en un tablero canvas.
  • Para monitorizar el progreso del proyecto se utilizó gráficos burndown.

Comentar que la estimación se realizó mediante los story points que provee ZenHub y, a su vez, se les asignó una estimación temporal (cota superior) que se recoge en la siguiente tabla:

Story points Estimación temporal
1 15min
2 45min
3 2h
5 5h
8 12h
13 24h
21 2,5 días
40 1 semana

A continuación se describen los diferentes sprints que se han realizado.

Sprint 0 (09/09/16 - 16/09/16)

La reunión de planificación de este sprint marcó el comienzo del proyecto. En una reunión previa se había planteado la idea del proyecto a Jose Francisco y este había aceptado tutorizarla. En esta nueva reunión se profundizó en la idea, se incorporó Raúl Marticorena como cotutor y se plantearon los objetivos del primer sprint.

Los objetivos fueron: profundizar y formalizar los objetivos del proyecto, investigar el estado del arte en algoritmos de detección y tracking aplicados a la apicultura, establecer el conjunto de herramientas que conformarían el entorno de desarrollo, la gestión del proyecto y la comunicación del equipo y, por último, realizar un esquema rápido de la aplicación que se deseaba desarrollar.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 0.

Se estimaron 8 horas de trabajo y se invirtieron finalmente 9,25 horas, completando todas las tareas.

Sprint 0

Sprint 1 (17/09/16 - 23/09/16)

Los objetivos de este sprint fueron: tomar contacto con OpenCV para Android, realizar un curso online de iniciación a Android, investigar qué algoritmos de detección y tracking estaban disponibles en OpenCV para Android y empezar a trabajar en la documentación.

En este sprint se tuvo la suerte de hablar sobre el proyecto con Rafael Saracchini, investigador en temas de visión artificial en el Instituto Tecnológico de Castilla y León. Rafael nos propuso una serie de algoritmos que nos podían ser útiles y otros que no funcionarían bajo nuestros requisitos.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 1.

Se estimaron 7,25 horas de trabajo y se invirtieron finalmente 13,25 horas, completando todas las tareas.

Sprint 1

Sprint 2 (24/09/16 - 29/09/16)

Los objetivos de este sprint fueron: investigar cómo implementar con OpenCV los algoritmos descritos en el sprint anterior, continuar la formación en Android y OpenCV y realizar grabaciones en el colmenar para tener un conjunto de vídeos con los que realizar pruebas.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 2.

Mientras se realizaba una de las tareas del sprint, se encontraron dos bugs relacionados con OpenCV y Android (#26 y #27) que nos impidieron continuar el desarrollo. El investigar su origen y buscar soluciones supuso una gran cantidad de horas y no se lograron resolver hasta el siguiente sprint.

Se estimaron 11,75 horas de trabajo y se invirtieron finalmente 33 horas, quedando dos tareas pendientes para terminar durante el siguiente sprint.

Sprint 2

Sprint 3 (30/09/16 - 06/10/16)

Los objetivos de este sprint fueron: intentar resolver los bugs descubiertos en el sprint anterior, o si esto fuese imposible, buscar una vía alternativa para continuar el proyecto y continuar investigando las implementaciones de los algoritmos de extracción de fondo en OpenCV.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 3.

Se estimaron 20,75 horas de trabajo y se invirtieron finalmente 31 horas, quedando una tarea por terminar.

Sprint 3

Sprint 4 (07/10/16 - 13/10/16)

Los objetivos de este sprint fueron: investigar técnicas de preprocesado y potprocesado para mejorar los resultados de la fase de extracción del fondo. Seleccionar y parametrizar el algoritmo de extracción de fondo que provea los mejores resultados para nuestro problema. Continuar el curso de Android. Integrar los servicios de integración continua y documentación continua en el repositorio.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 4.

Se estimaron 37 horas de trabajo y se invirtieron finalmente 39,5 horas, completando todas las tareas.

Sprint 4

Sprint 5 (14/10/16 - 20/10/16)

Los objetivos de este sprint fueron: afinar la parametrización de los algoritmos implementados en el sprint anterior. Detectar contornos y contar los pertenecientes a abejas. Pensar algún método que pueda solventar el problema del solapamiento de abejas. Documentar sprint anterior. Continuar la formación en Android.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 5.

Se estimaron 27 horas de trabajo y se invirtieron finalmente 34 horas, completando todas las tareas.

Sprint 5

Sprint 6 (21/10/16 - 27/10/16)

Los objetivos de este sprint fueron: mudar el algoritmo de visión artificial desarrollado en la plataforma Java a Android. Comenzar a desarrollar una aplicación de testeo del algoritmo para conocer el error que comete. Investigar si es posible simular el entorno de trabajo filmando a una pantalla.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 6.

Mientras se mudaba el algoritmo a Android se encontró un bug de OpenCV (#55) que agotaba la memoria del móvil. Este se debía a una mala liberación de recursos por parte de OpenCV y resolvió liberándolos manualmente.

La tarea que más se desvió de su estimación fue la de testeo de los algoritmos. Esto se debió a la dificultad añadida que supuso ejecutar los test unitarios con dependencias de OpenCV en Travis. Finalmente, se solventó instalando OpenCV en la máquina virtual de Travis (compilando desde el código fuente) e inicializando la librería de forma estática (ya que no se deseaba tener que arrancar un emulador para ejecutar los tests unitarios).

Se estimaron 20,75 horas de trabajo y se invirtieron finalmente 41 horas, completando todas las tareas.

Sprint 6

Sprint 7 (28/10/16 - 04/11/16)

Los objetivos de este sprint fueron: estudiar patrón de arquitectura MVP (Model-View-Presenter) y pensar en cómo aplicarlo al proyecto. Diseñar la posible arquitectura de la aplicación. Estudiar el uso de inyección de dependencias en Android con Dagger 2. Documentar las secciones de Introducción y Objetivos.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 7.

Se estimaron 16 horas de trabajo y se invirtieron finalmente 23 horas, completando todas las tareas.

Sprint 7

Sprint 8 (05/11/16 - 10/11/16)

Los objetivos de este sprint fueron: diseñar el modelo de datos de la aplicación teniendo en cuenta el uso final de estos. Desarrollar una aplicación Java para realizar un conteo manual de un conjunto de frames. Utilizar los datos obtenidos mediante la aplicación de conteo para implementar un test que calcule el error que comete el algoritmo.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 8.

Se estimaron 46 horas de trabajo y se invirtieron finalmente 53 horas, completando todas las tareas.

Sprint 8

Sprint 9 (11/11/16 - 17/11/16)

Los objetivos de este sprint fueron: implementar acceso a datos. Inyección de dependencias con los build variants de Gradle. Empezar a desarrollar las distintas actividades de la app.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 9.

Se estimaron 23 horas de trabajo y se invirtieron finalmente 24,25 horas, completando todas las tareas.

Sprint 9

Sprint 10 (11/11/16 - 17/11/16)

Los objetivos de este sprint fueron: continuar desarrollando las actividades principales de la app. Corregir documentación escrita hasta el momento. Documentar Técnicas y herramientas y Aspectos relevantes.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 10.

Se estimaron 33,75 horas de trabajo y se invirtieron finalmente 39,25 horas, completando todas las tareas.

Sprint 10

Sprint 11 (26/11/16 - 01/12/16)

Los objetivos de este sprint fueron: implementar la vista detalle de una colmena con sus grabaciones, pestañas en las vistas de colmenar y colmena y la sección de ajustes. Corregir los errores en la documentación indicados por los tutores. Continuar la formación en Android.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 11.

Se estimaron 25,75 horas de trabajo y se invirtieron finalmente 34 horas, completando todas las tareas.

Sprint 11

Sprint 12 (02/12/16 - 09/12/16)

Los objetivos de este sprint fueron: implementar las partes de visualización de los datos recogidos por la app (gráficos de actividad de vuelo, temperatura, precipitaciones, vientes, etc.) Documentar trabajos relacionados. Empezar a desarrollar la web del producto.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 12.

Se estimaron 36,25 horas de trabajo y se invirtieron finalmente 50,75 horas, completando todas las tareas.

Sprint 12

Sprint 13 (10/12/16 - 14/12/16)

Los objetivos de este sprint fueron: agregar opción de localización GPS al añadir colmenar. Incluir una tabla comparativa en la sección Trabajos relacionados.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 13.

Se estimaron 26,25 horas de trabajo y se invirtieron finalmente 14,25 horas, completando todas las tareas.

Sprint 13

Sprint 14 (15/12/16 - 11/01/17)

Se trató del sprint más largo de todos los realizados, con una duración de cuatro semanas debido a las vacaciones de Navidad.

Los objetivos de este sprint fueron: implementar el servicio de monitorización en segundo plano, junto con su sección de ajustes, la obtención de información meteorológica, la edición y borrado de colmenares y colmenas y las pestañas de información de colmenar y colmena. Además, realizar un estudio de viabilidad legal y seleccionar la licencia más apropiada para el proyecto.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 14.

Se estimaron 143 horas de trabajo y se invirtieron finalmente 187,75 horas, completando todas las tareas.

Sprint 14

Sprint 15 (12/01/17 - 18/01/17)

Los objetivos de este sprint fueron: finalizar el desarrollo principal de la app completando el menú y la internacionalización. Completar los contenidos de la memoria y continuar con los anexos “Plan del proyecto software” y “Requisitos.”

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 15.

Se estimaron 39 horas de trabajo y se invirtieron finalmente 37,75 horas, a falta de terminar los anexos planificados por falta de tiempo.

Sprint 15

Sprint 16 (19/01/17 - 25/01/17)

Los objetivos de este sprint fueron: completar las tareas pendientes del anterior sprint (Especificación de requisitos y Análisis económico), documentar el diseño de datos, procedimental y arquitectónico y aumentar la cobertura de los test.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 16.

Se estimaron 45,75 horas de trabajo y se invirtieron finalmente 45,25 horas, completando todas las tareas.

Sprint 16

Sprint 17 (26/01/17 - 02/02/17)

Los objetivos de este sprint fueron: continuar anexos. Convertir la memoria a formato LaTeX. Pulir los últimos detalles de la aplicación y publicarla en Google Play.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 17.

Se estimaron 53,50 horas de trabajo y se invirtieron finalmente 56,50 horas, completando todas las tareas.

Sprint 17

Sprint 18 (02/02/17 - 07/02/17)

Los objetivos de este sprint fueron: imprimir memoria, terminar anexos y corrección de errores.

Las tareas en las que se descompusieron los objetivos se pueden ver en: Sprint 18.

Se estimaron 41 horas de trabajo y se invirtieron finalmente 41 horas, completando todas las tareas.

Sprint 18

Resumen

En la siguiente tabla se muestra un resumen del tiempo dedicado a los distintos tipos de tareas.

Categoría Issues Tiempo (h)
Bug 26 40,75
Documentation 41 106
Feature 63 410
Research 30 128
Testing 7 49
TOTAL 167 794

project-sumary

Estudio de viabilidad

Viabilidad económica

En el siguiente apartado se analizarán los costes y beneficios que podría haber supuesto el proyecto si se hubiese realizado en un entorno empresarial real.

Costes

La estructura de costes del proyecto se puede desglosar en las siguientes categorías.

Costes de personal:

El proyecto ha sido llevado a cabo por un desarrollador empleado a tiempo completo durante cinco meses. Se considera el siguiente salario:

Concepto Coste
Salario mensual neto 1.000€
Retención IRPF (15%) 272,23€
Seguridad Social (29,9%) 542,65€
Salario mensual bruto 1.814,88€
Total 5 meses 9.074,40 €

La retribución a la Seguridad Social se ha calculado como un 23,60% por contingencias comunes, más un 5,50% por desempleo de tipo general, más un 0,20% para el Fondo de Garantía Salarial y más un 0,60% de formación profesional. En total un 29,9% que se aplica al salario bruto [ss_cotizacion].

Costes de hardware:

En este apartado se revisan todos los costes en dispositivos hardware que se han necesitado para el desarrollo del proyecto. Se considera que la amortización ronda los 5 años y han sido utilizados durante 5 meses.

Concepto Coste Coste amortizado
Dispositivo móvil 300€ 25€
Ordenador portátil 800€ 66,67€
Total 1.100€ 91,67€

Costes de software:

En este apartado se revisan todos los costes en licencias de software no gratuito. Se considera que la amortización del software ronda los 2 años.

Concepto Coste Coste amortizado
Windows 10 Pro 279€ 58,13€
Creately 5€ 1,04€
Total 284€ 59,17€

Costes varios:

En este apartado se revisan el resto de costes del proyecto.

Concepto Coste
Dominio gobees.io 31,90€
Cuenta Google Play 25€
Memoria impresa y cartel 50€
Alquiler de oficina 500€
Internet 150€
Material de apicultura de prueba 150€
Total 906,90€

Costes totales:

El sumatorio de todos los costes es el siguiente:

Concepto Coste
Personal 9.074,40€
Hardware 91,67€
Software 59,17€
Varios 906,90€
Total 10.132,14€

Beneficios

La aplicación desarrollada se distribuirá de forma gratuita y sin publicidad, por lo que a corto plazo no se obtendrán beneficios.

La forma de monetizar la aplicación será en una segunda fase, cuando se desarrolle una plataforma en la nube que sincronice la información de varios dispositivos y permita el acceso remoto a la información.

Se considerarán tres tipos de suscripciones:

Tipo Colmenares Colmenas Plataformas Precio
Hobby 1 10 App / Cloud Gratis
Amateur 5 100 App / Cloud 5€/mes
Profesional Ilimitados Ilimitados App / Cloud 20€/mes