viernes, 13 de enero de 2012

Metodologías Ágiles, Ecosistema y Reciclaje de Software

Esta es una propuesta que pretende la modernización de los procesos de desarrollo a través de mejoras en partes importantes del desarrollo de software: la metodología y los sistemas de desarrollo.

Para modernización de metodologías propongo la implantación de una de las metodologías ágiles de desarrollo más conocida y utilizada en la actualidad: SCRUM; que además es compatible con las metodologías de calidad actuales (no las sustituye, las complementa).

Como mejora en los sistemas de desarrollo se propone la creación de un ecosistema de software completo que permita la mejora de la calidad y reciclaje de software.


Modernización de la metodología: Metodología y flujo de información ágil

Implantación de dos formas de trabajo que agilicen losdesarrollos:

Implantación de una metodología ágil tipo SCRUM,que puede ser incluida en las ofertas a clientes o pliegos, mejorando dichasofertas. Permite agilizar el desarrollo al separar diseño y construcción, y escompatible con las metodologías de calidad actuales (métrica, CMMI,…).

  • Es un proceso ágil e iterativo que nos ayuda a poner nuestro mayor esfuerzo en entregar el valor más importante de un producto en el tiempo más corto posible.
  • Nos permite enviar, inspeccionar y evaluar periódicamente software funcionando (cada 2-6 semanas aproximadamente).
  • El negocio determina las prioridades, los equipos se auto-administran para encontrar la mejor forma de encontrar las características más prioritarias.
  • Cada 30 días aproximadamente se puede ver software real que funciona y decidir si se entrega así o se sigue refinando en el siguiente ciclo.

Ventajas:

  • Fácil de explicar y entender.
  • Máximo valor por el esfuerzo.
  • Equipos auto-organizados, multi-aprendizaje.
  • Liberación de versiones totalmente funcionales, aunque con funcionalidad limitada, en cada iteración.
  • Orientación al cliente: lo involucra y le permite establecer prioridades.
  • Satisface al cliente con entregas tempranas y continuas de productos parcialmente funcionales.
  • Provee a la gerencia o dirección con un vistazo diario sobre el nivel de productividad y los factores que la afectan.
  • Mayor productividad en el desarrollo de software.
  • Permite producir software de forma regular, consistente y competitiva.
  • Útil en entornos con requisitos inestables, se aceptan requisitos cambiantes, incluso en etapas avanzadas.

La principal desventaja de esta metodología de trabajo esque si se aplica de forma estricta no es aplicable a grandes proyectos, sinembargo, esto se puede resolver dividiendo el desarrollo de aplicacionesgrandes en módulos y separando por equipos y aplicando la metodología por cada equipode desarrollo o/o módulo (sería un SCRUM Modular).

Posteriormente se puede aplicar la metodología ágil en unnivel superior (que podría estar integrado por los analistas o los analistasprogramadores principales de cada grupo) por el cual se realice la comunicacióncon los clientes a través de las reuniones o conferencias que se aplican enesta metodología (SCRUM Jerarquizado).

La potencia de esta metodología se encuentra en laflexibilidad con la que se puede llevar a cabo según interese en cada proyecto,no hay que seguirla de manera estricta.


Modernización de los procesos: Ecosistema de desarrollo y de reciclaje deSoftware

Trataría en realizar la implantación de un ecosistema desoftware completo, en la cual se disponga de algunas de lasherramientas que la integran como son artifactory, jira o HGC, la Wiki…

Existe un grupo de google que habla acerca de este tema: http://groups.google.com/group/ecosistemas-software

Un ecosistema de desarrollo de software (developmentecosystem) es un espacio de trabajo en el que conviven una serie deherramientas que permiten a un equipo de desarrollo modelar una metodología detrabajo que les ayude a ser más eficientes. Un ecosistema de desarrollo desoftware:

-         Facilita la integración continua.
-         Facilita la automatización.

Algunas de las herramientas que pueden ayudar a tal fin sonlas siguientes:

-     Maven: Herramienta de gestión de proyectos desoftware y herramienta de comprensión y gestión de dependencias entrelibrerías. Sería interesante definir arquetipos o plantillas de integración delos proyectos en los repositorios
-     Apache Continuum:Servidor de integración continua, integrable con repositorios de código.Pruebas de calidad y de consistencia.
-     Hudson: Otroservidor, este extensible, para integración continua.
-     Sonar:Plataforma de medición de calidad del código.
-     OpenFire y/opandion: Proporcionan herramientas de servidor y cliente para colaboraciónen tiempo real (Servicios de mensajería corporativa).
-      JUnit: Testeo unitario de aplicaciones.
-      Apache JMeter: Herramienta de prueba de carga, pruebasunitarias o monitoreo.
-      Apache Archiva o artifactory: Repositorios deMaven y Maven2, gestión de dependencias, hace de proxy caché de un repositoriopropio con otros existentes. Habría que integrarlo con el resto de herramientas y utilizarlo como base enel reciclaje de software desarrollado en la empresa, ya sean utilidades(validaciones java por ejemplo), módulos extensibles  (por ejemplo, módulos configurables de integracióncon repositorios LDAP) o productos.
-      Jira o trac: Sistemasde gestión de tareas e incidencias.
-      Wiki: Sitio web cuyas páginas pueden sereditadas rápidamente por múltiples usuarios, donde gestionar la información delos proyecto, utilidades, módulos y productos de la empresa.
-     Repositorio Subversion o GIT: Sistema de control deversiones que mejora el desarrollo colaborativo.


Mejoras de la solución conjunta:

-      Aumenta la productividad y se reduce el tiempo de losdesarrollos:
o       Segúnla metodología SCRUM los desarrollos se pueden empezar en paralelo con eldiseño.
o       Mayorreutilización de código (reciclaje), componentes, soluciones y/o productos quepueden ser compartidos en el Artifactory y documentados en WIKI corporativa.

-      Mejora de la calidad del software: El uso deherramientas de pruebas unitarias JUNIT no es obligatorio, por eso laintegración con herramientas como Sonar puede permitir la evaluación de lacalidad de cada proyecto integrado en artifactory.

-      Mayor grado de implicación y satisfacción del cliente:
o       Mejorael conocimiento del cliente sobre la evolución del proyecto.
o       Elcliente puede ver como evoluciona su producto y hacer pequeñas rectificacionessobre la marcha.

-      Fiabilidad, estabilidad y escalabilidad: se detectanerrores con mayor antelación a lo largo de las distintas etapas de desarrollo,por lo que el producto será mucho mejor y se acercará más a las necesidades delcliente, que haciendo una única entrega al final.

-      Fomenta la colaboración para el desarrollo/evolución de productos quepueden ser vendidos bajo  licencia en el mercado actual o abriendo mercado enotros sitios (si un proyecto es innovador, es más fácil convertirlo enproducto).

Imágenes Dockers

Estoy aprendiendo bastante sobre el tema de docker y docker swarm , gestión de Stacks, Servicios, Containers, Volumenes, .. y sus configurac...