Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Addicted to green at Tuenti

Tuenti
March 08, 2014

Addicted to green at Tuenti

“Dicen los expertos en la materia que una vez que pruebas los tests no puedes dejarlos. Una sensación de seguridad y buen rollo te invade cada vez que aparece una barrita verde o mensaje similar que indica que todos los tests han pasado con éxito. Pero, como toda sustancia que provoque adicción, hay que aprender a controlarla y a conocer sus efectos para que no caigamos en un extremo negativo en su uso”.

“Aunque la sustancia base es la misma, el test, nos encontramos como diferentes variantes: test de UI, test de integración o test unitarios entre otros. También nos encontramos catalizadores como mocks, stubs, spy, fakes o dummies. Bajo un uso responsable y adecuado podemos ver como el uso de esta sustancia, el test, nos permite alcanzar momentos de bienestar y felicidad dentro de nuestro proceso de desarrollo software”.

“No va de magia ni de recetas infalibles sino de herramientas y de unas prácticas que nos permitan gestionar la ‘saludable’ adicción al testing”.

Tuenti

March 08, 2014
Tweet

More Decks by Tuenti

Other Decks in Technology

Transcript

  1. Adictos al
    verde
    @kinisoftware

    View Slide

  2. View Slide

  3. Para empezar
    ...
    ¡un teeeest, un teeeest, un
    teeeeest!

    View Slide

  4. ¿Por qué
    hacer tests

    View Slide

  5. !
    . Queremos a nuestros clientes
    . Dormir por las noches
    . ¿Habré roto algo?
    . Pero, si esto antes funcionaba
    ¿no?
    !

    View Slide

  6. El escenario
    de un test

    View Slide

  7. ¿Problemas?

    View Slide

  8. View Slide

  9. View Slide

  10. ¿Cómo debería ser?

    View Slide

  11. Testability
    ...

    View Slide

  12. !
    . Mixing object graph construction with
    application logic
    . Ask for things, Don’t look for things
    . Doing work in constructor
    . Global State/Singletons

    . Static methods
    !
    !
    Vigila…
    http://www.youtube.com/watch?v=acjvKJiOvXw

    View Slide

  13. Tipos
    de Tests

    View Slide

  14. http://lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants/

    View Slide

  15. by Martin Fowler
    http://martinfowler.com/bliki/TestPyramid.html

    View Slide

  16. Toolbox
    ...

    View Slide

  17. Repetible

    !
    Automatizable*

    !
    Expresivo

    !
    Fácil de hacer

    !
    Relevante

    !
    Self-Verifying
    AAA

    View Slide

  18. Hamcrest
    assertThat(theBiscuit, equalTo(myBiscuit));
    assertThat(theBiscuit, is(equalTo(myBiscuit)));
    assertThat(theBiscuit, is(myBiscuit));
    !
    assertThat(Math.sqrt(-1), is(notANumber()));
    !
    assertThat(myArray, hasItemInArray(item));
    !
    assertThat(person.getAge(),
    is(greaterThan(LEGAL_AGE)));
    !

    View Slide

  19. Test de
    Aceptacion

    View Slide

  20. A formal test conducted to determine whether or
    not a system satisfies its acceptance criteria and
    to enable the customer to determine whether or
    not to accept the system.

    Acceptance tests are different from UnitTests in
    that UnitTests are modeled and written by the
    developer of each class, while the acceptance test
    is at least modeled and possibly even written by
    the customer.
    http://c2.com/cgi/wiki?AcceptanceTest

    View Slide

  21. Colaboración con el cliente

    !
    Lenguaje Natural

    !
    DSL

    !
    Definir una historia de usuario

    !
    ¿UI?

    View Slide

  22. http://kinisoftware.com/2012/03/bdd-java-que-framework-uso/
    KIF

    View Slide

  23. La pregunta de la audiencia:

    ¿Cómo hacer test de UI menos frágiles?
    UI

    !
    Selenium/Webdriver al rescate!

    !
    Page Objects

    !
    API

    View Slide

  24. Test de
    Integración

    View Slide

  25. Un test que combina varias partes de la aplicación
    de tal forma que buscamos el resultado de la
    colaboración conjunta. Puede involucrar un
    escenario “end-to-end” o simplemente varios
    componentes.
    Suelen ser tentadores porque “cuestan
    menos de hacer” que los unitarios pero no os dejéis
    llevar…

    View Slide

  26. Test
    Unitarios

    View Slide

  27. A kind of AutomatedTest, though some would say
    a better name is DeveloperTest

    !
    "Unit" casually refers to low-level test cases
    written in the same language as the production
    code, which directly access its objects and
    members.

    !
    Under the strict definition, for QA purposes, the
    failure of a UnitTest implicates only one unit.
    You know exactly where to search to find the
    bug.
    http://c2.com/cgi/wiki?UnitTest

    View Slide

  28. http://pragprog.com/magazines/2012-01/unit-tests-are-first
    Fast

    !
    Isolated

    !
    Repeatable

    !
    Self-Verifing

    !
    Timely/Transparent
    F.I.R.S.T.

    View Slide

  29. Toolbox
    ...

    View Slide

  30. Stubs - Respuestas programadas

    !
    Mocks - Expectaciones (Stubs+)

    !
    Spies - Guardan información

    !
    Fake - Similar al recurso de producción

    !
    Dummy - No hace nada at all :)
    Dobles

    View Slide

  31. View Slide

  32. BDD/TDD
    ...

    View Slide

  33. Design Patterns
    Bad Smells
    http://www.jbrains.ca/permalink/the-four-elements-of-simple-design
    Passes its tests

    Minimized duplication

    Maximize clarity

    Has fewer elements
    SOLID
    Simple Design:

    View Slide

  34. ¿Y mañana qué?
    Empieza a escribir tests, de alguno de los
    tipos que hemos visto

    !
    Intenta automatizar la construcción del
    proyecto y la ejecución de test

    !
    Si puedes haz BDD/TDD

    !
    Estudia sobre la parte de “Refactoring”

    !
    Evangeliza

    View Slide

  35. ¡Gracias!
    ...
    @kinisoftware

    View Slide

  36. Engineering
    Jobs

    View Slide

  37. Recursos (I)
    BDD + UI + Selenium - http://thomassundberg.wordpress.com/2012/11/01/a-jsf-web-application/
    Page Objects - https://code.google.com/p/selenium/wiki/PageObjects
    Mockito Examples - http://gojko.net/2009/10/23/mockito-in-six-easy-examples/
    Libro TDD de Carlos Ble - http://www.dirigidoportests.com/el-libro
    Code Smells - http://www.codinghorror.com/blog/2006/05/code-smells.html
    Code Smell - http://c2.com/cgi/wiki?CodeSmell
    xUnit Patterns - http://xunitpatterns.com/
    Refactoring Catalog - http://www.refactoring.com/

    View Slide

  38. Recursos (II)
    Hamcrest for iOS - https://github.com/hamcrest/OCHamcrest
    Mockito for iOS - https://github.com/jonreid/OCMockito
    Acceptance/Integration testing iOS - https://github.com/kif-framework/KIF
    TDD for iOS - http://www.amazon.com/Test-Driven-iOS-Development-Developers-Library/dp/
    0321774183
    Esta presentación - https://www.dropbox.com/s/658csb9s1xppfts/AdictoAlVerde.pdf
    Megalibro - http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627

    View Slide