SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Artesanía de Software y
Desarrollo Dirigido por Pruebas
¿QUÉ ES LA ARTESANÍA DE
      SOFTWARE
Manifiesto por la Artesanía de Software
   Como aspirantes a artesanos de software, estamos elevando el nivel
    de desarrollo de software profesional practicándolo y ayudando a
   otros a aprenderlo. A través de este trabajo hemos llegado a valorar:

• No sólo software que funciona,      • sino también el software bien
                                        diseñado
• No sólo responder al cambio,        • pero también agregar valor de
                                        forma sostenida
• No sólo los individuos y las        • sino también una comunidad de
  interacciones,                        profesionales
• No sólo la colaboración con los     • sino también de asociaciones
  clientes,                             productivas
     Es decir, en la búsqueda de los elementos de la izquierda hemos
     encontrado que los elementos de la derecha son indispensables.
¿Qué es la Artesanía de Software?
• Es acerca de crear conciencia de lo que está mal con
  el actual estado de la práctica.
• Es acerca de hacer el mejor trabajo posible.
• Comprometerse con nuestra profesión.
• Sentir orgullo del trabajo bien hecho.
• Mejorar continuamente nuestras habilidades.
• Satisfacer a nuestros usuarios con software de
  calidad.
Lo que la Artesanía de Software NO es
           Ingeniería de Software:

       “La promesa implícita de la ingeniería
           de software es que si tienes un
         proceso sistemático y cuantificado,
            cualquiera puede desarrollar
              software exitosamente.”

                              -Pete McBreen
Lo que la Artesanía de Software NO ES

• No es solo acerca de “Código Bonito”.
• Darle la espalda a los aspectos de negocio y
  concentrarse SOLO en el lado técnico.
• Buscar salidas fáciles, “aceite de víbora” o
  “balas de plata”.
• Crear certificaciones artificiales y un modelo
  de negocio a su alrededor.
DESARROLLO DIRIGIDO POR
     PRUEBAS (TDD)
Qué es TDD


“Test-first coding is not a testing
            technique”


                      Ward Cunningham
¿Qué es TDD? (cont.)
• Es tomar la responsabilidad de la calidad de
  nuestro código.
• Es entender el código que escribimos en todo
  momento, no solo “suponer” que
  entendemos.
• Es una habilidad y como tal, requiere práctica
  para dominarse.
• Es una disciplina.
El valor de TDD
Tres Reglas
(según Robert C. Martin)
             • No se permite escribir
               ningún código de
               producción sin tener una
               prueba que falle.
             • No se permite escribir más
               de la prueba que lo
               necesario para fallar (y no
               compilar es fallar).
             • No está permitido escribir
               más código de producción
               que el necesario para pasar
               la prueba unitaria ACTUAL.
Paso a paso…
from unittest import main, TestCase

class TestPrimeFactors(TestCase):
  def testPrimesOf0(self):
    self.assertEquals([], factorsOf[0])

if __name__ == '__main__':
    main()
E
======================================================================
ERROR: testPrimesOf0 (__main__.TestPrimeFactors)
----------------------------------------------------------------------
NameError: global name 'factorsOf' is not defined
----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)
Paso a paso…

...

def factorsOf(n):
  return []

...



.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
Paso a paso…
...

def testPrimesOf0to1
    testPrimesOf0to1(self):
  self.assertEquals([], factorsOf(0))
  self.assertEquals([], factorsOf(1))

...


.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
Paso a paso…

...

def testPrimesOf2(self):
  self.assertEquals([2], factorsOf(2))

...

.F
======================================================================
FAIL: testPrimesOf2 (__main__.TestPrimeFactors)
----------------------------------------------------------------------
AssertionError: Lists differ: [2] != []
----------------------------------------------------------------------
Ran 2 tests in 0.029s

FAILED (failures=1)
Paso a paso…
...

def factorsOf(n):
     if n > 1:
       return [n]
  return []
...


..
----------------------------------------------------------------------
Ran 2 test in 0.000s

OK
Paso a paso…

...

def testPrimesOf2to3
    testPrimesOf2to3(self):
  self.assertEquals([2], factorsOf(2))
  self.assertEquals([3], factorsOf(3))
...



..
----------------------------------------------------------------------
Ran 2 test in 0.000s

OK
Paso a paso…
...

def testPrimesOf2to4
    testPrimesOf2to4(self):
  self.assertEquals([2], factorsOf(2))
  self.assertEquals([3], factorsOf(3))
  self.assertEquals([2,2], factorsOf(4))
...

.F
======================================================================
FAIL: testPrimesOf2to4 (__main__.TestPrimeFactors)
----------------------------------------------------------------------
AssertionError: Lists differ: [2, 2] != [4]
----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
Paso a paso…
...
def factorsOf(n):
    result, factor = [], 2
      if n > 1:
      while n > 1:
          return [n]
          while n % factor == 0:
              result.append(factor)
              n /= factor
          factor += 1
      return []
      return result
...
..
----------------------------------------------------------------------
Ran 2 test in 0.000s

OK
Aprendiendo TDD: Trampas
• Las pruebas se tornan difíciles de escribir, por lo
  que sentimos una desaceleración importante.
• Corren lentamente, lo que nos volvemos
  renuentes a ejecutarlas frecuentemente.
• Son frágiles, por lo que cambios aparentemente
  sin importancia en el código provocan que un
  montón de pruebas fallen.
• Mantenerlas en forma y funcionando se vuelve
  complejo y consume tiempo.
Escribiendo pruebas unitarias efectivas


  “Las pruebas unitarias deben ser legibles,
      confiables y fáciles de mantener”

                                -Roy Osherove
                      “The Art of Unit Testing”
Escribiendo pruebas unitarias efectivas:
                 Legibilidad
• Mis pruebas son tan importantes como el
  código de producción.
• Aspirar a que mis pruebas se lean como una
  “receta de cocina” (patrón composed
  method).
• Si no es posible determinar lo que una prueba
  está haciendo, es probable que en realidad
  esté verificando múltiples cosas.
Escribiendo pruebas unitarias efectivas:
                Confiabilidad

• Evita a toda cosa colocar lógica en el código de
  una prueba (if-then, switch/case, etc).
• Evita calcular el valor esperado DENTRO de la
  prueba.
• Evita compartir estado entre pruebas.
• Usa inyección de dependencias.
Escribiendo pruebas unitarias efectivas:
               Mantenibilidad
• Mantén simple el código de inicialización.
• Crea fixtures o incluso casos de prueba
  especializados para cada escenario.
• Si es necesario, convierte cada escenario en
  una clase de prueba individual.
• Si una parte del código es particularmente
  difícil de probar, busca problemas en el diseño
  del mismo.
Escribiendo pruebas unitarias efectivas:
                   Rapidez

• Una prueba unitaria efectiva debería
  ejecutarse en milisegundos, NO EN
  SEGUNDOS.
• Si las pruebas no son rápidas, NO SE USARÁN.
• Mantén conjuntos pequeños y bien enfocados
  de pruebas, además de la suite global.
Aprendiendo TDD (revisado)
• Comienza con algo sencillo (¡pero no te detengas
  ahí!)

• Escribe muchas pruebas (tantas como puedas).

• Familiarízate con el ritmo y las reglas de TDD.

• Cuando encuentres algo que no sabes como
  probar, apóyate en un compañero.

• Nunca dejes de aprender.
Bibliografía
• “The Clean Coder” de Robert C. Martin.
• “Test Driven Development: By Example” de Kent Beck.
• “The Art of Unit Testing” de Roy Osherove.
• “Growing Object-Oriented Software, Guided by Tests” de
  Steve Freeman y Nat Pryce.
• “Agile Java: Crafting Code with Test-Driven Development”
  de Jeff Langr.
• “Diseño Ágil con TDD” de Carlos Ble Jurado -> !Es gratis!
  http://www.dirigidoportests.com/el-libro
• Twitter: @alfredochv
• Blog: http://pensamientoobjetivo.blogspot.mx

Más contenido relacionado

Destacado

Introdução à programação javascript
Introdução à programação javascriptIntrodução à programação javascript
Introdução à programação javascriptNuno Palma
 
կացինն ու մրգերը
կացինն ու  մրգերըկացինն ու  մրգերը
կացինն ու մրգերըlusine barseghyan
 
Belén 18 mayo 2015 - La Ventana
Belén 18 mayo 2015 - La VentanaBelén 18 mayo 2015 - La Ventana
Belén 18 mayo 2015 - La VentanaJardinera Msf
 
Campagne fleur&lis
Campagne fleur&lisCampagne fleur&lis
Campagne fleur&lisFleur
 
Program Conceptual Framework (Comprehensive Portfolio)
Program Conceptual Framework (Comprehensive Portfolio)Program Conceptual Framework (Comprehensive Portfolio)
Program Conceptual Framework (Comprehensive Portfolio)nsealey
 
Guia de investigacion numero 1 josefina 1h (1)
Guia de investigacion numero 1 josefina 1h (1)Guia de investigacion numero 1 josefina 1h (1)
Guia de investigacion numero 1 josefina 1h (1)JosefinaCiclo
 
10 đề thi thử đh môn hóa giải chi tiết de 2- giai chi tiet
10 đề thi thử đh môn hóa giải chi tiết   de 2- giai chi tiet10 đề thi thử đh môn hóa giải chi tiết   de 2- giai chi tiet
10 đề thi thử đh môn hóa giải chi tiết de 2- giai chi tietVan-Duyet Le
 
Erklärung des OGVs WiFri
Erklärung des OGVs WiFriErklärung des OGVs WiFri
Erklärung des OGVs WiFriWandelBarCamp
 
Developing an entrepreneurial culture within the whole team
Developing an entrepreneurial culture within the whole teamDeveloping an entrepreneurial culture within the whole team
Developing an entrepreneurial culture within the whole teamwalescva
 
Saturday Morning Bangers End of Season Golf Trip
Saturday Morning Bangers End of Season Golf TripSaturday Morning Bangers End of Season Golf Trip
Saturday Morning Bangers End of Season Golf TripDane Nelson
 
Heteroadapter presentation cog sci 2013
Heteroadapter presentation cog sci 2013Heteroadapter presentation cog sci 2013
Heteroadapter presentation cog sci 2013pylabs
 
Challenge Economy
Challenge EconomyChallenge Economy
Challenge Economyherman lier
 

Destacado (17)

Introdução à programação javascript
Introdução à programação javascriptIntrodução à programação javascript
Introdução à programação javascript
 
կացինն ու մրգերը
կացինն ու  մրգերըկացինն ու  մրգերը
կացինն ու մրգերը
 
Belén 18 mayo 2015 - La Ventana
Belén 18 mayo 2015 - La VentanaBelén 18 mayo 2015 - La Ventana
Belén 18 mayo 2015 - La Ventana
 
Defining Your Scope
Defining Your ScopeDefining Your Scope
Defining Your Scope
 
Campagne fleur&lis
Campagne fleur&lisCampagne fleur&lis
Campagne fleur&lis
 
Program Conceptual Framework (Comprehensive Portfolio)
Program Conceptual Framework (Comprehensive Portfolio)Program Conceptual Framework (Comprehensive Portfolio)
Program Conceptual Framework (Comprehensive Portfolio)
 
Guia de investigacion numero 1 josefina 1h (1)
Guia de investigacion numero 1 josefina 1h (1)Guia de investigacion numero 1 josefina 1h (1)
Guia de investigacion numero 1 josefina 1h (1)
 
El Secreto De La Longevidad
El Secreto De La LongevidadEl Secreto De La Longevidad
El Secreto De La Longevidad
 
Sipariş formu
Sipariş formuSipariş formu
Sipariş formu
 
10 đề thi thử đh môn hóa giải chi tiết de 2- giai chi tiet
10 đề thi thử đh môn hóa giải chi tiết   de 2- giai chi tiet10 đề thi thử đh môn hóa giải chi tiết   de 2- giai chi tiet
10 đề thi thử đh môn hóa giải chi tiết de 2- giai chi tiet
 
Erklärung des OGVs WiFri
Erklärung des OGVs WiFriErklärung des OGVs WiFri
Erklärung des OGVs WiFri
 
Developing an entrepreneurial culture within the whole team
Developing an entrepreneurial culture within the whole teamDeveloping an entrepreneurial culture within the whole team
Developing an entrepreneurial culture within the whole team
 
Pdf envi
Pdf enviPdf envi
Pdf envi
 
Saturday Morning Bangers End of Season Golf Trip
Saturday Morning Bangers End of Season Golf TripSaturday Morning Bangers End of Season Golf Trip
Saturday Morning Bangers End of Season Golf Trip
 
Nom 002-semarnat-1996
Nom 002-semarnat-1996Nom 002-semarnat-1996
Nom 002-semarnat-1996
 
Heteroadapter presentation cog sci 2013
Heteroadapter presentation cog sci 2013Heteroadapter presentation cog sci 2013
Heteroadapter presentation cog sci 2013
 
Challenge Economy
Challenge EconomyChallenge Economy
Challenge Economy
 

Similar a Artesanía y TDD

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas.. ..
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Juan Vladimir
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishAkamon Engineering
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónKleer Agile Coaching & Training
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónKleer Agile Coaching & Training
 
Pruebas-OCW.pdf
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdflgarcias
 
INDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptxINDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptxOdalisLinares
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de softwareGomez Gomez
 
Proceso Del Software
Proceso Del SoftwareProceso Del Software
Proceso Del Softwareleo_ruth
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd introfperezplain
 

Similar a Artesanía y TDD (20)

Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
Practicas técnicas
Practicas técnicasPracticas técnicas
Practicas técnicas
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producción
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producción
 
Practicas tecnicas
Practicas tecnicasPracticas tecnicas
Practicas tecnicas
 
S9-DAW-2022S1.pptx
S9-DAW-2022S1.pptxS9-DAW-2022S1.pptx
S9-DAW-2022S1.pptx
 
Pruebas-OCW.pdf
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdf
 
Optimizacion de software
Optimizacion de softwareOptimizacion de software
Optimizacion de software
 
INDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptxINDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptx
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 
Proceso Del Software
Proceso Del SoftwareProceso Del Software
Proceso Del Software
 
Proceso Del Software
Proceso Del SoftwareProceso Del Software
Proceso Del Software
 
software testing
software testingsoftware testing
software testing
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd intro
 

Último

ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Último (19)

ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Artesanía y TDD

  • 1. Artesanía de Software y Desarrollo Dirigido por Pruebas
  • 2. ¿QUÉ ES LA ARTESANÍA DE SOFTWARE
  • 3. Manifiesto por la Artesanía de Software Como aspirantes a artesanos de software, estamos elevando el nivel de desarrollo de software profesional practicándolo y ayudando a otros a aprenderlo. A través de este trabajo hemos llegado a valorar: • No sólo software que funciona, • sino también el software bien diseñado • No sólo responder al cambio, • pero también agregar valor de forma sostenida • No sólo los individuos y las • sino también una comunidad de interacciones, profesionales • No sólo la colaboración con los • sino también de asociaciones clientes, productivas Es decir, en la búsqueda de los elementos de la izquierda hemos encontrado que los elementos de la derecha son indispensables.
  • 4. ¿Qué es la Artesanía de Software? • Es acerca de crear conciencia de lo que está mal con el actual estado de la práctica. • Es acerca de hacer el mejor trabajo posible. • Comprometerse con nuestra profesión. • Sentir orgullo del trabajo bien hecho. • Mejorar continuamente nuestras habilidades. • Satisfacer a nuestros usuarios con software de calidad.
  • 5. Lo que la Artesanía de Software NO es Ingeniería de Software: “La promesa implícita de la ingeniería de software es que si tienes un proceso sistemático y cuantificado, cualquiera puede desarrollar software exitosamente.” -Pete McBreen
  • 6. Lo que la Artesanía de Software NO ES • No es solo acerca de “Código Bonito”. • Darle la espalda a los aspectos de negocio y concentrarse SOLO en el lado técnico. • Buscar salidas fáciles, “aceite de víbora” o “balas de plata”. • Crear certificaciones artificiales y un modelo de negocio a su alrededor.
  • 7. DESARROLLO DIRIGIDO POR PRUEBAS (TDD)
  • 8. Qué es TDD “Test-first coding is not a testing technique” Ward Cunningham
  • 9. ¿Qué es TDD? (cont.) • Es tomar la responsabilidad de la calidad de nuestro código. • Es entender el código que escribimos en todo momento, no solo “suponer” que entendemos. • Es una habilidad y como tal, requiere práctica para dominarse. • Es una disciplina.
  • 10. El valor de TDD
  • 11. Tres Reglas (según Robert C. Martin) • No se permite escribir ningún código de producción sin tener una prueba que falle. • No se permite escribir más de la prueba que lo necesario para fallar (y no compilar es fallar). • No está permitido escribir más código de producción que el necesario para pasar la prueba unitaria ACTUAL.
  • 12. Paso a paso… from unittest import main, TestCase class TestPrimeFactors(TestCase): def testPrimesOf0(self): self.assertEquals([], factorsOf[0]) if __name__ == '__main__': main() E ====================================================================== ERROR: testPrimesOf0 (__main__.TestPrimeFactors) ---------------------------------------------------------------------- NameError: global name 'factorsOf' is not defined ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (errors=1)
  • 13. Paso a paso… ... def factorsOf(n): return [] ... . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
  • 14. Paso a paso… ... def testPrimesOf0to1 testPrimesOf0to1(self): self.assertEquals([], factorsOf(0)) self.assertEquals([], factorsOf(1)) ... . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
  • 15. Paso a paso… ... def testPrimesOf2(self): self.assertEquals([2], factorsOf(2)) ... .F ====================================================================== FAIL: testPrimesOf2 (__main__.TestPrimeFactors) ---------------------------------------------------------------------- AssertionError: Lists differ: [2] != [] ---------------------------------------------------------------------- Ran 2 tests in 0.029s FAILED (failures=1)
  • 16. Paso a paso… ... def factorsOf(n): if n > 1: return [n] return [] ... .. ---------------------------------------------------------------------- Ran 2 test in 0.000s OK
  • 17. Paso a paso… ... def testPrimesOf2to3 testPrimesOf2to3(self): self.assertEquals([2], factorsOf(2)) self.assertEquals([3], factorsOf(3)) ... .. ---------------------------------------------------------------------- Ran 2 test in 0.000s OK
  • 18. Paso a paso… ... def testPrimesOf2to4 testPrimesOf2to4(self): self.assertEquals([2], factorsOf(2)) self.assertEquals([3], factorsOf(3)) self.assertEquals([2,2], factorsOf(4)) ... .F ====================================================================== FAIL: testPrimesOf2to4 (__main__.TestPrimeFactors) ---------------------------------------------------------------------- AssertionError: Lists differ: [2, 2] != [4] ---------------------------------------------------------------------- Ran 2 tests in 0.001s FAILED (failures=1)
  • 19. Paso a paso… ... def factorsOf(n): result, factor = [], 2 if n > 1: while n > 1: return [n] while n % factor == 0: result.append(factor) n /= factor factor += 1 return [] return result ... .. ---------------------------------------------------------------------- Ran 2 test in 0.000s OK
  • 20. Aprendiendo TDD: Trampas • Las pruebas se tornan difíciles de escribir, por lo que sentimos una desaceleración importante. • Corren lentamente, lo que nos volvemos renuentes a ejecutarlas frecuentemente. • Son frágiles, por lo que cambios aparentemente sin importancia en el código provocan que un montón de pruebas fallen. • Mantenerlas en forma y funcionando se vuelve complejo y consume tiempo.
  • 21. Escribiendo pruebas unitarias efectivas “Las pruebas unitarias deben ser legibles, confiables y fáciles de mantener” -Roy Osherove “The Art of Unit Testing”
  • 22. Escribiendo pruebas unitarias efectivas: Legibilidad • Mis pruebas son tan importantes como el código de producción. • Aspirar a que mis pruebas se lean como una “receta de cocina” (patrón composed method). • Si no es posible determinar lo que una prueba está haciendo, es probable que en realidad esté verificando múltiples cosas.
  • 23. Escribiendo pruebas unitarias efectivas: Confiabilidad • Evita a toda cosa colocar lógica en el código de una prueba (if-then, switch/case, etc). • Evita calcular el valor esperado DENTRO de la prueba. • Evita compartir estado entre pruebas. • Usa inyección de dependencias.
  • 24. Escribiendo pruebas unitarias efectivas: Mantenibilidad • Mantén simple el código de inicialización. • Crea fixtures o incluso casos de prueba especializados para cada escenario. • Si es necesario, convierte cada escenario en una clase de prueba individual. • Si una parte del código es particularmente difícil de probar, busca problemas en el diseño del mismo.
  • 25. Escribiendo pruebas unitarias efectivas: Rapidez • Una prueba unitaria efectiva debería ejecutarse en milisegundos, NO EN SEGUNDOS. • Si las pruebas no son rápidas, NO SE USARÁN. • Mantén conjuntos pequeños y bien enfocados de pruebas, además de la suite global.
  • 26. Aprendiendo TDD (revisado) • Comienza con algo sencillo (¡pero no te detengas ahí!) • Escribe muchas pruebas (tantas como puedas). • Familiarízate con el ritmo y las reglas de TDD. • Cuando encuentres algo que no sabes como probar, apóyate en un compañero. • Nunca dejes de aprender.
  • 27. Bibliografía • “The Clean Coder” de Robert C. Martin. • “Test Driven Development: By Example” de Kent Beck. • “The Art of Unit Testing” de Roy Osherove. • “Growing Object-Oriented Software, Guided by Tests” de Steve Freeman y Nat Pryce. • “Agile Java: Crafting Code with Test-Driven Development” de Jeff Langr. • “Diseño Ágil con TDD” de Carlos Ble Jurado -> !Es gratis! http://www.dirigidoportests.com/el-libro
  • 28. • Twitter: @alfredochv • Blog: http://pensamientoobjetivo.blogspot.mx