Está en la página 1de 42

Buenas Practicas


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

También podría gustarte