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

Testes de Software

Avatar for felipe felipe
November 20, 2019

Testes de Software

Avatar for felipe

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