Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduccin
Supongamos que queremos probar un software que recibe 2 nmeros enteros como entrada
y los suma.
Cuntas
combinaciones
de
entradas
de
enteros
deberas
probar?
El testing puede asimilarse a la accin de sacar de una vasija, bolitas de diferentes colores:
el
software
no
falla
Si sacramos todas las bolitas de la vasija encontraramos todas las fallas, Pero qu
sucede si tenemos un lmite de tiempo? Qu sucede si no conocemos a priori todos los
entornos
en
los
cuales
se
ejecutar
el
software?
El objetivo del testing es sacar la mayor cantidad de bolitas negras en un plazo acotado.
Una forma sera cambiar la forma de la vasija de modo que todas las bolitas negras, si
existen, se puedan seleccionar rpidamente en el muestreo.
Cambiar
la
forma
de
la
vasija
se
refiere
a:
Para explicar la paradoja del pesticida nos remontamos a los primeros computadores. En la
dcada de los 40, los computadores ocupaban cientos de metros cuadrados y pesaban
toneladas.
Boris Beizer
El pesticida mata un gran porcentaje de los insectos, pero deja un residuo, los ms fuertes
sobreviven. Como consecuencia, al ao siguiente es preciso un pesticida ms fuerte.
Cuando hacemos testing pensamos pruebas, las ejecutamos, detectamos bugs, se corrigen y
volvemos a ejecutar pruebas para verificar su correccin. Luego el conjunto de casos de
prueba pensados, ya no detectan bugs, pues los que detectaron en un principio ya fueron
corregidos. Pero an puede haber bugs en el software que no hayamos detectado. Tenemos
que pensar y ejecutar nuevas pruebas para detectar esos bugs que an
persisten. Podemos considerar las pruebas que pensamos y ejecutamos como un pesticida
que va matando bugs. Tenemos que actualizarlas, y agregar nuevas pruebas al conjunto
inicial para ir matando el residuo que queda. Si se hace un buen testing, los errores van a ir
cambiando, y tenemos que cambiar los casos de prueba para mantener la efectividad.
Tema 1
Conceptos generales
En este bloque veremos conceptos generales de testing funcional, automatizacin de pruebas funcionales y
testing de performance. Te invitamos a que recorras las lecciones y te inscribas luego en la carrera.
Testing funcional
A partir de la estrategia general de pruebas que vimos en el curso "Introduccin al testing",
de las habilidades del equipo de pruebas, y del entrenamiento necesario para que la
informacin que obtengamos de las pruebas sea de valor, empezamos a profundizar en uno
de los tipos de testing: el Testing Funcional.
El Testing funcional es necesario en todos los proyectos de desarrollo y mantenimiento de
software. Involucra muchos actores y roles, a los que hicimos alusin en los mdulos
anteriores. En este mdulo vamos a ver y aplicar estrategias y tcnicas de testing funcional,
profundizar en el significado del cubrimiento de las pruebas e introducir un proceso de testing
funcional. Simultneamente, se propondrn distintas actividades tendientes a mejorar
algunas de las capacidades cognitivas involucradas.
Antes de entrar en las estrategias, tcnicas y habilidades, vamos a definir en esta seccin los
siguientes conceptos: fallas, defectos, errores, caso de prueba y orculo.
En general, los trminos falla, defecto y error se utilizan indistintamente. Sin embargo, cada
uno de estos trminos se refiere a un concepto diferente. Es importante que el tester tenga
clara la diferencia para poder ser preciso cuando transmite los comportamientos observados.
Definiciones segn el estndar IEEE 610.12-1990 (Glosario de trminos de ingeniera de
software):
Imaginen que todo lo visto hasta ahora lo hace una mquina, un robot, sera fabuloso No?
El tester ya no debera entender sobre los requerimientos, ni disear, ni ejecutar, ni tampoco verificar
los casos de prueba. Slo presionar un botn y esperar resultados. Aterricemos de vuelta.
Vamos a pedir un poco menos, y ser menos ambiciosos.
Qu tal si nosotros nos encargamos de entender los requerimientos y de disear las pruebas y le
dejamos a las mquinas la ejecucin de las pruebas y la verificacin de los resultados?
Por supuesto, alguien deber esforzarse para que las mquinas trabajen por nosotros. En este curso nos
dedicaremos a comprender en qu consiste este esfuerzo.
La automatizacin de pruebas funcionales consiste en el uso del software para controlar la
ejecucin de pruebas y comparar el resultado obtenido con el esperado.
Es importante notar que en nuestra definicin de automatizacin deja fuera muchas tareas de
testing. Por esta razn, Cem Kaner se refiere a la automatizacin en los trminos siguientes:
La automatizacin del testing es testing asistido por computadoras (computer-assisted testing).
O sea, en qu nos puede ayudar el hardware y el software en las tareas de testing. De qu tareas puede
liberarnos? La mquina puede ejecutar las pruebas, registrar y evaluar los resultados.
Sin embargo, la mquina no puede analizar los requerimientos, disear los casos de prueba,
pensar los juegos de datos, ejecutar por primera vez un prueba y evaluar su resultado, reportar
incidentes, revisar las pruebas, elaborar informes, seleccionar las pruebas a ejecutar y
mantenerlas. Slo el ser humano puede hacerlo!
Y ms an, cuando se detecta una falla, es el ser humano quien tiene que investigar sus posibles
causas.
Automatizacin del testing
Herramientas
De todas maneras, distintas herramientas ofrecen una ayuda muy valiosa en diferentes actividades.
Ustedes ya conocen algunas:
Mantis, que ayuda en la gestin de los incidentes
JMeter y Perfmon que permiten generar carga y monitorizar el sistema bajo prueba
en las pruebas de performance
James Bach define la automatizacin en trminos de su uso:
La automatizacin del testing es todo uso de herramientas para asistir a las pruebas.
A continuacin se lista una clasificacin de herramientas que asisten al testing (Swebok 2004):
Generadores de pruebas. Estas herramientas asisten en el diseo de casos de
prueba.
En el contexto actual, las empresas que compiten en el mercado globalizado tienen exigencias de
calidad crecientes. Los productos que desarrollan estn en continuo mantenimiento, mejora y muchos
de estos productos funcionan sobre mltiples plataformas: sistemas operativos, bases de datos,
navegadores.
Las pruebas automatizadas surgen como alternativa para reducir costos y tiempos en las pruebas de
regresin, disponer de un conjunto de pruebas de humo automatizadas, ejecutar pruebas sobre mltiples
plataformas, etc.
La automatizacin de pruebas contribuye a mejorar la calidad del software, ya que posibilita un
testing ms temprano y ms frecuente, adems de una mayor cobertura de pruebas.
Ms temprano, porque el equipo de desarrollo puede ejecutar estas pruebas y detectar, luego de una
modificacin en el cdigo fuente, pruebas que fallan por comportamientos no esperados. Esto permite
corregir inmediatamente el cambio, con el beneficio de que ste an est fresco en la mente del
desarrollador.
Ms frecuente, porque las pruebas se ejecutan ms rpido que en forma manual y por lo tanto se
pueden correr en la noche, o una vez por semana, dependiendo del contexto.
La automatizacin permite mayor cobertura si cubrimos las funcionalidades bsicas o crticas del
producto, y enfocamos las pruebas manuales en el resto.
Reduciendo el tiempo de testing estaremos reduciendo el tiempo de salida al mercado (time to market),
lo cual genera una ventaja competitiva, desde el punto de vista del negocio, en el sentido ms amplio.
El testing manual es un proceso que se adapta al cambio. Cuando los requerimientos o la aplicacin se
modifican (por ejemplo si se agrega una nueva ventana de informacin o vara un mensaje de error), el
tester percibe el cambio, evala si se trata de un incidente y contina con las pruebas haciendo los
ajustes correspondientes.
Beneficios
Las grandes candidatas para automatizar son las pruebas de regresin ya que estn asociadas a las
funcionalidades ms importantes y estables. Sin embargo, las pruebas de regresin tienen poca
probabilidad de detectar incidentes si no se han encontrado en ejecuciones anteriores, ya que se
ejecutan exactamente de la misma forma y con los mismos datos.
Para qu ejecutar las pruebas entonces?
El valor de este tipo de prueba recae en verificar que no se han introducido defectos en la nueva
versin. No slo las pruebas que detectan incidentes tienen valor. El objetivo es brindar tranquilidad
para salir en produccin o liberar el producto, asegurando las prestaciones ms importantes.
Los ajustes y mejoras en la aplicacin son ms confiables, ya que rpidamente, obtenemos informacin
sobre eventuales impactos negativos de nuestros cambios. De lo contrario, estaremos haciendo los
cambios en la aplicacin a oscuras.
Automatizacin de Pruebas Funcionales
Costos
eso estamos
resistencia,
lat.
architectra).
Todo sistema de software tiene una arquitectura definida, se haya pensado en sta o no. La
arquitectura es el esqueleto del sistema e influye en los atributos de calidad definidos.
Algunos atributos de calidad son propiedades externamente visibles, como la seguridad,
usabilidad,
latencia,
o
modificabilidad,
entre
otros.
performance
de
los
distintos
componentes
de
la
arquitectura.
Por
tal
motivo:
qu
est
entre
comillas
el
adjetivo
"correcto"?
Arquitecturas comunes
Los sistemas han evolucionado. Si se revisa lo sucedido en las ltimas dcadas, se
encuentran distintas modas y tecnologas en lo que respecta al uso de sistemas informticos.
Una de las diferencias ms marcadas entre las distintas arquitecturas, es la distribucin de
los
componentes
de
software
que
interactan
en
un
sistema.
Arquitectura
monoltica
En una arquitectura monoltica el software se estructura en grupos funcionales muy
acoplados. No hay distribucin, ni a nivel fsico (hardware) ni a nivel lgico, por lo que todo
se ejecuta en una mquina.
Por ejemplo, si se presenta la situacin de una funcionalidad en una aplicacin de escritorio
que tarda 20 segundos en entregar resultados, podemos analizar el problema estudiando si la
Unidad de Procesamiento Central (CPU) se encuentra trabajando al mximo o si la memoria
disponible es mnima.
Arquitecturas Cliente-Servidor
Una arquitectura Cliente - Servidor consiste bsicamente en que un programa (cliente
informtico) realiza peticiones a otro programa (el servidor) que le da respuesta.
Uno de los clientes ms utilizados, es el navegador web. Muchos servidores son capaces de
ofrecer sus servicios a travs de un navegador web en lugar de requerir la instalacin de un
programa especfico.
El sistema cliente y el sistema servidor podran estar en el mismo equipo aunque
generalmente estn conectados a travs de una red de computadores. Si son varios los
clientes que se conectan al mismo sistema servidor, toma la caracterstica de sistema
multiusuario.
En una arquitectura Cliente-Servidor, con componentes de software distribuidos, es necesaria
la existencia de una red para que los componentes se comuniquen entre s. Esta
comunicacin es otro elemento a tener en cuenta cuando se perciben problemas de
performance. Por ejemplo, se puede analizar la velocidad con la que viajan las peticiones y
las
respuestas
por
la
red.
Hay que tener en cuenta que en sistemas con arquitectura cliente-servidor, no es suficiente
no detectar problemas de performance con un slo usuario accediendo al sistema. Tal vez se
detecten problemas de performance cuando varios usuarios estn accediendo, al mismo
tiempo, al sistema. Por ejemplo, se podran sobrecargar las lneas de comunicacin o los
recursos del servidor. O quizs no se puedan entregar tantas respuestas como para cumplir
con todas las demandas de los usuarios.
Arquitecturas
en
capas
En un sistema con una arquitectura en capas se distinguen al menos las siguientes:
arquitecturas
en
2
capas.
Se puede decir que en general, la arquitectura va a determinar, entre otras cosas, dnde hay
ms
procesamiento
y
dnde
estn
los
motores
de
la
aplicacin.
Los clientes informticos (hardware y software) pueden ser clientes finos o gruesos. La
principal tarea de los clientes finos es presentar la informacin que entrega el servidor y
permitir al usuario generar nuevas solicitudes. En el cliente grueso existe procesamiento de
reglas de negocio o clculos que hacen que el procesamiento sea mayor.
Un ejemplo de cliente fino es un componente de software que ejecuta en un navegador Web.
En el caso de los clientes gruesos los componentes ejecutan comnmente directamente sobre
el
sistema
operativo
o
mquinas
virtuales
(mquina
virtual
java).
Por ejemplo el chat de la plataforma Moodle es un cliente fino y el Messenger y el Skype son
clientes
gruesos.
En las arquitecturas Cliente-Servidor, el tipo de cliente con el que se accede al servidor
determinar
dnde
estn
los
motores
de
procesamiento.
Las arquitecturas utilizadas han variado con el paso de los aos. ltimamente, es comn el
desarrollo de aplicaciones en ms de 2 capas, con un navegador como cliente fino que
presenta al usuario lo que las otras capas procesaron. En este tipo de aplicaciones hay que
definir y probar la performance de las capas que se ejecutan del lado de los servidores.
En la siguiente imagen se visualiza la infraestructura que hay detrs de este tipo de
aplicaciones, como ser Google, Facebook y Skype.
Si tenemos un cliente grueso se tendrn motores de procesamiento a ambos lados y la
performance est claramente dividida. Cuando pensamos en la performance del sistema, nos
imaginamos cmo optimizar determinado algoritmo, as como el procesamiento del lado del
cliente y del lado del servidor. Integrantes del equipo de desarrollo pueden mejorar estos
aspectos de performance en las distintas capas y componentes probando unidades as como
su integracin, y midiendo los tiempos.
Es necesario identificar el tipo de arquitectura para evaluar los distintos tipos de simulacin y
herramientas requeridas para las pruebas de performance.
La siguiente imagen pretende mostrar que los tiempos de respuesta que perciben los clientes
son la sumatoria de los insumidos en los distintos trayectos por los cuales fluye la
informacin de una solicitud respuesta. Ante un problema de performance es imprescindible
conocer los distintos elementos de la arquitectura para eventualmente, agregar
monitorizacin, que indique dnde surgen los cuellos de botella, e irlos solucionando.
Las pruebas de performance pueden ofrecer distintos beneficios, que dependen del tipo de
prueba a realizar.
Qu tipos de pruebas de performance existen?
Recordemos que, dependiendo de su objetivo, las pruebas de performance se pueden
clasificar
en:
Carga, en las cuales se simula la carga prevista en el uso esperado del sistema.
Stress, en las cuales se lleva al sistema a lmites de carga que exceden los
previstos en el uso del sistema.