Semana 406

La típica pereza post-vacacional durante la semana pasada mezclado con cierto acumulo de trabajo que me hizo andar un poco a idas y venidas, sin ser lo efectivo que me hubiera gustado. Además dediqué algunos ratos a trabajar en el Startup Open Space 2016, entre otras cosas tuve que dejar listo el vestibule para proponer sesiones.

Al final entre unas cosas y otras tuve que descartar ir a un par de saraos que habían durante la semana, no da tiempo a hacer todo lo que a uno le gustaría.

Esta semana me tocó estar centrado en 3 proyectos, y tener que dejar aparcadas algunas tareas que tengo pendientes desde hace algunas semanas en otros proyectos más pequeñas:

  • Mi colaboración con la gente de Maubic se llevó casi todo el foco de mi semana, ya que se acercan fechas importantes para el proyecto y necesitaban que diera algo más de dedicación. Estuve trabajando en un par de servicios diferentes nuevos.
  • Con Coding Stones tuvimos la reunión de arranque con un cliente, así que definitivamente empezaremos a trabajar tras la semana santa. Tengo muchísimas ganas de empezar a desarrollar con mis compañeros.
  • Tuvimos una reunión acerca de OutreachTool para plantear colaboraciones con algunos interesados en consultoría. Por mi parte también estuve con algunas cosillas del rediseño.

Buena (mini)semana.

Semanas 404 y 405

Ya estamos, casi como de costumbre, haciendo retro quincenal otra vez. Esta vez mi excusa es haber estado una semana de vacaciones, o de medio vacaciones, ya que la excusa de mis vacaciones era ir a Londres para asistir como voluntario a uno de los eventos sobre software más importantes de europa como es la QCon London. Y como era mi primera vez ahí quise aprovechar también para hacer bastante turismo y ver a algunos amigos del mundillo que andan por tierras británicas.

No sé si podré sacar un rato para escribir sobre el evento, ya que quiero volver a ver algunos videos de charlas de las que me perdí algunas partes por el trabajo como voluntario, pero intentaré hacerlo en algún momento.

La semana anterior, además de trabajar aún sin total normalidad (por andar todavía algo pachucho), saqué tiempo el viernes para ir al Friday Dojo sobre Jenkins. Además andamos en mitad de mudanza del estudio, aunque por ahora mi aportación ha sido muy poco y son mis compañeros los que se están haciendo cargo de casi todo.

Mientras que sobre proyectos:

  • En OutreachTool estuve implementando cambios y añadidos en la tienda, además estuve actualizando algunas gemas.
  • Con Coding Stones estuvimos revisando lo que un cliente nos ha pasado para empezar a trabajar en la definición de historias de usuario, vimos que tenemos bastante trabajo respecto a esto.
  • Hice algunas mejoras en Mosica para ver si le conseguimos gustar un poquito más a google, además resolví un bug con la generación de algunos ics que daban problemas.
  • Con Maubic estuvimos trabajando en un servicio nuevo, además de dando soporte y haciendo mejoras en otro de ellos; estas semanas me toca pisar un poco el acelerador con ellos. También perdí algo de tiempo en dejar listas algunas cosas en un jenkins.

Buena semana.

Semanas 402 y 403

De nuevo resumen de 2 semanas. La segunda me la he pegado prácticamente KO por un trancazo bastante gordo que no me ha dejado avanzar lo que me hubiera gustado, incluso tuve que dejar aparcada temporalmente alguna cosa hasta nueva orden.

Y es que aún ando bastante renqueante tras tantos días con fiebre, así que he dejado bastante escueta la retro:

  • Con Maubic estuve principalmente dándoles soporte en temas de backend y dedicando tiempo para la resolución de algunos problemas que fueron surgiendo.
  • Estuve a varios flancos con OutreachTool, tanto a nivel de desarrollo como de coordinación. Ya hay buena parte del rediseño hecho y hay que empezar a integrarlo en la web.
  • Tuvimos reunión de puesta al día de Bichomanía para alinear visiones. Además me tocó hacer algún pequeño arreglo.
  • A Mosica le dediqué un poquito de tiempo para hacer un par de cambios chorras. También aproveché para empezar a probar una herramienta de analítica de usuarios.
  • Con los CodingStones estuvimos haciendo trabajo de definición y revisando algunas cosas hechas por el equipo. Además, a falta de las formalidades, parece que a no mucho tardar vamos a trabajar por fin en un proyecto de cierta entidad.

Buena semana.

Page Objects con PHPUnit y Webdriver

A finales del año pasado me llegó la posibilidad de colaboración a modo de consultoría con Funidelia, un comercio electrónico de disfraces. Un comercio electrónico que además va como un tiro, por cierto.

Me contactaron para echarles una mano para empezar con el testing funcional (o de sistema, o end-to-end, o...). Ya que al parecer intentaron en el pasado ponerse con ello pero, como ocurre en muchas ocasiones, el día a día de una startup no permite que el equipo técnico pueda focalizarse en ello.

Así que tras una reunión inicial y alguna otra conversación teníamos claro que mi papel era sentar unas bases sobre las que ellos pudieran seguir.

¿Cuáles eran esas bases?:

  • Implementar casos los tests automáticos para la parte más crítica del negocio: los diferentes puntos dentro del proceso de compra.
  • Saber cuanto antes cuando se rompe un test. Así que se pueda lanzar correctamente desde un servidor de integración continua (que en su caso era un jenkins) sobre entornos de desarrollo.
  • Además del entorno de desarrollo que pudieran lanzar contra entornos de staging, o incluso producción. Teniendo en cuenta que la misma base de código del comercio electrónico se ejecuta en diferentes instancias y configuraciones (por país).
  • También se debían lanzar los tests con diferentes navegadores, es crítico que funcione correctamente con todos lo navegadores mayoritarios.
  • El lenguaje de programación a utilizar iba a ser PHP, ya que es el utilizado por el equipo.

Una cosa que estuvimos hablando fue el que los tests sólo cubrirían los escenarios optimistas del proceso de compra, esto es cuando se supone que al usuario todo le va bien y termina con su compra de disfraces hecha. No sólo para lo que yo iba a hacer, si no también para cuando el equipo siguiera evolucionando las baterías de tests. Al final son tests lentos, frágiles y mantenerlos tiene bastante coste, pero luego volvemos a ello.

Las herramientas:

Hacía mucho que no programaba en PHP y no estoy para nada al día de sus novedades, pero para esto estábamos de acuerdo que no creíamos que iba a ser un gran problema.

Aunque no estuviera muy al día sí tenía referencias de cosas como composer para gestionar las dependencias y era el punto de partida.

En cuanto al framework de testing se me pasó un momento por la cabeza el cacharrear con behat, pero como al final iban a ser tests sólo para los programadores me parecía añadir una indirección que no aportaba nada; así que tiramos a lo seguro con PHPUnit, que ir con algún framewrk xUnit es ir sobre seguro.

Para el lanzamiento de acciones de navegador también tenía claro la elección con Selenium Webdriver y el cliente PHP implementado por la gente de facebook.

Mientras para que para el soporte de ejecución frente a diferentes entornos, monté algo de código a medida para poder cargar configuraciones de ficheros json a partir de un parámetro enviado al comando de ejecución de la batería de tests.

Page Objects:

Y ya respecto a los propios tests, como escribía algo más arriba, los funcionales suelen ser considerados frágiles y lentos.

Decimos lentos para el contexto de que no nos sirven para dar feedback rápido de si algún cambio que hayamos introducido en el código ha roto algo, si los intentas usar para ello serán una tortura para tu flow. Si a alguno no le suena la Pirámide de Test siempre puede informarse de ello en la web de Fowler.

Pirámide de Test

Y decimos frágiles principalmente porque cualquier cambio de maquetación html por pequeño que sea puede romper el test: un texto, un class, un id... Así que, salvo que la UI no evolucione, suelen resultar caros de mantener frente a otros tipos de tests.

Una forma de abaratar bastante el mantenimiento de esos tests es el uso Page Objects. De modo que para cada página (aunque también podríamos tener Page Objects de elementos comunes, como quizás un menú de navegación) que queremos que participe en los tests abstraeremos sus detalles de implementación para utilizarlo como un objeto en cada caso de test, reduciendo de esta manera la duplicidad de código y mejorando la legibilidad de los propios tests.

En los Page Objects expondremos tanto métodos que crean/llevan a otros Page Objects como otros que lanzarán acciones para que sean ejecutadas en el navegador (un click, completar un formulario...) y de los que opcionalmente esperaremos algo en el retorno.

Además en mi caso implemento los Page Objects con la responsabilidad de los asserts en el propio Page Object. Ahí decido lo mucho o poco que quiero acoplarlo a la maquetación exponiéndolo como un assert con un lenguaje más de negocio. Esto lo comento porque al implementar Page Objects existen 2 vertientes ligeramente diferentes: incluir los asserts o proveer un modo para que el test sea el responsable de cómo se le hacen los asserts y así separar responsabilidades. El propio resumen final que enlazo, por lo general, desaconseja lo asserts en estos objetos; aunque a mi por el momento no me ha resultado problemático el hacerlo y se adapta más a mi gusto.

Y ya desde un punto de vista más práctico y sin meterme en detalle, este es como quedaría test de añadir un producto al carro de la compra:

Como se puede ver en el código, se mantiene encapsulado entre esos objetos. Podría cambiar completamente la maquetación de la UI y tendríamos que cambiar sólo la implementación de los Page Objects (que no es poco). Otro tema es que, por razones de diseño o negocio cambiara la lógica de navegación, claro.

Semanas 400 y 401

Un par de semanas algo duras estas 2 últimas, se han juntado algunos temas que las han puesto bastante cuesta arriba. No me vendrían mal unas vacaciones de las de verdad, no.

Desde Cachirulo Valley empezamos a coordinarnos y a trabajar en el próximo Startup Open Space. Además yo estuve presentando el colectivo y el evento en formato elevator pitch en el Startup Europe Week que se celebró en Zaragoza.

Algo a destacar de estas semanas es que hemos anunciado lo último en lo que llevo un par de meses embarcado, los Coding Stones (la web es temporal, pero había que lanzar algo ya). Una marca bajo la que estamos varias personas que llevamos bastante tiempo en esto del desarrollo de software y que queremos trabajar juntos, además que estamos convencidos de que aportamos más valor a nuestros clientes en conjunto que contratados individualmente.

Estuve en la presentación de Españopoly en Zaragoza. Y luego estuvimos tomando algo por ahí con David y Eva, buena gente de la Fundación Civio.

Para acabar esta última semana, este fin de semana me dio por extraer un pequeño plugin de JQuery para galería de fotos desde el proyecto de Alchups.

Estas semanas también tocó gestionar algún que otro lead, y hacer una primera reunión para conocer con mayor profundidad el proyecto de uno de ellos, además:

  • Dejamos listos algunos cambios en Bichomanía, principalmente relacionados con la arquitectura de información de la home.
  • Para Maubic estuve a temas variados. Los que me llevaron más tiempo fue dejar configurado un Jenkins listo para lanzar las builds de todos los proyectos, y montar un servicio de logging centralizado para los diferentes servicios.
  • Tuvimos la reunión de arranque para el proyectito con Refinery.
  • A Outreach Tool estuve dedicándole algunos ratos, además de hacer algo de soporte y coordinación.

Buena semana.