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

Testes de Software

felipe
November 20, 2019

Testes de Software

felipe

November 20, 2019
Tweet

More Decks by felipe

Other Decks in Technology

Transcript

  1. • Teste de software é o processo de executar um

    trecho de código, programa ou aplicação com a intenção de encontrar defeitos ou verificar a corretude de execução em condições controladas. • Não cobrem todas as possibilidades, mas buscam maximizar a confiança de corretude da aplicação. • Testes não provam que um programa está livre de bugs. Com testes é possível evidenciar a existência de defeitos e não a sua ausência. Teste de software?
  2. • Programadores Pessoas cometem erros. • Testes são essenciais para

    apontar falhas durante o processo de desenvolvimento. • É um processo a mais para garantir a satisfação das necessidades da aplicação. • É muito importante para garantir a qualidade do software e ganhar a confiança do cliente. • https://www.wired.com/2005/11/historys-worst-software-bugs/ Por que fazer testes?
  3. • A presença de testes facilita a refatoração de código,

    ajuda a prevenir que modificações na aplicação entrem em conflito com outras partes já implementadas. • Testes são uma documentação de baixo nível de como seu código funciona. • Testes são especificações do comportamento esperado do software. Por que fazer testes?
  4. 1. Unit tests 1. Integration tests 1. Functional tests (e2e)

    1. Load tests 1. Fuzzy tests 1. A/B tests Tipos de teste
  5. • Automatizar o processo de verificação de qualidade. • Diagnosticar

    falhas nos componentes de um sistema. • Segregar e isolar componentes do sistema para testar sua lógica. • Quanto mais cedo no processo de desenvolvimento, melhor. Unit Testing - Objetivos
  6. • Encontrar defeitos e erros de lógica no estágios mais

    básicos de desenvolvimento. • Facilita manutenção e refatoração de código. • Como os bugs são encontrados mais cedo, pode poupar tempo de debug em estágios mais avançados de desenvolvimento. • Contribui para que o desenvolvedor escreva código modular e que cada módulo tenha responsabilidades simples. Unit Testing - Vantagens
  7. • Consistente • Atômico (Pass or Fail) • Possui responsabilidade

    única • Autodescritivo • Sem blocos condicionais ou loops • Sem lógica de teste em código de produção Unit Testing - Características de um bom teste
  8. Não existe nenhum segredo ou mágica, seu código deve ser

    “testável” para você conseguir escrever testes. Escrevendo um código “testável”: • Evite variáveis de estado global e Singletons. (State is evil) • Se uma unidade precisa de algum recurso externo, ela deve pedir explicitamente por ele em seus parâmetros. (Law of Demeter) • Evite referências globais ao horário ou data atual. • Passe para as funções estritamente o que elas precisam, evite efeitos colaterais e novas instâncias misturadas com lógica. Unit Testing - Escrevendo testes
  9. Dependency Injection para crianças de 5 anos "Quando você vai

    pegar coisas na geladeira, você pode causar problemas. Você pode esquecer a porta aberta, você pode pegar algo que a mamãe ou o papai não querem que você pegue. Você pode até mesmo estar procurando por algo que nós não temos ou que já passou do prazo de validade. O que você deveria estar fazendo é indicar uma necessidade, "Eu preciso de alguma coisa para beber com o almoço", e então nós nos certificaremos que você tenha algo para beber quando você se sentar para comer." John Munsch Dependency Injection
  10. • São empregados para facilitar ou simplificar componentes de um

    sistema • Podem “imitar” comportamentos ou interfaces de outros módulos • São úteis para isolar APIs de terceiros, operações de rede e bancos de dados, fazendo com que a unidade testada não acesse componentes do sistema que independem do teste. • Tornam o processo de unit testing mais rápido Fake, Mock e Stub
  11. 01 02 03 04 05 O que você está testando?

    01 O que o teste deve fazer? 02 Qual é a saída da unidade a ser testada? 03 Como analisar a corretude da saída? 04 Qual é a saída esperada? 05 Unit testing - Roteiro