Integración continua en la nube.

Uno sale a dar una vuelta por la nube, a buscar un servicio de integración continua o entrega continua. Busca algo con Jenkins. Le suenan sobre todo 2 sitios.

Y se encuentra con todo esto.

Clinker Cloud http://clinkerhq.com/
CloudBees http://www.cloudbees.com/dev
Cloud Foundry http://www.cloudfoundry.com/
CircleCi https://circleci.com/
Semaphore https://semaphoreapp.com/
Travis https://travis-ci.com/
Codeship https://www.codeship.io/
Ship.io https://ship.io/
Drone.io https://drone.io/
tddium https://www.solanolabs.com/
Wercker http://wercker.com/
Shippable http://www.shippable.com/
hostedci https://hosted-ci.com/
Go-Ci http://www.thoughtworks.com/products/go-continuous-delivery
snap-ci http://snap-ci.com
appveyor http://www.appveyor.com/
Magnum CI magnum-ci.com

Aquí lo dejo por el momento y ya lo iré mirando con más tranquilidad.

Las fuentes principales para obtener estos datos han sido:

 

 

Integración continua en la nube.

¿Qué herramientas utilizáis para controlar la calidad de vuestro código?

En genbeta:dev han lanzado hace un día esta pregunta:

¿Qué herramientas utilizáis para controlar la calidad de vuestro código?

Esta ha sido mi respuesta. Reconozco que me he dejado llevar y al final he hablado un poco de todo. En cualquier caso esta es la respuesta, desordenada y escrita en 5 minutos, pero creo que puede ser útil.

1.-En primer lugar Eclipse bien configurado.

Como por ejemplo nos indica aquí Sanjeev Kumar.

https://sites.google.com/a/javagyan.com/javagyan/useful-tips/usingeclipseeffectively

Esto lo podemos acompañar del algún plugin que nos mire las métricas mientras desarrollamos tipo: CodePro AnalytiX

https://developers.google.com/java-dev-tools/download-codepro

Y terminaría la configuración del eclipse con un conjunto de templates que me faciliten la escritura de cierto tipo de estructuras habituales:

http://eclipse.dzone.com/news/effective-eclipse-custom-templ

2.-Un buen entorno de integración e inspección continua con Jenkins y Sonar.

http://jenkins-ci.org/
http://www.sonarsource.org/

https://jbravomontero.wordpress.com/2012/02/18/ecosistemas-de-desarrollo-de-software-lineas-de-automatizacion/

Y el Sonar enriquecido con los siguientes plugins:

  • Timeline Plugin
  • Useless Code Plugin
  • SIG Maintainability Model Plugin
  • Quality Index Plugin
  • Technical Debt Plugin

http://onlysoftware.wordpress.com/2012/01/01/51-sonar-plugins-you-must-not-miss-2012-version/

Aunque para gestionar la deuda técnica también este estupendo plugin COMERCIAL 😦 que ayuda con la implementación de SQALE)

http://www.sonarsource.com/products/plugins/governance/sqale/

3.- Fomentar de “buen rollo” (no se puede ir diciendo este código es una mierda) entre los miembros del equipo las buenas prácticas.

Recomendando las lecturas de ciertos libros imprescindibles.

Y reuniendonos de vez en cuando para analizar ciertas partes del código en equipo.
Reflejar esta información y las conclusiones en un Wiki.

Fomentar cuando sea necesario:

  • La programación por pares.
  • Y siempre, siempre la revisión por pares. No dar por bueno un código hasta que otra persona no lo ha verificado en su máquina.

4.- Un buen conjunto de test que nos quite el miedo a la refactorización cuando sea necesario.

Técnicas TDD, etc.

5.- Y dejar claro cosas como:

  • Las prisas no justifican un mal código.
  • Poco a poco, la deuda técnica se acumula en las zonas que ya estaban llenos de deuda.
  • La programación puede ser divertida, también lo puede ser la criptografía, sin embargo es recomendable no combinarla.
  • “¡No me importa si funciona en tu máquina! ¡No estamos vendiendo tu máquina!”.
  • Codifica siempre como si la persona que finalmente mantendrá tu código fuera un psicópata violento que sabe dónde vives (Martin Golding).
  • etc

Y muchas cosas más…………….

Evidentemente he sido incapaz en los proyectos que he estado de implementar todas estas técnicas o teorías.. pero creo que el concepto esta claro y se podría resumir en estos puntos:

  • Formación continua entre los miembros del equipo.
  • Fomentar la premisa de buscar la excelencia en el código trabajando en equipo.
  • No esconder la información y fomentar el compartirla.
  • Fomentar un buen entorno de trabajo: Gamification (http://vimeo.com/32435331)
  • Y automatizar la generación e inspección del código.

Un saludo.

¿Qué herramientas utilizáis para controlar la calidad de vuestro código?

Resumen semanal de temas de Java

Resumen de algunos de los enlaces relacionados con Java y desarrollo Web que he ido recopilando estos días.

Hay un poco de todo, pero el que me ha encantado especialmente la introducción a las BBDD NoSQL que han realizado desde la Web de la Pastilla Roja.

Y también destacaría el de Clincker un ecosistema de software de la empresa Klicap, una empresa andaluza.

Dicho ecosistema está formado por el sistema de control de versiones Subversion, aunque permite conectar con otros externos como por ejemplo Git. Integración continua con Jenkins, gestión de proyectos con Trac o Redmine, control de calidad de nuestro código y estadísticas con Sonar, etc. Todo esto integrado con un sistema de autenticación unificada para facilitar el trabajo de gestión de usuarios y accesos.

Aquí os dejo los enlaces.

Más enlaces en https://twitter.com/#!/jbravo.

Resumen semanal de temas de Java

Ecosistemas de desarrollo de software: lineas de automatización.

Todo este tema de los Ecosistemas de Software y la Integración Continua me encantan y me fascinan.

Se por experiencia que la mayor parte de los problemas y retrasos que se producen en los proyectos actuales es por no poner cuidado y el suficiente cariño en estos temas. No se les da la importancia adecuada y luego pasa lo que pasa.

  • Se puede llegar a estar hasta varios días sin poder realizar el build del proyecto.
  • Los errores y problemas se detectan demasiado tarde, lo que multiplica exponencialmente el coste de su solución.
  • Las modificaciones y correcciones no producen más que nuevos errores que, como indico en el punto anterior, se detectan tarde.
  • Los programadores tardan horas en desarrollar sus tareas por trabajar en un entorno poco optimizado.
  • Los programadores se desmotivan, se van del proyecto, con la perdida de conocimiento que ello implica en algunos casos.
  • Se pierde una cantidad enorme de horas en procesos manuales facilemente automatizables.
  • Se produce un “proceso de involución en el proyecto” en el que parece que este empeora en lugar de mejorar. Digo “parece” porque realmente no solemos tener herramientas fiables y “sinceras” que nos proporcionen la situación del proyecto. He puesto la palabra “sincera” a propósito, porque en la mayor parte de las ocasiones, quien proporciona esta información es una persona que miente descaradamente.
  • El proyecto se llenan de auditores y “tecnocratas” que con sus Word, Excel y Projects intentan solucionarlo. Y entonces se pieder el norte, ya no se sabe si el objetivo es el proyecto, o todos los informes que debes pasar a estas personas… que cuestan un montón de horas y dinero.
  • Etc, etc, etc…

Y si,  estoy convencido que muchos de estos problemas se podrían evitar si se decidises invertir tiempo en estos temas:

Ecosistema de software

 Un ecosistema de desarrollo software es un espacio de trabajo en el que conviven una serie de herramientas que acompañadas de unas buenas prácticas permiten a un equipo de desarrollo modelar una metodología de trabajo.

Integración continua

La integración continua es una práctica en el desarrollo de software que consiste en poner en común todos los cambios que afecten al resultado final de nuestro proyecto de una forma frecuente con el objetivo de ver la evolución de sus efectos.

Automatización

Y en la automatización  de estas 5 líneas que se suelen recomendar para conseguir un nivel óptimo de madurez en el desarrollo de software:

  • Build (compilación, empaquetado y distribuibles)
  • Automatic Documentation Generation
  • Testing
  • Continuous Inspection
  • Continuous Deployment

De todo esto es de lo que nos habla Manuel Jesús Recena Soto en esta estupenda presentación que realizo el pasado 14 de Febrero como ponente invitado al Máster de Ingeniería y Tecnologías Informáticas que se imparte en la Universidad de Sevilla.

Ecosistemas de desarrollo de software: lineas de automatización.

Curiosa metáfora de integración continua

En: “Integración continua para mantener el proyecto en rumbo“.

La Integración Continua es como una tarjeta de crédito al revés. Una tarjeta de crédito nos permite comprar algo grande hoy, y pagarlo de a poquito más adelante. Sin embargo, las tarjetas de crédito tienen un pequeño secretito oscuro… el interés compuesto. Terminamos pagando mucho, mucho más de lo que tomamos prestado. Siempre resulta más barato pagar en efectivo si podemos.
Cuando usamos un sistema de Integración Continua, ocurre lo opuesto. Podemos hacer pequeños pagos todos los días, o podemos esperar hasta el final y hacer un único gran pago. ¡Desafortunadamente este último gran pago tiene todo el interés compuesto agregado! Si esperamos al final, terminamos pagando más… mucho más!
Esto ocurre por el “tiempo a oscuras” entre que un desarrollador escribe el código y lo combina con el código que escribió el resto del equipo. Si combinamos el código todos los días, o incluso un par de veces a la semana, los cambios son menores y relativamente indoloros. Pero si esperamos…
Curiosa metáfora de integración continua

Tutorial de integración continua

Estupendo tutorial de Integración Continua escrito por Carlo Zuluaga.

Este es el indice del tutorial:

  • Introducción.
  • Instalación y configuración.
    1. Instalación en Windows.
    2. Instalación en Linux.
    3. Instalación de Apache ANT.
    4. Instalación de Apache Maven.
    5. Instalación y Configuración de VisualSVN Server
  • Configurar proyecto de ejemplo
  • Creación de un Proyecto Básico con Hudson
  • Plugins
    1. Pruebas unitarias con JUnit
    2. Cobertura de código con Emma.
  • Sonar
    1. Instalación de MySQL.
    2. Instalación de SONAR.
    3. Integración con Hudson.
    4. Análisis del código fuente.
  • Administración de Hudson.
    1. Preguntas Comunes.
    2. Seguridad.
  • Recomendaciones para una instalación.
  • Referencias.
  • Como podéis ver muy completo y pensado para montarlo desde el principio. Lo podéis encontrar en esta dirección: http://carloszuluaga.wikidot.com/hudson

    Tutorial de integración continua