Download Ejercicios

Document related concepts
no text concepts found
Transcript
Sacándole Partido a JUnit
Módulo 1. Introducción a las Pruebas
Guía pedagógica.

Seleccione los ejercicios que consideres más interesantes o que más puedan aportarte,
resuélvelos y envía tus soluciones a tu tutor para que los corrija. Puedes enviar las
soluciones una a una o todas juntas.

Los ejercicios no se evalúan para la nota del curso, por lo que puedes enviar partes
inconclusas o preguntar todas las dudas que tengas.

Puedes resolver los ejercicios de cualquier manera que consideres adecuada,
escribiendo código, explicando en un texto cómo lo resolvería, etc.

Además de este documento, tienes otro con las soluciones de algunos ejercicios. Si te
quedas atascado o no sabes cómo empezar consúltalo.

Pídele a tus tutores más ejercicios o, incluso, plantea tus propios ejercicios.

Consulta tus dudas y publica tus soluciones en los foros.
Algunos ejercicios se ha tomado la web Solveet (http://www.solveet.com/). Puedes buscar allí
más ejercicios (o en otras webs de ejercicios), resolverlos y mandárselos a tu tutor para que los
corrijas.
Ejercicio 01.
A continuación se muestra el método contains de la clase Array del framework de desarrollo
de videojuegos LibGDX. Esta clase funciona de manera muy similar a una justa (por ejemplo la
interfaz de Java java.util.List)
1
Indique el número de pruebas a realizar utilizando la técnica de análisis de caminos y la
técnica de particiones equivalentes para probar este método.
Ejercicio 02.
Contamos con el siguiente método para determinar el tipo de un triángulo a partir de las
longitudes de sus tres lados.
Los posibles resultados de este método son: Equilátero (tres lados iguales), Isósceles
(dos lados iguales), Escaleno (tres lados distintos) y NoEsUnTingulo si los lados no forman un
triángulo.
Indique los valores de entrada de los parámetros y el resultado esperado para las
pruebas que realizaría pare verificar el correcto funcionamiento de este método.
Ejercicio 03.
El siguiente código muestra para calcular la potencia de dos de cualquier número con cualquier
cantidad de cifras. Para evitar desbordamientos de tipos básicos, se utiliza una lista para cada
cifra y se gestiona a mano los acarreos.
2
A la vista del código anterior. ¿Cuáles serían las pruebas que haría? El objetivo es
buscar el número mínimo de pruebas que sea relevante, es decir, que prueben condiciones
distintas..
Esta
solución
está
publicada
en
Solveet
en
el
siguiente
enlace:
http://www.solveet.com/exercises/Potencias-de-Dos/30/solution-1315
Ejercicio 04.
Vamos a definir más pruebas utilizando la interfaz Set definida en Java. Esta interfaz define el
método HashSet::removeAll(Collection<?> c):boolean para borrar todos los elementos del
conjunto que estén en la colección c.
3
A partir de su código fuente (definido en la clase java.util.AbstractSet), y que se
muestra a continuación, diseñe un conjunto de pruebas aplicando la técnica de cobertura de
decisiones.
Extra: Puede resolver este mismo ejercicio con otros métodos de otros contratos para tipos de
datos, bien tomando como referencia la propia definición del contrato, bien tomando como
referencia el código fuente de la implementación si está disponible.
Ejercicio 05.
Habitualmente, cuando en un Map o diccionario o tabla hash se intenta añadir un elemento
con una clave que ya tiene asociado un elemento, el antiguo elemento se descarta y se
almacena el nuevo. A partir de la implementación de un Map, implemente una clase con un
comportamiento similar, llamada LazyMap que no remplace un elemento antiguo con uno
nuevo.
Escriba un conjunto de pruebas para garantizar que el nuevo tipo funciona
correctamente. ¿Qué métodos cree que son necesarios probar y cuáles no son necesarios?
Ejercicio 06.
Se desea diseñar un fragmento de código que permita calcular números aleatorios entre un
rango de dos números, de manera que dichos números aleatorios nunca se repitan. Por
4
ejemplo, dado el rango [1, 6), los tres primeros números podrían ser 4, 2 y 3. Los sucesivos
números tendrían que ser distintos a todos los anteriores.
Resuelva las siguientes preguntas.
a) ¿Cómo diseñaría el código? Por ejemplo, utilizaría un método, una clase, usaría
algún tipo de dato o interfaz proporcionada por Java, etc.
b) ¿Cómo podría probar el diseño anterior? ¿De qué manera afectaría trabajar con
resultados que se generan automáticamente?
c) Escriba una posible implementación y al menos un caso de prueba
Ejercicio 07.
Para poner un texto en colores en varios foro de internet se usan estas etiquetas [color =”x”]
[/color] siendo x el nombre del color. La lista de colores posibles es la siguiente: {red, blue,
yellow, White, black, magenta, cyan}
Escriba un código y su conjunto de pruebas asociado, que acepte un texto y coloque
cada letra de un color distinto.
Ejercicio 08.
Tenemos una mina de diamantes, representada mediante una cadena de caracteres '<' y '>' de
cualquier longitud y orden, devolver el número de diamantes que existen en la mina. Un
diamante está formado por el símbolo '<' seguido de '>', esto es "<>". Hay que tener en cuenta
que cada vez que se extrae un diamante podría formarse otro.
Ejemplos:
Mina
(Entrada)
#Diamantes
(Salida)
Explicación
""
0
Mina vacía por tanto 0 diamantes
"<>"
1
Mina con un único diamante
"<<>>"
2
Mina con un diamante entero y otro que se forma al extraer
el primero
"<><<>><<"
3
Mina con dos diamantes y un tercero que se forma con la
extracción del segundo
5
Diseñe un conjunto de casos de prueba para este ejercicio. Una vez hecho envíe sus
resultados a su tutor y este le entregará una implementación de este ejercicio. Ejecute sus
pruebas con dicha implementación y conteste a la siguiente pregunta: ¿puede asegurar que
dicha implementación es correcta y que funcionará ante cualquier mina?
Ejercicio 09.
Se desea desarrollar un fragmento de código que reciba una lista de elementos y construya
tantas listas como elementos tenga la lista original. En cada lista faltará uno de los elementos
de la lista, de tal manera que el elemento que falta nunca s repetirá.
Por ejemplo, si se toma la lista {1, 2, 3} se generarán las siguientes tres listas: {2, 3}, {1,
3} y {1, 2}
Defina un conjunto de casos de prueba para el fragmento de código anterior.
Reconocimiento - CompartirIgual (by-sa)
Contacta con nosotros en [email protected]
6