A importância de testes de software já deveriam ser um consenso entre times de desenvolvimento. Contudo ainda há profissionais que não compreendem o valor deles, um dos motivos é que de fato muitos softwares possuem testes mas continuam a apresentar bugs a cada entrega. Isso ocorre porque é comum os testes garantirem o funcionamento do código, mas não das funcionalidades como um todo. Na apresentação será abordado como equilibrar testes unitários, de componentes e de integração organizando-os através de uma visão mais direcionada ao negócio, features e histórias do que apenas ao código implementado.
2. JOGO RÁPIDO!
Participantes online
podem responder
“Sim” no chat!
➔ Quem utiliza testes de softwares?
➔ Quem ainda tem problemas em produção,
mesmo havendo testes?
3. O que seus testes
garantem?
O funcionamento do código
ou das funcionalidades do software?
Isaac Felisberto de Souza
Engenheiro de Software
4. ROTEIRO
DE HOJE!
1
A falta de consenso sobre
a importância dos testes
2 Foco na funcionalidades
3 Equilíbrio entre tipos de testes
4 O uso dos relatórios de testes
5 O que testes devem garantir!
5. A falta de consenso sobre
a importância dos testes.
1
10. Agora, empatia
com algo mais
próximo de software…
Você deseja criar uma
conta em um banco digital!
11. Por fim, temos
profissionais que…
Eles têm:
➔ Baterias de testes.
➔ Que são executadas no CI.
➔ Com 80%, 90%, 95%+ de cobertura de código.
Mas ainda o usuário encontra problemas…
Compreendem o valor,
implementam testes
e buscam evitar que usuário tenha problemas!
13. Um cenário fictício para exercitarmos…
O Guia Hóspede!
Cadastro de Conta
Cadastro de Hotéis
Busca e Visualização
de Hotéis
Reserva de Estadias
Pagamento
Gerenciamento de
Reservas
Cadastro de Conta…
➔ Como Cliente, quero criar uma Conta…
➔ Como Cliente, quero editar uma Conta…
➔ Como Cliente, quero desativar uma Conta…
➔ …
No backend, em Node, vamos implementar uma API…
➔ Criar as Entidades…
➔ Implementar persistência…
➔ Implementar services…
➔ Implementar controllers…
➔ …
14. Um cenário fictício para exercitarmos…
O Guia Hóspede!
…
● account.dto.ts
● account.repository.dto.ts
● account.service.ts
● account.controller.ts
…
…
● account.repository.spec.ts
● account.service.spec.ts
● account.controller.spec.ts
…
Ao implementar testes…
No Repository
➔ Mock do banco de dados, ou em memória.
➔ Simulações de persistência da entidade isoladamente.
No Service
➔ Mock do repositório ou banco de dados.
➔ Simulações de regras de negócio isoladamente.
No Controller
➔ Mock do service ou repositório
➔ Simulações de chamadas e tratamentos de retorno
isoladamente.
20. Aprendemos que…
Testes unitários
são a base e se
referem a menor
unidade do software.
(classes/métodos)
Mas…
Testes unitários são
apenas mais um tipo de
testes dentre muitos e a
unidade testada pode
ser a funcionalidade!
22. Tipos de
testes…
➔ Teste de Unitários
➔ Teste de Integração
➔ Teste Funcional
➔ Teste de Aceitação
➔ Teste de Configuração
➔ Teste de Regressão
➔ Teste de Instalação
➔ Teste de Integridade
➔ Teste de Segurança
➔ Teste de Carga
➔ Teste de Performance
➔ Teste de Stress
➔ Teste de Usabilidade
➔ Teste de Manutenção
➔ Teste de compatibilidade
➔ E outros…
20+ tipos…
Qual o melhor?
24. Qual é a “unidade” de entrega?
➔ Um Endpoint no backend.
➔ Uma tela no frontend.
➔ Um método/função em uma library.
➔ Uma integração com terceiro.
➔ Classes e métodos? ou…
25. Testes Unitários Testes de Componente
Ambos se concentrem em verificar
o funcionamento de partes individuais do código
O escopo é
classes e métodos/funções
O escopo é mais amplo,
agrupa um conjunto de classes
que compõem um componente.
Contudo, há uma sutil diferença entre eles…
26. Mais importante que
o tipo de teste utilizado,
é garantir que
a unidade de entrega funcione!
27. Mais fácil e rápido.
Independentes e Isolados.
Normalmente, pequenos.
Muitos testes para gerar cobertura.
Não garantem o funcionamento do todo.
Testes
Unitários
foco em
classes/métodos
Testes de
Componentes
foco em
funcionalidade
Testes de
Integração
Pode ser fácil e rápido.
Podem ser Independentes e Isolados.
Tamanho relativo a funcionalidade.
Gera boa cobertura com poucos testes.
Maior garantia de funcionamento do todo
Pode ser mais complexo de implementar.
Mais lentos e difíceis de implementar
Baixo isolamento.
Garantem o funcionamento do todo.
28. Testes de
Componentes
(Funcionalidades)
Testes
Unitários
(Classes)
Testes de
Integração
O FOCO É A FUNCIONALIDADE!
Visualize a funcionalidade
como um componente!
Os primeiros testes devem
ser sobre “os recursos visíveis”
da funcionalidade.
Use unitários quando
realmente testar fragmentos
faça sentido.
Foque em testar
o que é inerente
à integração.
Pontos de “integração”
internos na visão de componente,
podem ser testados junto ao componente.
29. Relembrando nosso exemplo da Account no Guia Hóspede…
…
● account.dto.ts
● account.repository.dto.ts
● account.service.ts
● account.controller.ts
…
…
● account.repository.dto.spec.ts
● account.service.spec.ts
● account.controller.spec.ts
…
…
● account.spec.ts
(com testes das funcionalidades e cenários)
…
…
account/
● account.create.spec.ts
● account.edit.spec.ts
● account.remove.spec.ts
(cada um com cenários referente a funcionalidades)
…
Ou…
30. ➔ Não há uma regra
sobre qual o melhor tipo de testes!
➔ Combinar tipos de testes é válido
se o foco for a funcionalidade!
32. Os resultados de um teste não se
resumem a apenas um ou !
Os relatórios ajudam a visualizar as
funcionalidades e cenários testados!
33. Relatório com
os resultados
dos testes. ➔ Pode apresentar funcionalidades e cenários
testados, e não “as classes e métodos”.
➔ Um Desenvolvedor novo no projeto deve
entender o software analisando esse relatório.
➔ Pode ser publicado e visível a QAs, POs, PMs,
dentre outros.
35. Relatório de
cobertura do
código. (covarage)
➔ O foco não deve ser apenas 100% de
cobertura do código, mas 100% dos cenários.
➔ O Desenvolvedor deve utilizar o relatório de
cobertura.
36. Com testes focados na
funcionalidade…
Um teste irá gerar cobertura
em vários pontos do software.
Maior cobertura
com menor esforço
…
account/
● account.create.spec.ts
…
…
● account.controller.ts
● account.dto.ts
● account.service.ts
● account.repository.dto.ts
…
38. Que os usuários do software
não tenham problemas ao utilizá-lo.
➔ Foco na funcionalidade é mais relevante que a estrutura do código.
➔ Os tipos de testes são como você testará, e não o objetivo do teste.
➔ Os relatórios, quando bem utilizados, possuem valor para o time!
39. Confia no seu software e nos testes?
Pratique empatia!
40. Isaac Felisberto de Souza
Engenheiro de Software
isaacsouza@gmail.com
linkedin.com/in/isaacfsouza
Obrigado!
Dúvidas?
Visite:
www.guia.dev
Conheça:
PARA EMPRESAS
Siga e compartilhe:
@guia_dev
Guia Dev