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

Construa testes efetivos através do princípio F.I.R.S.T

Elder Moraes
November 27, 2019

Construa testes efetivos através do princípio F.I.R.S.T

“Escrever testes? Pra quê?! Coloca em produção que a gente entra lá e testa na mão mesmo!”
Certamente você já ouviu isso, e provavelmente mais de uma vez. A verdade é que, se talvez seja caro escrever testes, pode ser ainda mais caro não fazê-lo. Pior do que isso, só quando se escreve testes ruins.
Nesta sessão falaremos sobre a abordagem F.I.R.S.T para construção de testes. Com ela você vai escrever testes que realmente fazem sentido, e elevar os resultados do seu projeto a outro nível.
Junte-se a esse bate papo e crie os melhores testes da sua vida ainda hoje.

Elder Moraes

November 27, 2019
Tweet

More Decks by Elder Moraes

Other Decks in Technology

Transcript

  1. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 2 Construa testes efetivos através do princípio F.I.R.S.T Elder Moraes | @elderjava Developer Advocate Novembro, 2019
  2. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation.
  3. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 5 F I R S T AST NDEPENDENT EPEATABLE ELF-VALIDATING IMELY
  4. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Se os testes forem lentos, você não vai querer executá-los com frequência • Se você não os executa com frequência, não encontrará problemas cedo o suficiente para corrigí-los facilmente 6 F AST
  5. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | O que pode fazer um teste ser lento 7 F AST Execução manual Validação manual A própria execução do teste
  6. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Eliminando a execução manual – Frameworks: JUnit, Arquillian, Selenium, Mockito, Wiremock – Automações: Maven, Gradle, Jenkins, Vagrant, Ansible, Docker Compose – Monitoramento: Grafana, Prometheus, Jaeger 8 F AST
  7. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Eliminando a validação manual – Vide SELF-VALIDATING 9 F AST
  8. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Eliminando lentidão no próprio teste – Identificação dos pontos de lentidão (banco de dados, integração, rede, etc) – Refatoração de código – Mocking 10 F AST
  9. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Um teste não deve depender do outro • Um teste não deve criar as condições para o próximo teste • Você deve ser capaz de executar cada teste individualmente e executar todos os testes em qualquer ordem • Quando os testes dependem uns dos outros, o primeiro a falhar causa uma reação em cadeia, dificultando o diagnóstico e escondendo defeitos que possam estar adiante 11 I NDEPENDENT
  10. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Como eliminar dependência entre testes – Alta coesão – DRY (Don’t Repeat Yourself) 12 I NDEPENDENT “We want to design components that are self-contained: independent, and with a single, well-defined purpose” - The Pragmatic Programmer
  11. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Como eliminar dependência entre testes – Baixo acoplamento 13 I NDEPENDENT VS
  12. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Testes deve ser reproduzíveis em qualquer ambiente • Produção, QA, laptop (mesmo sem rede) • Do contrário, você sempre terá uma desculpa para não executá-los – Além disso, não conseguirá executá-los quando o ambiente não estiver disponível 15 R EPEATABLE
  13. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Eliminando a dependência de ambientes 16 R EPEATABLE Banco de Dados Sistema Operacional Deploy e Execução
  14. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Eliminando a dependência de ambientes 17 R EPEATABLE
  15. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Testes devem ser auto-explicativos: passou/falhou • O teste não deve exigir que *você*: – Leia um log – Compare dois arquivos – Veja uma tela – Etc… • Se não forem auto-explicativos, então a falha pode ser subjetiva • Leva à demora na validação (e falha no princípio FAST) 19 S ELF-VALIDATING
  16. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Testes devem ser escritos o quanto antes • Se você espera um código entrar em produção para escrever o teste, pode acabar descobrindo que é difícil testá-lo • Ao fazer isso continuamente, logo você terá todo seu código de produção impossível de ser testado 22 T IMELY
  17. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | “Tests are as important… as the production code is. Perhaps they are even more important, because tests preserve and enhance the flexibility, maintainability, and reusability of the production code.” – Rober C. Martin, “Clean Code” Confidential – Oracle Internal/Restricted/Highly Restricted 23