5 buenas practicas

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

Upload: miguelangel-prieto

Post on 27-Jun-2015

280 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5 Buenas Practicas

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

Page 2: 5 Buenas Practicas

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.

Page 3: 5 Buenas Practicas

Buenas Practicas

Desventajas Desconocimiento de como hacer tests Cambio de mentalidad del programador Falta de formación

Page 4: 5 Buenas Practicas

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.

Page 5: 5 Buenas Practicas

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

Page 6: 5 Buenas Practicas

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

Page 7: 5 Buenas Practicas

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.

Page 8: 5 Buenas Practicas

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.

Page 9: 5 Buenas Practicas

Junit

¿Como crear un test ? Heredando TestCase Utilizando Anotaciones

Page 10: 5 Buenas Practicas

Junit

Elementos de TestCase Métodos testXXX

Es donde implementaremos el código que testee la lógica que queramos comprobar

Page 11: 5 Buenas Practicas

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.

Page 12: 5 Buenas Practicas

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.

Page 13: 5 Buenas Practicas

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.

Page 14: 5 Buenas Practicas

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.

Page 15: 5 Buenas Practicas

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

Page 16: 5 Buenas Practicas

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()

Page 17: 5 Buenas Practicas

Junit

Utilización de anotaciones Desventajas

Los métodos assertXXX deben llamarse a través del nombre de la clase TestCase.assertXXX

Page 18: 5 Buenas Practicas

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()

Page 19: 5 Buenas Practicas

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”

Page 20: 5 Buenas Practicas

Junit

Ejemplo: creación de un Test con anotaciones

Page 21: 5 Buenas Practicas

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

Page 22: 5 Buenas Practicas

Buenas Practicas

Conocimiento avanzado

Page 23: 5 Buenas Practicas

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.

Page 24: 5 Buenas Practicas

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

Page 25: 5 Buenas Practicas

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.

Page 26: 5 Buenas Practicas

Buenas Practicas

Conocimiento avanzado - Genericos

Page 27: 5 Buenas Practicas

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

Page 28: 5 Buenas Practicas

Buenas Practicas

Utiliza los genéricos en tus contenedores Anteriormente se podía mezclar por error varios

tipos de objetos en el mismo contenedor.

Page 29: 5 Buenas Practicas

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

Page 30: 5 Buenas Practicas

Buenas Practicas

Tipos enumerados

Page 31: 5 Buenas Practicas

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

Page 32: 5 Buenas Practicas

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.

Page 33: 5 Buenas Practicas

Buenas Practicas

Métodos

Page 34: 5 Buenas Practicas

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.

Page 35: 5 Buenas Practicas

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.

Page 36: 5 Buenas Practicas

Métodos Devuelve arrays o colecciones vacias, no nulls.

De esta manera evitamos tener que comprobar si se han inicializado.

Page 37: 5 Buenas Practicas

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.

Page 38: 5 Buenas Practicas

Buenas Practicas

General

Page 39: 5 Buenas Practicas

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

Page 40: 5 Buenas Practicas

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()

Page 41: 5 Buenas Practicas

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

Page 42: 5 Buenas Practicas

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