SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Olá, pessoas!
Trilha DevTest e Stadium
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?
O que seus testes
garantem?
O funcionamento do código
ou das funcionalidades do software?
Isaac Felisberto de Souza
Engenheiro de Software
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!
A falta de consenso sobre
a importância dos testes.
1
Profissionais que não
compreendem o valor
dos testes
Testes são importantes!
Profissionais que
implementam testes
Por que testes
são importantes?
TESTES SÃO IMPORTANTES
PARA QUE OS USUÁRIOS DO SOFTWARE
NÃO TENHAM PROBLEMAS AO UTILIZÁ-LO.
Ok, mas isso é meio óbvio!
Vamos praticar um
pouco de empatia…
Imagine que você
vai comprar um carro!
Agora, empatia
com algo mais
próximo de software…
Você deseja criar uma
conta em um banco digital!
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!
FOCO NA FUNCIONALIDADES
2
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…
➔ …
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.
Implementamos testes
mais focados na estrutura do código
do que nas funcionalidades!
E… Por que fazemos assim?
Aprendemos que…
Todo método
precisa ter um teste.
Mas…
Todo método
precisa ser testado.
Aprendemos que…
Todo teste deve ser
pequeno e focado.
Mas…
O foco deve ser na
funcionalidade/cenário.
Aprendemos que…
Um teste
deve ser independente
e isolado.
Mas…
Isso aplica-se
ao cenário de execução
e não as Classes.
(mocks para quase tudo)
Aprendemos que…
Um teste
deve ser rápido.
Mas…
Ainda precisa garantir
que o todo funciona.
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!
EQUILÍBRIO ENTRE
TIPOS DE TESTES
3
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?
E2E
Integração
Unitário
UI
Funcional
Aceitação
Serviços
Unitário
Maior integração
Mais lentos
Maior custo
Menor qtdade.
Menor Integração
Mais rápidos
Menor Custo
Maior qtdade.
QAs, Testers,
Pessoas de Negócio
Devs
A famosa pirâmide de testes…
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…
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…
Mais importante que
o tipo de teste utilizado,
é garantir que
a unidade de entrega funcione!
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.
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.
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…
➔ Não há uma regra
sobre qual o melhor tipo de testes!
➔ Combinar tipos de testes é válido
se o foco for a funcionalidade!
O USO
DOS RELATÓRIOS DE TESTES
4
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!
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.
Classes Métodos
Funcionalidade
Ações/Cenários
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.
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
…
O QUE TESTES DEVEM GARANTIR!
5
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!
Confia no seu software e nos testes?
Pratique empatia!
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

Mais conteúdo relacionado

Semelhante a O que seus testes garantem, o funcionamento do código ou das funcionalidades do software?

Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMAdriano Bertucci
 
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTPPalestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTPPriscila Coelho S. Blauth
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasKleitor Franklint Correa Araujo
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IVJoão Lourenço
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...GUTS-RS
 
Specificationby example
Specificationby example Specificationby example
Specificationby example Laís Berlatto
 
Teste de Software - Especialização Univem
Teste de Software - Especialização UnivemTeste de Software - Especialização Univem
Teste de Software - Especialização UnivemAndré Abe Vicente
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoSandy Maciel
 
DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilElias Nogueira
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de SeleniumAutotic
 
Workshop - Plano de Testes End to End com o Microsoft Test Manager
Workshop   - Plano de Testes End to End com o Microsoft Test ManagerWorkshop   - Plano de Testes End to End com o Microsoft Test Manager
Workshop - Plano de Testes End to End com o Microsoft Test ManagerAlan Carlos
 
Palestra Fundamentos de Testes - Tche linux POA
Palestra Fundamentos de Testes  - Tche linux POAPalestra Fundamentos de Testes  - Tche linux POA
Palestra Fundamentos de Testes - Tche linux POAAline Zanin
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 

Semelhante a O que seus testes garantem, o funcionamento do código ou das funcionalidades do software? (20)

Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTPPalestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IV
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
 
Specificationby example
Specificationby example Specificationby example
Specificationby example
 
Teste de Software - Especialização Univem
Teste de Software - Especialização UnivemTeste de Software - Especialização Univem
Teste de Software - Especialização Univem
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automação
 
DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágil
 
Qualidade e Testes de Software
Qualidade e Testes de SoftwareQualidade e Testes de Software
Qualidade e Testes de Software
 
Overview de QA
Overview de QA Overview de QA
Overview de QA
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
 
Workshop - Plano de Testes End to End com o Microsoft Test Manager
Workshop   - Plano de Testes End to End com o Microsoft Test ManagerWorkshop   - Plano de Testes End to End com o Microsoft Test Manager
Workshop - Plano de Testes End to End com o Microsoft Test Manager
 
Palestra Fundamentos de Testes - Tche linux POA
Palestra Fundamentos de Testes  - Tche linux POAPalestra Fundamentos de Testes  - Tche linux POA
Palestra Fundamentos de Testes - Tche linux POA
 
TesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdfTesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdf
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 

Mais de Isaac de Souza

Sua solução escala? Testes de Stress e APMs podem responder.
Sua solução escala? Testes de Stress e APMs podem responder.Sua solução escala? Testes de Stress e APMs podem responder.
Sua solução escala? Testes de Stress e APMs podem responder.Isaac de Souza
 
Seu código fonte é sustentável?
Seu código fonte é sustentável?Seu código fonte é sustentável?
Seu código fonte é sustentável?Isaac de Souza
 
Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.Isaac de Souza
 
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...Isaac de Souza
 
Compondo uma plataforma de software
Compondo uma plataforma de softwareCompondo uma plataforma de software
Compondo uma plataforma de softwareIsaac de Souza
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!Isaac de Souza
 
Desenhando a arquitetura do software!
Desenhando a arquitetura do software!Desenhando a arquitetura do software!
Desenhando a arquitetura do software!Isaac de Souza
 
Como DDD e principalmente Domain Model contribuem na construção de microservi...
Como DDD e principalmente Domain Model contribuem na construção de microservi...Como DDD e principalmente Domain Model contribuem na construção de microservi...
Como DDD e principalmente Domain Model contribuem na construção de microservi...Isaac de Souza
 
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...Isaac de Souza
 
A multiplicação dos devs!
A multiplicação dos devs!A multiplicação dos devs!
A multiplicação dos devs!Isaac de Souza
 
Estamos trabalhando melhor com dependências e ambientes usando containers?
Estamos trabalhando melhor  com dependências e ambientes  usando containers?Estamos trabalhando melhor  com dependências e ambientes  usando containers?
Estamos trabalhando melhor com dependências e ambientes usando containers?Isaac de Souza
 
É hora de pensar em soluções portáveis na cloud!
É hora de pensar em soluções portáveis na cloud!É hora de pensar em soluções portáveis na cloud!
É hora de pensar em soluções portáveis na cloud!Isaac de Souza
 
Cloud computing, quais vantagens reais?
Cloud computing, quais vantagens reais?Cloud computing, quais vantagens reais?
Cloud computing, quais vantagens reais?Isaac de Souza
 
Maior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em railsMaior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em railsIsaac de Souza
 

Mais de Isaac de Souza (14)

Sua solução escala? Testes de Stress e APMs podem responder.
Sua solução escala? Testes de Stress e APMs podem responder.Sua solução escala? Testes de Stress e APMs podem responder.
Sua solução escala? Testes de Stress e APMs podem responder.
 
Seu código fonte é sustentável?
Seu código fonte é sustentável?Seu código fonte é sustentável?
Seu código fonte é sustentável?
 
Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.
 
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
 
Compondo uma plataforma de software
Compondo uma plataforma de softwareCompondo uma plataforma de software
Compondo uma plataforma de software
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!
 
Desenhando a arquitetura do software!
Desenhando a arquitetura do software!Desenhando a arquitetura do software!
Desenhando a arquitetura do software!
 
Como DDD e principalmente Domain Model contribuem na construção de microservi...
Como DDD e principalmente Domain Model contribuem na construção de microservi...Como DDD e principalmente Domain Model contribuem na construção de microservi...
Como DDD e principalmente Domain Model contribuem na construção de microservi...
 
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
 
A multiplicação dos devs!
A multiplicação dos devs!A multiplicação dos devs!
A multiplicação dos devs!
 
Estamos trabalhando melhor com dependências e ambientes usando containers?
Estamos trabalhando melhor  com dependências e ambientes  usando containers?Estamos trabalhando melhor  com dependências e ambientes  usando containers?
Estamos trabalhando melhor com dependências e ambientes usando containers?
 
É hora de pensar em soluções portáveis na cloud!
É hora de pensar em soluções portáveis na cloud!É hora de pensar em soluções portáveis na cloud!
É hora de pensar em soluções portáveis na cloud!
 
Cloud computing, quais vantagens reais?
Cloud computing, quais vantagens reais?Cloud computing, quais vantagens reais?
Cloud computing, quais vantagens reais?
 
Maior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em railsMaior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em rails
 

O que seus testes garantem, o funcionamento do código ou das funcionalidades do software?

  • 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
  • 6. Profissionais que não compreendem o valor dos testes Testes são importantes!
  • 7. Profissionais que implementam testes Por que testes são importantes?
  • 8. TESTES SÃO IMPORTANTES PARA QUE OS USUÁRIOS DO SOFTWARE NÃO TENHAM PROBLEMAS AO UTILIZÁ-LO. Ok, mas isso é meio óbvio!
  • 9. Vamos praticar um pouco de empatia… Imagine que você vai comprar um carro!
  • 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.
  • 15. Implementamos testes mais focados na estrutura do código do que nas funcionalidades! E… Por que fazemos assim?
  • 16. Aprendemos que… Todo método precisa ter um teste. Mas… Todo método precisa ser testado.
  • 17. Aprendemos que… Todo teste deve ser pequeno e focado. Mas… O foco deve ser na funcionalidade/cenário.
  • 18. Aprendemos que… Um teste deve ser independente e isolado. Mas… Isso aplica-se ao cenário de execução e não as Classes. (mocks para quase tudo)
  • 19. Aprendemos que… Um teste deve ser rápido. Mas… Ainda precisa garantir que o todo funciona.
  • 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?
  • 23. E2E Integração Unitário UI Funcional Aceitação Serviços Unitário Maior integração Mais lentos Maior custo Menor qtdade. Menor Integração Mais rápidos Menor Custo Maior qtdade. QAs, Testers, Pessoas de Negócio Devs A famosa pirâmide de testes…
  • 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!
  • 31. O USO DOS RELATÓRIOS DE TESTES 4
  • 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 …
  • 37. O QUE TESTES DEVEM GARANTIR! 5
  • 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