On Github ricardogarfe / mswl-tesis-presentation
Presentación de la Tesis/Trabajo Final de Master del Master de Libre Software en la Universidad Rey Juan Carlos.
Tutores:
Patxi Gortázar Bellas
Micael Gallego Carrillo
This work by Ricardo Gracía Fernández - ricardogarfe [at] gmail [dot] com is licensed under a Creative Commons Attribution 3.0 Unported License.
El desarrollo de este proyecto se basa en el diseño e implementación del proceso de desarrollo Iterativo e Incremental acorde con las metodologías ágiles a través de la forja SidelabCode Stack.
Se busca unificar el comportamiento de las herramientas, facilitar la instalación, el acceso y el estado del software a desarrollar mediante el uso de Software Libre para construir Software de calidad.
Para comenzar formularemos tres preguntas: qué, por qué y para qué...
¿ Qué es sideladCodeStack ?
SCStack es una forja de Desarrollo, una herramienta ALM para controlar el ciclo de vida de una aplicación.
¿ Por qué aparece ?
Por la necesidad de centrar el esfuerzo en el desarrollo facilitando la composición del entorno.
¿ Para qué sirve ?
Para ayudar a construir software dentro de un entorno controlado que facilita la evolución y el seguimiento del ciclo de vida.
Crear software de calidad a través del uso de las herramientas ayudados por las metodologías y procesos de desarrollo.
Que queremos ? lo queremos todo ! hay que definir unos objetivos que nos conduzcan a la consecución de la idea que se tiene:
Queremos crear software de calidad ayudados por las metodologías y procesos de desarrollo a través del uso de las herramientas.
Para ayudar a construir software dentro de un entorno controlado que facilita la evolución y el seguimiento del ciclo de vida.
George Santayana, The Life of Reason, Volume 1, 1905
Debemos ser conscientes del estado del proceso de desarrollo de software y tener constancia de la evolución para aprender de lo vivido.
En el texto de George Santayana destacamos la última frase: Aquellos que no pueden recordar el pasado están condenados a repetirlo.
Que aplicado al desarrollo de software podemos extraer la siguiente afirmación:
Debemos ser conscientes del estado del proceso de desarrollo de software y tener constancia de la evolución para aprender de lo vivido.
Para ello necesitamos...
Dejarnos guiar por las metodologías y procesos existentes para adaptarlos a nuestras necesidades.
...dejarnos guiar por las metodologías y procesos existentes para adaptarlos a nuestras necesidades.. Teniendo en cuenta el mantra de la...
Algo sencillo para el usuario es el doble de efectivo.
La sencillez para el usuario a la hora de facilitar la consecución de su objetivo. Se han de eliminar trabas, barreras e impedimentos que no aportan valor. Como se describe en estos tres ejemplos:
Sin olvidar que...
...Hecho es mejor que perfecto, es decir: se ha de materializar el trabajo. Esto nos define el estado donde se encuentra y la capacidad evolucionar hacia los siguientes objetivos.
Estos objetivos se trasladan a un siguiente escalón...
...el siguiente grupo de requisitos:
Para adaptar el desarrollo Iterativo e Incremental...
Primer apartado encontramos los cuatro principios de las Metodologías Ágiles definidos en el manifiesto ágil:
Que se resumen en la cita: Esto es, aunque valoramos los elementos de la derecha, valoramos más los de la izquierda
Aportan flexibilidad al desarrollo, capacidad de cambio, facilitan la comunicación y se basan en el valor generado por cada iteración.
Por eso se ha elegido como base...
... la metodología Iterativa e Incremental.
Es la intersección de las metodologías: Iterativa e Incremental
Por la parte Iterativa: Desarrollo de software basado en la repetición de un proceso establecido: análisis, desarrollo, pruebas y entrega.
Y en el apartado Incremental: Se caracteriza porque en cada entrega se añade una funcionalidad.
Utilizando la definición de Divide y Vencerás: para resolver un problema difícil, se divide en partes más simples, tantas veces como sea necesario para que la resolución de cada una de las partes se torne obvia.
El siguiente esquema se torna más obvio todavía...
Marco de trabajo que ofrece el proceso de desarrollo Iterativo e Incremental
Este proceso de desarrollo cercano a las Metodologías Ágiles, como ellas, comparte los mismos fines: la implicación, fiabilidad, aprendizaje, versatilidad y comunicación con el usuario/cliente.
... como refleja el imagen, el marco de desarrollo se divide:
minimizando el problema para facilitar la solución en el proceso de desarrollo...
Actúan de Catalizadores
Los procesos de desarrollo que se van a presentar componen un ecosistema en la metodología Iterativa e Incremental,
...actuando de catalizadores del desarrollo de software.
Se han elegido los siguientes procesos para implementar las distintas fases del desarrollo Iterativo e Incremental.
Proceso de desarrollo guiado por pruebas.
El Proceso de desarrollo guiado por pruebas se basa en la repetición de un ciclo de desarrollo corto basado en tres estados:
Rojo - El desarrollador escribe un caso de prueba que define el comportamiento de la nueva funcionalidad, ha de fallar.
Verde - En este instante ya están definidos los requerimientos de la funcionalidad en el caso de prueba, ahora se ha escribir el código necesario para que a través del test se obtenga el resultado esperado.
Morado - En donde se ha de refactorizar el código y se da por terminado el ciclo.
Por lo que empieza el siguiente, donde el test definido falla debido a la refactorización y volvemos a comenzar.
Desarrollo dirigido por ramas (M. Fowler)
El Desarrollo por ramas ayuda a la creación de código de una forma ordenada y coordinada dentro de un grupo de trabajo. Se basa en la creación y la integración continua de nuevas funcionalidades o solventar problemas derivados de una manera eficiente, ágil y distribuida.
Dentro del proceso de desarrollo Iterativo e Incremental situamos en la rama principal de desarrollo la integración de las ramas de funcionalidades.
Es decir, cada iteración consta de un incremento en el que se han agrupado las funcionalidades a implementar, dando paso al...
Proceso de Integración Continua.
... Proceso de Integración Continua, que es el encargado de automatizar la integración de los desarrollos por ramas, para así: determinar el estado de la integración y la evolución de la iteración.
Proceso de Entrega y Despliegue Continuo
La entrega es el siguiente paso en el desarrollo Iterativo e Incremental, donde entra el Proceso de Entrega y Despliegue Continuo.
Es el encargado de automatizar y mejorar el proceso de entregas y despliegues. Prepara la entrega de la iteración. Agiliza y mejora a cada iteración completada dentro del desarrollo del proyecto.
Se han definido los requisitos básicos para la gestión del desarrollo de un proyecto.
Se busca obtener las herramientas adecuadas para adaptar la metodología Iterativa e Incremental en el ciclo de vida del desarrollo de software (no nos dentendremos en un análisis profundo).
Después de tantos, requerimientos lo que tenemos todos en la cabeza es esta imagen.
Es bastante reconocible para todos, algunos tenemos un cajón lleno de cables, como es el caso, otros como yo, lleno de mecheros.
En donde se hace casi imposible encontrar lo que se busca y mucho menos dejar en el mismo sitio algo que hayamos utilizado. Por lo general acabamos buscando como si fuese el bolsillo de doraemon a ver que podemos sacar.
Ya que no queremos que pase lo mismo con las herramientas que utilizamos. Necesitamos saber como acceder a cada una y como sacarle el mayor partido.
¿ Ahora qué ?
Application Lifecycle Management. Encargadas de la gestión del ciclo de vida del software
Las herramientas ALM surgen de la necesidad de definir un esqueleto para la gestión del ciclo de vida del software.
Proporcionan la integración e interacción de las herramientas dentro de un proceso de desarrollo evitando el descontrol.
En este paso aparecen las...
.. forjas de desarrollo, orientadas a crear un entorno de desarrollo colaborativo de Software
Se busca integrar la metodología Iterativa e Incremental dentro del ciclo de vida del software a desarrollar.
Desde la recogida de los requerimientos, hasta la construcción de la solución vertebrando la comunicación entre las distintas herramientas dirigidas a través de una forja.
El análisis generó la necesidad de crear un sistema modular que permita integrar estas herramientas del ciclo de vida de un proyecto como vehículo en la forja de desarrollo.
Después de haber analizado las soluciones existentes, se encontraron soluciones privadas o con pocos recursos, por lo que se reafirma la opción construir una forja de desarrollo FLOSS.
El conjunto de herramientas apiladas y conectadas que dan forma a la Forja para controlar el ciclo de vida el software.
SCStack aglutina la gestión de las tareas, el código fuente, la orientación del desarrollo a los tests la integración, las entregas y despliegues continuos.
El ciclo de vida del Software.
Foto completa del conjunto de actores dentro de la arquitectura de SidelabCode Stack.
Esta imagen representa la fotografía completa del conjunto de actores dentro de la arquitectura de SCStack.
La arquitectura que se divide en tres niveles:
Ejemplo del ciclo de vida de la aplicación:
Se necesita un actor para orquestar la comunicación entre las herramientas y construir este entorno.
Después de ver tantas y tantas imágenes, herramientas, actores, arquitectura y nombres, esto se parece más al cajón desastre que tenemos todos en nuestra habitación.
Se necesita un nuevo actor para orquestar la comunicación entre las herramientas y construir este entorno.
La palabra buscada es Aprovisionamiento.
Definición de la RAE
Abastecer, aplicado a la Ingeniería del Software el Aprovisionamiento nos provee los componentes necesarios para construir una solución.
Aplicado a la Ingeniería del Software el Aprovisionamiento nos provee de los componentes necesarias para construir una solución.
El aprovisionamiento se basa en la automatización de tareas para construir el entorno deseado, en este caso la instalación y configuración de las herramientas que componen SidelabCode Stack.
Aquí es donde reside uno de los puntos fuertes de SidelabCode Stack.
exec { "apt-update": command => "/usr/bin/apt-get update", } class { "scstack": # Superadmin password. Will be used to access the SidelabCode Stack Console ******* sadminpass => "*******", # Or whatever IP specified in Vagrantfile ip => "192.168.33.10", domain => "sidelabcode.scstack.org", baseDN => "dc=sidelabcode,dc=scstack,dc=org", # Your company/organization name compname => "SidelabCode Stack version 0.4", # A name to be displayed within Redmine codename => "SCStack ALM Tools", }
Configuración de la instalación de SidelabCode Stack.
Puppet: es una herramienta Software Libre de aprovisionamiento desarrollada en Ruby.
Dentro SidelabCode Stack, gestiona la infraestructura partiendo del aprovisionamiento y la configuración de las herramientas, hasta la ejecución de órdenes para la instalación y configuración del entorno.
Puppet es el encargado de orquestar la instalación y la comunicación en la forja SidelabCode Stack.
Como se puede apreciar, la configuración de Puppet para la instalación de la forja SCStack es simple y sencilla: un usuario, una ip, un dominio y un nombre.
Inicio
$ vagrant init
Configuración
config.vm.box = "precise64" config.vm.network :private_network, "192.168.33.10" config.vm.provision "puppet" do |puppet| puppet.module_path = "modules" end
Arranque
$ vagrant up
En el ecosistema de SidelabCode Stack Vagrant se ha utilizado en el apartado de pruebas.
Vagrant nos proporciona la gestión de los entornos de desarrollo sobre máquinas virtuales, ligeras, sencillas y replicables.
Facilitando el proceso de instalación y configuración de SCStack.
Como se aprecia en el código:
Se lanza la instalación y en 10 minutos se obtiene el resultado la forja.
Se ha conseguido integrar de forma satisfactoria la metodología Iterativa e Incremental en el marco de trabajo de SCStack.
El proyecto gira en torno a un objetivo:
Crear un marco de trabajo para Integrar el uso de la metodología Iterativa e Incremental a través de las herramientas necesarias
Se ha conseguido integrar de forma satisfactoria la metodología Iterativa e Incremental en el marco de trabajo de SCStack.
Se ha comprobado a través de casos reales el correcto funcionamiento del proceso de desarrollo a través de SCStack. Con es el ejemplo de la instalación en la empresa TSCompany.
Por último, se ha dotado a la forja de un sistema de inicialización y configuración a través de Puppet que permite la incorporación de nuevas herramientas, actualizaciones o sustituciones.
Hablando de la metodología Iterativa e Incremental, se han definido nuevos requerimientos para las próximas Iteraciones:
Refactorización del código mejorando el rendimiento, la eficacia y la facilidad de evolución.
Publicitar el uso de SCStack facilitando el acceso a la herramienta, la difusión y el uso.
Se ha de centralizar la instalación por módulos para dotar al usuario de la capacidad de elegir los componentes que quiere instalar.