martes, 31 de mayo de 2011

Dobles de pruebas en Python llegados desde España

PyDoubles

En un mensaje de ayer en la lista de TDD en español, el amigo Carlos Blé, autor de el único libro (que yo conozca) de TDD en español (y gratuito), anunció la publicación de su framework para Dobles de Prueba en Python, construido porque no encontraban en su equipo uno como lo que ellos buscaban, y también como ejercicio.

El framework se llama pyDoubles, y el proyecto está hosteado en BitBucket para quienes quieran colaborar o derivarlo (está publicado bajo licencia Apache 2.0).

Según explican en la documentación, pyDoubles sigue la nomenclatura propuesta por Gerard Meszaros (en su ya clásico libro xUnit Test Patterns) para clasificar los dobles de prueba en stubs, spies o mocks.

Resumiendo brevemente, en el entorno de las pruebas unitarias, los dobles nos permiten reemplazar dependencias externas (que no son las que queremos probar) por otros objetos que -sólo a efectos de la prueba- se comportan como los verdaderos, facilitando la prueba de el SUT (o sistema a probar, por sus siglas en inglés).

Uno de los ejemplos clásicos es usar un doble para la capa de datos de un componente, ya que al probar nuestra lógica no necesitamos un repositorio de datos real, porque es dificultoso de mantener pero además es mucho más lento que utilizar un objeto con la misma interfaz o protocolo, que simplemente me devuelve lo que espero en el contexto del test.

La diferencia entre stubs, spies y mocks es sutil y discutida usualmente en la comunidad (desde el famoso artículo de Martin Fowler "Mocks aren't Stubs"). Lo importante en este caso es que el framework soporta los tres tipos.

Como el sitio de pyDoubles está ahora en inglés, traduzco brevemente la introducción explicando las categorías:

STUB

Reemplaza la implementación de uno o más métodos en la instancia del objeto que juega como colaborador o dependencia, devolviendo el valor que explícitamente devolvemos en la prueba. El stub es un método, pero es común llamar stub también a una clase que los contiene. El stub no tiene ningún tipo de memoria.

SPY

Hace lo mismo que el stub, pero puede registrar los métodos que se llamaron durante la ejecución de la prueba y cómo fueron invocados. Se utilizan para verificar la interacción o comportamiento.

MOCK

Además de lo que hacen los stubs y spies, es más estricto en la especificación del comportamiento esperado del sistema a probar. Antes de llamar a cualquier método en un mock, la prueba debe declarar, usando el framework, qué métodos y cómo deben ser llamados para que este comportamiento se verifique por completo. De lo contrario, la prueba falla con una excepción "UnexpectedBehavior" (comportamiento inesperado).

 

Como ellos explican en la documentación no hay tipos de dobles "mejores" que otros. Los mocks son más estrictos y por lo tanto hacen que las pruebas que los usan sean también más frágiles (más susceptibles a fallar por cambios menores en la implementación). Los spies son más flexibles en ese sentido, pero no alcanzan cuando necesitamos especificar un comportamiento especial en gran detalle. El resultado es que usualmente se utilizan combinaciones de los tres.

En la práctica, como siempre, conviene siempre aplicar la solución más sencilla que funcione, usualmente empezando con stubs, y luego recurrir a spies o mocks tipos cuando la prueba lo requiere.

Para ver ejemplos del uso del framework, les recomiendo ir directamente a la documentación.

lunes, 30 de mayo de 2011

Video: Programando de a pares con Gabriel Falcone

Gabriel Falcone

En esta oportunidad me reuní a programar con Gabriel Falcone, líder técnico en equipos de desarrollo de una empresa multinacional de origen argentino.

Conozco a Gabriel desde hace unos años, y compartimos el interés por el desarrollo de software y la dinámica de equipos. Gabriel también es ayudante de cátedra en FIUBA, con mi amigo y futura víctima de esta serie, Nico Páez.

En esta ocasión nos sentamos con Gabriel, en el laboratorio del MUG, donde recién terminaba de dictar una clase de su curso de C#, para recorrer algunos ejercicios basados en cosas que implementó recientemente en proyectos reales, utilizando técnicas de Reflection en .NET. En el video recorrimos dos ejercicios, pero en total hay tres que Gabriel tenía a mano, y que incluyo para quienes quieran jugar con ellos:

Los ejercicios son en C#, utilizando Visual Studio 2010.

lunes, 23 de mayo de 2011

Video: Programando de a pares con Martín Alaimo

Martín Alaimo

En este segundo video de la serie de sesiones de programación de a pares le toca el turno a Martín Alaimo, de Kleer.

Conocí a Martín en los comienzos de la comunidad Agiles.org en Argentina, cuando él todavía trabajaba en Accenture, y seguimos en contacto desde entonces, compartiendo varios eventos, viajes y peripecias del mundo del desarrollo.

Martín tiene algunas certificaciones más tradicionale como PMP (Project Management Professional) o Certified Java Developer, y varias dentro del campo ágil, como Certified Scrum Master Practitioner (la variante más concreta de esa certificación algo cuestionada) y más complejo aún, es uno de los pocos entrenadores certificados del curso de Scrum Development en América Latina (el único en Argentina y alrededores, hasta donde yo se).

Pero lo más importante no son los títulos sino la larga experiencia que demuestra desarrollando o enseñando, y la buena disposición para compartir esos temas con la comunidad, que lo han llevado a organizar los Yoseki Coding Dojo (de los que hablé en otro post) y asumir la responsabilidad de co-dirigir la organzación de Agiles 2011.

En esta sesión lo que tratamos de recorrer con Martín es el camino del diseño basado en dos prácticas complementarias pero que a veces parecen solaparse: TDD (Test-Driven Development) y ATDD (Acceptance Test-Driven Development).

Para el ejemplo, que codificamos en Ruby, usamos Cucumber para las pruebas de aceptación (ATDD) y RSpec para las unitarias (TDD).

Espero que les resulte interesante, y como siempre, esperamos feedback para saber por dónde continuar o qué temas tratar en más profundidad.

 

viernes, 20 de mayo de 2011

Salió PET #2 beta, la revista Python Entre Todos

PET #2

Apareció en estos días el segundo número de la revista que edita la comunidad Python ArgentinaPET (Python Entre Todos). La revista en sí se descarga como un PDF para leer como a uno más le guste.

El número está en Beta por ahora, y creo que lo que más le falta es revisar bien la ortografía, pero igual el contenido es excelente, y siempre mantiene ese ambiente descontracturado pero bien técnico que es la marca de agua de esta comunidad.

La revista se publica bajo licencia Creative Commons (específicamente CC-by-nc-sa-2.5), por lo que se puede distribuir y derivar en forma libre, manteniendo la atribución a la fuente original, sin usarla comercialmente, y manteniendo la licencia en las derivaciones.

El contenido incluye:

  • ¿Qué es PyConAr?
  • Cómo se hizo PyConAr2010
  • Charlas relámpago en PyConAr 2010
  • Fotos de las Keynotes
  • El Asado de PyConAr2010
  • Entendiendo Decoradores en Python
  • Introducción a Django
  • PyAfipWs: facilitando, extendiendo y liberando los Servicios Web de AFIP (Factura Electrónica y otros)
  • InfoPython - Midiendo el Valor de la Información de Mass Media con Python.
  • Como generar archivos .exe e instaladores para una aplicación python
  • Depuración y defragmentación de memoria
  • NINJA-IDE, Un IDE Pensado para Python
  • Usando librerías adicionales y virtualenv
  • Desafío PET
  • xkcd

Advierto que son muchas páginas de contenido variado, y recuerden que está en beta, con lo que es bueno estar atento a la aparición de la versión final.

¡Felicitaciones al equipo editorial por otro número terminado!

 

miércoles, 18 de mayo de 2011

dotPeek - El descompilador .NET gratuito que faltaba

dotPeek

Recientemente escribía sobre una situación que se generó en la comunidad a raíz de un cambio de política en .NET Reflector de Red Gate, un producto famoso en la comunidad .NET que pasó de ser gratuito a pago.

En ese artículo recorría varias alternativas gratuitas (de código abierto o no) y sobre el final comentaba que JetBrains, la empresa que produce IntelliJ IDEA (mi IDE favorita para Java) y ReSharper (mi plugin favorito para Visual Studio), estaba lanzando dotPeek, un descompilador gratuito, del que aún no había nada para probar.

En los últimos días, el producto ya está en Beta y disponible para probar, y como se anunció, cuando se libere la versión final seguirá siendo gratuita. El último release que lanzaron de hecho, ya funciona en Windows XP e incluso sin Visual Studio instalado.

Según el sitio del producto, aquí están las características principales:

  • Descompila ensamblados de .NET 1.0 hasta 4.0 a C#
  • Permite ir rápidamente a un tipo, ensamblado, símbolo o miembros dentro de un tipo
  • Navega a las declaraciones de símbolos, implementaciones, símbolos base y derivados, etc.
  • Permite buscar con precisión el uso de símbolos determinados, presentando todos los resultados
  • Muestra cadenas de herencia
  • Soporta descargar código de los servidores originales
  • Colorea la sintaxis
  • Puede operarse sólo con el teclado
  • Y es gratis

Queda una pantalla de muestra, y para más detalles, pueden ir al sitio y descargar el producto.

Ejemplo de DotPeek