PERSPECTIVA l hombre y la máquina. Esta relación siempre trajo

Anuncio
PERSPECTIVA
CALIDAD
¿AUTOMÁTICO
l hombre y la máquina. Esta relación siempre trajo consigo
una dicotomía. A lo largo de los años y a medida que avanzaba la tecnología, esta división se fue reafirmando y tomando
distintas formas: desde los obreros ludistas a principios del
siglo XIX que veían en las máquinas a su mayor enemigo,
hasta los que creen que en ellas reside la base de toda utopía,
pasando por todos los tipos de grises posibles.
A una escala menor y en la industria del testing de software, vemos el mismo
fenómeno. ¿Hasta qué punto es posible automatizar estos procesos? ¿Hay que
desterrar del mapa los procesos manuales? ¿Los procesos automáticos dejan de
lado posibles errores humanos? ¿Cuáles son los pros y los contras de ambos?
En este contrapunto, dos especialistas abren el debate y señalan lo mejor (y lo
peor) de cada uno de los modelos.
E
pág.
agosto 2011
44
PERSPECTIVA
CALIDAD
MANUAL?
Practia Consulting Chile
Yo, robot
Ernesto
KISZKURNO
socio Pragma Consultores Argentina
Reivindicando el testing manual
Hace un par de años, una relevante empresa del ámbito financiero
En una interesante serie de posts en el blog de testing de Google, James
Whittaker, director de Test Engineering, contó cómo se hace testing en
tenía un sistema de pago de servicios en que había comportamiento
esa empresa. Allí refleja una de las disyuntivas a las que se enfrenta todo
distinto (y, por tanto, no extrapolable a partir de pruebas similares)
responsable del área de calidad: el dilema de la automatización.
dependiendo de los datos de entrada. Según la primera estimación
Con este concepto me refiero a las dudas que comúnmente tienen los
que se hizo para ese test manual, se requerían alrededor de 20 díasequipos de pruebas a la hora de decidir qué, cómo, cuándo y dónde auhombre. Luego de un ajuste, ese número aumentó a 450 días. Este
tomatizar. Estoy pensando en automatización
plazo era impensable, ya que la fecha de puesta en producción esfuncional, principalmente, porque en pruebas
taba comprometida y Marketing ya estaba trabajando en el anuncio de modernización del
de estrés, carga o volumen la automatización es,
sistema. Así, pusimos manos a la obra. Nos volcamos hacia la automatización; en menos
en cierto sentido, ineludible.
de una semana diseñamos scripts modulares y generamos tablas de datos que simularan
Este conflicto aparece en distintos momentos:
la totalidad de los casos posibles (incluyendo resultados esperados). Ejecutamos todas
como pregunta típica en los cursos, al momenlas pruebas −con al menos cuatro iteraciones−, hasta que la cantidad de incidentes dejó
to de definir estrategias de pruebas de futuros
de ser una alarma. La aplicación salió a producción en forma, tiempo, costo y calidad.
proyectos y en el día a día del testing. Y cuando
¿Qué busco ejemplificar aquí? Que las herramientas de automatisurge la disyuntiva, siempre contesto con esta pregunta: ¿el proceso de
zación de pruebas son una tecnología habilitante ya que permiten
testing funcional manual está definido y funcionando?
hacer tareas necesarias, pero imposibles de realizar manualmenLa meta de lograr un ciento por ciento de pruebas automáticas es muy
te. Sin embargo, más allá de la evidente ventaja, creo que la autoseductora. Todos nos hemos planteado lograr algo así. El problema es
matización de pruebas funcionales en sí misma no debe ser nunca
que, en la vida real, para automatizar primero hay que poder testear
una meta, sino una alternativa.
manualmente, y antes es necesario tener claro lo que significa testear.
En mi experiencia, la decisión sobre automatizar (una parte o la totaPor otro lado, automatizar requiere más desarrollo y, por ende, más eslidad de las pruebas funcionales manuales) abarca cuestiones que
pág.
45
agosto 2011
Alejandro
NÚÑEZ GUARDIA
PERSPECTIVA
CALIDAD
van más allá del simple análisis de costo/beneficio. Y, en general, esta alternativa surge cuando aparece alguno de estos inconvenientes:
» imposibilidad de realizar pruebas manuales para la magnitud o
complejidad requerida;
» necesidad de ampliar la cobertura de las pruebas sin aumentar los
esfuerzos de ejecución de regresiones y
» sofisticación artificial del proceso de pruebas definido para la organización.
El ejemplo que vimos al inicio es la mejor descripción del primero
de estos puntos. Ahora, ¿qué pasa cuando
necesitamos ampliar la cobertura? La automatización de pruebas funcionales aparece
como una solución para comoditizar la ejecución de ciclos de prueba, simplificando los
esfuerzos necesarios para su realización y
dejando recursos humanos disponibles para
abarcar una mayor cantidad de proyectos o
continuar el desarrollo de scripts que permitan mejorar la razón entre
pruebas automatizadas y manuales. Esto es usual en organizaciones
que han acumulado experiencia suficiente como para entender los
beneficios de la automatización desde la operación.
El otro camino por el que las organizaciones llegan a la automatización
es el de la creencia de que la herramienta hace al proceso, pensamiento
que hace ir rápido desde el deseo hasta la compra de herramientas.
Este enfoque usualmente termina con un gasto innecesario y la misma
operación de siempre (pero con licencias olvidadas en un cajón).
Una de mis formas favoritas de llegar a la automatización es la
incorporación de automatizaciones de pruebas unitarias y funcionales como parte del proceso de desarrollo, ya sea apuntando a
esquemas de integración continua o como parte de una estrategia
que permita simplificar las pruebas de sistemas con alta variación
(estableciendo pruebas unitarias con los apoyos de jUnit, phpUnit,
nUnit o la que mejor se adapte).
Incorporar prácticas del tipo testing first no sólo apunta a beneficios
fuerzo, así que debemos estar seguros de que reutilizaremos esos casos
automáticos muchas veces (como ya decía James Bach en Test Automation Snake Oil, allá por el año 1999).
Volviendo a mi pregunta (y simplificando), las respuestas que recibo
se pueden clasificar en tres grupos: No, más o menos y sí.
Si usted se encuentra en el primer grupo, debe primero trabajar en el
proceso de testing manual, generando una base de casos de prueba, cierto
conocimiento de la funcionalidad implementada y un conjunto de casos
que realmente deban ser reejecutados siempre que sale un nuevo release.
Tener un proceso de testing manual definido y funcionando significa
tener un proceso acordado con todos los stakeholders que refleje las
actividades y entregables “de mínima” que se deben lograr.
Resumiendo, debe trabajar para pasar a los grupos siguientes.
A los que contestan “más o menos”, debería decirles que no existe el
“más o menos” y que muy probablemente estén en el primer grupo. Si
hay dudas sobre el proceso de testing será porque no lo aplicamos sistemáticamente o porque no está documentado (o porque, aun estando
documentado, se utiliza en forma reducida). Tener un proceso de testing
manual definido y funcionando significa tener un proceso (acordado
con todos los stakeholders) que refleje las actividades y entregables “de
mínima” que se deben lograr. A modo de ejemplo, hay tres registros que
siempre deben estar presentes: de pruebas, de casos de prueba y de ejecuciones e incidentes.
Son los representantes del tercer grupo los que sí pueden pensar en el
tema de control automático pleno. Sin embargo, considero que hay muy
pocos casos en los que vale la pena invertir tiempo y dinero en una
automatización total. Google podría ser uno de esos casos, ya que el
costo de un error en las aplicaciones de su tipo es muy alto, y cualquier
falla se multiplica por millones de usuarios.
En otros casos la necesidad de automatizar disminuye drásticamente. Por
ejemplo, en un entorno empresarial
donde el área de TI desarrolla sistemas
de información que serán consumidos
por una cantidad sensiblemente menor
de usuarios. En los momentos en los
que estamos desarrollando (y probando) un sistema por primera vez, el
foco de la prueba está puesto en lograr que el sistema se estabilice. En ese
contexto, casi todas las pruebas son de primera vez y el nivel de repetición
es menor. La automatización aquí suele surgir cuando requerimos hacer
algunas regresiones dentro del proceso iterativo de desarrollo; de otro
modo trabajamos primero en forma manual.
Es en los sistemas ya desarrollados, en fase de mantenimiento, donde es
más factible automatizar, siempre y cuando debamos realizar pruebas de
regresión extensas, puesto que en esos sistemas (donde las modificaciones
son quirúrgicas) automatizar la prueba tampoco repaga.
En síntesis, la estrategia a seguir debe elegirse proyecto por proyecto. No
hay que perder de vista que el esfuerzo/costo de automatización deberá
poder amortizarse con el uso de los scripts a lo largo del tiempo.
En mi experiencia, la decisión sobre automatizar (parte o totalidad
de las pruebas funcionales manuales) abarca cuestiones que van más
allá del simple análisis de costo/beneficio.
pág.
agosto 2011
46
futuros por los ahorros asociados a la disminución de esfuerzos, sino
que además permite disminuir errores como subproducto de su utilización. El desarrollador debe ser capaz de comprender las entradas
y salidas de cada función o método en etapas tempranas (incluso
antes de programar) disminuyendo la incertidumbre y asegurando
consistencia entre los requerimientos y las funciones a implementar.
Realizar pruebas unitarias automatizadas al finalizar el desarrollo
de un conjunto de funciones o métodos resulta extraordinariamente rápido, y aumenta significativamente las posibilidades de
QA de recibir código medianamente testeable, ya sea para realizar
testing manual o para comenzar a generar los scripts para pruebas
funcionales automatizadas, que (adivinaron) se pueden concentrar
en temas de integración y ejercicios de punta a punta.
Descargar