Blog Eclipse

Software factory

Un poco de historia

Las tecnologías y los métodos de desarrollo software han progresado muchísimo estos últimos años. La evolución de Internet y de las redes ha permitido el progreso de los desarrollos open-source que han contribuido a proporcionar muchas herramientas para ayudar al desarrollo. ¡Hace 15 años era común gastar más de 15 000 € de herramientas antes de empezar un proyecto!

El ciclo en V tradicional fue gradualmente reemplazado en la mayoría de los desarrollos por métodos conocidos como ‘ágiles’, permitiendo, por una serie de iteraciones cortas (con una duración máxima de 6 semanas), de acercar las funcionalidades del software a las necesidades reales y operativas del cliente. El éxito de estos métodos está bien establecido: Eclipse por ejemplo, que reúne el código de más de 400 ‘committers’ está desarrollado utilizando este método.

En torno a estos métodos ágiles, se han creado herramientas colaborativas para optimizar al máximo los desarrollos.

 

¿Una buena software factory?

Una software factory es un conjunto de herramientas y de método(s) para los desarrolladores y arquitectos de software que les permite llevar a cabo su misión.

Para desarrollar de manera ágil y de forma iterativa, es necesario cumplir con ciertos criterios, tales como:

  • la gestión de un “backlog” indicando las tareas para cumplir (evoluciones, bugs, etc.)
  • la puesta a disposición automática de una versión funcional del programa disponible en cualquier momento.
  • el establecimiento de los tests unitarios desde el principio del proyecto para garantizar la no regresión a lo largo del desarrollo
  • el establecimiento de roles precisos: scrum master, product owner, arquitectos, desarrolladores…
  • el establecimiento de una rigurosa organización de proyecto: reunión diaria para identificar los obstáculos que se presenten, balance de iteración, etc…
  • el establecimiento de herramientas para el seguimiento de los progresos del backlog

Todas estas herramientas ya están disponibles y se pueden utilizar a nivel local (instaladas en un servidor privado), o disponibles en el cloud (instaladas en servidores web). Dependiendo de las necesidades del proyecto, es posible elegir la solución de hosting más adaptada.

 

Las diferentes herramientas de la software factory

Una buena software factory debe contener las siguientes herramientas:

  • un estudio de desarrollo
  • un tracker
  • un gestionario de fuente
  • un sistema de tests unitarios
  • una herramienta de integración continua
  • una herramienta de monitorización de código estableciendo métricas
  • una herramienta de revisión de código

Los siguientes párrafos proponen herramientas adaptadas para una buena software factory. ¡Comenta este artículo si tienes sugerencias!

 

Eclipse

Eclipse (https://www.eclipse.org) es un estudio de desarrollo integrado que puede trabajar con diferentes lenguajes (C, lua, C+ +, Java, etc…). Después de unos diez años de funcionamiento, Eclipse se ha convertido en la herramienta de referencia en la industria para el desarrollo universal. En efecto Eclipse funciona indiferentemente en Mac, Windows y Linux, y aborda todos los aspectos del desarrollo: código embebido, aplicación web, aplicación stand alone, OSGi, etc.

Acoplado con otras herramientas como mylyn, egit u otras, Eclipse es el receptáculo estándar para parametrizar el estudio de desarrollo a medida necesario para el desarrollo de una aplicación compleja.

 

JIRA

Jira (https://www.atlassian.com/software/jira) es un ‘tracker’, es decir una herramienta para enumerar todos los ‘issues’ de un proyecto.

Esta herramienta es totalmente configurable y extensible, incluyendo la gestión de la agilidad a través de su plugin ‘GreenHopper’ (https://www.atlassian.com/software/jira/agile). La combinación de estas dos herramientas permite trabajar en estricta conformidad con las iteraciones de desarrollo y con métricas muy precisas sobre el progreso del proyecto.

JIRA permite gestionar issues de diferentes tipos: bugs, evoluciones, mejoras, tareas o issues específicos a medida (que podemos definir). Para cada tipo de issue también es posible administrar un workflow específico.

Greenhopper permite gestionar las iteraciones del proyecto de forma gráfica visualizando en forma de una tabla de post-it como se ve regularmente. También proporciona diagramas de tipo burn down chart que permiten ver el progreso del proyecto respecto al plan original de la iteración.

Por último, JIRA está totalmente integrado en Eclipse por el conector Mylyn apropiado (https://www.eclipse.org/mylyn), para visualizar directamente los issues desde las vistas específicas de Eclipse y supervisar su progreso.

 

Git

Git es un sistema de gestión de código fuente. La gestión de código fuente es la capacidad de rastrear el histórico de todas las modificaciones de código hechas por los diferentes desarrolladores. Existen muchas herramientas más o menos eficientes para realizar esta tarea. Hoy en día, la herramienta la más eficiente es, sin duda, ‘git’ (https://git-scm.com). Esta herramienta ofrece numerosas ventajas, entre ellas dos principales:

  • la posibilidad de editar y entregar código sin conexión a la red
  • la capacidad de crear y fusionar ramas de manera muy simple contrariamente a las otras herramientas

Git se ha convertido en los últimos años en la herramienta de referencia para la gestión de fuentes. Por ejemplo es la herramienta que se utiliza para gestionar el desarrollo de ubuntu (implementación de linux) realizado por cientos de desarrolladores. Todo el código de la plataforma Eclipse también ha pasado a git a finales de 2012.

Usar git no requiere ninguna instalación en el servidor. Se puede utilizar un depósito con un acceso a la red estándar. Para alojar el código, es posible publicarlo de forma gratuita en github (https://www.github.com) de manera pública, o en bitbucket (https://www.bitbucket.org), donde también es posible crear hasta 5 proyectos privados gratuitos.

Por último, git está totalmente integrado en Eclipse con el plugin de egit, que proporciona todas las posibilidades a tu alcance en unos clics.

 

Tests unitarios

Los tests unitarios permiten comprobar la validez del código. Para que sea eficaz, cada test debe ser codificado de una manera reproducible (creación de un entorno de test estable), focalizado en una sola función para testar, explícita en caso de problemas (para poder corregir fácilmente el problema).

El sistema de tests unitarios debe ser capaz de ejecutarse fácilmente, directamente desde el estudio de desarrollo (o en la herramienta de integración continua), y debe ser suministrado a medida que se desarrolla el proyecto.

Para el código escrito en Java, se utiliza la plataforma de test JUnit.

 

Jenkins

Jenkins (https://jenkins-ci.org) es una herramienta open source de integración continua extremadamente simple de utilizar. La integración continua es el mecanismo que permite entregar una versión del producto en un período regular (día, semana) o en cada cambio de código.

Jenkins está utilizado por cientos de proyectos en el mundo, y permite a través de su sistema de configuración en plugins de ser adaptado con todas las herramientas del mercado (ant, maven, git, …).

Instalado en el comienzo de un proyecto, Jenkins permite asegurar el desarrollo, garantizando la presencia de una versión intermedia del proyecto, sin embarcarse en un proceso manual costoso de construir.

Paralelamente a la construcción de los componentes de software y su integración, Jenkins permite ejecutar los tests unitarios del proyecto, generar los informes y entonces controlar las métricas del proyecto (número de warnings de compilación, número de clases, etc…).

Jenkins es la herramienta necesaria para aplicar uno de los principios básicos de la agilidad: la puesta a disposición de un ejecutable reciente que puede servir para evaluar las funcionalidades disponibles.

 

Sonar

Sonar (https://www.sonarqube.org) es una herramienta de control estático de código. Es capaz de detectar errores clásicos cometidos durante el desarrollo (pérdidas posibles de memoria, etc.) y obtener métricas representativas (complejidad del código, tasa de comentarios, código duplicado, etc.).

Esta herramienta puede conectarse a la herramienta de integración continua (y obtener los errores durante la construcción del producto), o también en el estudio de desarrollo.

 

Gerrit

Gerrit (https://code.google.com/p/gerrit/) es una herramienta para facilitar el análisis de código de los proyectos gestionados en git. Actúa como un filtro antes de la entrega final del código, permitiendo a otros miembros del proyecto de aceptar el código proporcionado. Esta práctica también ayuda a difundir el conocimiento entre los desarrolladores y compartir las mejores prácticas.

Esta herramienta requiere tener una organización de los recursos de desarrollo donde los ‘validadores’ están elegidos dentro del equipo de desarrolladores.

Gerrit es un ‘plus’ en un proyecto, pero no es imprescindible en una software factory. No obstante, se debe decidir sobre su uso durante la vida del proyecto. Sin embargo, si el equipo de desarrollo está distribuido sin que la gente se conozca muy bien, puede ser necesario utilizarlo.

Deja una respuesta