Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Test Driven Development ¿Qué es?
Primero escribimos un caso de prueba y solo
después implementamos el código necesario para
que el caso de prueba se pase con exito
Las pruebas se preparan antes de comenzar a
escribir el código
Buenas Practicas
Ventajas
Al escribir primero los casos de prueba, definimos
de manera formal los requisitos que esperamos
que cumpla nuestra aplicación.
Pensamos como va a funcionar un trozo que
todavía no existe, adelantando posibles problemas
de diseño.
Perder miedo a realizar cambios en el código, ya
que cada vez que realicemos un cambio tenemos
una serie de testigos para localizar el error, los
tests.
Buenas Practicas
Desventajas
Desconocimiento de como hacer tests
Cambio de mentalidad del programador
Falta de formación
Buenas Practicas
Ciclo de construcción de software
Pasos
Agregar un nuevo caso de prueba
Ejecutar los casos de prueba (fallarán)
Realizar los cambios en la implementación para
pasar los casos de prueba
Volver a pasar los casos de prueba (Si todo ha
ido bien, se pasarán)
Refactorizar el código para mejorar el diseño
Volver a pasar los casos de prueba.
Buenas Practicas
Ciclo de construcción de software
Este ciclo debe ser constante
De esta manera se podrá obtener una cultura de
testing en el equipo de desarrollo
De esta manera se perderá el ”miedo” a realizar
cambios en el código
Mejoraremos en cada iteración la calidad del
código
Buenas Practicas
¿Qué es?
Es un framework sencillo para escribir y ejecutar
tests automatizados
Página principal : http://www.junit.org/
Es el framework de testeo más utilizado en Java.
Ya van por la versión 4.8.1
Junit
Ventajas
Sencillo de utilizar.
Flexible. Se puede utilizar o mediante anotaciones
o mediante herencia de clases.
Adoptado por la mayoría de IDE's
Desde sus inicios ha tenido sus propias
consolas de ejecución dentro de Eclipse y
Netbeans
Además posee su propio entorno gráfico para
ejecutar tests sin necesidad de un IDE.
Junit
Junit y TDD
Durante la charla se irá realizando una serie de
casos aplicando TDD utilizando Junit como
herramienta de testeo de la aplicación.
Junit
¿Como crear un test ?
Heredando TestCase
Utilizando Anotaciones
Junit
Elementos de TestCase
Métodos testXXX
Es donde implementaremos el código que
testee la lógica que queramos comprobar
Junit
Elementos de TestCase
Metodos auxiliares
setUp()
Sirve para inicializar parte del código que no
queramos repetir en todos los test. Se ejecuta
una vez antes de cada test
tearDown():
Metodo para liberar recursos una vez el test haya
terminado. Se ejecuta una vez al final de cada
test.
Junit
Elementos de TestCase
Métodos estáticos assertXXX
(assertTrue,assertEquals...)
Sirven para realizar las comprobaciones, si la
comprobación que hace ese método no es la
que se esperaba el test no finaliza con exito.
Junit
Creando un test con TestCase
Creamos una clase que herede de
junit.framework.TestCase
Creamos tantos métodos testXXX como casos de
uso queramos testear.
JUnit
Ejecución de tests
Dentro de Eclipse
Nos situamos encima de la clase y pulsamos
sobre runAs → Junit Test
Nos aparecerá una consola de ejecución de
test que nos informará del estado de los tests.
Junit
Ejecución de tests
Desde maven
Vamos al directorio del proyecto a través de
una consola y ejecutamos mvn test
Si se tiene instalado el plugin de Maven2 de
Eclipse situarse sobre la carpeta del proyecto y
con botón derecho pulsar runAs → Maven test
Junit
Utilizacion de anotaciones
Ventajas
Version 4.5 y superiores
Flexibiliza la creación de los tests
No hay que seguir la convención de nombres
testXXX
Tampoco hay que seguir la convención de los
métodos setUp() y tearDown()
Junit
Utilización de anotaciones
Desventajas
Los métodos assertXXX deben llamarse a
través del nombre de la clase
TestCase.assertXXX
Junit
Utilización de anotaciones
@Test : sustituye a la convención de métodos
testXXX. Ahora todo método que se quiera testear
debe llevar la anotación @Test
@Before: sustituye a la convención del método
setUp()
@After: sustituye a la convención del método
tearDown()
Junit
Ejemplo: Creación de un Test con anotaciones
Utilizamos un método para inicializar MiServicio
Utilizamos un método para asignar null a la
instancia de MiServicio
Utilizamos un método para testear que el método
getMensaje() del objeto MiServicio nos devuelve
”Mensaje para mi”
Junit
Ejemplo: creación de un Test con anotaciones
Buenas Practicas
Una serie de practicas que hacen el desarrollo de software
más eficiente y menos propenso al error. Entre otras:
TDD
Conocimiento avanzado del lenguaje
Aplicación de patrones de diseño
Otras metodologías ágiles
Buenas Practicas
Conocimiento avanzado
Buenas Practicas
Crear y destruir objetos
Crear factorias para crear objetos. AbstractFactory
Considerar utilizar el patrón Builder para la creación de objetos
complejos.
Buenas Practicas
Métodos comunes a todos los objetos
Como vimos anteriormente es importante tener un conocimiento preciso de los
siguientes métodos, sobre todo si estamos manejando contenedores de objetos:
equals()
hashCode()
toString()
También el uso del interfaz Comparable cuando tratabamos un SortedSet o un
SortedMap
Buenas Practicas
Utilización de interfaces
Siempre que se pueda el uso de interfaces nos permitirá reducir el nivel de
acoplamiento entre componentes de una aplicación.
Buenas Practicas
Conocimiento avanzado - Genericos
Buenas Practicas
Genericos
Nacen con Java 1.5
Puedes crear clases-plantilla y favorecer soluciones ”Genericas”
Puedes crear contenedores de objetos de un tipo determinado.
Evitan que se pueda agregar a un contenedor de objetos de un tipo
objetos de otro tipo diferente.
Muy utiles pero poco explotados
Buenas Practicas
Utiliza los genéricos en tus contenedores
Anteriormente se podía mezclar por error varios
tipos de objetos en el mismo contenedor.
Buenas Practicas
Utiliza los genéricos en tus contenedores
Ahora si intentamos introducir un tipo para el que no ha sido creado el
contenedor nos fallará en tiempo de compilación.
Reducimos el código a la hora de recorrer el contenedor
Buenas Practicas
Tipos enumerados
Buenas Practicas
Tipos enumerados
Agregados en java 1.5
Es un tipo cuyos valores consisten en unas constantes definidas.
Antes de los Enumerados había que crear variables constantes.
Favorecen el tipado fuerte
Buenas Practicas
Tipos Enumerados
Antes había que utilizar constantes estaticas, aun asi podiamos equivocarnos a
la hora de asignar valor.
Ahora los tipos enumerados son más descriptivos. Y son mucho más seguros.
Buenas Practicas
Métodos
Buenas Practicas
Métodos
Escoge bien el nombre de los métodos. Deben ser suficientemente
descriptivos
Evitar métodos con muchos parametros. Es mejor encapsular los
parametros en un objeto.
Buenas Practicas
Métodos
Comprueba la validez de los parametros
Puedes lanzar excepciones en el caso de que no se cumpla alguna de las
condiciones de los parametros.
Métodos
Devuelve arrays o colecciones vacias, no nulls.
De esta manera evitamos tener que comprobar si se han inicializado.
Buenas Practicas
Métodos
COMENTARIOS
No todo el mundo tiene que saber a primera vista que
hace el método
Sobre todo deben comentarse aquellos métodos que
formen parte del nucleo del API.
Métodos de los interfaces, clases abstractas.
Buenas Practicas
General
Buenas Practicas
Practicas generales
Preferir los bucles for-each a los bucles tradicionales. Los nuevos bucles desde
la versión 1.5 son menos proclives a error y además necesitan menos
codificación.
Versión nueva
Versión antigua
Buenas Practicas
Practicas generales
Utilizar las variables primitivas siempre que se pueda.
Aunque poco el Autoboxing reduce el rendimiento por
pasar de primitiva a Wrapper.
Además mientras que al comparar dos primitivas se
utilizará == con dos objetos wrapper lo normal es que se
utilice equals()
Buenas Practicas
Evitar cadenas de texto donde sean más
apropiadas otros tipos.
Son malas sustitutas para los tipos enumerados
Son malas sustitutas para los tipos agregados
Buenas Practicas
Eficiencia en la concatenación de cadenas
de caracteres:
Utilizando la concatenación de strings
repetidamente requiere bastantes recursos.
Utilizar siempre que se pueda StringBilder