0% encontró este documento útil (0 votos)
32 vistas48 páginas

Testing

Este documento presenta una introducción a las pruebas de software desde cero. Explica conceptos básicos como las definiciones de prueba, los diferentes tipos de pruebas según el momento y objetivo, y técnicas comunes de prueba como particiones equivalentes y análisis de valores límite. También incluye un índice de los temas que se cubrirán.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
32 vistas48 páginas

Testing

Este documento presenta una introducción a las pruebas de software desde cero. Explica conceptos básicos como las definiciones de prueba, los diferentes tipos de pruebas según el momento y objetivo, y técnicas comunes de prueba como particiones equivalentes y análisis de valores límite. También incluye un índice de los temas que se cubrirán.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 48

Pruebas desde Cero

Formación para la prueba de


concepto de Cucumber

https://personal.us.es/javierj/
@iwt2_javier
Objetivos

• Repasar conceptos
básicos sobre pruebas
• Repasar cómo definir
pruebas utilizando
herramientas XUnit.

Objetivos
2
Actividades

• Este tema tiene


asociado un boletín de
problemas.
• Las instrucciones para
resolver los problemas
las encontrarás en el
propio boletín.
• También tienes un
cuestionario on-line de
repaso de la librería
Junit.
Actividades
3
Índice

1. Definiciones
2. Niveles de prueba
3. Técnicas de prueba
4. Junit y el patrón
Xunit.
5. Para terminar.

Índice
4
Definiciones

5
Definiciones

• Una definición de prueba

Para probar un programa


tenemos que ejecutarlo.

Verificación dinámica del La prueba tiene un límite.


comportamiento del
software a partir de un
conjunto finito de casos de No vale ejecutar el
prueba. programa de cualquier
manera.
Definiciones
Ejemplos de pruebas en el mundo real

¿Funciona el teléfono?.
Valores de Acciones Resultado esperado
prueba
123-45-67-89 1. Descolgar auricular. (Pepote): “Digameee”.
2. Marcar número de Pepote.
3. Esperar contestación.

¿Me está bien esta camisa?


Valores de Acciones Resultado esperado
prueba
Mi cuerpo. 1. Ponerme la camisa. Elegancia y confort.
2. Abrochármela.
3. Moverme un poco.
4. Mirarme al espejo.
Cuidado con la etiqueta o con arrugarla
por si hay que devolverla
Definiciones

¿Un programa que pasa todos sus


casos de prueba es un programa sin
errores?.

No

Las pruebas sólo pueden


encontrar los errores que buscan.
Por esto es tan importante un
buen diseño de pruebas.
Definiciones

Distintos tipos de
pruebas en
función de lo que
se prueba y del
momento de
realizarla
Definiciones

• Pruebas unitarias:
– Cuando: Durante la construcción del sistema
– Objetivo: Comprueban la correcta unión de los
componentes entre sí a través de sus interfaces, y
si cumplen con la funcionalidad establecida .
• Ejemplo:
– Combinar el código de acceso a la base de datos
con el código de lógica de negocio y probar que
funciona correctamente.
Definiciones

• Pruebas de integración
– Cuando: Durante la construcción del sistema
– Objetivo: Comprueban la correcta unión de los
componentes entre sí a través de sus interfaces, y
si cumplen con la funcionalidad establecida .
• Ejemplo:
– Combinar el código de acceso a la base de datos
con el código de lógica de negocio y probar que
funciona correctamente.
Definiciones

• Pruebas del sistema:


– Cuando: Durante la construcción del sistema (partes
completas como requisitos funcionales).
– Objetivo: Prueban a fondo el sistema, comprobando
su funcionalidad e integridad globalmente, en un
entorno lo más parecido posible al entorno final de
producción.
• Ejemplo:
– Probar el requisito funcional de alta de un nuevo
elemento.
– Verificar que un formulario web se visualiza bien en
los navegadores de referencia
Definiciones

• Pruebas de implantación
– Cuando: Durante la implantación en el entorno de
producción.
– Objetivo: Comprueban el correcto
funcionamiento del sistema dentro del entorno
real de producción (rendimiento, copias de
seguridad, etc.)..
• Ejemplo:
– Desplegado correcto de la instalación.
– Realización de un backup de prueba.
Definiciones

• Pruebas de aceptación
– Cuando: Después de la implantación en el entorno
de producción
– Objetivo: Verifican que el sistema cumple con
todos los requisitos indicados y permite que los
usuarios del sistema den el visto bueno definitivo.
• Ejemplo:
– Que el sistema pueda realizar una venta
correctamente (ahora en el entorno de
producción).
Tipos de prueba de sistema

Tipos de pruebas del sistema


Tipo de prueba de sistema Resumen
Pruebas funcionales Verifican la correcta implementación de las especificaciones
funcionales del sistema.
Pruebas de comunicaciones Verifican el funcionamiento de distintos subsistemas a través
de sus interfaces
Pruebas de rendimiento Verifican los tiempos de respuesta del sistema
Pruebas de volumen Monitorizan el funcionamiento del sistema bajo distintas
cargas de trabajo / datos esperados
Pruebas de sobrecarga Monitorizan el funcionamiento del sistema bajo distintas
cargas de trabajo / datos no esperados.
Pruebas de disponibilidad de Verifican la respuesta del sistema ante posibles fallos
datos
Pruebas de facilidad de uso Verifican la adaptabilidad del sistema a los distintos usuarios
esperados
Pruebas de operación Verifican la correcta implementación de los procedimientos
de operación del sistema.
Pruebas de seguridad Verifican los mecanismos de control de acceso al sistema
para evitar alteraciones indebidas en los datos.
Triángulo de pruebas

¿Siempre es cierto que cuantas más


pruebas mejor?

Material consulta: Behaviour Driven Development


Triángulo de pruebas

¿Siempre es cierto que cuantas más


pruebas mejor?

Material consulta: Behaviour Driven Development


Arquitectura hexagonal

Sistema de información: core que


gestiona datos y realiza procesos
de negocio (casos de uso, etc.)
enganchado a adaptadores para
extraer información del exterior o
enviarla.
Los adaptadores convierten dicha
información en datos de negocio (i
es información entrante-9 o en un
formato necesario por alguien
externo (daos de salida)

Prueba de punto a punto (todos sus ports.


Material consulta: Behaviour Driven Development
Técnicas de prueba

19
Técnicas de prueba

• Si vemos un método, ¿cómo sabes qué


pruebas deberíamos escribir para probarlo?
• Las técnicas de prueba responden a esta
pregunta
• Hay muchas técnicas de pruebas, aquí
veremos tres de las más importantes:
– Particiones equivalentes.
– Análisis de valores límite.
– Cobertura de decisiones
Técnicas de prueba

• Empezaremos por valores límite y particiones


equivalentes
• Son dos técnicas diferentes pero se
complementan muy bien.
• Particiones equivalentes:
– Los posibles valores de las entradas (por ejemplo
parámetros de un método) se agrupan.
– Para cada grupo, el código realiza la misma tarea
• Valores límite:
– Se identifican y prueban aquellos valores que estén en
el límite frontera de una partición.
Técnicas de prueba

¿Qué casos de prueba podemos escribir?.


public int suma(int a, int b)
{ Valores de Acciones Resultado
return a + b; prueba esperado
}
0, 0 Suma(a, b) 0
0, b = no 0 Suma(a, b) b
3, 4 Suma(a, b) 7
-2, -8 Suma(a, b) -10
-3, 6 Suma(a, b) 3
Integer.MAX_V Suma(a, b) -2147483643
ALUE, 6

Y algunas permutaciones más.


Técnicas de prueba
public int suma(int a, int b)
{
return a + b;
}

5 valores = 25 casos de prueba.


Técnicas de prueba

Cobertura de decisiones

Escribimos una prueba para cada uno de


los posibles flujos de ejecución (3
pruebas en este caso)
Técnicas de prueba

Cobertura de decisiones

boolA boolB Resultado


esperado

True True A() B() C()


True False A() B() C()
False True A() B() D()
False False A() B()

Podemos ahorrarnos un caso de prueba


(3 en vez de 4)
Veamos este mismo ejemplo con valores
límites
Técnicas de prueba

Ejemplo
• El método HashSet::add(E e): boolean define el
siguiente comportamiento al añadir un elemento
a un conjunto.
– Añade el elemento e al conjunto si no está ya
presente.
– Devuelve true si el conjunto no contenía el elemento
e.
– Permite añadir el valor null
• Diseñe un conjunto de pruebas para el método
anterior utilizando la técnica de particiones
equivalentes / valores límites.
Técnica de prueba

Ejemplo
Tenemos dos conjuntos de valores: valores que no estaban previamente y valores que
estaban.
Aunque no debería ser necesario, podemos considerar null como valor límite y
probarlo

Elemento Contenido del Set Resultado


esperado
Veremos el código
X No contiene X True fuente en el
siguiente punto
X Contiene X False
Null No contiene null True
Null Contiene null False
Técnica de prueba

Ejercicio

Vamos a probar nosotros


JUnit y el patrón
XUnit

29
JUnit

Empecemos con ejercicios

• Ejercicio.
– Implementa en Eclipse una clase con un método
suma(int, int) que devuelva el resultado de la suma de
los dos parámetros.
– Escribe un conjunto de pruebas con, al menos 2 caso
de prueba en JUnit y ejecútalos desde Eclipse.
• Ejercicio II.
– Escribe un conjunto de pruebas que, antes de la
ejecución de cada prueba cree una lista con los 10
primeros números enteros
JUnit

• ¿Qué es Junit?
– Una librería para escribir pruebas.
– Un patrón, es decir, una guía sobre cómo escribir una
prueba.
– Aunque estaba orientada a pruebas unitarias este
patrón puede utilizarse en cualquier tipo de pruebas.
– Existen implementaciones para la gran mayoría de
lenguajes.
– Existen herramientas más avanzadas, especialmente
en lenguajes con características más actuales.
JUnit

• Elementos básicos (en la versión 4)


– En Junit una prueba es un método
– Un clase es un conjunto de pruebas.
– Cada prueba tiene un setUp que se ejecuta antes y un
tearDown que se ejecuta después. Estos métodos son
comunes para todas las pruebas.
– Ofrece método para poder decidir si las prueba se ha
superado con éxito o no (métodos assertX).
– No hay ninguna manera de ejecutar las pruebas por lo
que dependemos de la integración con el entorno.
– Viene de serie en Eclipse
XUnit

Valores de prueba Acción Resultado


A, b cuáles quiera Suma(a, b) a+b
… … …
XUnit
XUnit
Buenas pruebas

36
Buenas Pruebas

Brainstorming: ¿qué características


tienen las buenas pruebas?
Buenas Pruebas

Test public void test() {


String input = "abc";
String result = Util.reverse(input);
assertEquals("cba", result);
}
Buenas pruebas

• Código de primera categorías (SOLID,


Refactorizacion, etc).
• Rápidas de ejecutar.
• Independientes (repetibles y potencialmente
paralelizables).
• Que aporten valor
• Fáciles de entender.
• Robustas (confiables).
Buenas pruebas

¿Es una buena prueba?


Buenas pruebas

¿Es una buena prueba?


Buenas pruebas

¿Y sobre los nombres?

Caso de
prueba

http://stackoverflow.com/questions/155436/unit-test-naming-
best-practices
Buenas pruebas

1
Buenas pruebas

2
Buenas pruebas

3
Actividades

• Las herramientas xUnit


utilizan el patrón Build –
Operate - Check.
• ¿Puedes identificar
cada una de estas tres
partes en los tres
ejemplos anteriores?

Actividades
46
Para terminar

47
Enlaces y referencias

• Para saber más de JUnit


http://junit.sourceforge.net/
• Introducción a las pruebas del
software con ejemplos en Python
http://software-carpentry.org/4_0/test/

http://www.dirigidoportests.com/el-libro

Para saber más


48

También podría gustarte