Níveis de teste e proteção contra regressões
Nesta aula
Separar escopo de finalidade
Um nível de teste descreve o alcance da verificação. No teste unitário, uma pequena unidade é exercitada com suas dependências controladas. Na integração, verificamos a colaboração entre partes e suas fronteiras reais. No teste de sistema, percorremos o produto integrado em relação aos requisitos. A terminologia pode variar conforme a arquitetura; por isso, a equipe declara a fronteira usada. O CTFL apresenta níveis de teste e distingue testes de confirmação e regressão [S16, seção Níveis de teste e tipos de teste].
Regressão é outra dimensão: a busca por efeitos indesejados de uma mudança sobre comportamentos já existentes. Um teste unitário pode ser executado para detectar regressão, assim como um teste de integração ou sistema. Confirmação responde se o defeito corrigido deixou de ocorrer no caso que o revelou. Regressão investiga se a correção danificou outras partes. Esses objetivos podem compartilhar testes, mas não significam a mesma pergunta.
Definir a fronteira antes da ferramenta
Na Oficina Caracol, o mesmo requisito de ocultar inativos aparece em três escopos. Os registros conceituais A ativo e B inativo fornecem a entrada conhecida. Escolhemos uma asserção, isto é, a condição que deverá ser verdadeira. Não basta chamar um teste de integração porque ele contém um botão: o nome depende de quais componentes colaboram e do que ficou fora da execução.
| Escopo | Partes reais e partes controladas | Ação e asserção |
|---|---|---|
| Unidade | listarAtivos real; array válido fornecido pelo teste; sem arquivo ou rede | Selecionar entre A e B; obter objeto público de A, sem campo ativo |
| Integração | Servidor HTTP e leitura do arquivo de exemplo reais; cliente controlado | Consultar GET /api/casos; resposta pública omite B e só expõe id, titulo e descricao |
| Sistema | Servidor, página e JavaScript do navegador reais | Abrir o catálogo e percorrer a interface; visualizar A e não B |
Construir e executar a proteção
- Escreva o resultado esperado e escolha o escopo que consegue demonstrá-lo. Uma regra pura admite um teste rápido; uma falha de cabeçalho HTTP exige exercitar a fronteira HTTP.
- Prepare dados isolados e limpe o estado criado pelo teste. Um teste não deve depender de outro ter sido executado primeiro.
- Use substitutos apenas para dependências que deseja controlar. Mock é um substituto configurado para responder ou registrar interações; sua existência não demonstra que o serviço real seja compatível.
- Execute os testes automatizados com npm test dentro de pratica. Esse comando não substitui a navegação manual necessária ao REQ-004.
- Após uma correção, execute o caso que reproduzia o defeito e as proteções pertinentes às áreas afetadas. Registre versão, comando, resultado e limites da execução.
Caso trabalhado de correção
Imagine que uma implementação defeituosa aceite registros cujo campo ativo esteja ausente. O caso reproduzível contém A ativo, B inativo e C sem esse campo; pelo contrato, C é inválido. validarCasos deve lançar TypeError, e a API deve responder 500 com mensagem pública genérica se o arquivo de catálogo for inválido. O reparo deve tratar a fronteira correta: dados inválidos não podem virar dados públicos aparentemente válidos. A verificação de confirmação exercita C e exige a resposta contratada em cada escopo.
A regressão usa o conjunto válido A/B para preservar a listagem e o conjunto vazio para preservar o estado vazio. O teste HTTP verifica que o servidor aplica o contrato. A inspeção da interface verifica o feedback ao usuário. Esses resultados são esperados do cenário didático; somente a execução no pacote permite preencher aprovado ou reprovado. Caso a regra passe e a interface falhe, o requisito continua incompleto.
Erros e reparos
| Erro observado | Reparo próprio do problema |
|---|---|
| Todos os testes substituem a leitura de dados | Acrescentar uma integração com arquivo de exemplo real |
| Uma alteração visual derruba testes da regra | Revisar se o teste depende de estrutura interna em vez do comportamento contratado |
| Só o caso defeituoso é reexecutado | Selecionar também comportamentos relacionados que podem ter sofrido regressão |
Condição de avanço e exercício resolvido
O conjunto avança quando as fronteiras obrigatórias possuem evidência complementar aceitável, sem usar a quantidade de mocks ou o nome da ferramenta como prova. Falhas conhecidas são tratadas ou classificadas e aceitas como exceções não impeditivas. A documentação informa quais verificações manuais continuam necessárias.
Exercício: classifique três cenários. Primeiro, uma função recebe A/B e devolve apenas A sem acessar arquivo ou rede. Segundo, uma requisição HTTP consulta o servidor real, que lê o arquivo de exemplo. Terceiro, uma pessoa abre a página no navegador e usa Tab para chegar aos controles. Depois, diga quais podem proteger contra regressão após uma mudança.
Ver solução comentada
Solução e rubrica: o primeiro é unitário; o segundo, integração na fronteira declarada; o terceiro, sistema com avaliação manual de teclado. Todos podem ser reexecutados contra regressões. A resposta deve nomear partes reais, limite de cada evidência e finalidade da reexecução. Uma classificação alternativa é aceitável somente se declarar outro escopo coerente; chamar o terceiro de teste unitário apenas por observar um botão não atende à rubrica.
Fontes relacionadas
Consulte os limites e as seções de apoio de cada referência.
S16 S19Tente o exercício antes de consultar a solução. Marque a aula para organizar sua leitura.
A conclusão desta leitura não equivale a certificação ou aceite de um projeto real. Teste os exemplos no escopo indicado e registre as limitações.