Pular para o conteúdo
SDETRole
SDETRole

Glossário · Fundamentos de testes

Teste de caixa branca

Em inglês: White-box testing

Também chamado de: caixa branca, testes de caixa branca, teste estrutural, glass-box testing

Definição

Teste projetado a partir do conhecimento do código interno, como seus branches, condições e caminhos, para garantir que a implementação se comporta corretamente.

O teste de caixa branca (white-box testing) projeta os testes lendo o código. O tester (muitas vezes o próprio desenvolvedor) olha os branches, as condições, os loops e o tratamento de erros e escreve testes que os exercitam de propósito. Ele também é chamado de teste de caixa de vidro (glass-box), caixa transparente (clear-box) ou teste estrutural. Os testes unitários são a forma mais comum, e a cobertura de código é a sua medida habitual.

Exemplo

String grade(int score) {
    if (score < 0 || score > 100) {
        throw new IllegalArgumentException("score out of range");
    }
    if (score >= 50) {
        return "PASS";
    }
    return "FAIL";
}

Lendo o código, você vê três resultados (exceção, PASS, FAIL), e o primeiro if tem duas condições separadas, e cada uma delas pode disparar a exceção. Testes escolhidos a partir da estrutura:

Entrada Caminho exercitado
-1 score < 0 verdadeiro, exceção
101 score > 100 verdadeiro, exceção
50 dentro do intervalo, score >= 50 verdadeiro, PASS
49 dentro do intervalo, score >= 50 falso, FAIL

Esses testes dão cobertura total de branches e de condições. Testar exatamente 50 e 49 também pega um >= escrito sem querer como >.

Caixa branca vs caixa preta

A caixa branca pergunta “cada caminho deste código se comporta corretamente?” e precisa do código-fonte. A caixa preta pergunta “o sistema faz o que os requisitos dizem?” e precisa apenas da especificação. A caixa branca encontra caminhos não testados, código morto e erros de lógica nos branches. A caixa preta encontra funcionalidades ausentes e comportamentos que contradizem os requisitos, o que a caixa branca não enxerga, porque não existe código para uma funcionalidade que falta. Boas suítes usam as duas.

Limites

  • Os testes podem copiar os erros do código. Se o desenvolvedor entendeu mal o requisito, testes escritos a partir do código vão confirmar o comportamento errado.
  • Acoplamento forte. Testes que dependem de métodos privados ou da estrutura interna quebram a cada refatoração, mesmo quando o comportamento não muda. Sempre que possível, teste pelas interfaces públicas.
  • Cobertura não é corretude. Executar todos os branches não diz nada sobre as assertions serem significativas.

Digite para buscar em todo o SDETRole.

Busca de texto completo com Pagefind · roda no seu navegador Abrir página de busca →