SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
@carlosble

Carlos Ble

Para CITIUS,
Universidad de Santiago de Compostela
18 Febrero 2014
@carlosble

Hoy hablaremos de...

El vinagre,

en la dieta mediterránea
@carlosble

Era broma!
Nos os vayáis!
@carlosble

TDD y otras prácticas de XP

●

Profesionalidad

●

Calidad del software

●

Métodos de desarrollo
@carlosble

- ¿Quién es Carlos Blé?

- Yo he venido aquí
a hablar de mi libro
@carlosble

Los usuarios se merecen algo mejor porque...
●

No les entregamos lo que necesitan:
No nos entendemos con el cliente.

●

El software es defectuoso, provoca:
Pérdida de confianza, de datos, de tiempo
y de oportunidad frente a competidores.

●

El código es de mala calidad:
Difícil de entender y de mantener.

●

En el mejor caso mueren de éxito:
Nos cuesta horrores introducir cambios
de forma competitiva.
@carlosble

¿Aún ves las cosas así?

Cómo ven los usuarios
al programador

Cómo ve el programador
a los usuarios
@carlosble

¿Y esto por qué pasa?

Principios
Principios
Prácticas
Prácticas

No estamos bien entrenados

●

Valores
Valores

●

Falta el corage para decir: NO

●

●

No se dan las
condiciones adecuadas
El modelo industrial no funciona
en la fabricación de software
@carlosble

Kent Beck, Ward Cunningham
& amigos al rescate!

Courage, Feedback, Respect,
Simplicity, Communication
@carlosble

Veamos esto de la agilidad con un juego

The Marshmallow Challenge
– Gracias a @ydarias por habermelo enseñado
@carlosble

Lecciones aprendidas del juego
●

Prueba primero cobarde!

●

Hay que equivocarse y
aprender rápido...
minimizar riesgos !

●

Mejor entregar algo de valor
que nada!

●

●

Real como el software mismo

Considera los medios que tienes!
Considera el tiempo que tienes!

●

No hagas trampa! te pillarán!
@carlosble

Wikispeed: Test-first aplicado a un coche

“We then bought an emissions test machine and started developing and
iterating emissions systems in order to pass the test provided by the emissions
test machine. In this way, we started with a failing test (100g of CO2 per
100km driven). Of course, the test was failing as we didn’t have a car at all at
that point. We acquired a test fixture to let us quickly and inexpensively (time
and money, but most importantly for us low-frustration) check if the test was
passing” - http://wikispeed.org/2013/07/tdd-for-hardware/
@carlosble

TDD: Test Driven Development

TDD
TDD
no es
no es
testing !!
testing
@carlosble

Red: a valid email contains @ symbol
public class A_valid_email {
     @Test
     public void contains_the_AT_symbol(){
        assertTrue(isValidEmail(“test@test.com”));
     }
     private boolean isValidEmail(String email){
        // autogenerated method stub
        return false;
     }
}
@carlosble

Green: a valid email contains @ symbol
public class A_valid_email {
     @Test
     public void contains_the_AT_symbol(){
        assertTrue(isValidEmail(“test@test.com”));
     }
     private boolean isValidEmail(String email){
        return true;
     }
}
@carlosble

Refactor: extract class
public class A_valid_email {
     @Test
     public void contains_the_AT_symbol(){
        assertTrue(isValidEmail(“test@test.com”));
     }
     private boolean isValidEmail(String email){
        return new EmailValidator()
.isValidEmail(email);
     }
}
/////////////////////////////////////////////
public class EmailValidator {
     public boolean isValidEmail(String email){
          return true;
     }
}
@carlosble

Red: an invalid email misses the @ symbol
public class An_invalid_email {
     @Test
     public void misses_the_AT_symbol(){
        assertFalse(isValidEmail(“test.com”));
     }
     private boolean isValidEmail(String email){
        return new EmailValidator()
.isValidEmail(email);
     }
}
/////////////////////////////////////////////
public class EmailValidator {
     public boolean isValidEmail(String email){
          return true;
     }
}
@carlosble

Green: an invalid email misses the @ symbol
public class An_invalid_email {
     @Test
     public void misses_the_AT_symbol(){
        assertFalse(isValidEmail(“test.com”));
     }
     private boolean isValidEmail(String email){
        return new EmailValidator()
.isValidEmail(email);
     }
}
/////////////////////////////////////////////
public class EmailValidator {
     public boolean isValidEmail(String email){
          return email.contains(“@”);
     }
}
@carlosble

Refactor: extract base test class
public class EmailValidatorTests {
  EmailValidator validator;
     @Before
     public void setUp(){
        validator = new Validator();
     }
     protected boolean isValidEmail(String email){
        return validator.isValidEmail(email);
     }
}
/////////////////////////////////////////////
public class 
   A_valid_email extends EmailValidatorTests {…}
public class 
   An_invalid_email_extends EmailValidatorTests {…}
@carlosble

TDD es un método de desarrollo profesional
●

Evita la sobre-ingeniería

●

Garantiza un mínimo de calidad reproducible

●

Produce:
●

Código minimalista, testeable, modular

●

Completas baterías de tests

●

Evita problemas de regresión

●

Documenta el código de manera fiable
@carlosble

TDD fomenta los valores de XP

●

Nos aporta feedback rápido

●

Nos ganamos el respeto de los compañeros

●

Nos permite ser valientes antes cambios

●

Los tests comunican la intención del código

●

Desarrollamos la implementación más simple
@carlosble

¿TDD sin código limpio?, mejor estáte quiet@

¿Es

pio
lim

có
tu

o?
dig
@carlosble

¿Y la arquitectura? ¿Es todo emergente?

NO
I18n / l10n
●
Scalability
●
Fault tolerance
●
Security
●
Deployability
●
Traceability
●
Responsiveness
●
...
●
@carlosble

En la ULPGC ya llevan dos años enseñando TDD!

Estudiantes de la Universidad de Las Palmas
en el coding dojo de fin de curso - 2013
@carlosble

Los mejores resultados vienen,
cuando se trabaja en pares:

Pair Programming
●

●

●

El cuello de botella de los proyectos
NO es el teclado
Entre dos, a menudo escribimos menos
código... ¡y eso es muy bueno!
Dialogar y hablar de la solución antes
de implementarla, permite encontrar
mejores opciones.
@carlosble

Pair Programming: Lo que necesitas es amor
●

●

●

●

Hace falta empatía para que
tu compañer@ de lo mejor de
sí mism@
Es duro, no lo practiques
más de 4 o 5 horas al día
Es bueno rotar, cambiar
de pareja
Poneos cómodos: conectad
dos teclados a la
misma computadora.
Usad pantallas grandes o
varias en espejo.

Dios mio tengo miedo!
Ya no quiero
programar solo!
@carlosble

¿Cómo se aprende todo esto?
Practicando!
●

Simplemente practica y practica

●

Lee buenos libros:
●
●
●
●
●
●

Extreme Programming – Kent Beck
TDD by example – Kent Beck
Clean Code – Robert Martin
Refactoring – Martin Fowler
Test Driven – Lasse Koskela
Code Complete – Steve McConnell

…
●
Un buen curso acelera tu aprendizaje,
¡mañana tenemos uno!
●

(y la gente dice que es bueno)
@carlosble

Consejo: se siempre lo más profesional que sepas
●

No hagas lo que sabes que está mal hecho

●

Preocúpate por aprender qué está mal

●

Escribe el código tal como te gustaría encontrarlo

●

Cuando modifiques código, déjalo mejor de lo que
lo encontraste

●

Ponte en el lugar de tus clientes y pregúntate ¿me
contrataría a mi mismo o a mi equipo?
@carlosble

Videos vistos durante la sesion:
Douglas Crockford – Programming Style & Your Brain:
http://www.youtube.com/watch?v=taaEzHI9xyY
Robert C. Martin – Clean Coders Episode 1:
http://www.cleancoders.com
Password validator kata – Carlos Ble para iSQI.org
No disponible en la red, sólo para los cursos de TDD
@carlosble

¡Moitas grazas!

Weitere ähnliche Inhalte

Was ist angesagt?

Cómo trabajamos en Plastic SCM
Cómo trabajamos en Plastic SCMCómo trabajamos en Plastic SCM
Cómo trabajamos en Plastic SCM233 Grados de TI
 
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15Aitor Suso Gáceta
 
Refactoring to clean code
Refactoring to clean codeRefactoring to clean code
Refactoring to clean codeadrianeidelman
 
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)233 Grados de TI
 
TDD y Python
TDD y PythonTDD y Python
TDD y PythonJavier_J
 
XP - Pair Programming y TDD - en la práctica
XP - Pair Programming y TDD - en la prácticaXP - Pair Programming y TDD - en la práctica
XP - Pair Programming y TDD - en la prácticaSantiago Blanco
 
XP_PairProgramming_y_TDD
XP_PairProgramming_y_TDDXP_PairProgramming_y_TDD
XP_PairProgramming_y_TDDSantiago Blanco
 

Was ist angesagt? (11)

Cómo trabajamos en Plastic SCM
Cómo trabajamos en Plastic SCMCómo trabajamos en Plastic SCM
Cómo trabajamos en Plastic SCM
 
Tdd desde las_trincheras
Tdd desde las_trincherasTdd desde las_trincheras
Tdd desde las_trincheras
 
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15
 
Refactoring to clean code
Refactoring to clean codeRefactoring to clean code
Refactoring to clean code
 
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
Enrique Sánchez. Cómo ser un agile tester (y no morir intentándolo)
 
Testing, tipos y otros flamewars
Testing, tipos y otros flamewarsTesting, tipos y otros flamewars
Testing, tipos y otros flamewars
 
TDD y Python
TDD y PythonTDD y Python
TDD y Python
 
Workshop Calabash Appium
Workshop Calabash AppiumWorkshop Calabash Appium
Workshop Calabash Appium
 
XP - Pair Programming y TDD - en la práctica
XP - Pair Programming y TDD - en la prácticaXP - Pair Programming y TDD - en la práctica
XP - Pair Programming y TDD - en la práctica
 
Jugando con javascript
Jugando con javascriptJugando con javascript
Jugando con javascript
 
XP_PairProgramming_y_TDD
XP_PairProgramming_y_TDDXP_PairProgramming_y_TDD
XP_PairProgramming_y_TDD
 

Andere mochten auch

verde
verde verde
verde gatike
 
A mathematical model of two phase, (One phase is Newtonian and other is non-N...
A mathematical model of two phase, (One phase is Newtonian and other is non-N...A mathematical model of two phase, (One phase is Newtonian and other is non-N...
A mathematical model of two phase, (One phase is Newtonian and other is non-N...iosrjce
 
Problemilla
ProblemillaProblemilla
Problemillamaribel
 
C:\Fakepath\Centrais Termoelectricas
C:\Fakepath\Centrais TermoelectricasC:\Fakepath\Centrais Termoelectricas
C:\Fakepath\Centrais Termoelectricasformandoeisnt
 
ネットワーク 全体像
ネットワーク 全体像ネットワーク 全体像
ネットワーク 全体像Kenichi Takeuchi
 
メガバンク2回目2015
メガバンク2回目2015メガバンク2回目2015
メガバンク2回目2015Kaoru Matarai
 
Burocracia en la Atención Primaria del Reino Unido Dr J Vidal Alaball
Burocracia en la Atención Primaria del Reino Unido Dr J Vidal AlaballBurocracia en la Atención Primaria del Reino Unido Dr J Vidal Alaball
Burocracia en la Atención Primaria del Reino Unido Dr J Vidal AlaballJosep Vidal-Alaball
 
Financial Planner の為のITの活用
Financial Planner の為のITの活用Financial Planner の為のITの活用
Financial Planner の為のITの活用Kenichi Takeuchi
 

Andere mochten auch (12)

verde
verde verde
verde
 
A mathematical model of two phase, (One phase is Newtonian and other is non-N...
A mathematical model of two phase, (One phase is Newtonian and other is non-N...A mathematical model of two phase, (One phase is Newtonian and other is non-N...
A mathematical model of two phase, (One phase is Newtonian and other is non-N...
 
Problemilla
ProblemillaProblemilla
Problemilla
 
C:\Fakepath\Centrais Termoelectricas
C:\Fakepath\Centrais TermoelectricasC:\Fakepath\Centrais Termoelectricas
C:\Fakepath\Centrais Termoelectricas
 
ネットワーク 全体像
ネットワーク 全体像ネットワーク 全体像
ネットワーク 全体像
 
メガバンク2回目2015
メガバンク2回目2015メガバンク2回目2015
メガバンク2回目2015
 
Practica 2
Practica 2Practica 2
Practica 2
 
Prova slide
Prova slideProva slide
Prova slide
 
Burocracia en la Atención Primaria del Reino Unido Dr J Vidal Alaball
Burocracia en la Atención Primaria del Reino Unido Dr J Vidal AlaballBurocracia en la Atención Primaria del Reino Unido Dr J Vidal Alaball
Burocracia en la Atención Primaria del Reino Unido Dr J Vidal Alaball
 
Financial Planner の為のITの活用
Financial Planner の為のITの活用Financial Planner の為のITの活用
Financial Planner の為のITの活用
 
SB 090213
SB 090213SB 090213
SB 090213
 
Handbemalung
HandbemalungHandbemalung
Handbemalung
 

Ähnlich wie Introduccion a TDD y XP en la Universidad de Santiago de Compostela

"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturinowebcat
 
Introducción al Test-Driven Development (TDD) por Eric Mignot
Introducción al Test-Driven Development (TDD) por Eric MignotIntroducción al Test-Driven Development (TDD) por Eric Mignot
Introducción al Test-Driven Development (TDD) por Eric MignotPablo Lischinsky
 
Improving as a developer through code reviews
Improving as a developer through code reviewsImproving as a developer through code reviews
Improving as a developer through code reviewsAnallely Olivares
 
Introducción a Programa-me - Concurso español de programacion
Introducción a Programa-me - Concurso español de programacionIntroducción a Programa-me - Concurso español de programacion
Introducción a Programa-me - Concurso español de programacionJosé Ráez Rodríguez
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010Carlos Ble
 
Introducción a Programa-me - Concurso español de programacion (actualizado)
Introducción a Programa-me - Concurso español de programacion (actualizado) Introducción a Programa-me - Concurso español de programacion (actualizado)
Introducción a Programa-me - Concurso español de programacion (actualizado) José Ráez Rodríguez
 
Presentación Modelo sistemático para testeo con usuarios en Startups
Presentación Modelo sistemático para testeo con usuarios en StartupsPresentación Modelo sistemático para testeo con usuarios en Startups
Presentación Modelo sistemático para testeo con usuarios en StartupsGustavo Soto Miño
 
Modelo sistemático de testeo con usuarios para startups
Modelo sistemático de testeo con usuarios para startupsModelo sistemático de testeo con usuarios para startups
Modelo sistemático de testeo con usuarios para startupsJuan Paulo Madriaza
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
GWJ2019 Capital - Patrones de fracaso
GWJ2019 Capital - Patrones de fracasoGWJ2019 Capital - Patrones de fracaso
GWJ2019 Capital - Patrones de fracasoGuillermo Averbuj
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberSoftware Guru
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOnacho mascort
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd introfperezplain
 
Metodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaMetodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaManuel Rubio
 
Curso UX Tenerife (No maltrates a tus usuarios) FG ULL - Presentación
Curso UX Tenerife (No maltrates a tus usuarios) FG ULL - PresentaciónCurso UX Tenerife (No maltrates a tus usuarios) FG ULL - Presentación
Curso UX Tenerife (No maltrates a tus usuarios) FG ULL - PresentaciónRomén Rodríguez-Gil
 
Extreme programming (1)
Extreme programming (1)Extreme programming (1)
Extreme programming (1)Enrique Polo
 

Ähnlich wie Introduccion a TDD y XP en la Universidad de Santiago de Compostela (20)

"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino
 
Introducción al Test-Driven Development (TDD) por Eric Mignot
Introducción al Test-Driven Development (TDD) por Eric MignotIntroducción al Test-Driven Development (TDD) por Eric Mignot
Introducción al Test-Driven Development (TDD) por Eric Mignot
 
Improving as a developer through code reviews
Improving as a developer through code reviewsImproving as a developer through code reviews
Improving as a developer through code reviews
 
Introducción a Programa-me - Concurso español de programacion
Introducción a Programa-me - Concurso español de programacionIntroducción a Programa-me - Concurso español de programacion
Introducción a Programa-me - Concurso español de programacion
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010
 
Introducción a Programa-me - Concurso español de programacion (actualizado)
Introducción a Programa-me - Concurso español de programacion (actualizado) Introducción a Programa-me - Concurso español de programacion (actualizado)
Introducción a Programa-me - Concurso español de programacion (actualizado)
 
Presentación Modelo sistemático para testeo con usuarios en Startups
Presentación Modelo sistemático para testeo con usuarios en StartupsPresentación Modelo sistemático para testeo con usuarios en Startups
Presentación Modelo sistemático para testeo con usuarios en Startups
 
Modelo sistemático de testeo con usuarios para startups
Modelo sistemático de testeo con usuarios para startupsModelo sistemático de testeo con usuarios para startups
Modelo sistemático de testeo con usuarios para startups
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
Frontend Developer
Frontend DeveloperFrontend Developer
Frontend Developer
 
GWJ2019 Capital - Patrones de fracaso
GWJ2019 Capital - Patrones de fracasoGWJ2019 Capital - Patrones de fracaso
GWJ2019 Capital - Patrones de fracaso
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
 
Qualitytest
QualitytestQualitytest
Qualitytest
 
Valores y prácticas XP
Valores y prácticas XPValores y prácticas XP
Valores y prácticas XP
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd intro
 
Metodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaMetodologías Ágiles en la Práctica
Metodologías Ágiles en la Práctica
 
Xp
XpXp
Xp
 
Curso UX Tenerife (No maltrates a tus usuarios) FG ULL - Presentación
Curso UX Tenerife (No maltrates a tus usuarios) FG ULL - PresentaciónCurso UX Tenerife (No maltrates a tus usuarios) FG ULL - Presentación
Curso UX Tenerife (No maltrates a tus usuarios) FG ULL - Presentación
 
Extreme programming (1)
Extreme programming (1)Extreme programming (1)
Extreme programming (1)
 

Kürzlich hochgeladen

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 

Kürzlich hochgeladen (12)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 

Introduccion a TDD y XP en la Universidad de Santiago de Compostela

  • 1. @carlosble Carlos Ble Para CITIUS, Universidad de Santiago de Compostela 18 Febrero 2014
  • 2. @carlosble Hoy hablaremos de... El vinagre, en la dieta mediterránea
  • 4. @carlosble TDD y otras prácticas de XP ● Profesionalidad ● Calidad del software ● Métodos de desarrollo
  • 5. @carlosble - ¿Quién es Carlos Blé? - Yo he venido aquí a hablar de mi libro
  • 6. @carlosble Los usuarios se merecen algo mejor porque... ● No les entregamos lo que necesitan: No nos entendemos con el cliente. ● El software es defectuoso, provoca: Pérdida de confianza, de datos, de tiempo y de oportunidad frente a competidores. ● El código es de mala calidad: Difícil de entender y de mantener. ● En el mejor caso mueren de éxito: Nos cuesta horrores introducir cambios de forma competitiva.
  • 7. @carlosble ¿Aún ves las cosas así? Cómo ven los usuarios al programador Cómo ve el programador a los usuarios
  • 8. @carlosble ¿Y esto por qué pasa? Principios Principios Prácticas Prácticas No estamos bien entrenados ● Valores Valores ● Falta el corage para decir: NO ● ● No se dan las condiciones adecuadas El modelo industrial no funciona en la fabricación de software
  • 9. @carlosble Kent Beck, Ward Cunningham & amigos al rescate! Courage, Feedback, Respect, Simplicity, Communication
  • 10. @carlosble Veamos esto de la agilidad con un juego The Marshmallow Challenge – Gracias a @ydarias por habermelo enseñado
  • 11. @carlosble Lecciones aprendidas del juego ● Prueba primero cobarde! ● Hay que equivocarse y aprender rápido... minimizar riesgos ! ● Mejor entregar algo de valor que nada! ● ● Real como el software mismo Considera los medios que tienes! Considera el tiempo que tienes! ● No hagas trampa! te pillarán!
  • 12. @carlosble Wikispeed: Test-first aplicado a un coche “We then bought an emissions test machine and started developing and iterating emissions systems in order to pass the test provided by the emissions test machine. In this way, we started with a failing test (100g of CO2 per 100km driven). Of course, the test was failing as we didn’t have a car at all at that point. We acquired a test fixture to let us quickly and inexpensively (time and money, but most importantly for us low-frustration) check if the test was passing” - http://wikispeed.org/2013/07/tdd-for-hardware/
  • 13. @carlosble TDD: Test Driven Development TDD TDD no es no es testing !! testing
  • 14. @carlosble Red: a valid email contains @ symbol public class A_valid_email {      @Test      public void contains_the_AT_symbol(){         assertTrue(isValidEmail(“test@test.com”));      }      private boolean isValidEmail(String email){         // autogenerated method stub         return false;      } }
  • 15. @carlosble Green: a valid email contains @ symbol public class A_valid_email {      @Test      public void contains_the_AT_symbol(){         assertTrue(isValidEmail(“test@test.com”));      }      private boolean isValidEmail(String email){         return true;      } }
  • 17. @carlosble Red: an invalid email misses the @ symbol public class An_invalid_email {      @Test      public void misses_the_AT_symbol(){         assertFalse(isValidEmail(“test.com”));      }      private boolean isValidEmail(String email){         return new EmailValidator() .isValidEmail(email);      } } ///////////////////////////////////////////// public class EmailValidator {      public boolean isValidEmail(String email){           return true;      } }
  • 18. @carlosble Green: an invalid email misses the @ symbol public class An_invalid_email {      @Test      public void misses_the_AT_symbol(){         assertFalse(isValidEmail(“test.com”));      }      private boolean isValidEmail(String email){         return new EmailValidator() .isValidEmail(email);      } } ///////////////////////////////////////////// public class EmailValidator {      public boolean isValidEmail(String email){           return email.contains(“@”);      } }
  • 19. @carlosble Refactor: extract base test class public class EmailValidatorTests {   EmailValidator validator;      @Before      public void setUp(){         validator = new Validator();      }      protected boolean isValidEmail(String email){         return validator.isValidEmail(email);      } } ///////////////////////////////////////////// public class     A_valid_email extends EmailValidatorTests {…} public class     An_invalid_email_extends EmailValidatorTests {…}
  • 20. @carlosble TDD es un método de desarrollo profesional ● Evita la sobre-ingeniería ● Garantiza un mínimo de calidad reproducible ● Produce: ● Código minimalista, testeable, modular ● Completas baterías de tests ● Evita problemas de regresión ● Documenta el código de manera fiable
  • 21. @carlosble TDD fomenta los valores de XP ● Nos aporta feedback rápido ● Nos ganamos el respeto de los compañeros ● Nos permite ser valientes antes cambios ● Los tests comunican la intención del código ● Desarrollamos la implementación más simple
  • 22. @carlosble ¿TDD sin código limpio?, mejor estáte quiet@ ¿Es pio lim có tu o? dig
  • 23. @carlosble ¿Y la arquitectura? ¿Es todo emergente? NO I18n / l10n ● Scalability ● Fault tolerance ● Security ● Deployability ● Traceability ● Responsiveness ● ... ●
  • 24. @carlosble En la ULPGC ya llevan dos años enseñando TDD! Estudiantes de la Universidad de Las Palmas en el coding dojo de fin de curso - 2013
  • 25. @carlosble Los mejores resultados vienen, cuando se trabaja en pares: Pair Programming ● ● ● El cuello de botella de los proyectos NO es el teclado Entre dos, a menudo escribimos menos código... ¡y eso es muy bueno! Dialogar y hablar de la solución antes de implementarla, permite encontrar mejores opciones.
  • 26. @carlosble Pair Programming: Lo que necesitas es amor ● ● ● ● Hace falta empatía para que tu compañer@ de lo mejor de sí mism@ Es duro, no lo practiques más de 4 o 5 horas al día Es bueno rotar, cambiar de pareja Poneos cómodos: conectad dos teclados a la misma computadora. Usad pantallas grandes o varias en espejo. Dios mio tengo miedo! Ya no quiero programar solo!
  • 27. @carlosble ¿Cómo se aprende todo esto? Practicando! ● Simplemente practica y practica ● Lee buenos libros: ● ● ● ● ● ● Extreme Programming – Kent Beck TDD by example – Kent Beck Clean Code – Robert Martin Refactoring – Martin Fowler Test Driven – Lasse Koskela Code Complete – Steve McConnell … ● Un buen curso acelera tu aprendizaje, ¡mañana tenemos uno! ● (y la gente dice que es bueno)
  • 28. @carlosble Consejo: se siempre lo más profesional que sepas ● No hagas lo que sabes que está mal hecho ● Preocúpate por aprender qué está mal ● Escribe el código tal como te gustaría encontrarlo ● Cuando modifiques código, déjalo mejor de lo que lo encontraste ● Ponte en el lugar de tus clientes y pregúntate ¿me contrataría a mi mismo o a mi equipo?
  • 29. @carlosble Videos vistos durante la sesion: Douglas Crockford – Programming Style & Your Brain: http://www.youtube.com/watch?v=taaEzHI9xyY Robert C. Martin – Clean Coders Episode 1: http://www.cleancoders.com Password validator kata – Carlos Ble para iSQI.org No disponible en la red, sólo para los cursos de TDD