Hola, mi nombre es – Qué, porqué y para qué – Objetivos



Hola, mi nombre es – Qué, porqué y para qué – Objetivos

0 0


mswl-tesis-presentation

Presentación diapositivas para la tesis del Máster de Software Libre - URJC

On Github ricardogarfe / mswl-tesis-presentation

Hola, mi nombre es

Ricardo García Fernández / @ricardogarfe

Presentación de la Tesis/Trabajo Final de Master del Master de Libre Software en la Universidad Rey Juan Carlos.

PDIITSCStack

Proceso de Desarrollo Iterativo e Incremental a través de SidelabCode Stack

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.

Qué, porqué y para qué

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 ?

¿ 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 qué aparece ?

Por la necesidad de centrar el esfuerzo en el desarrollo facilitando la composición del entorno.

¿ Para qué sirve ?

¿ 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.

Objetivos

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.

Consciencia y constancia

“El progreso, lejos de consistir en el cambio, depende de la capacidad de retención. Cuando el cambio es absoluto no queda ningún ser para mejorar y ninguna dirección se ajusta para una posible mejora: y cuando la experiencia no se conserva, como entre los salvajes, la infancia es perpetua. Aquellos que no pueden recordar el pasado están condenados a repetirlo.“

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...

Metodologías y Procesos

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...

Sencillez

Algo sencillo para el usuario es el doble de efectivo.

  • gráficas de barras
  • compra con un click
  • etc...

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:

  • gráficas de barras
  • compra con un click
  • etc...

Sin olvidar que...

Objetivo tangible

“Hecho es mejor que perfecto“

...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...

Requisitos

  • Metodologías Ágiles
  • Procesos de Desarrollo
  • Herramientas y/o Tecnologías

...el siguiente grupo de requisitos:

  • Metodologías Ágiles
  • Procesos de Desarrollo
  • Herramientas y/o Tecnologías

Para adaptar el desarrollo Iterativo e Incremental...

Metodologías Ágiles

Cuatro principios

  • Individuos e interacciones sobre procesos y herramientas
  • Software funcionando sobre documentación extensiva
  • Colaboración con el cliente sobre negociación contractual
  • Respuesta ante el cambio sobre seguir un plan
“Esto es, aunque valoramos los elementos de la derecha, valoramos más los de la izquierda.“

Primer apartado encontramos los cuatro principios de las Metodologías Ágiles definidos en el manifiesto ágil:

  • Individuos e interacciones sobre procesos y herramientas
  • Software funcionando sobre documentación extensiva
  • Colaboración con el cliente sobre negociación contractual
  • Respuesta ante el cambio sobre seguir un plan

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...

Iterativa e Incremental

“Divide y Vencerás: resolver un problema difícil, dividiéndolo en partes más simples tantas veces como sea necesario, hasta que la resolución de las partes se torna obvia.“

... 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...

Iterativa e Incremental

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:

  • Localizar los requisitos - Lista de requisitos
  • Agruparlos en ciclos cortos de desarrollo - Iteraciones
  • Construir pequeñas entregas como resultado - Incrementos

minimizando el problema para facilitar la solución en el proceso de desarrollo...

Procesos 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.

TDD

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.

Feature branch

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...

Continuous Integration

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.

Continuous Delivery & Deployment

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.

Herramientas y/o Tecnologías

“poner nombres a las cosas“

  • Gestión de usuarios, permisos y roles
    • OpenLDAP
  • ITS - Gestor de tareas
    • Redmine
  • SCM Source Code Management
    • Git
  • Revisión de código
    • Gerrit
  • Gestión de librerías
    • Archiva
  • Gestión de la integración y despliegues
    • Jenkins

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).

¿ Se puede unificar ?

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é ?

Un nuevo compañero

Las herramientas ALM

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

“Entorno de desarrollo colaborativo de Software“

.. 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.

Análisis de Forjas ALM

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.

SCStack

Nueva rueda 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.

Componentes SCStack

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:

  • Consola de Administración
  • API Rest
  • API SCStack

Ejemplo del ciclo de vida de la aplicación:

  • El usuario crea el proyecto desde la consola de administración, donde se definen usuarios, permisos, roles y el repositorio,
  • El desarrollador accede al proyecto en Redmine. Donde se describen y agrupan los requerimientos a publicar en la iteración,
  • Descarga el reposiorio git a través de eclipse, desarrolla, prueba y sube los cambios a la rama definida,
  • Jenkins integra esa rama en la principal pasando por las pruebas de integración y se encarga de hacer el despliegue del contenido si ha sido exitoso.

¿ Quién orquesta ?

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.

Aprovisionamiento

“Accción o efecto de aprovisionar, aprovisionar : abastecer.“

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.

Puppet

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.

Vagrant

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:

  • primero se define el sistema operativo a instalar,
  • la ip de la máquina creando una red privada entre el host y la máquina virtual donde se va a istsalar
  • y lo más importante: Puppet como provisionador y el módulo SidelabCode Stack

Se lanza la instalación y en 10 minutos se obtiene el resultado la forja.

¿ Hemos llegado ya ?

“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.

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 han incluido las herramientas necesarias.
  • Además de la integración en el flujo de trabajo.
  • Se ha unificando el proceso de desarrollo mediante la configuración y la accesibilidad a las herramientas creando un marco de trabajo.

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.

Siguientes Iteraciones

  • Refactorización del código
  • Publicitar el uso de SCStack
  • Modularizar la instalación

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.

Enlaces a recordar

GRACIAS

Por Ricardo García Fernández / http://mastersfwlurjc.blogspot.com.es