Encuentro Agile-Python BCN
El grupo de Python Barcelona de Meetup organiza reuniones monográficas sobre temas relacionados con Python. En esta ocasión, se hicieron presentaciones sobre metodologías de desarrollo.
Introducción al desarrollo de software àgil con Scrum
Alex Ballarin presentó la primera charla, que introducía metodologías ágiles poniendo como ejemplo Scrum. También presentó el grupo de Meetup recién creado Barcelona Scrum. La charla fue bastante introductoria, basándose en una guía de una página creada para la ocasión.
Una de las herramientas más interesantes que comentó Alex es el burndown chart que muestra el progreso del proyecto ideal relacionado con las horas invertidas en el mismo.
Alex también comentó el planning poker que consiste en una técnica muy utilizada para la estimación aproximada sin incluir desviaciones personales. Otra herramienta muy extendida, ésta para el control de las tareas, es Kanban, mucho más conocida, que consiste en disponer de un panel en el que cada estadio del desarrollo de una tarea se representa como una columna, por la que la tarea, que suele representarse con un post-it, va avanzando hasta que llega a la columna de tareas completadas. Para ésta técnica es muy importante tener claro lo que significa que la tarea está completada, lo que se llama Definition of Done, y que consiste en el conjunto de condiciones técnicas para que una tarea se considere completada y, en caso de usar Kanban, poderla poner en la última columna.
Development work-flow at Splendia
Christof Damian explicó cómo funciona el método de desarrollo, su flujo de trabajo, en Splendia. Hasta hace relativamente poco tiempo utilizaban waterfall, pero empezaron a aplicar algunas técnicas como code review. Utilizan Github para aprovechar la funcionalidad de Pull Request que les da, al mismo tiempo que pueden ver los cambios introducidos en la misma página web. Cuando otro desarrollador revisa el PR puede utilizar los comentarios para indicar lo que le gusta, o los comentarios que quiera hacer.
Christof también contó cómo hacen integración contínua. Tienen un servicio de Jenkins conectado al repositorio en Github que corre los tests y añade comentarios con los resultados de la ejecución de éstos. Finalmente, tienen un sistema automatizado que, dependiendo de los comentarios y de los resultados de los tests, añade los cambios a la rama principal.
En cuanto al sistema de control de versiones, que, evidentemente es git, utilizan tres ramas, la que tienen en Github, donde se hacen los code reviews. Cuando un conjunto de cambios se aprueban en el code review, se llevan los cambios a una rama de desarrollo, vinculada a otro proceso de Jenkins donde se ejecutan, de nuevo, los tests unitarios, estáticos y funcionales, para lo que Christof indica que utilizan Cucumber. Finalmente, cuando Jenkins considera que los tests se satisfacen tras aplicar los cambios, éstos se llevan a la rama estable, donde se hace un despliegue en un entorno controlado sobre el que se realiza el testeo manual.
En su charla, Christof destacó que han ganado en comodidad para los desarrolladores, especialmente al hacer los code reviews y permite a la empresa tener las nuevas funcionalidades integradas rápidamente. También comentó que siendo Jenkins una herramienta muy conocida por los desarrolladores, ha resultado muy sencillo integrarla con Github para establecer éste proceso.
Testing and continuous integration
Thasso Griebel explicó la importancia que tiene el concepto de Continous Integration en el mundo de las metodologías ágiles. Tanto definiendo un simple flujo de trabajo consistente en ejecutar todos los tests con éxito y subir el código, como si se utiliza el branching model, es necesario que los tests necesarios para poder subir el código se ejecuten lo suficientemente rápido. En el caso de Thasso, necesita ejecutar los tests unitarios, de integración y funcionales en varios sistemas operativos y plataformas.
Thasso comentó la existencia de varias herramientas bastante interesantes (como Bamboo, BuildBot o TeamCity), aunque utiliza Jenkins sobre el que utilizan muchos módulos para ampliar las funcionalidades, como, por ejemplo, ejecutar los tests en equipos remotos con otros sistemas, plataformas, llamado Shining Panda.
My personal Python best practices
Paweł Piotr Przeradowski habló sobre algunas técnicas que utiliza al programar en Python:
- PEP8 que es un conjunto de reglas de estilo orientadas a mejorar la legibilidad del código, que se pueden seleccionar y validar con la herramienta pep8 y que se puede integrar directamente con editores y entornos de desarrollo.
- pyflakes es una herramienta que detecta partes del código que no se utilizan en ningún caso. También consiste en una herramienta de línea disponible para algunos editores.
- McCabe es una herramienta para analizar la complejidad que el código presenta. Ésta complejidad, llamada ciclomática, consiste en el número de caminos que el código puede tomar, según las situaciones que se planteen.
- py.test es una librería de unit testing que Paweł prefiere por, entre otras características, permitir crear tests más eficientes con menos código que otras librerías.