5. Calidad Pull Request Test Pair Programming by Akamon
6. To test or not to test? Todo el m undo hace tests
7. To test or not to test Los buenos test ahorran DINERO en
cualquier aplicacin
8. To test or not to test
9. Testear es controvertido David Heinemeier (creador de Ruby
on Rails y Fundador y CTO de Basecamp) TDD is dead. Long live
testing & RailsConf 2014 Keynote - Writing Software by DHH
Hangouts entre Kent Beck, DHH y M. Fowler El caso DHH
10. Cmo hacemos test? Akamon Way
11. Un feedback rpido para el cdigo que estamos escribiendo de
una funcionalidad. Qu queremos de los tests?
12. Testean de manera rpida una funcionalidad. Qu hacen
nuestros tests?
13. Infrastructure External Services Test Double Test Double
APIs DBs Contract Domain (Business Logic)
14. Test doubles Implementacin alternativa de un colaborador
(clase o servicio) Objetivo: Hacer nuestros tests rpidos. Aislar
sistemas externos. Testear casos extremos.
15. Test doubles Tipos: Dummy: Implementacin no funcional.
Fake: Implementacin completamente funcional pero no usable en un
entorno real. Stub: Implementacin parcialmente funcional preparada
nicamente para poder ser usada en el test. Spy: Stub con memoria.
Mock: Spy con expectaciones sobre las llamadas a recibir que las
auto-comprueba l mismo.
16. Tests Unitarios Pros Contras Rpidos No pueden probar la
ausencia de errores Permiten testear todos los casos Los doubles no
son conables Ayudan a encontrar problemas pronto Los doubles estn
acoplados a sus implementaciones Facilitan el cambio Buena
documentacin
17. Escuelas de Tests Unitarios Chicago / Classical London /
Mockist nfasis Algoritmo Envo de mensajes Enfoque Resultado, estado
y efectos colaterales Roles, responsabilidades e interacciones
Libro Test-Driven Development by Example Growing Object Oriented
Software Guided by Tests
18. Unit Testing :: Chicago School Pros: Menor riesgo de
expectaciones incorrectas. Tests estables. Menos mantenimiento.
Contras: Ciclo largo de Red-Green-Refactor. Explosin combinatoria
de los casos a testear. Un simple bug rompe muchos tests. Ms
debugging para encontrar la raz del error.
19. Unit Testing :: London School Pros: Facilita el enfoque.
Baby steps. Contras: Alto riesgo de expectaciones incorrectas (el
refactoring no detecta cambios en los colaboradores) Acople del
test a la implementacin. Test frgiles.
20. Glosario Test Unitarios: Test del cdigo y la lgica de
negocio de una funcionalidad (operaciones con el contrato del
mdulo). Test double: La infraestructura y los servicios externos.
Riesgo: Test demasiado profundo que no permita testear de manera
simple todas las casusticas by Akamon
21. pero los test unitarios no son sucientes
22. Queremos saber si las integraciones con los sistemas
externos funcionan correctamente.
24. Tests de Integracin Pros Contras Conables Lentos Encontrar
problemas/cambios con servicios de terceros Imposible de testear
algunos casos extremos Buena documentacin
25. Test de integracin: Test de las implementaciones de los
contratos/ interfaces de la infraestructura y los servicios
externos. Test double: Nada. by Akamon Glosario
26. pero con test unitario e integracin todava no es
suciente
27. Applications APIs Background Website APIsAPIs ? Domain
Module User Module Analytics Module Marketing Module Device Module
Economy Module Game Module Game Event
28. Tests de Aceptacin Pros Contras Amigables y entendibles
para usuarios no tcnicos Lentos Gran conanza Complicado de testear
algunos casos Buena documentacin Imposible testear algunos casos
extremos Complicado localizar errores Complicados de escribir
(estado inicial)
29. Glosario Test de aceptacin: Test de una funcionalidad
(end-to-end black-box mode). Test double: Nada. by Akamon
30. Nuestra pirmide de tests Acceptance Integration Unit
32. Comparativa PHPUnit 4.1 Mockery 0.9 Phake 1.1 Prophecy 1.0
Notas Invocation Count Constraint Ok Muy bueno Muy bueno Ok
Mockery/Phake son mejores. Mtodos atMost() y atLeast() disponibles.
Ordered Expectations Ok Bueno Ok No Mockery es mejor. Simplemente
usando ordered([group]). Argument Matchers Bueno Ok Ok Ok PHPUnit
es mejor. Sobre todo con la funcionalidad delta Partial Mocking Ok
Muy bueno Ok No La construccin es mucho ms simple con Mockery.
Mocking Demeter Chains And Fluent Interfaces Ok Muy bueno Ok Ok Muy
sencillo con Mockery y un poco rebuscado con los otros. Test
Doubles Ok Bueno Ok Bueno Prophecy es el nico con spies y Mockery
el nico que gestiona static, nal & private
33. Otro punto de vista
34. Property-Based Testing Aproximacin totalmente diferente. No
se escriben los tests, se generan. QuickCheck: Canonical framework
escrito en Haskell. Cmo funciona?: Describe las entradas y salidas
permitidas y las transiciones de estado. Genera aleatoriamente un
gran nmero de casos de test y busca fallos. Devuelve el mnimo
ejemplo de fallo. Casos de uso: Comportamientos no determinsticos y
sistemas concurrentes.
35. Conclusiones En el mundo del testing lo ms importante es
determinar la unidad o sistema a testear. Los tipos de tests, los
doubles e incluso los frameworks dependen de la unidad o sistema a
testear.
36. Consejos Evita Minimiza los dobles: Estn acoplados a la
implementacin Limitan la refactorizacin pura. No son conables
Pueden tener un comportamiento diferente al real. by Akamon
37. Consejos Los test unitarios testean cdigo no funcionalidad:
TDD por si solo no es suciente. BDD por si solo puede ser suciente
(si no te importa la lentitud). TDD + BDD = WIN by Akamon
38. Consejos Separa la lgica del test de los datos del test:
Usa el @dataProvider de PHPUnit (no para los doubles). Usa el
Scenario Outline de Behat. by Akamon
39. La unidad a testear: Mockists are dead. Long live
classicists. Unit Tests: Isolation Mock arent stubs: Dummy, Fake,
Stub and Mock TTDD (Tautological TDD): An anti-pattern The depth of
tests Avoid Testing Implementation Details, Test Behaviours The
Failures of "Intro to TDD" The London School of Test Driven
Development Referencias
40. Test doubles: Tests doubles Mocks, fakes, stubs and dummies
The little mocker Referencias
42. La pirmide de los tests: Test Pyramid Testing Pyramid: A
case study Inverting the testing pyramid Testing ice-crean corn
anti-pattern Referencias
43. Referencias Property-Based testing: Better than unit tests
Powerful testing with test.check Testing the Hard Stuff and Staying
Sane
44. Entrevistas a veteranos del TDD: Ron Jeffries (One of the
founders of Extreme Programming & Agile Manifesto) Steve
Freeman (Co-author of Growing Object- Oriented Software Guided by
Tests) James Shore (Author of The Art of Agile Development) J.B.
Rainsberger (Author of JUnit Recipes : Practical Methods for
Programmer Testing Referencias