viernes, 30 de junio de 2017

Testing ágil, exploratorio y en el proceso de desarrollo

¡Hola a todos!

En esta oportunidad quisiera compartir con ustedes ciertos temas sobre Testing de Software y de paso dejarles algunas referencias que considero muy interesantes sobre la temática.

Tiempo de lectura estimado: 6-8 minutos.

El pasado mes de Mayo, tuvo lugar en mi país (Uruguay) un evento sobre testing de software llamado TestingUy. Es un evento anual muy recomendable en el que se realizan talleres y charlas. Es organizado por las empresas Abstracta (@abstractaUS), Genexus Consulting (@GXConsulting), Centro de Ensayos de Software (CES @ces_com_uy) e Infragistics (@infragistics) y además hay varias empresas que financian y apoyan el evento, incluso este año tuvo el apoyo de la ANII para poder contar con la presencia del reconocido Michael Bolton (@michaelbolton y su colega James Bach son conocidos por ser impulsores de la metodología Rapid Software Testing). Si quieren conocer más sobre el evento les recomiendo darle una mirada al sitio www.testinguy.org.
También pueden ver el sitio de Federico Toledo https://www.federico-toledo.com (@fltoledo) que además de tener un montón de posts interesantes sobre testing publicó uno especial luego del evento con un resumen del curso de RST que brindó Bolton cuando estuvo en nuestro país con motivo del evento.

En fin, esta introducción sobre TestingUy viene al caso porque tuve la oportunidad de participar de tres charlas del evento (de las más de 10 que se brindaron) que me resultaron muy aprovechables, y quiero compartir aquí mis apuntes sobre los temas que allí se mencionaron. En lo personal, considero que conocer estos conceptos no es una cuestión solamente de los testers (de hecho yo no lo soy), si no que cualquiera que participe en procesos de desarrollos de software debería estar al tanto de ellos, ya sea para poder participar de equipos que utilizan estas técnicas como para sugerirlos en caso de que no se utilicen y vea un potencial uso de ellos.

¡Testers eran los de antes! – Gabriel Ledesma


Los testers de hoy no solo deberían aportar calidad en lo técnico, si no que deberían buscar espacios para innovar y mejorar los procesos que se utilizan en la empresa, tanto lo que respecta estrictamente a testing como lo que involucra al proceso de desarrollo y que permite lograr una mejor calidad en los productos. Aquí enumero 8 puntos que me resultaron interesantes e importantes del testing desde una visión ágil. En lo personal, algunos de estos temas ya los conocía e incluso en ciertas ocaciones utilicé alguna de estas técnicas, aunque no de manera tan estricta. Para quienes ya los conozcan quizás les sirva como repaso para refrescar conceptos, y para quienes no los conocen en cada punto dejo un comentario y referencias para que puedan profundizar.

1. Criterio de -requisito listo para planificar-

Este concepto (a grandes rasgos) refiere a la definición de los criterios para determinar si un requisito está listo para planificar. Los requisitos que no cumplan con esos criterios no deberían ser tenidos en cuenta en la próxima iteración.
Aquí un enlace a un post de Agile Learning Labs que explica claramente el concepto.
Agile Learning Labs: Excuse me are you sprint ready


2. TDD (Test Driven Development)

Para comenzar, vale la pena ver la definición en la wikipedia.
https://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebas

Para complementar la definición anterior,
Agile Alliance tiene una definición que es bien clara.
https://www.agilealliance.org/glossary/tdd

El siguiente post "Introduction to Test Driven Development (TDD)" de Agile Data está muy completo y permite profundizar en la temática.
http://agiledata.org/essays/tdd.html


3. BDD (Behavior Driven Development)

BDD es un concepto directamente relacionado a TDD pero que va más allá de la parte técnica. Aqui dejo un par de enlaces, el primero bastante escueto que explica el concepto a alto nivel (es suficiente con la sección "¿Qué es eso de BDD?") y el segundo bastante extenso que explica de punta a punta el nacimiento de BDD (este post es la traducción al espeñol del post original del impulsor de BDD Dan North, pero al pie del mismo pueden encontrar el enlace al post original en inglés)
Javier Garzas: BDD Behavior Driven Development
Oscarzaratetravelling (wordpress): Introduccion a BDD

4. UX (User eXperience - Paper prototyping and Scenario swimlanes)

La técnica Paper prototyping es por decirlo de alguna manera buena (en cuanto a la eficacia), bonita (amigable) y barata (tienen bajo costo de materiales y tiempos). En lo personal la he utiliazado aunque no al nivel de un grupo de trabajo ágil, pero igualmente me ha sido muy útil. Aquí les dejo un enlace a una guía teórico-práctica de esta técnica.
UXPin (blog): Paper prototyping

Respecto a la técnica Scenario swimlanes, dejo un enlace a continuación que explica de manera breve y clara en que consiste la técnica, véanlo porque esta muy bueno.
Near Soft (pdf): Scenario swimlanes

5. CR (Code Review)

Las revisiones de código suelen ser de gran utilidad, pueden ser formales o informales. Este documento de la Facultad de Ingeniería de la UdelaR (Universidad de la República, Uruguay) explica de manera breve y concisa la técnica.
FING (IIS): Recorridas e Inspecciones.doc

6. VSM (Value Stream Map)

VSM es una herramienta que tiene su origen en la metodología o herramienta de mejora continua Lean Manufacturing y que se ha ido utilizando con las adaptaciones necesarias en las metodologías ágiles de desarrollo de software. El primer enlace que les dejo es más que nada una definición de este concepto (ahí también hay un enlace para la definición del concepto Lean Manufacturing) y el segundo es algo más práctico sobre experiencia de uso en el desarrollo de software ágil.
Lean-esp (blog): Que es Value Stream Mapping
Luis Goncalves: Value Stream Mapping/

7. CD (Continious Deployment)

Este concepto está relacionado con los conceptos de Continious Integration y Continious Delivery que también son interesantes para conocer y tener en cuenta. En este post "An Introduction to Continuous Integration, Delivery, and Deployment" se explican estos tres conceptos y la relación entre ellos.
Digital Ocean: An Introduction to continuous integration, delivery and deployment

8. DDD (Domain Driven Design)

Tal como lo sugiere el nombre, DDD centra el diseño del software en el dominio del negocio pretendiendo lograr un lenguaje común entre técnicos y conocedores del negocio.
GoogleDocs: Domain Driven Design


¡Testing exploratorio: listos para zarpar! – Diego Latierro


Como definición "El testing exploratorio se define como el aprendizaje, el diseño de casos de prueba y la ejecución de las pruebas en forma sumultánea"
Los siguientes artículos brindan una introducción al testing exploratorio que es suficiente para comprender en qué consiste.
Smart Bear: Introduction to exploratory testing
Javier Garzas: Testing exploratorio

Aquí dejo una referencia a un artículo perteneciente al CES, que además de brindar una introducción teórica agrega documentación sobre una experiencia de la aplicación de la técnica.
CES (pdf): Testing Exploratorio

Algo que generalmente se menciona cuando se habla de testing exploratorio es el concepto de Session-Based Test Management (SBTM), que de alguna manera busca "formalizar" la técnica de Testing Exploratorio. En este artículo el porqué, el qué y el cómo de SBTM.
http://www.satisfice.com/articles/sbtm.pdf


Testing en todo el ciclo de desarrollo – Gabriela Rial.


Esta temática en lo personal me resulta bastante conocida pero no por eso menos importante, siempre hay cosas nuevas para aprender, escuchar y tomar nota. Aquí van algunos puntos de esta charla que me resultaron interesantes para tener en cuenta...

User Stories visibles: es importante tener a la vista las US no solamente para el equipo de proyecto, si no también para que otras personas que no están involucradas al proyecto puedan enterarse, preguntar, opinar, recomendar, sugerir, etc.

Incorporar metodologías en las distintas etapas, no solamente en la etapa de testing: viene por el lado de la primer charla (sobre ágil), pues la "etapa de testing" debería ir de comienzo a fin de cada proyecto y el tester debería colaborar en cada una de las etapas (siempre que sea posible) con el fin de mejorar la calidad del producto y del proceso.

Revisiones: desde su experiencia (la de Gabriela, y también en lo personal) ha sido muy importante el uso de revisiones. Generalmente aportan mucho valor sea cual sea el estilo de revisión que amerite (ej. código, documentación), siempre teniendo en cuenta los recursos disponibles (ej. tiempo, personal).


Hasta aquí mi resumen, mi pienso y repienso, aprendizaje y repaso de los conceptos que como dije al comienzo, me resultaron interesantes e importantes de las charlas a las que asistí en TestingUy y espero que hayan sido de interés también para ustedes.
Si tienen comentarios, sugerencias o simplemente quieren compartir la experiencia en el uso de alguna de estas técnicas o la aplicación de alguno de estos conceptos, los invito a que dejen su comentario.

¡Hasta la próxima!

PD (05/07/2017): en estos días han estado publicando las charlas del evento, aquí el enlace al canal de youtube de TestingUy

2 comentarios: