SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
Testing, tipos y otros
flamewars
Francisco Ros
Murcia DevOps
Septiembre 2017
Testing · Tipado = 0
Realizar testing y utilizar lenguajes de tipado
estático o dinámico son asuntos completamente
ortogonales
¿Debo escribir tests? Altamente recomendable
¿Tipado estático o dinámico? Choose the right tool
for the job
Flamewar
Ahead
¿Pero haces testing?
TDD para desarrollar Moss
CI/CD pipeline para todo componente
900 tests en micro-servicios PythonFrancisco Ros
CEO & Dev @ Doalitic
Ahora: Python
Antes: C/C++, Java, Perl
Automatic sysadmin for web
development teams
CLOUD VPS AMAZON
DIGITALOCEAN GOOGLE VULTR
ZERO-CONFIG MONITORING
ALERTS SLACK HTML/CSS/JS
PHP LARAVEL SYMFONY
WORDPRESS ZERO-DOWNTIME
DEPLOYMENTS GITHUB
BITBUCKET HEALTH-CHECKS
https://moss.sh
Nuestro pipeline para un
micro-servicio Python
Documentación
PEP8 + complejidad ciclomática
Test “unitarios”
Test de componente / integración
1. Intro
Un poco de contexto...
➔ ¿Por qué hacer tests?
Calidad, agilidad, regresiones.
➔ Testing
Tipos.
➔ TDD
Metodología ágil de desarrollo de
software.
➔ La polémica
¡Flame!
Escribimos tests para detectar y
solucionar bugs cuanto antes.
Los tests prueban que el software
se comporta de acuerdo a su
especificación.
Los tests detectan regresiones
conforme el software evoluciona.
En definitiva, una buena suite de
tests mejora la calidad (grado de
confianza) del software.
Agile
En buena medida, todas
las metodologías ágiles
tienen su razón de ser
en lo que se desprende
de este gráfico.
Tipos de tests
Manual vs Automático
Unitario vs Componente vs
Integración vs Sistema vs ...
Funcional vs No funcional
Caja negra (estado, clásico)
Caja blanca (comportamiento, mockist)
Etc
Unitariospermiten medir
cobertura de código
La pirámide
Fuente:
Behavior Driven Testing in
Agile
Test
Driven
Development
Fuente:
Agile Nutshell
Es una METODOLOGÍA ágil de
desarrollo de software
TDD ⇒ Testing
Testing ⇏ TDD
TDD ≠ Testing
Recursos:
Blog de Martin Fowler
El origen
You don’t need static type checking if you
have 100% unit test coverage
http://blog.cleancoder.com/uncle-bob/2016/05/01/TypeWars.ht
ml
Imagen:
http://saltares.com/blog/computing/book-review-clean-cod
e/
La reacción
http://typeinference.com/scala/2016/05/03/tdd-vs-static-typing.html
http://naildrivin5.com/blog/2016/05/03/type-wars-are-far-from-over.html
https://www.reddit.com/r/programming/comments/4h9p95/clean_coder_blog_type_wa
rs/
https://news.ycombinator.com/item?id=1771595
2. Mitos
Algunos mitos sobre testing y lenguajes con
tipado dinámico:
➔ Necesitas hacer más tests
➔ Necesitas más cobertura
➔ Necesitas refactorizar a mano
“Hay que comprobar los
argumentos de todas la
funciones porque te puede
llegar cualquier cosa”
No → sobre-especificación
No → cliente incumple contrato
“hacer tests unitarios estúpidos que no
son necesarios porque el compilador ya
te asegura que no va a pasar nada… esos
tests no tienen sentido, pero los tienes
que hacer igualmente en lenguajes con
tipado dinámico”
Yeah, se comporta como debe
Si fueran tipos estáticos,
¿acaso haría menos tests?
Siendo tipos dinámicos,
¿hay más tests obligatorios?
1. No hay diferencia respecto a un
lenguaje con tipado estático
2. 100% cobertura no es obligatoria,
es más importante la calidad de los
tests
3. Veremos cómo ampliar esa
cobertura al 100%
Ok, pero no estás
comprobando casos de
error. Tienes que escribir
más tests o no tendrás
100% de cobertura.
“I know. You don’t need such test cases. Because there
are other tests that require these attributes and
functions and they will fail if they are missing. But what
if you are not Uncle Bob and you didn’t write these
other test cases? Everything seems to work well in
spite of this part of the code is not tested. And then it
comes a refactor. Some attributes and some functions
are removed or renamed and then… Boom!
AttributeError, NoMethodError and friends in
production! Face it. You have seen this many times.”
No hace falta ser Uncle Bob
para escribir estos tests...
¿no los harías en un lenguaje con tipado estático?
Validar la entrada es muy
recomendable
Establecer restricciones
es sencillo aunque no
estén soportadas en el
sistema de tipos del
lenguaje
“Hay invariantes que hoy en día, y con el
sistema de tipos adecuado se pueden
codificar en el tipo, por lo que
necesitarás menos tests”
Estos invariantes son
restricciones que incorporas al
código, pero no garantizan que
el código cumple su
especificación
para evitar test introduces una restricción que
llevada al extremo...
...código más complejo y propenso error
...más regresiones
...test para comprobar que el código es correcto (!!)
...desarrollo más lento
No hace falta ser Uncle Bob
para escribir estos tests...
¿no los harías en un lenguaje con tipado estático + invariantes?
“Face it. Every time you had to do big refactors in a
dynamically-typed language you felt as a bomb squad
officer. Changing a class is the closer you will get to
“cutting the red or the blue wire” dilemma. And not
only because most of the changes must be done by
hand without the assistance of any tool. Guess what?
You are not Uncle Bob, and you will find parts of your
code without test coverage. Any change on any line of
code may lead to a dirty runtime exception in
production.”
Refactorizando
con PyCharm
☺
Puedes tener tests no
automáticos
Si no haces CD a producción
tendrás tests exploratorios
en staging
Llevar un bug a producción
alguna vez es inevitable
A mayor cobertura con tests
de calidad, menor será la
probabilidad
Pero si ocurre, usa TDD para
que no vuelva a pasar
Tip
Sé ágil, aplica el sentido
común, aprende de cada
experiencia y evoluciona las
prácticas que mejor se
adaptan a tu equipo y
proyecto.
La redención
No, types are not tests. Type systems are not tests. Type
checking is not testing.
Does every step down The Dark Path mean that you can
ignore a certain number of unit tests? Does programming
in Dark Path languages mean that you don’t have to test as
much?
No. A thousand times: NO. Type models do not specify
behavior. The correctness of your type model has no
bearing on the correctness of the behavior you have
specified.
http://blog.cleancoder.com/uncle-bob/2017/01/13/TypesAndTests.ht
ml
3. Contracorriente
Hay quien aboga por eliminar completamente
tests y documentación
➔ #NoTests
➔ #NoDocs
https://thenewstack.io/no-testing-no-documentation-no-problem/
4. ¿Qué elegir?
Criterios a la hora de elegir lenguaje
➔ The right tool for the job
Matching entre proyecto y
lenguaje
Matching entre proyecto y
ecosistema
Destrezas de tu equipo
Comunidad / soporte
Expectativas de
crecimiento de tu equipo
Conclusión
Testing debería ser obligatorio
TDD es muy recomendable
Los tests no deberían ser un arma
arrojadiza en el flame ‘tipado estático
vs dinámico’

Más contenido relacionado

La actualidad más candente

Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...César Hernández
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoAgustin Ramos
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion ContinuaLenin Lozano
 
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
 
Compartiendo cómo trabajamos haciendo uso de Kanban
Compartiendo cómo trabajamos haciendo uso de KanbanCompartiendo cómo trabajamos haciendo uso de Kanban
Compartiendo cómo trabajamos haciendo uso de Kanban233 Grados de TI
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupMartin Siniawski
 
Presentación estetoscopio
Presentación estetoscopioPresentación estetoscopio
Presentación estetoscopioJuan Rodríguez
 
Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014Javier_J
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con JenkinsCésar Hernández
 
Introducción a Behaviour Driven Development
Introducción a Behaviour Driven DevelopmentIntroducción a Behaviour Driven Development
Introducción a Behaviour Driven DevelopmentRicardo Markiewicz
 
Framework de test spock
Framework de test spock Framework de test spock
Framework de test spock Fran García
 
Groovy&Grails: desarrollo rápido de aplicaciones
Groovy&Grails: desarrollo rápido de aplicacionesGroovy&Grails: desarrollo rápido de aplicaciones
Groovy&Grails: desarrollo rápido de aplicacionesFran García
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015 César Hernández
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Agustin Ramos
 

La actualidad más candente (20)

Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
 
BDD y tests automatizados
BDD y tests automatizadosBDD y tests automatizados
BDD y tests automatizados
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamiento
 
TDD Code Retreat
TDD Code RetreatTDD Code Retreat
TDD Code Retreat
 
TDD en java script
TDD en java scriptTDD en java script
TDD en java script
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion Continua
 
Testing Ruby on Rails (spanish)
Testing Ruby on Rails (spanish)Testing Ruby on Rails (spanish)
Testing Ruby on Rails (spanish)
 
Cómo trabajamos en Plastic SCM
Cómo trabajamos en Plastic SCMCómo trabajamos en Plastic SCM
Cómo trabajamos en Plastic SCM
 
Compartiendo cómo trabajamos haciendo uso de Kanban
Compartiendo cómo trabajamos haciendo uso de KanbanCompartiendo cómo trabajamos haciendo uso de Kanban
Compartiendo cómo trabajamos haciendo uso de Kanban
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu Startup
 
Presentación estetoscopio
Presentación estetoscopioPresentación estetoscopio
Presentación estetoscopio
 
Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con Jenkins
 
Introducción a Behaviour Driven Development
Introducción a Behaviour Driven DevelopmentIntroducción a Behaviour Driven Development
Introducción a Behaviour Driven Development
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDD
 
Framework de test spock
Framework de test spock Framework de test spock
Framework de test spock
 
Groovy&Grails: desarrollo rápido de aplicaciones
Groovy&Grails: desarrollo rápido de aplicacionesGroovy&Grails: desarrollo rápido de aplicaciones
Groovy&Grails: desarrollo rápido de aplicaciones
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion Continua
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
 

Similar a Testing, tipos y TDD: la importancia de los tests más allá del tipado

Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
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
 
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
 
Ingeniería del software y metodologías ágiles
Ingeniería del software y metodologías ágilesIngeniería del software y metodologías ágiles
Ingeniería del software y metodologías ágilesRodrigo Corral
 
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
 
Cypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumCypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumSoftware Guru
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015Taller Negócio Digitais
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas.. ..
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetseusonlito
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurancewill2294
 

Similar a Testing, tipos y TDD: la importancia de los tests más allá del tipado (20)

Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
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
 
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
 
TDD talk
TDD talkTDD talk
TDD talk
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Ingeniería del software y metodologías ágiles
Ingeniería del software y metodologías ágilesIngeniería del software y metodologías ágiles
Ingeniería del software y metodologías ágiles
 
Integracion continua
Integracion continuaIntegracion continua
Integracion continua
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
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
 
Cypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumCypress en un mundo lleno de Selenium
Cypress en un mundo lleno de Selenium
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015
 
software testing
software testingsoftware testing
software testing
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnets
 
Practicas tecnicas
Practicas tecnicasPracticas tecnicas
Practicas tecnicas
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 
Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
 

Último

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
 
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
 
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
 
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
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
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
 
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
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
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
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
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
 
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
 
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
 
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
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
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
 
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
 

Último (20)

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
 
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)
 
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
 
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...
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.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
 
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
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
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
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
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
 
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
 
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
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
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
 
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...
 

Testing, tipos y TDD: la importancia de los tests más allá del tipado

  • 1. Testing, tipos y otros flamewars Francisco Ros Murcia DevOps Septiembre 2017
  • 2. Testing · Tipado = 0 Realizar testing y utilizar lenguajes de tipado estático o dinámico son asuntos completamente ortogonales ¿Debo escribir tests? Altamente recomendable ¿Tipado estático o dinámico? Choose the right tool for the job Flamewar Ahead
  • 3. ¿Pero haces testing? TDD para desarrollar Moss CI/CD pipeline para todo componente 900 tests en micro-servicios PythonFrancisco Ros CEO & Dev @ Doalitic Ahora: Python Antes: C/C++, Java, Perl
  • 4. Automatic sysadmin for web development teams CLOUD VPS AMAZON DIGITALOCEAN GOOGLE VULTR ZERO-CONFIG MONITORING ALERTS SLACK HTML/CSS/JS PHP LARAVEL SYMFONY WORDPRESS ZERO-DOWNTIME DEPLOYMENTS GITHUB BITBUCKET HEALTH-CHECKS https://moss.sh
  • 5. Nuestro pipeline para un micro-servicio Python Documentación PEP8 + complejidad ciclomática Test “unitarios” Test de componente / integración
  • 6. 1. Intro Un poco de contexto... ➔ ¿Por qué hacer tests? Calidad, agilidad, regresiones. ➔ Testing Tipos. ➔ TDD Metodología ágil de desarrollo de software. ➔ La polémica ¡Flame!
  • 7. Escribimos tests para detectar y solucionar bugs cuanto antes. Los tests prueban que el software se comporta de acuerdo a su especificación. Los tests detectan regresiones conforme el software evoluciona. En definitiva, una buena suite de tests mejora la calidad (grado de confianza) del software. Agile En buena medida, todas las metodologías ágiles tienen su razón de ser en lo que se desprende de este gráfico.
  • 8. Tipos de tests Manual vs Automático Unitario vs Componente vs Integración vs Sistema vs ... Funcional vs No funcional Caja negra (estado, clásico) Caja blanca (comportamiento, mockist) Etc Unitariospermiten medir cobertura de código La pirámide Fuente: Behavior Driven Testing in Agile
  • 9. Test Driven Development Fuente: Agile Nutshell Es una METODOLOGÍA ágil de desarrollo de software TDD ⇒ Testing Testing ⇏ TDD TDD ≠ Testing Recursos: Blog de Martin Fowler
  • 10. El origen You don’t need static type checking if you have 100% unit test coverage http://blog.cleancoder.com/uncle-bob/2016/05/01/TypeWars.ht ml Imagen: http://saltares.com/blog/computing/book-review-clean-cod e/
  • 12. 2. Mitos Algunos mitos sobre testing y lenguajes con tipado dinámico: ➔ Necesitas hacer más tests ➔ Necesitas más cobertura ➔ Necesitas refactorizar a mano
  • 13. “Hay que comprobar los argumentos de todas la funciones porque te puede llegar cualquier cosa”
  • 14. No → sobre-especificación No → cliente incumple contrato
  • 15. “hacer tests unitarios estúpidos que no son necesarios porque el compilador ya te asegura que no va a pasar nada… esos tests no tienen sentido, pero los tienes que hacer igualmente en lenguajes con tipado dinámico”
  • 16. Yeah, se comporta como debe Si fueran tipos estáticos, ¿acaso haría menos tests? Siendo tipos dinámicos, ¿hay más tests obligatorios?
  • 17.
  • 18. 1. No hay diferencia respecto a un lenguaje con tipado estático 2. 100% cobertura no es obligatoria, es más importante la calidad de los tests 3. Veremos cómo ampliar esa cobertura al 100% Ok, pero no estás comprobando casos de error. Tienes que escribir más tests o no tendrás 100% de cobertura.
  • 19. “I know. You don’t need such test cases. Because there are other tests that require these attributes and functions and they will fail if they are missing. But what if you are not Uncle Bob and you didn’t write these other test cases? Everything seems to work well in spite of this part of the code is not tested. And then it comes a refactor. Some attributes and some functions are removed or renamed and then… Boom! AttributeError, NoMethodError and friends in production! Face it. You have seen this many times.”
  • 20.
  • 21. No hace falta ser Uncle Bob para escribir estos tests... ¿no los harías en un lenguaje con tipado estático?
  • 22. Validar la entrada es muy recomendable Establecer restricciones es sencillo aunque no estén soportadas en el sistema de tipos del lenguaje
  • 23. “Hay invariantes que hoy en día, y con el sistema de tipos adecuado se pueden codificar en el tipo, por lo que necesitarás menos tests”
  • 24. Estos invariantes son restricciones que incorporas al código, pero no garantizan que el código cumple su especificación para evitar test introduces una restricción que llevada al extremo... ...código más complejo y propenso error ...más regresiones ...test para comprobar que el código es correcto (!!) ...desarrollo más lento
  • 25. No hace falta ser Uncle Bob para escribir estos tests... ¿no los harías en un lenguaje con tipado estático + invariantes?
  • 26. “Face it. Every time you had to do big refactors in a dynamically-typed language you felt as a bomb squad officer. Changing a class is the closer you will get to “cutting the red or the blue wire” dilemma. And not only because most of the changes must be done by hand without the assistance of any tool. Guess what? You are not Uncle Bob, and you will find parts of your code without test coverage. Any change on any line of code may lead to a dirty runtime exception in production.”
  • 28. Puedes tener tests no automáticos Si no haces CD a producción tendrás tests exploratorios en staging Llevar un bug a producción alguna vez es inevitable A mayor cobertura con tests de calidad, menor será la probabilidad Pero si ocurre, usa TDD para que no vuelva a pasar Tip Sé ágil, aplica el sentido común, aprende de cada experiencia y evoluciona las prácticas que mejor se adaptan a tu equipo y proyecto.
  • 29. La redención No, types are not tests. Type systems are not tests. Type checking is not testing. Does every step down The Dark Path mean that you can ignore a certain number of unit tests? Does programming in Dark Path languages mean that you don’t have to test as much? No. A thousand times: NO. Type models do not specify behavior. The correctness of your type model has no bearing on the correctness of the behavior you have specified. http://blog.cleancoder.com/uncle-bob/2017/01/13/TypesAndTests.ht ml
  • 30. 3. Contracorriente Hay quien aboga por eliminar completamente tests y documentación ➔ #NoTests ➔ #NoDocs https://thenewstack.io/no-testing-no-documentation-no-problem/
  • 31. 4. ¿Qué elegir? Criterios a la hora de elegir lenguaje ➔ The right tool for the job
  • 32. Matching entre proyecto y lenguaje Matching entre proyecto y ecosistema Destrezas de tu equipo Comunidad / soporte Expectativas de crecimiento de tu equipo
  • 33. Conclusión Testing debería ser obligatorio TDD es muy recomendable Los tests no deberían ser un arma arrojadiza en el flame ‘tipado estático vs dinámico’