Post on 12-Jul-2015
Desarrollo Dirigido por Ejemplos
Concretar en lugar de Abstraer
Carlos Blé Jurado
Marzo 2010 – Universitat Jaume I
www.carlosble.com
Nada más salir de la facultad...
“¡Podemos programar lo que sea!!”
“¡Despues de la carrerasaco adelantecualquier cosa!!!!!!”
Y va la experiencia y dice...
“así que... podeishacer lo que sea...”
“¡y quien lo va a mantener!!!!!!”
No te torturescon códigoimposible ni se lo hagas atus compañeros
No juegues con el dinero del cliente. Dale soluciones, nomás problemas
Tranquilo majete: haz las cosas bien
¿Y eso como se hace?
“...pero, no veas que broncas tienen con los usuarios...”
“...tengo uncolega en unaempresa dondesaben unmontón deingeniería delsoftware...”
¡¡¡¡¡¡¡AL REVES!!!!!!!!
A lo mejor es que los estamos haciendo...
Afrontemos los problemas del software
Tiene defectos(malditos bugs)
No hace lo que el cliente
necesita que haga (hace otros rollitos que están que te
cagas y tal)
Es muy caro de mantener y(más vale que el cliente
evolucionar no pida cambios)
Los métodos tradicionales no están resultando eficajes para evitarlos
Escuchar (o peor, leer)
Transcribir (volcar los requisitos en 500 páginas)
Abstraer (intentar resumir las 500 páginas en conceptos)
Modelar (diagramas de clases, etc)
Implementar (a picar código)
Probar (tres días usando la app a mano)
Entregar (cobrar y salir pitando)
En realidad hay aun más problemas
El mundo de la informática es complicado:
Os recomiendo: Informática Profesionalde Roberto Canales
Pero en el lado técnico, al menos, podemos ser ágiles
for i in iteration:
Escuchar (de primera mano, del cliente)
Transcribir (escribimos historias de usuario)
Concretar (escribir criterios/tests de aceptación)
Probar/Implementar (primero la prueba, ¡cobarde!)
Entregar (una entrega cada 3 semanas y volver al inicio)
La rueda ágil
Concretando: TDD
ATDD + TDD
ATDD
Historias de Usuario que contienen una lista de ejemplos.
Los ejemplos son el puente que une a técnicos y usuarios/clientes
Eliminan la ambigüedad
Escaner de un tpv:
Ejemplo de ejemplo :-)
40x20+8x20x1.5+8x20x2
Ejemplo de ejemplo :-)
Ya sabemos lo que quiere el cliente.
Ahora vamos a pensar cómo queremos diseñar e implementar el software
Y vamos a implementarlo
Escribimos un test (JUnit, NUnit, PyUnit...)
Lo hacemos funcionar lo antes posible (implementamos el código de producción)
Refactorizamos el código
Un test unitario
Cada cosa tiene su ámbito
ATDD – ¿Qué quiere el cliente?
TDD – ¿Cómo lo implementamos?
¿Qué ventajas tiene A/TDD?
Tenemos un producto (parcial) en producción desde las primeras semanas
No se implementa lo que no será usado (YAGNI)
Minimizamos el número de defectosConseguimos código más fácil de mantener
Código preparado para cambiarAumenta la confianza del equipo
Aumenta la productividadDetectamos antes las prioridades del cliente
¿Cómo aprender todo esto?
Hay un tipo por ahí que imparte cursosHay un libro en castellano sobre el temaHay una comunidad de habla hispanaHay toneladas de herramientas libres¿Tienes ganas?
Just do it!!!
dirigidoPorTests.com
Agile-spain.com
carlosble.com
Tambien
estamos
en Facebook!: