Mostrando las entradas con la etiqueta TDD. Mostrar todas las entradas
Mostrando las entradas con la etiqueta TDD. Mostrar todas las entradas

domingo, 13 de noviembre de 2016

Test Driven Development



El objetivo de todo programador debería ser el de generar Código Limpio que Funciona.

Existen numerosas razones para escribir Código Limpio que Funciona (CLQF), algunas de ellas son:

  • Generar CLQF es una forma predecible de desarrollar. Se puede saber cuando se termina el desarrollo y no nos preocupamos por un largo ciclo de depuración.
  • El CLQF nos da la oportunidad de aprender todas las lecciones que el código tiene que decirnos.
  • El CLQF brinda mejores oportunidades a los usuarios de nuestro software.
  • El CLQF permite que nosotros confiemos en nuestros compañeros y que ellos confíen en nosotros.
  • Cuando escribimos CLQF, nos sentimos mejor con nosotros mismos.


Hay muchas fuerzas que nos dificultan escribir CLQF, entonces ¿cómo podemos generar CLQF?.

Esta metodología (Test Driven Development - TDD) consiste en hacer que los tests automáticos sean los que rigen el desarrollo.  Para eso seguimos la siguiente reglas:
Escribir nuevo código sólo si tenemos un test automático que falla.
Eliminar la duplicación.

Aplicar esas 2 reglas imprimen el siguiente ritmo al proceso de desarrollo:
Rojo: Escribir un test que falle.
Verde: Hacer que el test funcione lo más rápidamente posible.  Podemos cometer cuantos pecados queramos en esta etapa ya que el objetivo es salirse del rojo cuanto antes.

Refactorizar: Eliminar toda la duplicación creada en el paso anterior.

Dejo link:
http://es.wikipedia.org/wiki/Tdd
http://en.wikipedia.org/wiki/Test_driven_development

domingo, 7 de agosto de 2016

Recursos sobre Pharo, un IDE para programar en Smalltalk


Pharo es una Ide para programar en smalltalk, es muy usada y se puede instalar en linux muy fácilmente.

Para instalarla en linux debes bajarla e instalar unas librerìas 32 bit, si lo se es feo, pero bue. Les dejo el link: http://pharo.org/gnu-linux-installation

Bueno, tambien se puede ejecutar en window o Mac (que nadie es perfecto) http://pharo.org/download

Además pueden obtener muchos recursos de la pagina de Pharo:  http://pharo.org/documentation

Y Aprovecho para dejarles un video de una persona programando en pharo con metodología TDD :


viernes, 8 de noviembre de 2013

viernes, 6 de septiembre de 2013

Webinar Gratuito sobre TDD Avanzado

Me llego un mail de la gente de 10Pines sobre una invitación a un Webinar sobre Tdd avanzado, parece muy bueno. Ya me inscribí!!

Les transcribo el mail:

Descripción:

Si te interesa saber cómo aplicar TDD en un sistema existente, acoplado con la base de datos y que parece imposible de testear, entonces este Webinar te ayudará a lograrlo.
Para ello utilizaremos como ejemplo concreto un sistema existente, e iremos transformándolo paso a paso, por medio de la aplicación sucesiva de refactorings, en una aplicación testeable y entendible.
¡No dejes de anotarte! El Webinar es gratis y te aseguramos que aprenderemos mucho.

Fecha:

  • Martes 10 de Septiembre, 2013 - 19 hrs (Argentina - GMT -3)

Objetivos:

  • Mostrar cómo convertir un sistema que parece imposible de testear en un sistema testeable
  • Mostrar cómo mejorar el diseño de una aplicación aplicando una serie de refactorings para lograrlo
  • Aplicar técnicas y heurísticas de diseño que nos permitirán detectar problemas de diseño y mejorarlo

Duración:

  • 1 hora

Pre-Requisitos:

  • Tener cierto conocimiento sobre TDD
  • Tener experiencia desarrollando aplicaciones 

Lenguaje de Programación:

  • Se utilizará Java para el ejemplo, sin embargo todo lo que se mostrará es aplicable a otros lenguajes como C#, Ruby, Phyton, Smalltalk, etc.
  • No es necesario conocer Java a la perfección para entender lo que veremos.

Inscripción

¿Cómo te podés anotar?: Completá el formulario de inscripción indicando tu nombre, empresa y datos de contacto. 
¿Tenés preguntas?: No dudes en comunicarte con nosotros.

domingo, 23 de diciembre de 2012

ATDD By Example


Le gente de InfoQ nos regalan un libro de TDD. Se preguntan porque la A, es de Acceptance

Recordemos que Acceptance Test Driven Development es una práctica que se logra teniendo una madurez utilizando TDD. ATDD dice que los criterios de aceptación pueden ser llevados a pruebas unitarias y de esta forma el proceso garantiza que el cliente dispone de un mecanismo automático para decidir si el software cumple con sus requisitos.

Con ATDD, el equipo de desarrollo tiene un objetivo específico satisfacer las pruebas de aceptación, que los mantienen continuamente dentro de lo que el cliente realmente quiere

Dejo el link:
http://www.infoq.com/articles/atdd-by-example-book

viernes, 1 de junio de 2012

RSpec

RSpec es una herramienta de test escrita en Ruby , con la posibilidad de escribir pruebas de usuario bajo el paradigma BDD (Behaviour-Driven Development) pero que es BDD? 

BDD es similar a TDD es una metodología en la cual se escriben los test primero y luego el código. La diferencia que con BDD se escriben los test describiendo una historia de usuario. 

Con RSpec podemos escribir nuestros test de forma extensible, utilizando mocks y de forma que quede auto documentado. RSpec  es open source



Dejo link:
http://rspec.info/
http://rubydoc.info/gems/rspec-core
http://rubydoc.info/gems/rspec-expectations
http://rubydoc.info/gems/rspec-mocks
http://rubydoc.info/gems/rspec-rails

viernes, 9 de septiembre de 2011

Mockito


El objetivo de una prueba unitaria es probar un solo objeto, pero en ciertas ocasiones las colaboraciones entre objetos tienen un acoplamiento alto por lo tanto no puedo probar un objeto sin llamar a otro. Es aquí donde los test se ensucian un poco, en especial si el objeto que deseamos testear depende de algún objeto “pesado” o que tenga interacción con algún otro sistema externo, servidor o base de datos. Por ejemplo testear un objeto que valide el nombre de usuario y la clave en un ldap.

Una estrategia de solución para este problema es usar objetos mocks, los objetos mocks son objetos “de mentira” que permiten simular otro objeto o entidad del sistema. Si vamos a la wikipedia podremos encontrar la siguiente definición:

En la programación orientada a objetos se llaman objetos simulados (pseudoobjetos, mock object, objetos de pega) a los objetos que imitan el comportamiento de objetos reales de una forma controlada. Se usan para probar a otros objetos en pruebas de unidad que esperan mensajes de una clase en particular para sus métodos, al igual que los diseñadores de autos usan un crash dummy cuando simulan un accidente.

En los test de unidad, los objetos simulados se usan para simular el comportamiento de objetos complejos cuando es imposible o impracticable usar al objeto real en la prueba. De paso resuelve el problema del caso de objetos interdependientes, que para probar el primero debe ser usado un objeto no probado aún, lo que invalida la prueba: los objetos simulados son muy simples de construir y devuelven un resultado determinado y de implementación directa, independientemente de los complejos procesos o interacciones que el objeto real pueda tener.
Existen diferentes frameworks en java para hacer mocks, easymock, mockito, etc. Vamos a utilizar mockito.

Mockito es un framework simple, fácil de usar para hacer objetos mocks en java. Tiene una interfaz simple  y natural.

Características:


  • Se pueden crear mocks de interfaces y clases concretas.
  • Verificación de invocaciones (cantidad exacta, al menos una vez, órden de invocación, etc.)
  • El stack trace se mantiene limpio, ya que los errores ocurren en los assert que se hagan (y no dentro del método bajo prueba).
  • Un API más clara para crear stubs y verificaciones.


Vamos a hacer un objeto mock con mockito:

//creamos el mock y el stub


ArrayList instance = mock(ArrayList.class);
doReturn("hola mundo").when(instance).get(0);
 
//ejecutamos la lógica a probar
instance.get(0);     
 
//verificamos que se hayan invocado los métodos
verify(instance).get(0)

Como se puede ver la api es clara y simula el lenguaje natural. En la primera linea creamos un objeto mock de la lista; luego indicamos que cuando se llame el método get con el parámetro 0 debe devolver “hola mundo”. Luego ejecutamos el método y luego se verifica si este método se corrió.

Para agregar este framework a nuestro proyecto maven es solo necesario agregar esta entrada en el pom:



    org.mockito
    mockito-all
    1.8.5

jueves, 8 de septiembre de 2011

Libros Gratuitos

Dejo dos libros gratuitos, el primero de un framework llamado node.js (muy recomendado) el otro sobre TDD.

 http://www.nodebeginner.org/index-es.html 
 http://www.dirigidoportests.com/el-libro 

 Que los disfruten!!

lunes, 18 de octubre de 2010

TDD Static vs. Dynamic

Interesante video sobre TDD, comparación entre Smalltalk y Java. Es interesante aunque no trabaje es serio con lenguaje débilmente tipado con sistemas mantenibles; pero esta bueno el video. Muy claro.






sábado, 20 de marzo de 2010

Borrar base de datos en test!!

Cuando hacemos test de DAOs, servicios o que tenga que interactuar con una base de datos es bueno usar una base de datos en memoria como HSQLDB.

El problema está en que cada test inserta datos en la base, lo que hace que el resultado de un test dependa de la ejecución de otro test; esto no es bueno.

Si trabajamos con base de datos en memoria y Spring lo que podríamos hacer es bajarla y volverla a subir usando: @DirtiesContext en cada uno de los test. @DirtiesContext es una anotación de spring que baja y sube el contexto. Esto es una solución, pero no la más optima los test van a demorar más dado que por cada test se baja y sube el contexto. La solución más óptima es borrar la base en cada test de este modo:

@After
public void tearDown() {
this.restoreEmptyDatabase();
}

private void restoreEmptyDatabase() {
LocalSessionFactoryBean sessionFactory = (LocalSessionFactoryBean) this.applicationContext
.getBean("&sessionFactory");
sessionFactory.dropDatabaseSchema();
sessionFactory.createDatabaseSchema();
}

Podríamos ponerlo en el After o Before es indistindo este método borrara la base por test.

viernes, 19 de marzo de 2010

Reflexiones sobre los problemas del desarrollo orientado a pruebas

Muy recomendable que lean el siguiente post:

http://agilizar.es/blog/11/03/2010/reflexiones-sobre-los-problemas-del-desarrollo-orientado-a-pruebas/

Publico este enlace dado que comparto en todo la opinión TDD no llego para solucionarnos TODOS nuestros problemas. Solo es una herramienta para mejorar nuestro código.

sábado, 12 de diciembre de 2009

Podcast de JavaHispano sobre pruebas automatizadas

Acabo de escuchar el último podcast de JavaHispano que va sobre
pruebas automatizadas y me ha parecido muy recomendable.



Alfredo Casado aporta comentarios excelentes y habla en primera
persona de TDD (no de oidas, como hacemos muchos)

Conclusiones en primera "lectura":
* automatizar las pruebas es más rentable que no hacerlo
* los principios FIRST son fundamentales para unas buenas pruebas
* que tu código sea testeable se consigue de entrada haciendo TDD
* aprender a hacer TDD es duro, pero como cualquier otra cosa en la
vida que merece la pena (es una inversión en tu carrera
independientemente de la elección del lenguaje)