SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Testes: existe
vida antes do TDD
Diana Ungaro Arnos
Objetivos
● Entender o que são testes de software;
● Entender a importância dos testes unitários
no desenvolvimento de software;
● Proporcionar uma visão geral sobre vários
tipos de teste.
Agenda
● Testes: por que, o que são e tipos;
● Testes automatizados e Continuous Integration;
● Testes unitários e mocking;
● Testes funcionais e de aceitação;
● Testes de estresse.
Testes: por que, o que são e tipos
Testes: por que, o que são e tipos
● Garantir que a aplicação faça a coisa certa do jeito
certo (Uncle Bob)
● Procurar e encontrar bugs
● Evitam perda de dinheiro e comprometimento da
imagem da empresa
● Podem ser caixa branca ou caixa preta
Com verificação de código
O código não interessa
Testes: por que, o que são e tipos
Tipos
Unitário
Testam unidades
individuais de código, como
classes e métodos
Integração
Testam partes da aplicação
e sua integração com o
resto do sistema (teste de
componentes). Identifica
erros de interface entre
módulos.
Sistema
São testes tipo caixa preta
que analisam a aplicação
ponta-a-ponta,
baseados nos requisitos de
sistema. Seguem roteiros,
definidos de acordo com
planos de teste pré
definidosCaixa branca
Testes automatizados e CI
Automatização de testes
● Utilização de software especializado que controla a execução de
testes e a comparação de resultados previstos e esperados;
Continuous Integration
● Prática de engenharia de software em que mudanças no código são
imediatamente testadas e reportadas quando adicionadas a uma
base de código (quando é feito um pull request)
Testes automatizados e CI
O cenário ideal
1. Pull request feito
2. Execução automática dos testes
disponíveis
3. É gerado um relatório com o
resultado dos testes e a
indicação se as alterações
podem ser integradas ao código
sem problemas
Testes automatizados e CI
O cenário OMFG! *_*
Todos os passos anteriores e mais:
4. Após a execução com sucesso
dos testes, o código é
automaticamente integrado
(merge)
5. O relatório gerado indica todas
as alterações que foram
adicionadas ao código (diff)
Obs.: O teste de sistema sempre terá uma parte
manual, mas também pode (e deve) ser
complementado com testes automatizados que cobrem
vários cenários
Testes automatizados e CI
Boas práticas de Continuous Integration
● Comitar código frequentemente;
● Categorizar os testes;
● Utilizar um servidor integrado de build;
● Utilizar mecanismos de feedback contínuo;
● Builds de staging.
Testes unitários e mocking
Objetivo: garantir o retorno esperado em todos os casos possíveis
O Caminho Feliz Fluxo Alternativo Fluxo de Exceção
Não testam lógica de negócio, apenas a
implementação do código
Testes unitários e mocking
Vantagens!
● Manutenção facilitada de código
● Segurança ao refatorar
● Serve como documentação
● Estimula melhor implementação
da programação orientada a
objetos
Sai mais barato descobrir um bug
em estágios iniciais de
desenvolvimento
Testes unitários e mocking
Seu teste está errado quando:
● Você precisa alterar seu ambiente para os testes rodarem sem problemas
(ex.: alterar configurações da aplicação)
● Faz comunicação com algum banco de dados
● Utiliza algum recurso de rede
● Utiliza seu sistema de arquivos
Testes unitários e mocking
Boas práticas!
● Cada teste verifica apenas um comportamento
● Um teste não deve depender do resultado de outro
● Testar apenas métodos públicos
● O nome de cada teste deve indicar o que está sendo testado e qual o resultado esperado (sim,
algunsNomesPodemFicarUmTantoGrandes)
● Usar testes parametrizados sempre que possível
Polêmica: usar um único método de assert por teste
Testes unitários e mocking
Mocking
Criação de objetos que simulam o comportamento de objetos reais e
substituem as dependências externas nos testes.
Stubs
Não têm lógica, apenas
retornam o que você
mandar, basicamente com
reusultados hard coded
Fakes
Mais próximos da
implementação de objetos
reais, possuem lógica e são
capazes de manter um
estado
Mocks
Objetos baseados em
expectativas e que simulam
comportamento, testam
interações entre objetos
Testes funcionais e de aceitação
Funcionais
São testes de verificação e
descrevem o que o sistema faz,
analisando as saídas de acordo com
as entradas, baseados nas
especificações de negócio. Por
exemplo: teste de cálculo de frete.
Aceitação
São testes de validação. Verificam se
a aplicação satisfaz as necessidades
do cliente. É a última camada de
testes, muitas vezes executada
quando a aplicação já está em
produção. Por exemplo: teste AB.
Testes Caixa Preta
Testes de estresse
Verificam robustez, disponibilidade e resiliência da
aplicação quando está sob condições desfavoráveis
● Não-funcionais;
● Caixa branca ou preta;
● De acordo com a definição pen testing e fuzz testing também pode ser
considerados testes de estresse.
DÚVIDAS?
Obrigada!
Diana Ungaro Arnos
Webdev @ Tricae
Twitter: @dianaarnos
G+: +DianaUngaroArnos
Facebook: /dianaaarnos

Mais conteúdo relacionado

Mais procurados

Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGbeiraJUG
 
Palestra tdd - rsjug
Palestra tdd - rsjugPalestra tdd - rsjug
Palestra tdd - rsjugBruno Maomeh
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Bruno Maomeh
 
Testes Unitários/Integrados
Testes Unitários/IntegradosTestes Unitários/Integrados
Testes Unitários/IntegradosGiovanni Bassi
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockitoRenan Uchôa
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiInael Rodrigues
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec ComIgor Rozani
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Renato Groff
 
Teste Dirigido por Modelos
Teste Dirigido por ModelosTeste Dirigido por Modelos
Teste Dirigido por ModelosNatã Melo
 
Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade IIJoão Lourenço
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Renato Groff
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?Samuel Lourenço
 
PHP Experience 2016 - [Palestra] Pirâmide de Testes
PHP Experience 2016 - [Palestra] Pirâmide de TestesPHP Experience 2016 - [Palestra] Pirâmide de Testes
PHP Experience 2016 - [Palestra] Pirâmide de TestesiMasters
 
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Robson Bittencourt
 

Mais procurados (20)

Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUG
 
Palestra tdd - rsjug
Palestra tdd - rsjugPalestra tdd - rsjug
Palestra tdd - rsjug
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016
 
Teste baseado em modelos
Teste baseado em modelosTeste baseado em modelos
Teste baseado em modelos
 
Testes Unitários/Integrados
Testes Unitários/IntegradosTestes Unitários/Integrados
Testes Unitários/Integrados
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 
Testes unitários e Mocks
Testes unitários e MocksTestes unitários e Mocks
Testes unitários e Mocks
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
 
JUnit Experience
JUnit ExperienceJUnit Experience
JUnit Experience
 
Teste Dirigido por Modelos
Teste Dirigido por ModelosTeste Dirigido por Modelos
Teste Dirigido por Modelos
 
Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade II
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016
 
Desenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por Testes
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
 
PHP Experience 2016 - [Palestra] Pirâmide de Testes
PHP Experience 2016 - [Palestra] Pirâmide de TestesPHP Experience 2016 - [Palestra] Pirâmide de Testes
PHP Experience 2016 - [Palestra] Pirâmide de Testes
 
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
 

Semelhante a Testes: existe vida antes do TDD

Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxRoberto Nunes
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareCloves da Rocha
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...Rodrigo Oliveira, Msc, PMP
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe munizMatheus de Lara Calache
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IVJoão Lourenço
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de UnidadeAline Ferreira
 
A importância de utilizar testes automatizados
A  importância   de utilizar  testes automatizadosA  importância   de utilizar  testes automatizados
A importância de utilizar testes automatizadosDiego Allan Oliveira
 
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
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
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
 
Testes, engenharia de Software, teste de Software
Testes, engenharia de Software, teste de SoftwareTestes, engenharia de Software, teste de Software
Testes, engenharia de Software, teste de SoftwareSilas Gonçalves
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IJoão Lourenço
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeUniversidade Tiradentes
 
Cobertura de Código: Testes de Unidade
Cobertura de Código: Testes de UnidadeCobertura de Código: Testes de Unidade
Cobertura de Código: Testes de UnidadeThiago Bertuzzi
 

Semelhante a Testes: existe vida antes do TDD (20)

Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptx
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IV
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
A importância de utilizar testes automatizados
A  importância   de utilizar  testes automatizadosA  importância   de utilizar  testes automatizados
A importância de utilizar testes automatizados
 
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
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
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...
 
Testes, engenharia de Software, teste de Software
Testes, engenharia de Software, teste de SoftwareTestes, engenharia de Software, teste de Software
Testes, engenharia de Software, teste de Software
 
Eng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de softwareEng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de software
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por teste
 
Cobertura de Código: Testes de Unidade
Cobertura de Código: Testes de UnidadeCobertura de Código: Testes de Unidade
Cobertura de Código: Testes de Unidade
 

Testes: existe vida antes do TDD

  • 1. Testes: existe vida antes do TDD Diana Ungaro Arnos
  • 2. Objetivos ● Entender o que são testes de software; ● Entender a importância dos testes unitários no desenvolvimento de software; ● Proporcionar uma visão geral sobre vários tipos de teste.
  • 3. Agenda ● Testes: por que, o que são e tipos; ● Testes automatizados e Continuous Integration; ● Testes unitários e mocking; ● Testes funcionais e de aceitação; ● Testes de estresse.
  • 4. Testes: por que, o que são e tipos
  • 5. Testes: por que, o que são e tipos ● Garantir que a aplicação faça a coisa certa do jeito certo (Uncle Bob) ● Procurar e encontrar bugs ● Evitam perda de dinheiro e comprometimento da imagem da empresa ● Podem ser caixa branca ou caixa preta Com verificação de código O código não interessa
  • 6. Testes: por que, o que são e tipos Tipos Unitário Testam unidades individuais de código, como classes e métodos Integração Testam partes da aplicação e sua integração com o resto do sistema (teste de componentes). Identifica erros de interface entre módulos. Sistema São testes tipo caixa preta que analisam a aplicação ponta-a-ponta, baseados nos requisitos de sistema. Seguem roteiros, definidos de acordo com planos de teste pré definidosCaixa branca
  • 7. Testes automatizados e CI Automatização de testes ● Utilização de software especializado que controla a execução de testes e a comparação de resultados previstos e esperados; Continuous Integration ● Prática de engenharia de software em que mudanças no código são imediatamente testadas e reportadas quando adicionadas a uma base de código (quando é feito um pull request)
  • 8. Testes automatizados e CI O cenário ideal 1. Pull request feito 2. Execução automática dos testes disponíveis 3. É gerado um relatório com o resultado dos testes e a indicação se as alterações podem ser integradas ao código sem problemas
  • 9. Testes automatizados e CI O cenário OMFG! *_* Todos os passos anteriores e mais: 4. Após a execução com sucesso dos testes, o código é automaticamente integrado (merge) 5. O relatório gerado indica todas as alterações que foram adicionadas ao código (diff) Obs.: O teste de sistema sempre terá uma parte manual, mas também pode (e deve) ser complementado com testes automatizados que cobrem vários cenários
  • 10. Testes automatizados e CI Boas práticas de Continuous Integration ● Comitar código frequentemente; ● Categorizar os testes; ● Utilizar um servidor integrado de build; ● Utilizar mecanismos de feedback contínuo; ● Builds de staging.
  • 11. Testes unitários e mocking Objetivo: garantir o retorno esperado em todos os casos possíveis O Caminho Feliz Fluxo Alternativo Fluxo de Exceção Não testam lógica de negócio, apenas a implementação do código
  • 12. Testes unitários e mocking Vantagens! ● Manutenção facilitada de código ● Segurança ao refatorar ● Serve como documentação ● Estimula melhor implementação da programação orientada a objetos Sai mais barato descobrir um bug em estágios iniciais de desenvolvimento
  • 13. Testes unitários e mocking Seu teste está errado quando: ● Você precisa alterar seu ambiente para os testes rodarem sem problemas (ex.: alterar configurações da aplicação) ● Faz comunicação com algum banco de dados ● Utiliza algum recurso de rede ● Utiliza seu sistema de arquivos
  • 14. Testes unitários e mocking Boas práticas! ● Cada teste verifica apenas um comportamento ● Um teste não deve depender do resultado de outro ● Testar apenas métodos públicos ● O nome de cada teste deve indicar o que está sendo testado e qual o resultado esperado (sim, algunsNomesPodemFicarUmTantoGrandes) ● Usar testes parametrizados sempre que possível Polêmica: usar um único método de assert por teste
  • 15. Testes unitários e mocking Mocking Criação de objetos que simulam o comportamento de objetos reais e substituem as dependências externas nos testes. Stubs Não têm lógica, apenas retornam o que você mandar, basicamente com reusultados hard coded Fakes Mais próximos da implementação de objetos reais, possuem lógica e são capazes de manter um estado Mocks Objetos baseados em expectativas e que simulam comportamento, testam interações entre objetos
  • 16. Testes funcionais e de aceitação Funcionais São testes de verificação e descrevem o que o sistema faz, analisando as saídas de acordo com as entradas, baseados nas especificações de negócio. Por exemplo: teste de cálculo de frete. Aceitação São testes de validação. Verificam se a aplicação satisfaz as necessidades do cliente. É a última camada de testes, muitas vezes executada quando a aplicação já está em produção. Por exemplo: teste AB. Testes Caixa Preta
  • 17. Testes de estresse Verificam robustez, disponibilidade e resiliência da aplicação quando está sob condições desfavoráveis ● Não-funcionais; ● Caixa branca ou preta; ● De acordo com a definição pen testing e fuzz testing também pode ser considerados testes de estresse.
  • 19. Obrigada! Diana Ungaro Arnos Webdev @ Tricae Twitter: @dianaarnos G+: +DianaUngaroArnos Facebook: /dianaaarnos