4. Técnicas de Teste¶
4.1 Visão Geral¶
Técnicas de teste são métodos sistemáticos para selecionar e criar casos de teste. Elas garantem que testes sejam eficientes, eficazes e forneçam cobertura adequada do software. A escolha da técnica correta depende do contexto, tipo de sistema, criticidade e recursos disponíveis.
Na era dos LLMs, técnicas tradicionais são automatizadas, ampliadas ou transformadas por capacidades de análise semântica, geração inteligente e priorização baseada em risco.
4.2 Black Box Testing (Teste de Caixa Preta)¶
Definição¶
Teste de caixa preta avalia funcionalidade sem conhecimento da estrutura interna do código. Foca em entradas, saídas esperadas e comportamento do sistema da perspectiva do usuário.
Características:
- Independente de implementação
- Foco em requisitos funcionais
- Baseado em especificações
- Não requer conhecimento de código
Técnicas de Caixa Preta¶
4.2.1 Equivalence Partitioning (Particionamento de Equivalência)¶
Conceito: Divide entradas em classes equivalentes onde cada membro da classe deve ser tratado da mesma forma pelo sistema.
Benefício: Reduz número de casos de teste mantendo cobertura.
Exemplo:
Sistema: Validar idade para cadastro (18-120 anos)
Classes de equivalência:
- Válida: 18-120
- Inválida (abaixo): < 18
- Inválida (acima): > 120
- Inválida (tipo): não-numérico
Casos de teste (um por classe):
- 25 (válida)
- 15 (inválida - abaixo)
- 150 (inválida - acima)
- "abc" (inválida - tipo)
Na Era dos LLMs:
- IA identifica automaticamente partições
- Análise de requisitos para detectar classes
- Geração de casos de borda
4.2.2 Boundary Value Analysis (Análise de Valores Limite)¶
Conceito: Testa valores nos limites das partições, onde defeitos são mais propensos a ocorrer.
Regra: Testa valores mínimo-1, mínimo, máximo, máximo+1.
Exemplo:
Range válido: 1-100
Valores de teste:
- 0 (min-1) → Inválido
- 1 (min) → Válido
- 100 (max) → Válido
- 101 (max+1) → Inválido
Na Era dos LLMs:
- Identificação automática de limites
- Geração de casos de borda complexos
- Análise de múltiplas variáveis interdependentes
4.2.3 Decision Table Testing (Tabela de Decisões)¶
Conceito: Representa lógica complexa de negócio em tabela com condições (regras) e ações (resultados).
Exemplo - Desconto em Compra:
| Condição | R1 | R2 | R3 | R4 |
|---|---|---|---|---|
| Cliente VIP | S | S | N | N |
| Valor > 1000 | S | N | S | N |
| Ação: Desconto 20% | X | |||
| Ação: Desconto 10% | X | X | ||
| Ação: Sem desconto | X |
Na Era dos LLMs:
- Geração automática de tabelas a partir de regras de negócio
- Identificação de combinações faltantes
- Otimização de tabelas redundantes
4.2.4 State Transition Testing (Teste de Transição de Estado)¶
Conceito: Testa comportamento de sistemas que mudam de estado baseado em eventos ou condições.
Exemplo - Pedido:
Casos de Teste:
- Novo → Pago → Enviado → Entregue (caminho feliz)
- Novo → Pago → Cancelado (cancelamento)
- Novo → Pago → Enviado → Cancelado (tentativa inválida)
Na Era dos LLMs:
- Geração automática de diagramas de estado
- Identificação de transições não documentadas
- Teste de caminhos inválidos
4.2.5 Use Case Testing (Teste Baseado em Casos de Uso)¶
Conceito: Deriva casos de teste a partir de casos de uso documentados, cobrindo fluxos principais e alternativos.
Estrutura:
- Fluxo principal (happy path)
- Fluxos alternativos (cenários alternativos)
- Fluxos de exceção (tratamento de erro)
Na Era dos LLMs:
- Geração de casos de teste a partir de documentação
- Identificação de cenários de borda
- Completude de cobertura de fluxos
Automação com LLMs¶
Ferramentas como ACCELQ e BlinqIO usam LLMs para:
- Analisar requisitos em linguagem natural
- Gerar partições de equivalência automaticamente
- Identificar valores de borda
- Criar tabelas de decisão
4.3 White Box Testing (Teste de Caixa Branca)¶
Definição¶
Teste de caixa branca avalia estrutura interna, lógica e código do software. Requer conhecimento da implementação para projetar casos de teste.
Características:
- Baseado em código-fonte
- Foco em caminhos e lógica
- Mensurável através de cobertura
- Requer conhecimento técnico
Técnicas de Caixa Branca¶
4.3.1 Statement Coverage (Cobertura de Instruções)¶
Conceito: Garante que cada instrução do código seja executada pelo menos uma vez.
Métrica: (Número de instruções executadas / Total de instruções) × 100
Exemplo:
def calcular_bonus(salario, tempo_casa):
bonus = 0 # Instrução 1
if tempo_casa > 5: # Instrução 2
bonus = salario * 0.1 # Instrução 3
return bonus # Instrução 4
# Caso de teste: calcular_bonus(1000, 3)
# Cobertura: 3/4 = 75%
Na Era dos LLMs:
- Análise automática de instruções não cobertas
- Sugestão de dados de entrada para aumentar cobertura
4.3.2 Branch Coverage (Cobertura de Ramificações)¶
Conceito: Garante que cada ramificação (if/else, switch) seja executada pelo menos uma vez.
Métrica: (Ramificações executadas / Total de ramificações) × 100
Exemplo:
def aprovar_emprestimo(renda, score):
if renda > 5000: # Branch 1: True/False
if score > 700: # Branch 2: True/False
return True
return False
# Casos necessários:
# 1. renda > 5000 e score > 700 (Branch 1: T, Branch 2: T)
# 2. renda > 5000 e score <= 700 (Branch 1: T, Branch 2: F)
# 3. renda <= 5000 (Branch 1: F)
Na Era dos LLMs:
- Identificação automática de branches não cobertos
- Geração de casos para caminhos específicos
4.3.3 Path Coverage (Cobertura de Caminhos)¶
Conceito: Garante que cada caminho possível através do código seja executado.
Desafio: Cresce exponencialmente com loops e condições aninhadas.
Na Era dos LLMs:
- Análise de caminhos viáveis vs inviáveis
- Priorização de caminhos por risco
- Geração inteligente para caminhos críticos
4.3.4 Condition Coverage (Cobertura de Condições)¶
Conceito: Cada condição booleana individual é avaliada como verdadeira e falsa.
Exemplo:
if (a > 0 and b < 10) or c == 5:
# Condições: a>0, b<10, c==5
# Precisa: a>0=T, a>0=F, b<10=T, b<10=F, c==5=T, c==5=F
4.3.5 MC/DC (Modified Condition/Decision Coverage)¶
Conceito: Cada condição deve afetar independentemente o resultado da decisão.
Requisito para software crítico (aviônica, médico).
Na Era dos LLMs:
- Geração de casos para atender MC/DC
- Verificação de independência de condições
Análise Automática de Cobertura com IA¶
Ferramentas:
- JaCoCo, Cobertura, Coverage.py (tradicionais)
- Com IA: análise preditiva de gaps, sugestão de testes
Benefícios da IA:
- Identificação de código não testável
- Sugestão de refatoração para testabilidade
- Predição de risco em código não coberto
4.4 Grey Box Testing (Teste de Caixa Cinza)¶
Definição¶
Teste de caixa cinza combina elementos de caixa preta e caixa branca. O testador tem conhecimento parcial da estrutura interna, tipicamente documentação de design e arquitetura, mas não acesso completo ao código.
Características:
- Acesso a documentação de design
- Conhecimento de arquitetura
- Acesso limitado a código
- Foco em integração e fluxo de dados
Casos de Uso¶
1. Testes de Integração:
- Conhecimento de interfaces
- Teste de fluxo de dados entre sistemas
- Validação de contratos
2. Testes de API:
- Acesso a documentação OpenAPI
- Teste de endpoints e payloads
- Validação de schemas
3. Testes de Banco de Dados:
- Conhecimento de schema
- Teste de integridade de dados
- Validação de transações
4. Testes de Segurança:
- Conhecimento de arquitetura
- Identificação de vetores de ataque
- Testes de penetração focados
Na Era dos LLMs¶
Geração de Testes de API:
# Documentação OpenAPI analisada por IA
paths:
/api/usuarios:
post:
summary: Criar usuário
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
nome: { type: string, minLength: 3 }
email: { type: string, format: email }
idade: { type: integer, minimum: 18 }
# Testes gerados automaticamente
def test_criar_usuario_valido():
response = client.post('/api/usuarios', json={
'nome': 'João Silva',
'email': 'joao@email.com',
'idade': 25
})
assert response.status_code == 201
def test_criar_usuario_nome_curto():
response = client.post('/api/usuarios', json={
'nome': 'Jo',
'email': 'joao@email.com',
'idade': 25
})
assert response.status_code == 422
def test_criar_usuario_menor_idade():
response = client.post('/api/usuarios', json={
'nome': 'João Silva',
'email': 'joao@email.com',
'idade': 16
})
assert response.status_code == 422
4.5 Seleção de Técnica Baseada em Risco¶
Framework de Decisão¶
| Contexto | Técnica Recomendada | Justificativa |
|---|---|---|
| Lógica complexa de negócio | Decision Table | Mapeia regras explicitamente |
| Muitas condições de entrada | Equivalence Partitioning | Reduz casos mantendo cobertura |
| Valores numéricos ou ranges | Boundary Value Analysis | Encontra defeitos em limites |
| Sistemas stateful | State Transition | Modela comportamento dinâmico |
| Alto risco, código crítico | White Box + MC/DC | Máxima cobertura estrutural |
| APIs e integrações | Grey Box + Contract Testing | Valida interfaces |
| Fluxos de usuário | Use Case Testing | Alinhado com requisitos |
Na Era dos LLMs¶
Seleção Inteligente:
- IA analisa características do sistema
- Sugere técnicas baseadas em similaridade
- Adapta seleção baseada em histórico de eficácia
4.6 Técnicas que LLMs Fazem Melhor vs Humanos¶
Onde LLMs Excedem¶
1. Análise de Combinatória:
- Identificação de todas as combinações possíveis
- Priorização por risco
- Geração de dados de teste
2. Cobertura Exaustiva:
- Análise sistemática de código
- Identificação de caminhos não cobertos
- Geração massiva de casos
3. Documentação para Testes:
- Geração de casos de teste a partir de requisitos
- Criação de BDD/Gherkin
- Documentação de cenários
Onde Humanos Excedem¶
1. Intuição de Negócio:
- Identificação de cenários críticos implícitos
- Compreensão de contexto organizacional
- Priorização baseada em valor
2. Criatividade Exploratória:
- Testes fora do script
- Pensamento "fora da caixa"
- Identificação de cenários inesperados
3. Julgamento de Qualidade:
- Avaliação de usabilidade
- Validação de experiência do usuário
- Critérios subjetivos de qualidade
4.7 Design de Casos de Teste Efetivos¶
Critérios de Qualidade¶
Bons casos de teste são:
- Rastreáveis: Ligados a requisitos
- Repetíveis: Produzem mesmo resultado
- Independentes: Não dependem de outros testes
- Auto-verificáveis: Têm critérios claros de pass/fail
- Manuteníveis: Fáceis de atualizar
Template de Caso de Teste¶
ID: TC-001
Título: Validar login com credenciais válidas
Pré-condições: Usuário cadastrado no sistema
Dados de Entrada:
- Usuário: usuario@teste.com
- Senha: Senha123!
Passos:
1. Acessar página de login
2. Preencher campo usuário
3. Preencher campo senha
4. Clicar em "Entrar"
Resultado Esperado: Redirecionamento para dashboard
Pós-condições: Sessão iniciada
Prioridade: Alta
Rastreabilidade: REQ-001
Na Era dos LLMs¶
Geração Estruturada:
- LLMs geram casos completos a partir de requisitos
- Incluem casos positivos, negativos e de borda
- Mantêm consistência de formato
Revisão Human-in-the-Loop:
- Validação de adequação ao negócio
- Refinamento de critérios
- Priorização baseada em contexto
4.8 Resumo¶
Técnicas de teste fornecem métodos sistemáticos para criar casos de teste eficientes e eficazes. Na era dos LLMs:
- Caixa Preta: Automatização de análise de requisitos e geração de casos
- Caixa Branca: Análise inteligente de cobertura e sugestão de testes
- Caixa Cinza: Geração automática de testes de API e integração
A seleção de técnica deve ser baseada em risco, contexto e criticidade. A combinação de automação inteligente com julgamento humano resulta em estratégias de teste mais robustas.
Referências¶
- Copeland, L. (2003). A Practitioner's Guide to Software Test Design. Artech House. ISBN: 978-1580537919
- Beizer, B. (1990). Software Testing Techniques. 2nd ed. Van Nostrand Reinhold. ISBN: 978-0442203723
- TestDevLab (2025). White Box vs Black Box vs Grey Box Testing. Disponível em: https://www.testdevlab.com/blog/white-box-vs-black-box-vs-grey-box-testing
- ACCELQ (2025). Black Box vs White Box vs Grey Box Testing Explained. Disponível em: https://www.accelq.com/blog/black-box-vs-white-box-vs-grey-box-testing/
Seção anterior: 3. Níveis de Teste | Próxima seção: 5. Tipos de Teste