Archive

Archive for the ‘Ingeniería del software’ Category

¿Qué le pedirías a una herramienta de modelado de requisitos?

March 9th, 2009

Nuestro ecosistema software tiene cosas que mejorar, y ahí está lo bueno. Siempre hay ideas nuevas para mejorar el ecosistema y con ello refinar nuestra forma de trabajar. Hace algún tiempo publicábamos un simple plugin de TRAC que nos genera una página wiki con los requisitos que recogemos con la herramienta REM. Evidentemente era una primera aproximación que seguimos usando pero ha llegado el momento de avanzar, de ahí el título de esta entrada. A continuación algunas cosas que considero básicas para una herramienta de modelado de requisitos:

  1. Posibilidad de categorizar y etiquetar los requisitos.
  2. Posibilidad de reutilizar categorías y etiquetas entre proyectos.
  3. Reutilizar requisitos entre proyectos para evitar introducirlos múltiples veces
  4. Relacionar requisitos y definir en qué cosiste la relación (dependencia, ámbito, de interés, etc…)
  5. Representaciones gráficas (grafos) con los requisitos y sus relaciones
  6. Generación de artefactos documentales como entregables según perfiles
  7. Versionado de requisitos
  8. Posibilidad de que los requisitos tengan archivos adjuntos (documentos, audio y vídeo)
  9. Que para usarla sólo necesitemos un navegador web (y quizás ni conexión permanente si usamos algo como Google Gear)
  10. Que gestione correctamente una petición de cambio (quién la solicita, por qué, cómo, cuándo, etc.)

La lista se podría extender muchísimo. ¿Qué le pedirías tú?

Metodologías ágiles

February 12th, 2009

Esta semana (lunes y martes) he estado en Madrid recibiendo un curso sobre metodologías ágiles. El curso fue impartido por Diego Parrilla (The Server Labs). No puedo hablar sobre el éxito del curso porque desconocía sus objetivos (sólo iba como invitado), sin embargo, el material que nos entregaron realmente bueno, y Diego, un profesional como mucha experiencia de la buena.

El curso me ha venido muy bien, he podido constatar qué cosas estamos haciendo bien y que cosas tenemos aun por mejorar. Tras un año y medio poniendo en marcha una metodología de trabajo para desarrollar software y el ecosistema software correspondiente, y escuchar a Diego, me gustaría destacar los siguientes puntos:

  1. Las metodologías ágiles implican mucha participación por parte del cliente, por lo tanto, hay que saber elegir cómo y cuándo aplicarlas.
  2. En caso de que tu cliente acepte trabajar así, cuéntale en todo momento lo que estás haciendo. Sé totalmente transparente, incluso los impedimentos, dificultades y problemas.
  3. Inspeccionar y cambiar, la clave para conseguir agilidad. Reinventarse constantemente.
  4. Conseguir agilidad es más sencillo con equipos pro-activos, con iniciativa y con experiencia. Parece una obviedad, ¿verdad? Pues no lo olvides si pretendes montar un piloto. Si la experiencia no abunda, busca la figura del mentor (mentoring).
  5. La ubicación de los miembros del equipo en el lugar de trabajo es muy importante. Piensa como distribuyes al equipo, influye en la comunicación.
  6. Para que las cosas salgan bien, el cliente tiene que formar parte del equipo. En la iteración-0 debes marcarte como objetivo hacer que el cliente se implique y tenga claro que él también desempeña un rol (a parte del product-owner).

Vuestras sugerencias y experiencias serán bienvenidas.

Crónica sobre la desconferencia 02 de Ecosistemas Software

October 19th, 2008

El pasado viernes 17 de octubre se celebró la segunda edición de la desconferencia del grupo Ecosistemas Software. Tal y como se adelantaba en la lista, la asistencia sería muy reducida, finalmente asistimos 5 personas (Paco, Viki, Darío, Felipe y el que escribe). Pero tuvo su lado positivo, esta desconferencia estuvo más acotada y dirigida que la anterior, y nos permitió participar mucho más.

A continuación cito algunos de los temas que se trataron (18:20h – 21:15h aprox.):

  1. Dado que teníamos una nueva incorporación, Felipe se presentó, nos contó donde trabajaba, a qué se dedicaba, cuál era su marco tecnológico, cómo era su ecosistema, etc…
  2. Estuvimos hablando sobre las distintas formas de distribuir nuestros aplicativos Java (war, jar, ear, aar, zip, con instaladores, etc)  y yo estuve hablando sobre las ventaja de usar el plugin de maven assembly y como lo estoy usando en Opina y otros proyectos.
  3. Y por último sobre metodologías de trabajo y especialización en los equipos.

El segundo punto sí estaba previsto que lo tratásemos y así lo hicimos, sin embargo, y esto es lo bueno que tienen estas reuniones, salen temas realmente interesantes donde uno aprende mucho justificando sus ideas y escuchando a los demás.

Algunas cuestiones/ideas interesantes que me gustaría destacar:

  1. Felipe planteó que las aplicaciones web se podían distribuir en formato WAR y que los parámetros de configuración fueran proporcionados por el contenidor o servidor de aplicaciones a través de un recurso JNDI. Desde luego es una forma de que WAR sea válido en cualquier entorno de despliegue siempre y cuando se conozca el nombre del recurso que el administrador de sistemas asigne.
  2. El plugin Assembly es muy útil para diseñar los distribuibles clásicos: binario, fuentes, etc.
  3. Debemos organizar una desconferencia para hablar única y exclusivamente de metodologías y su vinculación con los ecosistemas software.
  4. Las desconferencias debemos guiarlas y centrar los temas que se van a tratar.
  5. Deberíamos elegir otras opciones que no sean los viernes.

Una foto (Darío, Viki, Paco, Felipe, Dani) en las oficinas de BitRock. Aprovecho para darles las gracias por su hospitalidad.

Segunda desconferencia en ecosistemas software

October 14th, 2008

Tras el parón veraniego, el grupo de ecosistemas-software organiza “Desconferencia 02″. Como ya sucediera en su primera edición, esta nueva edición se volverá a celebrar en las instalaciones de BitRock.

La desconferencia se celebrará el próximo viernes 17 a las 18:00h:

BitRock S.L.
C/ Salado 11 – Local 15
41010 Sevilla
Spain

Para esta segunda edición voy a preparar algunas cositas sobre distribuibles en Java. Supongo que luego saldrán otros muchos temas. Se ruega a todos los que tengan pensado asistir confirmen su asistencia en la lista de correo. El espacio es limitado y además tengo que saber la gente que asistirá para comprar unos refrescos y algo para picar.

Lecciones aprendidas

October 11th, 2008

Recientemente hemos entregado a un cliente una aplicación software dentro de un proyecto que está a punto de terminar. Sólo queda cerrar algunos flecos que no dependen directamente de nosotros, sino del propio cliente. El proyecto era pequeño:

  • 5 meses en total
  • 4 meses desarrollando la aplicación
  • 1 Jefe de proyecto, 1 desarrollador del lado del cliente, 2 desarrolladores JEE y 1 asegurador de la calidad

Para la construcción hemos contado con:

  • Marco tecnológico Java: Spring framework, Eclipse Birt, Hibernate
  • ExtJS
  • DEIN – Ecosistema Software (de esto ya os hablaré)

Me gustaría contar algunas lecciones que hemos aprendido:

  1. Nos es conveniente homogeneizar los entornos de desarrollo local de todos los miembros del equipo. Aunque el cliente nos indique cuál es su entorno de producción y eso quede reflejado en los requisitos no funcionales del análisis, es altamente aconsejable la disparidad. Es una forma muy simple se disminuir riesgos y asegurar un mayor nivel de calidad. Concretamente en este proyecto hemos usado:
    1. Ubuntu, Eclipse, Jetty, JDK 1.5 (entorno de desarrollo local)
    2. Windows XP, Eclipse, Tomcat JDK 1.6 (entorno de desarrollo local)
    3. Debian, Tomcat, Apache, JDK 1.5 (entorno de despliegue virtualizado que DEIN proporciona)
  2. Las tareas de análisis nunca terminan. Cuando el analista decide que hay una versión estable de los requisitos y se ponen en marcha las tareas de implementación, se activa un proceso iterativo entre el diseño-implementación y el análisis. El objetivo final para el cliente es que lo que le entreguemos satisfaga sus espectativas, sin embargo, nosotros compartimos ese mismo objetivo y además tenemos que asegurarnos de que lo construido y lo analizado está sincronizado y se corresponden. ¿Por qué? Porque aunque sean desarrollos a medida (llave en mano) es probable que surjan ampliaciones, revisiones, etc. y por eso mismo tenemos que ser consecuentes con lo que hacemos. No es la primera vez que me encuentro un documento de análisis perfectamente maquetado con una página inicial en la que se indica que lo validó tal persona hace un año y recientemente se ha publicado una versión.
  3. Es importantísimo hacerle ver al cliente cuánto cuestan los cambios y todo lo que adicionalmente solicita. Entiendo que es una tarea complicada, pero ahí está la destreza de un buen jefe de proyecto. Lo que no podemos hacer es admitir cambios y mejoras durante la evolución del proyecto con el fin de mejorar la experiencia de los usuarios finales, y que luego, cuando el proyecto está terminando te inunden en procesos eternos llenos de burocracia.
  4. En tu planificación prioriza al máximo el obtener una primera release que puedas mostrar a los usuarios finales. Haz todas las entregar parciales que puedas y la disponibilidad del cliente permita. En este proyecto concretamente, el cliente ha tenido la oportunidad de ver todos los avances de forma diaria. DEIN se encargaba se desplegar todas las noches un SNAPSHOT del proyecto en el entorno de despliegue, que por supuesto estaba disponible para el cliente.
  5. Establece sesiones de trabajo (preferiblemente, semanalmente) con todos los miembros del equipo. Aprovecha esta sesiones de trabajo para hacer una puesta en común de perspectivas, dudas, aclaraciones, consideraciones, propuestas, etc…
  6. Procura que todos tus proyectos tengan algo de I+D+I. Disponer de un departamento de verdad de I+D+I no es sencillo y requiere inversión, pero cuando no se tiene esa opción, algo debemos hacer. Cuidado con los experiementos en proyectos pequeños, es muy sencillo incumplir en la planificación si algo no sale todo lo bien que esperábamos.

Supongo que la lista podría continuar, pero son los que puedo contar y pueden ser útiles. En cuanto me autoricen, publicaré algunas capturas de pantalla (y con suerte un screencast) sobre el proyecto.