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

Testes em JS Como Você Nunca Viu Antes

Testes em JS Como Você Nunca Viu Antes

My slides for the presentation in JSDay Recife 2017, which happened at Nov. 26th, 2016.

Lucas Fernandes da Costa

November 26, 2016
Tweet

More Decks by Lucas Fernandes da Costa

Other Decks in Programming

Transcript

  1. Testes em JavaScript
    Como você nunca viu antes
    @lfernandescosta @lucasfcosta
    lucasfcosta.com

    View Slide

  2. ‣ Sistemas de Informação @UFSC
    ‣ FullStack Developer @MyTapp
    ‣ ChaiJS Core Maintainer
    ‣ Apaixonado por Open Source
    Quem sou eu?

    View Slide

  3. ‣ Sistemas de Informação @UFSC
    ‣ FullStack Developer @MyTapp
    ‣ ChaiJS Core Maintainer
    ‣ Apaixonado por Open Source
    Quem sou eu?
    Internacionalmente conhecido por
    causar prejuízo em buffet livre de sushi

    View Slide

  4. Quem sou eu?
    @lfernandescosta
    @lucasfcosta
    lucasfcosta.com

    View Slide

  5. Por que testar?

    View Slide

  6. Qualidade do código

    View Slide

  7. Ok, todo
    mundo sabe
    disso
    Qualidade do código

    View Slide

  8. Agilidade
    Melhores estimativas
    Mais feedback
    Mais rápido

    View Slide

  9. <
    Redução de custos

    View Slide

  10. QA
    + Trabalho Proativo
    - Trabalho Reativo

    View Slide

  11. Validação
    ‣ Feedback rápido
    ‣ Prova que o código
    está correto
    OS DOIS LADOS DO TDD
    TDD

    View Slide

  12. Validação
    Unde omnis iste.
    ‣ Feedback rápido
    ‣ Prova que o código
    está correto
    OS DOIS LADOS DO TDD
    Especificação
    TDD ‣ Demonstra o que
    aquela peça deve fazer
    ‣ Demonstra os
    resultados esperados

    View Slide

  13. Validação
    Unde omnis iste.
    ‣ Feedback rápido
    ‣ Prova que o código
    está correto
    OS DOIS LADOS DO TDD
    Especificação
    TDD ‣ Demonstra o que
    aquela peça deve fazer
    ‣ Demonstra os
    resultados esperados
    O teste serve como spec

    View Slide

  14. Requisitos mais claros
    Primeiro você pensa

    View Slide

  15. Requisitos mais claros
    Primeiro você pensa
    Depois você coda

    View Slide

  16. Test Driven
    Design

    View Slide

  17. Program to an
    interface, not an
    implementation

    View Slide

  18. Program to an
    interface, not an
    implementation
    Menos
    acoplamento

    View Slide

  19. "TDD Should be Fun"
    - James Sinclair

    View Slide

  20. Feedback Loop
    Metas de
    Longo Prazo
    Recompensas
    Rápidas
    VS.

    View Slide

  21. Feedback Loop
    Metas de
    Longo Prazo
    Recompensas
    Rápidas
    VS.
    ‣ Feedback positivo constante e
    rápido

    View Slide

  22. Feedback Loop
    Metas de
    Longo Prazo
    Recompensas
    Rápidas
    VS.
    ‣ Feedback positivo constante e
    rápido
    ‣ Reduz o medo, prova que você
    está no caminho certo

    View Slide

  23. Feedback Loop
    Metas de
    Longo Prazo
    Recompensas
    Rápidas
    VS.
    ‣ Feedback positivo constante e
    rápido
    ‣ Você sabe que está no
    caminho certo
    DIVERSÃO

    View Slide

  24. Bons motivos para testar:

    View Slide

  25. Bons motivos para testar:
    1 Agilidade

    View Slide

  26. Bons motivos para testar:
    1 Agilidade
    2 Redução
    de custos

    View Slide

  27. Bons motivos para testar:
    1 Agilidade
    2
    3
    Redução
    de custos
    QA Proativo

    View Slide

  28. Bons motivos para testar:
    1 Agilidade
    2
    4
    3
    Redução
    de custos
    Especificação
    QA Proativo

    View Slide

  29. Bons motivos para testar:
    1 Agilidade
    2
    4
    5
    3
    Redução
    de custos
    Especificação
    QA Proativo
    Test Driven
    Design

    View Slide

  30. Bons motivos para testar:
    1 Agilidade
    2
    4
    5
    6
    3
    Redução
    de custos
    Especificação
    QA Proativo Diversão
    Test Driven
    Design

    View Slide

  31. Como escrever bons testes?

    View Slide

  32. Só automatizar não é o
    suficiente

    View Slide

  33. Automated crap is still crap

    View Slide

  34. Você não pode
    provar que seu
    software funciona

    View Slide

  35. Você não pode
    provar que seu
    software funciona
    Você só pode
    provar que ele
    não funciona

    View Slide

  36. Desenvolvimento
    em pequenos
    passos

    View Slide

  37. Desenvolvimento
    em pequenos
    passos
    Mais
    segurança

    View Slide

  38. Passos do
    tamanho da sua
    segurança

    View Slide

  39. Passos do
    tamanho da sua
    segurança

    View Slide

  40. "Qual tamanho devem
    ter meus testes?"

    View Slide

  41. "Qual tamanho devem
    ter meus testes?"

    View Slide

  42. "Qual tamanho devem
    ter meus testes?"
    O necessário

    View Slide

  43. "Qual tamanho devem
    ter meus testes?"
    O necessário
    Somente o
    necessário

    View Slide

  44. "Qual tamanho devem
    ter meus testes?"
    O necessário
    Somente o
    necessário
    O extraordinário
    é demais

    View Slide

  45. Isolamento
    Teste unitário testa apenas
    uma unidade (função)

    View Slide

  46. Isolamento
    Teste unitário testa apenas
    uma unidade (função)
    Quando algo falhar, sabemos
    pontualmente o que falhou

    View Slide

  47. Isolamento

    View Slide

  48. Independência
    Um teste depende
    apenas de uma “peça”

    View Slide

  49. Independência
    Um teste depende
    apenas de uma “peça”
    Um defeito causa
    falha em um teste

    View Slide

  50. Independência
    Stubs

    View Slide

  51. Independência

    View Slide

  52. Foco
    Um teste tem apenas
    um objetivo

    View Slide

  53. Foco
    Um teste tem apenas
    um objetivo
    Faça o mínimo de
    asserções por teste

    View Slide

  54. Foco
    Evite testes "frouxos"

    View Slide

  55. Foco
    Evite testes "frouxos"

    View Slide

  56. Foco
    Evite testes "frouxos"
    Quantos testes
    passam nisso?

    View Slide

  57. Foco

    View Slide

  58. Desacoplamento
    O teste não depende
    da implementação

    View Slide

  59. Desacoplamento
    O teste não depende
    da implementação
    Program to an interface,
    not an implementation

    View Slide

  60. Desacoplamento
    Você paga por testes
    em manutenção

    View Slide

  61. Para fazer bons testes:

    View Slide

  62. Para fazer bons testes:
    1 Isolamento

    View Slide

  63. Para fazer bons testes:
    1 Isolamento
    2 Independência

    View Slide

  64. Para fazer bons testes:
    1 Isolamento
    2
    3
    Independência
    Foco

    View Slide

  65. Para fazer bons testes:
    1 Isolamento
    2
    3
    4
    Independência
    Foco
    Desacoplamento

    View Slide

  66. Estou no caminho certo?

    View Slide

  67. Testes que falham são testes
    que produzem informações

    View Slide

  68. Testes que falham são testes
    que produzem informações
    Se arrisque

    View Slide

  69. Code coverage é bom

    View Slide

  70. Code coverage é bom
    Mas não é tudo

    View Slide

  71. 100% Code Coverage
    function incrementaIndice(arr, i)
    ➡ Soma 1 ao valor de índices já
    existentes
    ➡ Se o valor naquele índice é
    indefinido ele passa a ser 1

    View Slide

  72. 100% Code Coverage

    View Slide

  73. 100% Code Coverage
    Asserções

    View Slide

  74. 100% Code Coverage
    Asserções
    Possibilidades de
    entrada

    View Slide

  75. Medindo Coverage

    View Slide

  76. Medindo Coverage

    View Slide

  77. Cross-platform

    View Slide

  78. Cross-platform
    Diferentes
    implementações

    View Slide

  79. Cross-platform
    Diferentes
    implementações
    Diferentes features
    suportadas

    View Slide

  80. Cross-platform
    Tenha fallbacks

    View Slide

  81. O ecossistema parece grande…

    View Slide

  82. O ecossistema parece grande…

    View Slide

  83. O ecossistema parece grande…
    Mas é simples

    View Slide

  84. The UNIX
    Philosophy

    View Slide

  85. Mais
    possibilidades
    The UNIX
    Philosophy

    View Slide

  86. Mais
    possibilidades
    Aprendizado
    gradual
    The UNIX
    Philosophy

    View Slide

  87. Recapitulando:

    View Slide

  88. Recapitulando:
    1 Mocha

    View Slide

  89. Recapitulando:
    1
    2
    Mocha
    Chai

    View Slide

  90. Recapitulando:
    1
    2
    3
    Mocha
    Chai
    Sinon

    View Slide

  91. Recapitulando:
    1
    2
    4
    3
    Mocha
    Chai
    Sinon
    Istanbul

    View Slide

  92. Recapitulando:
    1
    2
    4
    5
    3
    Mocha
    Chai
    Sinon
    Istanbul
    Karma

    View Slide

  93. Valeu, Recife!

    View Slide

  94. Valeu, Recife!
    Free software is great software

    View Slide