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.