Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Pruebas de
Software
2
NDICE Pgina
Presentacin 4
Red de contenidos 5
Unidad de aprendizaje 1: Fundamentos de Pruebas de Software
1.1 Tema 1 : Introduccin a TDD 7
1.1.1. : TDD y Tipos de Pruebas 7
1.1.2. : Pruebas Unitarias 12
1.2 Tema 2 : Pruebas Unitarias con el framework JUnit 15
1.2.1. : Creacin y Ejecucin de una prueba unitaria simple con 16
JUnit en Netbeans o Eclipse
1.2.2. : Creacin y Ejecucin de una prueba unitaria de regular 19
complejidad con JUnit en Netbeans o Eclipse
1.2.3. : Creacin y Ejecucin de una prueba unitaria avanzada 24
con JUnit en Netbeans o Eclipse
Unidad de aprendizaje 2: Fundamentos Rational Functional Tester
2.1 Tema 3 : Introduccin al Rational Functional Tester 32
2.1.1. : Arquitectura de Rational Functional Tester 32
2.1.2. : Configuracin del entorno de pruebas 34
2.1.3. : Configuracin de aplicaciones Java a probar 40
2.1.4. : Proyectos de pruebas funcionales en Rational 45
Functional Tester
2.2 Tema 4 : Script de pruebas funcionales 48
2.2.1. : Grabacin de un script 49
2.2.2. : Reproduccin de un script 67
2.2.3. : Revisin de los resultados 68
2.2.4. : Caractersticas avanzadas de script de pruebas 68
Unidad de aprendizaje 3: Fundamentos Rational Performance Tester
3.1 Tema 5 : Introduccin al Rational Performance Tester 76
3.1.1. : Arquitectura de Rational Performance Tester 76
PRESENTACIN
RED DE CONTENIDOS
Pruebas de Software
Introduccin al Introduccin al
Introduccin a TDD Rational Functional Rational
Tester Performance Tester
UNIDAD DE
APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Hasta ahora estbamos acostumbrados a que los casos de uso, eran las
unidades de trabajo ms pequeas sobre las que ponerse a desarrollar
cdigo. Con TDD intentamos traducir el caso de uso en X ejemplos, hasta
que el nmero de ejemplos sea suficiente como para describir la tarea sin
lugar a malinterpretaciones de ningn tipo.
Fuente: http://es.slideshare.net/FernandoPrez16/introduccin-a-tdd-y-unit-testing
Figura 1.1. TDD/ Pasos
con el lenguaje del cliente pero que puede ser ejecutado por la
mquina. Algunos ejemplos:
El producto X con precio S/ 50 tiene un precio final de S/
59 despus de aplicar el impuesto Z
Si el paciente naci el 1 de junio de 1981, su edad es de
28 aos en agosto de 2009
Los tests de aceptacin no usan la interfaz de usuario del
programa? Podra ser que s, pero en la mayora de los casos la
respuesta debe ser no. Los tests de carga y de rendimiento son
de aceptacin cuando el cliente los considera requisitos de
negocio. Si el cliente no los requiere, sern tests de desarrollo.
Un test tiene tres partes, que se identifican con las siglas AAA en ingls:
Arrange (Preparar), Act (Actuar), Assert (Afirmar).
Una parte de la preparacin puede estar contenida en el mtodo SetUp, si
es comn a todos los tests de la clase. Si la etapa de preparacin es
comn a varios tests de la clase pero no a todos, entonces podemos
definir otro mtodo o funcin en la misma clase, que ane tal cdigo. No
le pondremos la etiqueta de test sino que lo invocaremos desde cada
punto en que lo necesitemos.
El acto consiste en hacer la llamada al cdigo que queremos probar (SUT)
y la afirmacin o afirmaciones se hacen sobre el resultado de la ejecucin,
bien mediante validacin del estado o bien mediante validacin de la
interaccin. Se afirma que nuestras expectativas sobre el resultado se
cumplen. Si no se cumplen el framework marcar en rojo cada falsa
expectativa.
using System;
using NUnit.Framework;
namespace EjemplosNUnit
{
[TestFixture]
public class NameNormalizerTests
{
[Test]
public void FirstLetterUpperCase()
{
// Arrange
string name = "pablo rodriguez";
NameNormalizer normalizer =
new NameNormalizer();
// Act
string result =
normalizer.FirstLetterUpperCase(
name);
// Assert
Assert.AreEqual("Pablo Rodriguez", result);
}
}
}
[Test]
public void SurnameFirst()
{
namespace EjemplosNUnit
{
[TestFixture]
public class NameNormalizerTests
{
NameNormalizer _normalizer;
[SetUp]
public void SetUp()
{
_normalizer =
new NameNormalizer();
}
[Test]
public void FirstLetterUpperCase()
{
string name = "pablo rodriguez";
string result =
_normalizer.FirstLetterUpperCase(
name);
Assert.AreEqual("Pablo Rodriguez", result);
}
[Test]
public void SurnameFirst()
{
string name = "gonzalo aller";
string result =
_normalizer.SurnameFirst(
name);
Assert.AreEqual("aller, gonzalo", result);
}
}
}
namespace EjemplosNUnit
{
[TestFixture]
public class NameNormalizerTests
{
NameNormalizer _normalizer;
[SetUp]
public void SetUp()
{
_normalizer =
new NameNormalizer();
}
[Test]
public void FirstLetterUpperCase()
{
string result =
_normalizer.FirstLetterUpperCase(
"pablo rodriguez");
Assert.AreEqual("Pablo Rodriguez", result);
}
[Test]
public void SurnameFirst()
{
string result =
_normalizer.SurnameFirst(
"gonzalo aller");
Assert.AreEqual("aller, gonzalo", result);
}
}
}
As como hemos creado una prueba en NUnit podemos crear una prueba
casi para cualquier lenguaje de programacin.
<?php
// respuesta que le pasaremos a la asercin
$variable = 'texto';
// pregunta o asercin que hace la prueba
import junit.framework.Assert;
import android.test.AndroidTestCase;
2. Lo siguiente es crear la clase que nos servir para probar la clase Suma.
Queremos saber si la suma se hace correctamente en tres casos: sumando
dos nmeros positivos, sumando dos nmeros negativos y sumando un
nmero positivo y un nmero negativo. El cdigo ser el siguiente:
@Test
public void sumaPositivos() {
System.out.println("Sumando dos nmeros positivos ...");
Suma S = new Suma(2, 3);
assertTrue(S.sumar() == 5);
}
@Test
public void sumaNegativos() {
System.out.println("Sumando dos nmeros negativos ...");
Suma S = new Suma(-2, -3);
assertTrue(S.sumar() == -5);
}
@Test
public void sumaPositivoNegativo() {
System.out.println("Sumando un nmero positivo y un
nmero negativo ...");
Suma S = new Suma(2, -3);
assertTrue(S.sumar() == -1);
}
}
3. Activamos la vista JUnit en Eclipse. Para ello hay que pulsar en: Window;
Show View; Other...; Java; JUnit.
Como vemos, en el primer caso el test ha sido completado sin fallos. Sin
embargo, en el segundo caso (se ha modificado el cdigo a propsito para que
falle) se ha encontrado un error en sumaNegativos.
1) Escribir un test
Debe ser el ms sencillo que se nos ocurra - Debe fallar al correrlo
2) Correr todos los tests
Si hay errores, debemos implementar lo mnimo necesario para que pasen y
volver al paso 2
3) Reflexiono - Se puede mejorar el cdigo?
- S Refactorizar y volver al paso 2
- No Volver al paso 1
}
}
Si.
@Test
public void test2() {
assertFalse(YearUtilities.isLeap(6));//no es bisiesto
}
Nos da error pues el el mtodo isLeap devuelve true cuando debera ser false.
Implementamos lo mnimo necesario:
@Test
public void test3() {
assertFalse(YearUtilities.isLeap(100));//no es bisiesto
}
Nos da error pues el el mtodo isLeap devuelve true cuando debera ser false.
Implementamos lo mnimo necesario:
@Test
public void test4() {
assertTrue(YearUtilities.isLeap(400));//es bisiesto
}
Nos da error pues el el mtodo isLeap devuelve false cuando debera ser true.
Implementamos lo mnimo necesario:
return false;
}
}else{
return true;
}
}else{
return false;
}
}
}
Finalmente podemos agregar otros tests que deben pasar sin problemas y nuestro
cdigo Java de tests quedara como sigue:
@Test
public void test1() {
assertTrue(YearUtilities.isLeap(4));//es bisiesto
}
@Test
public void test2() {
assertFalse(YearUtilities.isLeap(6));//no es bisiesto
}
@Test
public void test3() {
assertFalse(YearUtilities.isLeap(100));//no es bisiesto
}
@Test
public void test4() {
assertTrue(YearUtilities.isLeap(400));//es bisiesto
}
@Test
public void test5() {
assertFalse(YearUtilities.isLeap(2015));//no es bisiesto
}
@Test
public void test6() {
assertTrue(YearUtilities.isLeap(2016));//es bisiesto
}
}
Si.
@Test
public void testNotDigit() {
assertEquals(false, PasswordValidator.isValid("Abcdefg"));
}
Nos da error pues el el mtodo isValid devuelve true cuando debera ser false.
Implementamos lo mnimo necesario:
import java.util.regex.Pattern;
@Test
public void testNotUpperCase() {
assertEquals(false, PasswordValidator.isValid("abcdef1"));
}
Nos da error pues el el mtodo isValid devuelve true cuando debera ser false.
Implementamos lo mnimo necesario:
import java.util.regex.Pattern;
Pattern.matches(".*\\p{Digit}.*", password)&&
password.toLowerCase()!=password;
}
}
Finalmente podemos agregar otros tests que deben pasar sin problemas y
nuestro cdigo Java de tests quedara como sigue:
Actividades
A continuacin, se muestra las reglas de negocio para el clculo del salario de los
empleados de una tienda comercial. Supongamos que tenemos la clase EmpleadoCA:
Mtodo Especificacin
float calculaSalarioBruto( El salario base ser S/ 1000 si el empleado es de tipo
TipoEmpleado tipo, vendedor, y de S/ 1500 si es de encargado. A esta
float ventasMes, cantidad se le sumar una prima de S/ 100 si ventasMes es
float horasExtra) mayor o igual que S/ 1000, y de S/ 200 si fuese al menos de
S/ 1500. Por ltimo, cada hora extra se pagar a S/ 20. Si
tipo es null, o ventasMes o horasExtra toman valores
negativos el mtodo lanzar una excepcin de tipo
CAException.
float calculaSalarioNeto( Si el salario bruto es menor de S/ 1000, no se aplicar
float salarioBruto) ninguna retencin. Para salarios a partir de S/ 1000, y
menores de S/ 1500 se les aplicar un 16%, y a los salarios
a partir de S/ 1500 se les aplicar un 18%. El mtodo nos
devolver salarioBruto * (1-retencion), o CAExcepcion si el
salario es menor que cero.
Resumen
& Todo test unitario debe ser: Atmico, Independiente, Inocuo y Rpido
& Un test tiene tres partes, que se identifican con las siglas AAA en ingls: Arrange
(Preparar), Act (Actuar), Assert (Afirmar).
& JUnit es un framework, creado por Erich Gamma y Kent Beck, utilizado para
automatizar las pruebas unitarias en el lenguaje Java.
& Si desea saber ms acerca de estos temas, puede consultar las siguientes
pginas.
8 http://www.carlosble.com/downloads/disenoAgilConTdd_ebook.pdf
Aqu encontrar una gua completa de TDD elaborada por Carlos Bl.
8 http://es.slideshare.net/FernandoPrez16/introduccin-a-tdd-y-unit-testing
Aqu encontrar una introduccin didctica a TDD.
UNIDAD DE
APRENDIZAJE
TEMARIO
2.1. Tema 3: Introduccin al Rational Functional Tester
2.1.1. Arquitectura de Rational Functional Tester
2.1.2. Configuracin del entorno de pruebas
2.1.3. Configuracin de aplicaciones Java a probar
2.1.4. Proyectos de pruebas funcionales en Rational Functional Tester
ACTIVIDADES PROPUESTAS
Current script
Editor area
(showing
Java Script
Functional Test Editor) Functional Test
Projects view Script Explorer
1
2
1
2
3
1
1
2 Edite la direccin
URL de la
aplicacin web.
2
1
Script
PlaceOrder().click();
Mapa de
Objetos de
prueba
Privado
- Asociado con un solo script
- Automticamente se crea cuando se graba un
script
Compartido
- Asociado con ms de un script
- Automticamente se actualiza cuando se graba
un script
Mostrar ayudas
Ayudas de Script
Agregar Comandos Controlados por Datos
Agregar Puntos de Verificacin
Iniciar Aplicacin
Pausa/Reanudar Grabacin
Detener Grabacin
Aqu se muestra
una pgina con un
formulario de datos
cargados.
Figura 2.11. PV para verificar el ttulo de una pgina (valor de una propiedad especfica)
que tiene el formulario con datos cargados
De inmediato, realizar los pasos citados grabar para garbar un script de prueba
simplificado para probar una aplicacin de escritorio Java.
Inicio de grabacin
Grabacin de acciones
1. Pulse el signo (+) situado al lado de Bach para abrir la lista de CD que estn en
venta de dicho compositor y, a continuacin, pulse Violin Concertos.
6. En la ventana Hacer Pedido, escriba 1234 1234 1234 1234 en el campo nmero
de tarjeta y, a continuacin, escriba 12/12 en el campo fecha de expiracin.
Ahora, agregue comandos controladas por datos a fin de crear un pool de datos con
los datos procedentes de los objetos de la GUI.
Compositor
Artculo
Cantidad
NumTarjeta
TipoTarjeta
FechaExpiracion
Nombre
Direccion
CodPostal
Telefono
Puntos de verificacin
Importe
10. A continuacin, pulse Aceptar para cerrar el mensaje que confirma el pedido.
11. Para cerrar la aplicacin, pulse el smbolo X que aparece en el ngulo superior
derecho de la aplicacin ClassicsCD.
Finalizacin de la grabacin
2. Para ahorrar tiempo, copie los datos de la fila 0 de la agrupacin de datos en las
filas vacas que haya creado.
3. Pulse el botn derecho del ratn y seleccione Insertar punto de verificacin >
Punto de verificacin de datos.
La lnea de prueba Verify data in tree2 se aade al editor del script (despus de la
segunda lnea de prueba).
Actividades
1. A partir de la aplicacin de escritorio Java entregada en clase, realice los
siguientes procesos para un casos de uso:
a. Grabacin de un script
b. Reproduccin del script
c. Anlisis de resultados
Resumen
& IBM Rational Functional Tester (RFT) es una herramienta automatizada para la
realizacin de pruebas funcionales y de regresin. Permite probar aplicaciones
Java, .NET y basadas en Web.
& Con la tecnologa de grabacin del RFT, se puede generar scripts mediante la
ejecucin y el uso de la aplicacin bajo prueba.
& Gracias a la tecnologa ScriptAssure del RFT se puede crear scripts de prueba
ms resistentes a los cambios en los objetos de las aplicaciones.
& Un script simplificado de prueba funcional en RFT genera dos archivos: un script
con las acciones del usuario y un script con cdigo java.
& Los pasos de alto nivel del proceso de grabacin, reproduccin y visualizacin de
resultados de un script de prueba funcional se muestra en la siguiente figura:
& En RFT, un punto de verificacin captura la informacin del objeto y los valores
literales de la aplicacin de prueba y la almacena, en la lnea base, a efectos de
comparacin durante la reproduccin. Cuando se reproduce un script, un punto de
verificacin vuelve a capturar la informacin del objeto para compararla con la lnea
base y para ver si se ha efectuado algn cambio, ya sea o no de forma
intencionada. Comparar la informacin del objeto real de un script con la lnea base
resulta til para identificar posibles defectos.
& Si desea saber ms acerca de estos temas, puede consultar las siguientes
pginas.
8 http://publib.boulder.ibm.com/infocenter/rfthelp/v8r1/index.jsp
En esta pgina encontrar informacin del entorno IBM RFT: gua de instalacin,
gua de aprendizaje, entre otros temas.
8 http://www.ibm.com/developerworks/ssa/rational/library/09/functionaltestertableo
bjects/#download
Este artculo muestra cmo usar IBM RFT para automatizar objetos ajustados
dentro de las celdas de una tabla HTML manteniendo las celdas especificadas
como referencia. Lo ayudar a automatizar operaciones con estos objetos.
8 http://www-01.ibm.com/support/docview.wss?uid=swg21213488
En esta pgina se describe la gestin de los objetos de prueba en el IBM RFT.
UNIDAD DE
APRENDIZAJE
TEMARIO
3.1. Tema 5: Introduccin al Rational Performance Tester
3.1.1. Arquitectura de Rational Performance Tester
3.1.2. Caractersticas y beneficios de Rational Performance Tester
ACTIVIDADES PROPUESTAS
Las pruebas de rendimiento pueden ayudar a reducir los costes del sistema,
determinando qu recursos del sistema, tales como los re cursos de memoria y
disco, son necesarios para ofrecer un rendimiento aceptable. Comprender los
requisitos mnimos permite tomar mejores decisiones sobre qu hardware y
software debe ser comprado para el despliegue de la aplicacin objetivo.
Editor de Prueba
Los informes en tiempo real estn disponibles durante la ejecucin de la prueba. Son
idnticos a los informes por defecto que se pueden acceder despus de la ejecucin
de pruebas. Puede seleccionar una de las pestaas, que contienen diversos informes,
desde la parte inferior del monitor de pruebas. Tal como se indica en la siguiente
figura.
Las pruebas de rendimiento con RPT pueden ser automatizadas. Para ello,
debe grabar los escenarios a probar, programar las pruebas y ejecutarlas a fin
de analizar los informes obtenidos segn las necesidades del equipo. Estos
procesos se detallan a continuacin con un caso prctico.
1. Seleccione File > New > Test Project para crear el proyecto que contendr las
pruebas de la aplicacin.
3. Edicin de Pruebas
En este punto, aprender a aadir puntos de verificacin y pool de datos a una
prueba. Los puntos de verificacin comprueban si se da el comportamiento
esperado durante una ejecucin. El pool de datos permite variar los valores de lo
registrado en la prueba.
1. Click derecho sobre la pgina a la cual agregar un punto de verificacin (PV) >
Verification Points > Enable Page Title VPs.
4. Ahora, importar un archivo CSV para crear un pool de datos. Para ello, desde la
seccin Datapools seleccione Add Datapool.
5. A continuacin, active el checkbox para crear un nuevo pool de datos. Luego, pulse
Finish.
6. Desde la ventana New Datapool ingrese un nombre para el nuevo pool de datos.
Luego, pulse Next.
El datapool importado
contiene los valores
para 8 usuarios: usuario
y password.
4. Programacin de Pruebas
La programacin de una prueba representa una carga de trabajo a fin de realizar
las pruebas de rendimiento automatizadas. Los pasos se describen a continuacin.
1. Seleccione File > New > Performance Schedule para programar una prueba.
2 3
1 2
1 2
3
4
2
1
3
9. Por ltimo, para agrupar los activos de prueba por tipo, seleccione el cono del
tringulo y seleccione Logical test navigator.
Resumen
& Si desea saber ms acerca de estos temas, puede consultar las siguientes
pginas.
8 http://publib.boulder.ibm.com/infocenter/rpthelp/v8r1m0/index.jsp
En esta pgina encontrar informacin del entorno IBM RPT: gua de
instalacin, gua de aprendizaje, entre otros temas.
8 http://agile.csc.ncsu.edu/SEMaterials/tutorials/rpt/index.html#section8_0
En esta pgina, hallar un ejercicio sobre prueba de rendimiento con RPT.
8 http://www.ibm.com/developerworks/ssa/rational/library/09/buildingscriptsinrati
onalperformancetester/index.html
En esta pgina, hallar un ejemplo de generacin de scripts slidos para
pruebas de confiabilidad en RPT.