Anti-patrones de tests, no cometas los mismos errores que yo

Te llega un email, es otro ticket de ese envío de notificaciones que hiciste hace tiempo, la solución que hiciste tiene otro bug,.. ¿te suena? O abrir un pedazo de código, empezar a leerlo y que te entren sudores fríos porque no entiendes nada o porque lo que vemos allí no quieres tocarlo ni con un palo… y lo peor es que haces un git blame y eres tu mismo el que escribiste eso en un “día de inspiración”. Quizás esos pedazos de código puedan ser un buen ejemplo de anti-patrón. Un anti-patrón es una serie de técnicas que nos conducen a una mala solución para un problema. Lo mejor que puedes hacer con los anti-patrones es conocerlos para así puedas evitarlos en el futuro.

Hoy me gustaría escribirte una pequeña recopilación de anti-patrones de tests. Hace unos años ya escribí sobre “patrones test utilizando PHPUnit” y sobre “patrones de test, mejorando la arquitectura en PHP” así que vamos allá.

Continúa leyendo “Anti-patrones de tests, no cometas los mismos errores que yo”

Algunos mitos sobre el testing

Ultimamente casi todo el mundo habla de testear, de hacer refactoring, de mejorar,.. parece que intentar hacer las cosas bien se está poniendo de moda. Y eso mola.

Hoy me gustaría hablar sobre mi experiencia haciendo testing unitario y sobre los mitos que creo que hay detrás de todo esto de los tests. Eso sí, esto son opiniones personales basadas en mi experiencia por lo que no pueden traducirse a todos los escenarios, por eso me encantaría conocer tu visión en los comentarios.

4905093544_8d1324d7f2_z
J. A. Alcaide

Vamos a por los mitos:

Continúa leyendo “Algunos mitos sobre el testing”

Estrategias para escribir mejores test

Hace tiempo, odiaba escribir test, me resultaban una perdida de tiempo. Y si empezaba a escribirlos, rápidamente los dejaba de lado porque me resultaban lentos.

Y el problema era que no sabía como escribir tests. Ahora me encanta escribir test, es más, me siento un poco incómodo si no tengo unos pocos tests para ver si todo está funcionando bien (al menos el “happy-path”).

Voy a contarte algunos trucos que me ayudan a la hora de escribir test, ¿compartes tu también los tuyos?

Key Strategies For Ensuring Skillful Auto Repair Work

Continúa leyendo “Estrategias para escribir mejores test”

Buenas prácticas de desarrollo en Etsy Parte 3

Esta es la tercera parte de la traducción del manual de buenas prácticas de Testing en Etsy donde se aborda el tema del Legacy Code.

Legacy code

La mayoría del código fuente que ha sobrevivido normalmente no fué escrito con un diseño limpio o pensando en la usabilidad/reutilización. Puede tener estado global, o no tener ninguna abstracción ( de modo que, por ejemplo, todas las operaciones de base están en una clase o en un método aislado que no está relacionado con la base de datos).

Vamos a tener que utilizar la imaginación cuando nos encontramos con código como este. Al final, nuestro trabajo está por hacer, tenemos que diseñar el código de acuerdo a unas normas, independientemente de como interactue ahora.

Continúa leyendo “Buenas prácticas de desarrollo en Etsy Parte 3”

Buenas prácticas de testing en Etsy Parte 1

Este artículo es un un conjunto de buenas prácticas para testing utilizadas en Etsy. Es la primera parte de una traducción de este documento sobre buenas prácticas de testing.

¿Qué es este documento?

Esto es una introducción a las ideas y aproximaciones que motivan el buen testing. Tomaremos un ejemplo de un sistema escrito en PHP y testeado con PHPUnit y discutiremos como testear un buen diseño y como diseñar teniendo en mente la testesabilidad.

etsy logo

Audiencia y prerrequesitos

Este documento está pensado para cualquier ingeniero de Etsy.

Continúa leyendo “Buenas prácticas de testing en Etsy Parte 1”

patrones test utilizando PHPUnit

Hace unos días vimos algunos patrones para mejorar los tests con PHPUnit, mejorando los assert y/o fixtures. En esta ocasión traemos una serie de patrones para mejorar nuestros tests en PHP.

Veremos una serie de técnicas sobre como afrontar los tests, haremos ejemplos, si bien es cierto que estos ejemplos serán en PHP, la teoría detrás de estos tests puede aplicarse a Java (JUnit), .NET, Python,…

Parametrized test

De vez en cuando, nos encontramos con que estamos escribiendo pruebas casi idénticas, que solo difieren en unos pocos valores, pero la lógica es esencialmente la misma. En estas situaciones es una buena práctica a la hora de hacer test utilizar el patron test parametrizados (parametrized test).

La idea fundamental es de este patrón reside en que solo hay un método de prueba que encapsula la lógica, con la ayuda de PHPUnit lo que hacemos es proporcionar a ese test distintos conjuntos de parámetros.

Continúa leyendo “patrones test utilizando PHPUnit”

Haciendo TDD en PHP con Silex y PhpUnit (Parte 2)

Hace unos días hemos empezado a trabajar con TDD y Silex en un proyectos bastante especial, “Como utilizar Tdd con Silex utilizando PhpUnit” para ello ya tenemos configurado todo el entorno par a poder empezar a hacer test, escribir código y refactorizar.

Básicamente nuestro proyecto es la API de una calculadora 😉 es decir es una calculadora con la que podremos realizar operaciones aritméticas de 2 operandos con tan solo hacer peticiones GET a una dirección web. Para ello los pasos que daremos serán, refactorizar la aplicación actual para poder ampliarla con la nueva funcionalidad, crear una librería que realice las operaciones aritméticas, modifica el routing para poder hacer las operaciones haciendo peticiones GET desde un Navegador.

Refactorizar el proyecto de Silex con TDD para ampliar la aplicación.

Ahora que tenemos test (aunque solo sean un par) podemos hacer cambios y asegurarnos de que todo sigue funcionando. Lo primero que haremos será mover toda la lógica de la App. Pero antes que nada debemos asegurarnos de que todo está correcto, así que antes de tocar nada lanzamos nuestros tests.

Continúa leyendo “Haciendo TDD en PHP con Silex y PhpUnit (Parte 2)”

Buenas prácticas para el testing funcional

Las últimas semanas hemos hablado de testing funcional, así que esta semana me gustaría traducir un artículo de InfoQ titulado “Functional GUI Testing Automation Patterns”( http://www.infoq.com/articles/gui-automation-patterns)

El proceso de desarrollo de una suite automática de pruebas funcionales para una aplicación específica no es muy diferente del proceso de creación del programa en sí. Existen muchas herramientas y cada días se crean nueva para conseguir interactuar con el sistema bajo prueba (SUT).

Hoy en día existen multitud de metodologías y enfoques para enfrentarnos al desarrollo software: desde la programación orientada a objetos, la programación funcional, diseño guiado por dominio (domain drive desing), desarrollo guiado por pruebas (TDD), desarrollo guiado por comportamiento (Beharvior Driven Development BDD), etc.

En este caso vamos a dirigirnos hacia las pruebas de interfaz (GUI) cuando el sistema bajo prueba (SUT) se presenta como una caja negra para el tester de aplicaciones.

Continúa leyendo “Buenas prácticas para el testing funcional”