Which are the basic types of test?

Which are the basic types of test?

Tipos de Testes em Software

Introdução aos Tipos de Teste

  • O vídeo discute a importância de ter uma visão ampla sobre os tipos de testes disponíveis, além dos testes de aceitação já abordados.
  • A classificação dos testes é complexa devido à diversidade nas definições e terminologias utilizadas na literatura.

Dimensões para Classificação de Testes

  • O apresentador propõe considerar várias dimensões para classificar os testes, começando pelo fator de qualidade verificado.
  • Os testes têm como objetivo verificar se o sistema atende ao comportamento esperado, que pode ser avaliado em termos de corretude, performance, segurança, robustez e compatibilidade.

Fatores de Qualidade nos Testes

  • Cada tipo de teste deve ser caracterizado pelo fator de qualidade que está sendo verificado; no curso, o foco será em testes funcionais.
  • Exemplos incluem o teste de aceitação do Guri, que verifica se as funcionalidades foram implementadas corretamente através da interface gráfica.

Diferença entre Tipos de Teste

  • A distinção entre diferentes tipos de teste é feita com base no objetivo: por exemplo, um teste funcional foca na corretude das funcionalidades implementadas.
  • Os testes discutidos até agora são classificados como funcionais e envolvem a verificação direta do sistema ou serviços.

Integridade da Programação nos Testes

  • A integridade da programação refere-se a qual parte do sistema está sendo exercitada durante o teste; isso determina se é um teste "de guri" ou "de serviço".
  • O vídeo menciona que dependendo do elemento testado (como classes ou métodos), a nomenclatura do teste pode mudar.

Exemplos Práticos e Conclusão

  • O apresentador destaca exemplos práticos onde os testes exercitam diretamente componentes específicos do sistema.

Testes de Unidade e Integração em Programação

Importância dos Testes de Classe e Funcionalidade

  • A performance do sistema pode ser exercitada através de testes, como a verificação da sensação de alunos na classe EstudanteList.
  • É possível realizar testes para garantir que a inserção e remoção de alunos estão sendo feitas corretamente, destacando a importância da qualidade no código.

Dimensões dos Testes

  • Os testes devem verificar quais elementos do programa estão sendo exercitados, considerando as dependências necessárias para sua execução.
  • O teste de unidade não se limita a uma única classe; ele pode envolver pacotes ou métodos, dependendo das dependências.

Conceito de Stub e Simulação

  • Um teste de unidade pode utilizar stubs para simular o comportamento de classes dependentes, permitindo testar uma classe isoladamente.
  • Stubs são classes que imitam o comportamento esperado sem implementar toda a lógica necessária, facilitando testes específicos.

Execução dos Testes

  • Um exemplo prático é um stub que simula o cadastro de um aluno com CPF específico, mas não implementa realmente a lógica completa.
  • O teste deve focar na parte do sistema desejada, utilizando versões antigas ou stubs das dependências para evitar falhas durante os testes.

Diferença entre Teste de Unidade e Integração

  • O teste de integração utiliza novas versões das dependências ao invés de stubs, garantindo que todas as partes do sistema funcionem juntas.
  • O teste end-to-end envolve todas as dependências em um ambiente semelhante ao produção, assegurando que o sistema funcione como um todo.

Necessidade dos Dois Tipos de Teste

  • A realização tanto do teste unitário quanto do teste de integração é crucial; o primeiro não garante que o sistema funcionará após a integração.

A Importância dos Testes de Unidade e Integração

Testes de Unidade vs. Testes de Integração

  • Os testes de unidade garantem que novas funcionalidades funcionam com versões anteriores ou stubs, mas não asseguram o comportamento ao integrar diferentes partes do sistema.
  • Após a integração, se um teste falha, é difícil identificar se o erro está na nova funcionalidade ou em uma parte já existente, destacando a importância dos testes de unidade para localizar problemas.
  • Um teste quebrado após a integração indica um problema na dependência; isso pode ser devido à implementação incorreta por parte do colega ou uma suposição errada sobre seu comportamento.
  • Os testes de unidade permitem detectar defeitos rapidamente sem depender da finalização do trabalho dos colegas, proporcionando feedback imediato sobre o código.
  • É essencial equilibrar os dois tipos de teste (unidade e integração), conforme ilustrado pela pirâmide de testes.

A Pirâmide de Testes

  • A pirâmide ilustra a quantidade ideal de cada tipo de teste: muitos testes unitários na base, menos testes de integração no meio e poucos testes end-to-end no topo.
  • Testes que exercitam diretamente as classes são mais rápidos e fornecem feedback mais ágil em comparação aos que testam serviços ou sistemas completos.
  • Embora a pirâmide seja uma boa prática, ela não é rígida; diferentes situações podem exigir diferentes configurações e quantidades de testes.
  • Cada suíte deve ser adaptada às necessidades específicas do projeto, podendo incluir mais testes unitários ou focar em serviços dependendo da fase do desenvolvimento.
  • O uso da pirâmide serve como guia geral para determinar a quantidade adequada de cada tipo de teste durante o desenvolvimento.

Garantias Fornecidas pelos Testes

  • Os testes de aceitação oferecem uma forte garantia ao validar se o sistema atende às especificações acordadas com o cliente.
  • Esses testes atuam como contratos baseados nas especificações dos cenários; sua aprovação indica que o sistema funciona conforme esperado pelo cliente.
  • Já os testes de regressão verificam se comportamentos previamente funcionais continuam operando após mudanças no sistema, mesmo sem estarem ligados diretamente aos requisitos iniciais.
  • Eles são executados rotineiramente após cada commit para garantir que novas alterações não afetem funcionalidades existentes positivamente testadas anteriormente.
  • Por fim, os testes exploratórios oferecem garantias mínimas sobre a operação básica do sistema; eles confirmam apenas que ele inicia corretamente sem assegurar um funcionamento completo.

Conclusão

Teste de Aceitação: Compreendendo as Dimensões

Características dos Testes de Aceitação

  • O teste de aceitação é baseado nas especificações dos cenários, garantindo que o sistema atenda aos requisitos acordados. Se os testes forem bem-sucedidos, o release pode ser aceito.
  • Os testes são classificados como funcionais e podem ser executados com todas as dependências, resultando em um teste de aceitação funcional e de sistema.
  • Quando os testes são realizados apenas com algumas dependências atualizadas, eles se tornam um teste de aceitação funcional e de integração.
  • A execução correta desses testes é crucial para validar a integridade do sistema antes da liberação final.
Playlists: Testing