Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pruebas 4 X 1
Pruebas 4 X 1
D. Rodrguez, G. Lpez
Prueba de Software
D. Rodrguez, G. Lpez
Definicin
Proceso para verificar que el software cumpla criterios
especficos de calidad, correccin, complecin, exactitud,
eficacia y eficiencia, para asegurar su buen
funcionamiento y la satisfaccin del cliente final.
Software: conjunto de elementos de un sistema
informtico: programas, datos, documentacin,
procedimientos y reglas.
Objetivo:
Se asume que todo software contiene defectos.
Los defectos generalmente se manifestarn en fallos.
Los fallos sern detectados o bien por las pruebas o bien
por los usuarios.
Pruebas del Software
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Proceso
Iterativo
5
Depuracin
Pruebas del Software
D. Rodrguez, G. Lpez
Prueba exhaustiva
D. Rodrguez, G. Lpez
Dinmicas
Estticas
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Unitarias
Pruebas
Unitarias
Otros requisitos
software
Requisitos del
cliente
(especificacin)
Entorno del
cliente
Pruebas
de
integracin
Pruebas
Funcionales
Pruebas
de eficiencia,
carga, etc.
Pruebas de
aceptacin
Pruebas de
instalacin
Mdulos
integrados
Sistema
Funcionando
Verificado y
Validado
Sistema aceptado
Sistema en uso
Pruebas
Unitarias
D. Rodrguez, G. Lpez
Clases de equivalencia
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
10
Pruebas unitarias
Sistema
Funcional
(Requisitos)
Pruebas
Unitarias
unitarias
de integracin
de validacin
del sistema
de aceptacin
Especificacin
del Diseo
11
D. Rodrguez, G. Lpez
12
Beneficios
Permite arreglar los errores detectados sin cambiar la
funcionalidad del componente probado
Contribuye al proceso de integracin de componentes del
Sistema de SW al permitir asegurar el funcionamiento
correcto de los componentes de manera individual
Limitaciones
No permite identificar errores de integracin ni errores
de desempeo del Sistema de SW
Son impracticas para probar todos los casos posibles
para los componentes que se prueban
Su compatibilidad con los diferentes modelos de
desarrollo de SW vara, siendo ms compatible con el
Desarrollo dirigido por pruebas (p.e., en metodologas
giles como XP)
D. Rodrguez, G. Lpez
13
Pruebas de integracin
D. Rodrguez, G. Lpez
14
Aproximaciones de integracin
Aproximaciones:
Big-bang!
Descendente (Top-down)
Ascendente (Bottom-up)
Sandwich: Combinacin de las 2 anteriores.
D. Rodrguez, G. Lpez
15
D. Rodrguez, G. Lpez
16
Conductores y Resguardos
Integracin descendente
Descendente (Top-down)
Probar el mdulo A primero
Escribir mdulos simulados, resguardos (stubs)
para B, C, D
Una vez eliminados los problemas con A,
probar el mdulo B
Escribir resguardos para E, F, G, H etc.
Conductor
Mdulo bajo
prueba
Resguardo
Resguardo
A
B
E
D. Rodrguez, G. Lpez
C
H
M
D. Rodrguez, G. Lpez
18
Escribir y probar A, B, C, D, E, F, G, H, I, J, K,
M a la vez.
A
B
E
D
K
D
K
Sandwich
Big-Bang
Ascendente (Bottom-up)
17
Integracin ascendente
M
D. Rodrguez, G. Lpez
19
D. Rodrguez, G. Lpez
20
Pruebas de sistema
Pruebas funcionales
Pruebas de eficiencia
Pruebas de aceptacin
Pruebas de instalacin
Otras:
Pruebas de recuperacin (Recovery testing)
Pruebas de seguridad (security)
Pruebas de sistema es seguro (Safety testing)
Pruebas de estrs (Stress testing)
D. Rodrguez, G. Lpez
21
2.
3.
4.
5.
D. Rodrguez, G. Lpez
23
D. Rodrguez, G. Lpez
22
D. Rodrguez, G. Lpez
24
Qu es JUnit?
JUnit es la implementacin del Framework xUnit para el
lenguaje Java
Creado en 1997 por Erich Gamma y Kent Beck
Se usa para realizar pruebas unitarias de clases escritas
en Java en un entorno de pruebas
Framework muy sencillo, con muy pocas clases
Puede aprenderse a usar muy rpidamente por lo que se
ha hecho muy popular
Es open source y su cdigo est disponible en:
http://sourceforge.net/projects/junit/
2.
D. Rodrguez, G. Lpez
25
D. Rodrguez, G. Lpez
26
D. Rodrguez, G. Lpez
http://www.junit.org/
27
D. Rodrguez, G. Lpez
28
Resumen
Clase de prueba
Mtodos de prueba contenidos en la clase de prueba
Pestaa
de fallos
Estrategias de prueba
Pruebas unitarias
Pruebas unitarias con el framework xUnit
Implementaciones del framewrok xUnit
Pruebas unitarias con JUnit
D. Rodrguez, G. Lpez
29
D. Rodrguez, G. Lpez
30
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Interface Test
Clase Assert
Es la superclase de la clase
TestCase
Provee los mtodos assertXXX()
que se utilizarn a la hora de
hacer las pruebas
Los mtodos assertXXX() son
mtodos que permiten
comprobar si la salida del
mtodo que se est probando
concuerda con los valores
esperados
D. Rodrguez, G. Lpez
Clase TestResult
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Clase TestSuite
Clase TestCase
D. Rodrguez, G. Lpez
Interface TestListener
La clase TestRunner
implementa los mtodos de la
interfaz TestListener
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Clase TestRunner
10
D. Rodrguez, G. Lpez
11
Resumen
Paquete junit.framework
Clase TestFailure
Encapsula los fallos y
errores ocurridos durante
la ejecucin de una prueba
Rastrea una instancia de la
clase Test describiendo la
prueba que fall y
almacenando la excepcin
que caus el fallo
D. Rodrguez, G. Lpez
12
D. Rodrguez, G. Lpez
13
Aserciones en JUnit
D. Rodrguez, G. Lpez
assertTrue()
assertNull()
assertSame()
assertEquals()
assertFalse()
assertNotNull()
assertNotSame()
fail()
D. Rodrguez, G. Lpez
assertTrue()
assertFalse()
Sintaxis:
Sintaxis
void assertTrue(expresin booleana)
void assertTrue(String, expresin
booleana)
D. Rodrguez, G. Lpez
assertNull()
D. Rodrguez, G. Lpez
assertNotNull()
Sintaxis:
Sintaxis
void assertNull(Object)
void assertNull(String, Object)
void assertNotNull(Object)
void assertNotNull(String, Object)
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
assertSame()
assertNotSame()
Sintaxis
Sintaxis
void assertSame(Object esperado, Object actual)
void assertSame(String, Object esperado, Object
actual)
D. Rodrguez, G. Lpez
fail()
assertEquals()
Sintaxis
Sintaxis
void assertEquals(valor esperado, valor actual)
void assertEquals(String, valor esperado, valor actual)
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
void fail
void fail(String)
D. Rodrguez, G. Lpez
Resumen
Las aserciones son condiciones lgicas que se usan para
verificar si los resultados generados por el cdigo
corresponden con los resultados esperados
Pruebas de Software
Pruebas de mtodos constructores,
set/get y mtodos convencionales
con el framework JUnit
assertTrue() y assertFalse()
Prueban condiciones booleanas
assertNull() y assertNotNull()
prueban valores nulos
assertSame() y assertNotSame()
prueban referencias a objetos
assertEquals()
prueba igualdad de contenidos
fail()
hace que la prueba falle inmediatamente
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Introduccin
Mtodos constructores
Mtodos get() y set()
Mtodos convencionales
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
}
8
D. Rodrguez, G. Lpez
10
Parmetros de entrada
Estado interno del objeto
Estado de los objetos externos
Entidades externas que forman el entorno de ejecucin
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
11
Resumen
Para probar los mtodos constructores se usa una prueba de caja
blanca donde
se establece los valores de los datos del caso de prueba
se invoca al mtodo constructor para crear una instancia de la clase a la
que pertenece
se definen las aserciones necesarias para comprobar que los valores
dados a los atributos por el mtodo constructor corresponden con los
valores esperados
Para probar los mtodos set y get se usa una prueba de caja negra
donde
se invoca el mtodo constructor para crear una instancia de la clase
se almacena un valor en la propiedad usando el mtodo set
se obtiene el valor de la propiedad asignado usando el mtodo get
correspondiente
se comprueba, usando aserciones, que el valor almacenado del atributo
con el mtodo set y el obtenido con el mtodo get son iguales.
D. Rodrguez, G. Lpez
12
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Precondicin
public void testObtenerNombre() {
assertEquals(expResult, result);
Cdigo que
prueba la
funcionalidad
Postcondicin
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Persona instancia =
new Persona ("Gertrudis", "Lopez", "Lopez");
Persona instancia =
new Persona ("Gertrudis", "Lopez", "Lopez");
assertEquals(expResult, result);
assertEquals(expResult, result);
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
import junit.framework.TestCase;
public class PersonaTest extends TestCase {
D. Rodrguez, G. Lpez
10
D. Rodrguez, G. Lpez
11
Resumen
Se han visto los pasos para crear, ejecutar y ver los
resultados de un caso de prueba sencillo escrito con JUnit
Para escribir un caso de prueba y sus mtodos
constituyentes:
Se crea una subclase de la clase TestCase del framework JUnit
Para cada mtodo de prueba
Se definen las precondiciones de la prueba y la funcionalidad a
probar.
Se especifica el resultado esperado de la prueba o postcondicin.
Esto se hace usando los mtodos asserts del framework Junit
Se implementa el cdigo para que los mtodos de prueba
verifiquen las aserciones definidas.
D. Rodrguez, G. Lpez
12
D. Rodrguez, G. Lpez
13
Ejercicio prctico
Escribir un caso de prueba con JUnit para una
clase java, en el IDE Netbeans.
Objetivo: crear una clase Java con un conjunto
de mtodos y definir y ejecutar un caso de
prueba sencillo (TestCase) para probar los
mtodos de dicha clase usando JUnit desde el
IDE Netbeans.
La clase que se va a construir es una calculadora
sencilla con las cuatro operaciones bsicas:
D. Rodrguez, G. Lpez
14
D. Rodrguez, G. Lpez
Cdigo duplicado
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
}
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Ejemplo tearDown()
@XXX-Class
@BeforeClass and @AfterClass
All @AfterClass methods are guaranteed All @After methods are guaranteed to
to run even if a @BeforeClass method
run even if a @Before or @Test method
throws an exception.
throws an exception.
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Resumen
Se ha visto como utilizar los mtodos setUp() y
tearDown() de la clase TestCase para establecer un
contexto de ejecucin de los mtodos de un caso de prueba
particular.
El mtodo setUp() es un mtodo privado del caso prueba
que provee el contexto de trabajo comn para ejecutar los
mtodos del Caso de Prueba creando Fixtures
Los fixtures son los objetos y estructuras de datos comunes
a todos los mtodos del caso de prueba
El mtodo privado tearDown(), heredado de la clase
TestCase de JUnit, permite liberar y blanquar los objetos y
estructuras de datos del fixture definido en el mtodo
setUp(), una vez ejecutados los casos de prueba
D. Rodrguez, G. Lpez
Ejercicio prctico
Escribir un caso de prueba con JUnit
para una clase java sobreescribiendo lo
mtodos setUp() y tearDown() de la
clase TestCase en Netbeans.
Objetivo: crear una clase Java con un
conjunto de mtodos y definir y ejecutar
un caso de prueba usando los mtodos
setUp() y tearDown() para probar los
mtodos de dicha clase usando JUnit
desde el IDE Netbeans.
Tiempo estimado: 45 minutos
D. Rodrguez, G. Lpez
12
D. Rodrguez, G. Lpez
11
Introduccin
Los casos de prueba (test cases) son un
conjunto de mtodos de prueba
relacionados para probar las
funcionalidades de una clase particular
Para probar un sistema de software y/o
cada uno de sus mdulos es necesario
elaborar varios casos de prueba
Las suites de prueba (test suites)
permiten ejecutar de manera colectiva
casos, mtodos y/o suites de pruebas
relacionados
Prcticas de la asignatura Prueba de Software
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
(8 * 3) + 2 = 26
8 * (3 + 2) = 40
Prcticas de la asignatura Prueba de Software
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
10
D. Rodrguez, G. Lpez
11
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
return testSuiteWithBraces;
}
return testSuiteWithBraces;
}
Prcticas de la asignatura Prueba de Software
D. Rodrguez, G. Lpez
12
D. Rodrguez, G. Lpez
13
D. Rodrguez, G. Lpez
14
Resumen
Las suites de pruebas se definen para agrupar
mtodos de prueba, casos de prueba y/o suites
de pruebas relacionadas por tener caractersticas
o propsitos comunes que necesitan ser
ejecutados de manera conjunta
Para crear una suite
Se crea un mtodo esttico suite() que retorna una
instancia de la interface Test de JUnit.
Dentro del mtodo se crea un objeto TestSuite
Se usa el mtodo addTest() para agregar mtodos de
prueba y el mtodo addTestSuite() para aadir otras
suites de puebas ya creadas
D. Rodrguez, G. Lpez
15
Introduccin
Pruebas de excepciones
Pruebas de mtodos no incluidos en la
interface pblica de la clase
Prueba de Software
Conceptos avanzados en JUnit
Information Engineering Research Group
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
1
2
3
}
}
D. Rodrguez, G. Lpez
protect:
cuando el elemento es visible desde la clase a la que pertenece
y desde las subclases de la clase a la que pertenece
D. Rodrguez, G. Lpez
private:
1
2
3
por defecto:
el elemento es visible en el paquete al que pertenece
Pruebas del Software
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
10
D. Rodrguez, G. Lpez
11
D. Rodrguez, G. Lpez
13
12
Resumen
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
18
Introduccin
A veces es necesario hacer pruebas de una clase
aislando sus objetos colaboradores.
Por ejemplo, en las pruebas de integracin
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
10
11
Caractersticas:
Eliminan las tareas que repetitivas a los
desarrollador debe repetir cuando usa la
tcnica de Mock Objects.
Permiten utilizar de manera estndar la tcnica
de los Mock Objects.
Generan cdigo legible y entendible para los
desarrolladores
D. Rodrguez, G. Lpez
12
EasyMock
D. Rodrguez, G. Lpez
13
D. Rodrguez, G. Lpez
14
JMock
JMock es una de las herramienta de
manejo de Mocks Objects ms usada en la
programacin en Java
Es una herramienta Software Libre
disponible en:
3. Iniciar el mock
http://www.jmock.org/
D. Rodrguez, G. Lpez
15
D. Rodrguez, G. Lpez
16
Ejemplo EasyMock
Resumen
import org.easymock.EasyMock;
import junit.framework.TestCase;
public class InternetRelayChatTest extends TestCase {
public void testJoin() {
String msg = Hello;
Client fred = EasyMock.createMock(Client.class);
Client peter = EasyMock.createMock(Client.class);
Client mary = EasyMock.createMock(Client.class);
expect (mary.onMessage(homer,msg)).andReturn(true);
peter.onMessage(homer,msg);
expectLastCall().andReturn(true);
}
}
D. Rodrguez, G. Lpez
17
D. Rodrguez, G. Lpez
18
Introduccin
Pruebas de Software
NUnit
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Qu es NUnit?
Caractersticas de NUnit?
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Aserciones de:
igualdad
identidad
comparacin
tipos
String
colecciones
archivos
pruebas de condicin
mtodos de utilidad (utility)
Prcticas de la asignatura Prueba de Software
D. Rodrguez, G. Lpez
Aserciones de igualdad
Aserciones de identidad
Sintaxis
Assert.AreSame()
AssertAreNotSame()
Assert.Contains()
Los mtodos Assert.AreSame() y Assert.AreNotSame()
verifican si dos argumentos referencian o no a un mismo
objeto
El mtodo Assert.Contains() verifica si un objeto est
contenido en un array o en una lista
D. Rodrguez, G. Lpez
Aserciones de identidad
D. Rodrguez, G. Lpez
Aserciones de condicin
Sintaxis
Assert.AreSame( object expected, object actual );
Assert.AreSame( object expected, object actual, string );
Assert.AreSame(object expected, object actual, string, params
object[] parms );
Assert.AreNotSame(object expected, object actual );
Assert.AreNotSame(object expected, object actual , string );
Assert.AreNotSame(object expected, object actual , string,
params object[] parms );
Assert.Contains(
Assert.Contains(
Assert.Contains(
object[] parms
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
10
Aserciones de condicin
Aserciones de condicin
Sintaxis
Assert.IsTrue( bool condition );
Assert.IsTrue( bool condition, string message );
Assert.IsTrue( bool condition, string message, object[] parms );
Assert.IsFalse( bool condition);
Assert.IsFalse( bool condition, string message );
Assert.IsFalse( bool condition, string message, object[] parms );
Assert.IsNull( object anObject );
Assert.IsNull( object anObject, string message );
Assert.IsNull( object anObject, string message, object[] parms );
Assert.IsNotNull( object anObject );
Assert.IsNotNull( object anObject, string message );
Assert.IsNotNull( object anObject, string message, object[] parms);
D. Rodrguez, G. Lpez
Sintaxis
Assert.IsNaN( double aDouble );
Assert.IsNaN( double aDouble, string message );
Assert.IsNaN( double aDouble, string message,
object[] parms );
Assert.IsEmpty( string
Assert.IsEmpty( string
Assert.IsEmpty( string
params object[] args
11
Aserciones de condicin
12
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Aserciones de comparacin
Sintaxis
aString );
aString, string message );
aString, string message,
);
13
Assert.Greater( x, y )
Assert.GreaterOrEqual( x, y )
Assert.Less( x, y )
Assert.LessOrEqual( x, y )
D. Rodrguez, G. Lpez
14
Aserciones de comparacin
Aserciones de tipos
Sintaxis
Assert.Greater( value1, value2 );
Assert.Greater(value1, value2 , string message );
Assert.Greater(value1, value2 , string message, object[] parms
);
Assert.GreaterOrEqual( value1, value2 );
Assert.GreaterOrEqual(value1, value2 , string message );
Assert.GreaterOrEqual(value1, value2 , string message, object[]
parms );
Assert.Less( value1, value2 );
Assert.Less(value1, value2 , string message );
Assert.Less(value1, value2 , string message, object[] parms );
Assert.LessOrEqual( value1, value2 );
Assert.LessOrEqual(value1, value2 , string message );
Assert.LessOrEqual(value1, value2 , string message, object[]
parms );
Prcticas de la asignatura Prueba de Software
D. Rodrguez, G. Lpez
15
Sintaxis:
Type expected, object actual );
Type expected, object actual,
Type expected, object actual,
object[] parms );
Assert.IsInstanceOfType(
Assert.IsInstanceOfType(
string message );
Assert.IsInstanceOfType(
string message, params
D. Rodrguez, G. Lpez
16
Aserciones de tipos
Assert.IsAssignableFrom(
Assert.IsAssignableFrom(
string message );
Assert.IsAssignableFrom(
string message, params
D. Rodrguez, G. Lpez
17
D. Rodrguez, G. Lpez
18
Aserciones de Strings
D. Rodrguez, G. Lpez
19
Aserciones de Strings
StringAssert.AreEqualIgnoringCase( string
actual );
StringAssert.AreEqualIgnoringCase( string
actual, string message );
StringAssert.AreEqualIgnoringCase( string
actual, string message params object[]
expected, string
expected, string
args );
D. Rodrguez, G. Lpez
20
D. Rodrguez, G. Lpez
Aserciones de colecciones
expected, string
21
D. Rodrguez, G. Lpez
22
Aserciones de colecciones
Aserciones de colecciones
CollectionAssert.AllItemsAreUnique( IEnumerable
collection );
CollectionAssert.AllItemsAreUnique( IEnumerable
collection, string message );
CollectionAssert.AllItemsAreUnique( IEnumerable
collection, string message, params object[] args );
CollectionAssert.AllItemsAreNotNull(
IEnumerable collection );
CollectionAssert.AllItemsAreNotNull(
IEnumerable collection, string message );
CollectionAssert.AllItemsAreNotNull(
IEnumerable collection, string message,
params object[] args );
D. Rodrguez, G. Lpez
23
Aserciones de colecciones
D. Rodrguez, G. Lpez
24
D. Rodrguez, G. Lpez
Aserciones de colecciones
25
CollectionAssert.AreEquivalent( IEnumerable
expected, IEnumerable actual);
CollectionAssert.AreEquivalent( IEnumerable
expected, IEnumerable actual, string message );
CollectionAssert.AreEquivalent( IEnumerable
expected, IEnumerable actual string message, params
object[] args );
D. Rodrguez, G. Lpez
26
Aserciones de colecciones
Aserciones de colecciones
D. Rodrguez, G. Lpez
27
Aserciones de colecciones
D. Rodrguez, G. Lpez
28
Aserciones de colecciones
CollectionAssert.Contains( IEnumerable
expected, object actual );
CollectionAssert.Contains( IEnumerable
expected, object actual, string message );
CollectionAssert.Contains( IEnumerable
expected, object actual string message,
params object[] args );
CollectionAssert.DoesNotContain( IEnumerable
expected, object actual );
CollectionAssert.DoesNotContain( IEnumerable
expected, object actual, string message );
CollectionAssert.DoesNotContain( IEnumerable
expected, object actual string message,
params object[] args );
D. Rodrguez, G. Lpez
29
D. Rodrguez, G. Lpez
30
Aserciones de colecciones
Aserciones de colecciones
D. Rodrguez, G. Lpez
31
Aserciones de colecciones
D. Rodrguez, G. Lpez
32
D. Rodrguez, G. Lpez
CollectionAssert.IsEmpty( IEnumerable
collection );
CollectionAssert.IsEmpty( IEnumerable
collection, string message );
CollectionAssert.IsEmpty( IEnumerable
collection, string message, params object[]
args );
Aserciones de archivos
33
D. Rodrguez, G. Lpez
34
Aserciones de archivos
Atributos
Sintaxis:
FileAssert.AreEqual( File expected, File actual );
FileAssert.AreEqual( File expected, File actual, string
message );
FileAssert.AreEqual( File expected, File actual, string
message, params object[] args );
FileAssert.AreNotEqual( File expected,
FileAssert.AreNotEqual( File expected,
string message );
FileAssert.AreNotEqual( File expected,
string message, params object[] args
File actual );
File actual,
File actual,
);
D. Rodrguez, G. Lpez
35
El atributo
[TestFixture] indica
que la clase
SuccessTests
contiene pruebas
D. Rodrguez, G. Lpez
36
Atributo: SetUp
Atributo: TestFixture
namespace NUnit.Tests
{
using System;
using NUnit.Framework;
[TestFixture]
public class SuccessTests
{
// ...
}
}
D. Rodrguez, G. Lpez
37
D. Rodrguez, G. Lpez
38
Atributo: Test
Atributo: TearDownAttribute
El atributo [TearDown] se usa dentro de un TestFixture para
liberar los objetos y estructuras de un Fixture para la clase de
pruebas. Un TestFixture debe tener un solo mtodo TearDown.
Se ejecuta justo despus de llamar a cada mtodo de la clase de
pruebas:
namespace NUnit.Tests
El atributo [TearDown]
{
indica que el mtodo
using System;
Cleanup() realizar el
using NUnit.Framework; TearDown del TestFixture
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* ... */ }
[TearDown] public void Cleanup()
{ /* ... */ }
[Test] public void Add()
{ /* ... */ }
}
}
D. Rodrguez, G. Lpez
39
Atributo: Suite
40
Atributo: Category
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
}
41
D. Rodrguez, G. Lpez
42
D. Rodrguez, G. Lpez
43
Nunit GUI
D. Rodrguez, G. Lpez
44
Resumen
En este tema se estudi NUnit, que es una
implementacin para todos los lenguajes
microsoft .NET del framework de pruebas unitarias
Xunit
Se estudiaron la bases de funcionamients de NUnit
que son:
Las aserciones que son mtodos del framework de NUnit
utilizados para comprobar y comparar valores
Los atributos personalizados que indican a NUnit como
interpretar y ejecutar las pruebas implementadas en el
mtodo o clase.
Se vi la forma de ejecutar las pruebas en NUnit
Usando el runner via consola
Usando el runner grfico
D. Rodrguez, G. Lpez
45
D. Rodrguez, G. Lpez
46
Contenido
Anlisis esttico
Qu es?
Daniel Rodrguez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
FindBugsTM
Anlisis esttico
Analiza los programas sin ejecutarlos
Anlisis esttico
de programas en Java
http://findbugs.sourceforge.net/
Analiza bytecode, i.e., ficheros .class
http://jakarta.apache.org/bcel/
Cdigo abierto:
FindBugs (bytecode) http://findbugs.sourceforge.net/
PMD (cdigo fuente) http://pmd.sourceforge.net/
CheckStyle http://checkstyle.sourceforge.net/
Comerciales:
Demostraciones on-line:
http://findbugs.sourceforge.net/demo.html
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
FindBugs:
Ejemplos Patrones de Errores I
FindBugs: Caractersticas
Hay muchos errores detectables con
anlisis esttico.
Hascode/Equals
En Java es necesario redefinir equals() y hashCode()
Con este error, los objectos no funcionan bien en tablas
de dispersin, maps, sets, etc.
Netbeans/Swing/Eclipse/Ant/SCA
Integracin con Netbeans
https://grizzly.dev.java.net/tutorials/findBugs-nbtutorial/index.html
Pruebas del Software
D. Rodrguez, G. Lpez
FindBugs:
Ejemplos Patrones de Errores II
D. Rodrguez, G. Lpez
Punteros null
http://findbugs.sourceforge.net/bugDescriptions.html
Se muestran en forma de tabla, agrupados por categora:
D. Rodrguez, G. Lpez
Description
Category
Bad practice
Bad practice
D. Rodrguez, G. Lpez
FindBugs: Ejecucin I
FindBugs: Ejecucin
D. Rodrguez, G. Lpez
PMD
D. Rodrguez, G. Lpez
10
PMD
http://pmd.sourceforge.net/
Ejemplos:
Posibles bugs con sentencias try/catch/finally/switch
Cdigo muerto
variables no usadas, parmetros, mtodos privados, etc.
sentencias if inecesarias,
Bucles for que pueden sustituirse por bucles while
11
D. Rodrguez, G. Lpez
12
D. Rodrguez, G. Lpez
13
PMD: Ejemplo
D. Rodrguez, G. Lpez
14
Como entrada:
Salida:
C:\weka-src\weka\filters\Filter.java:542
These nested if
statements could be combined
...
C:\Java\weka\wekasrc\weka\filters\unsupervised\attribute\AddNoise.java:498
An
empty statement (semicolon) not part of a loop
...
D. Rodrguez, G. Lpez
15
D. Rodrguez, G. Lpez
16
D. Rodrguez, G. Lpez
17
D. Rodrguez, G. Lpez
19
JUnit 4
En su versin ms actual JUnit explota las
ventajas de Java 5 (JDK):
Import estticos
Permite a una clase hacer uso de mtodos y variables
estticas de otra clase sin el incluir el cualificador
(nombre de la clase a la que perteneces
Anotaciones
Son metadatos, que permiten aadir informacin
para el compilador (u otras herramentas)
Es texto precedido por @. Por ejemplo:
Daniel Rodrguez
@test
public void comprobarValor(){...}
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
@Test parmetros
@Test(timeout=1000)
public void getHTTP(){}
D. Rodrguez, G. Lpez
Tests parametrizados
D. Rodrguez, G. Lpez
Ejemplo JUnit 4
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@Test
public void personaEnRegistro() {
Registro registro = new Registro();
boolean resultado = registro.checkByTitle(Armando Camorra);
assertEquals(La persona debera de estar., true, result);
}
Condiciones:
(i) el mtodo a probar no debe tener parmetros
(ii) hay que pasarle al constructor de la clase los
parmetros devueltos por la clase Collection
almacenndolos en atributos privados de la clase
(iii) La clase debe anotarse as:
@RunWith(value=Parameterized.class)
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
Contenidos
Frameworks que extienden JUnit
Pruebas de Bases de datos: DBUnit
Aplicaciones Web: JWebUnit, HTTPUnit, HTMLUnit,
JMeter (Pruebas de carga en general)
Pruebas de Cobertura
Con caja blanca: Cobertura, Emma
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
BD de produccin
Base de datos real sobre la que trabaja la aplicacin
BD datos de prueba
DBUnit
Extensin de JUnit, aunque puede ser usado
independientemente (por ejemplo con Ant)
BD de integracin:
BD idntica a la de produccin, donde se realizan las
pruebas antes de ejecutarlas sobre la BD real.
http://dbunit.sourceforge.net/
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
HTTPUnit
HTTPUnit
Pruebas Web
HTTPUnit, HTMLUnit, JWebUnit, JMeter
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
HTMLUnit
HTMLUnit
Modela documentos HTML
proporcionando una API para rellenar
formularios, comprobar enlaces, etc.
Simula un navegador Web
Cdigo abierto:
http://htmlunit.sourceforge.net/
D. Rodrguez, G. Lpez
JWebUnit
JMeter
Permite la ejecucin de pruebas
de cargas basadas en diferentes protocolos:
Cdigo abierto:
http://jakarta.apache.org/jmeter/
Integrado con Netbeans
http://jwebunit.sourceforge.net/
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
10
D. Rodrguez, G. Lpez
11
Pruebas de Cobertura
Monitorizan la ejecucin de los casos de
prueba para medir el grado de cobertura
del cdigo alcanzado por los casos de
prueba
Se aaden trazas al cdigo para registrar
las instrucciones que se han ejecutado.
La idea es fijar un grado de cobertura, e ir
incrementando los casos de prueba hasta
alcanzarlo.
Pruebas de cobertura
D. Rodrguez, G. Lpez
Herramientas de cobertura
D. Rodrguez, G. Lpez
13
Cobertura
http://cobertura.sourceforge.net/
Cobertura de sentencias y ramas para el cdigo
Medidas de complejidad ciclomtica y la media por
paquetes y proyecto completo.
Cdigo abierto
Emma
http:emma.sourceforge.net/
Similar a Cobertura.
Ejecucin desde lnea de comando o integrada en
Netbeans y Eclipse (comercial)
D. Rodrguez, G. Lpez
14
D. Rodrguez, G. Lpez
15
Criterio de suficiencia
Criterio de parada indicando si es necesario seguir o no probando
Mtodos estructurales. Deben cubrir un conjunto de elementos de estructura
basados en el grafo del programa segn su flujo de control o flujo de datos.
Tcnica/s utilizada/s:
Ejecucin simblica, algoritmos genticos, etc.
D. Rodrguez, G. Lpez
17
Ejemplo de herramienta:
D. Rodrguez, G. Lpez
D. Rodrguez, G. Lpez
http://marathonman.sourceforge.net/
18
D. Rodrguez, G. Lpez
19
Selenium
JTestCase
http://selenium.openqa.org/
Clase a
probar
Clase
Clase de
Prueba
Documento XML
con mltiples
casos de prueba
ClaseTest
Casos de Prueba
Cdigo libre:
http://jtestcase.sourceforge.net/
D. Rodrguez, G. Lpez
20
JTestCase Ejemplo
public class Calculator {
public Calculator() {super();}
public int calculate(int var1, int var2, String opt) {
if (opt.equals("+"))
return var1 + var2;
if (opt.equals("-"))
return var1 - var2;
return 0;
<test-case
name="positive-add">
}
<params>
}
<param name="var1" type="int">10</param>
<param name="var2" type="int">20</param>
<param name="opt" type="java.lang.String">+</param>
</params>
<asserts>
<assert name="result" type="int" action="EQUALS">30</assert>
</asserts>
</test-case>
<test-case name="positive-minus">
<params>
<param name="var1" type="int">10</param>
<param name="var2" type="int">20</param>
<param name="opt" type="java.lang.String">-</param>
</params>
<asserts>
<assert name="result" type="int" action="EQUALS">-10</assert>
</asserts>
Pruebas del Software
D. Rodrguez, G. Lpez 22
</test-case>
D. Rodrguez, G. Lpez
21