Testes de Caixa Preta vs. Caixa Branca: Comparação por Especialistas

Discover how to deliver better software and systems in rapidly scaling environments. Join our Community

Compare os testes de caixa preta e de caixa branca e compreenda ambos os métodos, além de perceber como ajudam as equipas de garantia da qualidade a cobrir todos os aspetos, assegurando um desempenho e uma qualidade robustos a partir de várias perspetivas de teste.

A diferença entre os testes de caixa branca e de caixa preta

Os testes de caixa preta avaliam a funcionalidade do software sem conhecimento do código interno, concentrando-se nas entradas e saídas. Os testes de caixa branca examinam a estrutura e a lógica do código interno, exigindo acesso ao código-fonte.

Os testes de caixa preta são normalmente realizados pelas equipas de QA para validar a funcionalidade visível para o utilizador, utilizando técnicas como o particionamento de equivalência e a análise de valores-limite.

Pelo contrário, os testes de caixa branca são realizados pelos programadores para garantir a correção e a cobertura do código, utilizando métodos como a cobertura de instruções e de ramificações.

A combinação de ambas as abordagens melhora a cobertura dos testes e a qualidade do software.

Neste artigo, vou explicar estes dois tipos de testes, abordando o que são, as principais diferenças entre eles, como são utilizados, bem como as suas vantagens e desvantagens. 

O que são os testes de caixa preta?

Os testes de caixa preta, por vezes designados por testes comportamentais, são um tipo de teste de software em que o testador não tem acesso ao código-fonte do sistema que está a ser testado. São normalmente realizados pela equipa de garantia da qualidade e não exigem necessariamente competências técnicas avançadas, como programação.  

Nos testes de caixa preta, os casos de teste são escritos com base nas entradas e saídas do AUT, conforme definido nas especificações de requisitos.

As técnicas de teste de caixa preta mais importantes são:

  • Particionamento de equivalência: as entradas são categorizadas em classes (ou partições) de equivalência, o que significa que cada valor dentro de uma classe irá gerar o mesmo resultado. Para obter uma boa cobertura dos testes, basta um caso de teste por cada classe de equivalência.

Exemplo: Se um campo aceitar valores inteiros entre 1 e 10, a classe válida contém todos os números entre 1 e 10, e as duas classes inválidas são os números inferiores a 1 e os números superiores a 10. Isto significa que 3 casos de teste no total são suficientes para abranger todas as classes possíveis. 

  • Análise de valores-limite: são testados os valores extremos de entrada, que têm maior probabilidade de gerar defeitos. 

Exemplo: Utilizando o mesmo campo acima, os limites válidos são 1 e 10, e os inválidos são 0 e 11. 

  • Testes com tabelas de decisão: as relações entre as entradas e as saídas são apresentadas num formato tabular. A tabela tem normalmente colunas para as condições e linhas para as diferentes combinações. Cada linha deve ter um caso de teste correspondente. 

Exemplo: Esta técnica é adequada para cenários mais complexos. Suponhamos que temos um pedido de empréstimo bancário com as seguintes condições:

Condições1Idade igual ou superior a 25VerdadeiroRendimento igual ou superior a 50000 USDVerdadeiroResultadoAprovar empréstimo
Condições2Idade igual ou superior a 25VerdadeiroRendimento igual ou superior a 50000 USDFalsoResultadoRejeitar empréstimo
Condições3Idade igual ou superior a 25FalsoRendimento igual ou superior a 50000 USDFalsoResultadoEncaminhar para um gestor
Condições4Idade igual ou superior a 25FalsoRendimento igual ou superior a 50000 USDFalsoResultadoRejeitar empréstimo

Temos quatro combinações possíveis, pelo que é necessário executar quatro casos de teste.

  • Testes de transição de estados: verificam o comportamento de um sistema à medida que este transita entre diferentes estados.  

Exemplo: Suponhamos que está a testar um sistema básico de acompanhamento de erros. O diagrama de estados é:

As transições disponíveis são:

  • De Novo para Em curso
  • De Em curso para Em teste
  • De Em teste para Fechado
  • De Em teste novamente para Em curso

Para obter uma cobertura completa, deve garantir que cada uma das transições e dos estados é testada pelo menos uma vez.

  • Testes baseados na experiência, como os testes exploratórios. Este tipo de teste consiste em executar testes com base na experiência do testador com o sistema ou com sistemas semelhantes, bem como no conhecimento do comportamento da aplicação. 

Exemplo: Imagine que está a testar uma nova aplicação de redes sociais. O seu objetivo é explorar a aplicação para encontrar quaisquer defeitos ou problemas que precisem de ser corrigidos. 

Durante os testes exploratórios, pode realizar as seguintes ações:

  • Registar uma nova conta
  • Carregar uma fotografia de perfil
  • Escrever uma publicação
  • Ver o seu próprio perfil
  • Procurar amigos
  • Enviar um pedido de amizade
  • Aceitar um pedido de amizade
  • Gostar e comentar uma publicação

Ao utilizar testes exploratórios, realizaria estas ações de forma não estruturada, sem um plano pré-determinado. O foco seria encontrar defeitos ou áreas de melhoria na aplicação.  

Se quiser saber mais sobre testes exploratórios, achei o livro de Elisabeth Hendrickson, Explore It!, muito útil.

Get Free Access
Get regular tech leadership wisdom for delivering better software and systems.
Get Free Access

Have an account? Log In

Vantagens e desvantagens dos testes de caixa preta

É claro que existem benefícios, mas também desvantagens, na realização de testes de caixa preta.

Vantagens:

  • É mais demorado
  • O controlo sobre os casos de teste é limitado
  • Alguns cenários específicos podem ser difíceis de testar
  • Informação limitada sobre a causa-raiz da falha
  • Pode não detetar determinados erros
  • Capacidade limitada para testar o desempenho e a escalabilidade

Desvantagens:

  • A preparação do ambiente de teste e a execução dos testes podem ser mais demoradas
  • O controlo sobre os casos de teste é limitado
  • Alguns cenários específicos podem ser difíceis de testar
  • Informação limitada sobre a causa-raiz da falha
  • Pode não detetar determinados erros
  • Capacidade limitada para testar o desempenho e a escalabilidade

Quando utilizar testes de caixa preta?

As ferramentas de testes de caixa preta podem ser utilizadas em qualquer nível de teste. No entanto, é preferível utilizá-las num nível mais elevado e deixar os testes de nível inferior para os testes de caixa branca. Isto significa que, embora possam funcionar para testar ao nível da unidade, a metodologia de caixa preta é mais adequada para testes de sistema e testes de aceitação.   

As técnicas de caixa preta podem ser utilizadas para testes funcionais e não funcionais (como testes de desempenho, usabilidade e acessibilidade). 

Também devem ser aplicadas a funcionalidades recentemente implementadas; em alternativa, os casos de teste existentes identificados através destas técnicas podem ser executados durante os testes de regressão.

O que são testes de caixa branca?

A caixa branca (por vezes conhecida como teste de caixa transparente, teste de caixa de vidro, teste baseado no código ou teste estrutural) é um método de teste que se centra no funcionamento interno da UAT.  

Abordagens aos testes de caixa branca:

  • Cobertura de instruções: todas as instruções de código (linhas de código) são executadas pelo menos uma vez ao nível do código-fonte. A fórmula para calcular a cobertura é:

Cobertura de instruções = (Número de instruções executadas / Número total de instruções no código-fonte) * 100

Exemplo: Suponhamos que temos o seguinte código:

 if(condition1 or condition2)) {
       print(“test 1 OK”)
    }
    else {
       if(condition3) {
          print(“test 2 OK”)
       }
}
  • Para obter uma cobertura total das instruções, tem de percorrer cada linha de código pelo menos uma vez. Isto significa que são necessários vários testes:
    • condition1=true condition2=false,  o que imprimirá “test 1 OK”
    • condition1=false, condition2=false e condition3=true, o que imprimirá “test 2 OK”.
  • Cobertura de ramos: nesta técnica, os cenários de teste abrangem todos os ramos do grafo de fluxo de controlo. Cada resultado possível, verdadeiro e falso, de cada condição é abrangido pelo menos uma vez. A fórmula utilizada para a cobertura de ramos é:
  • Cobertura de ramos = (Número de ramos executados / Número total de ramos no código) * 100 
  • Exemplo: Para o mesmo código, embora a cobertura de instruções seja de 100%, nem todos os ramos possíveis estão cobertos. Será necessário um teste adicional em que:
    • condition1=false, condition2=false, condition3=false - desta forma, também cobrimos o caminho falso no segundo if. Nada deverá ser impresso neste caso de teste,
  • Cobertura de condições: uma técnica abrangente em que todos os caminhos são testados. Garante que cada caminho da aplicação seja coberto por, pelo menos, um teste. É particularmente útil para aplicações complexas. Exemplo: Para o código acima, precisamos de mais um teste para obter uma cobertura total das condições:
    • condition1=false, condition1=true, que terá o mesmo resultado que o primeiro teste, mas cobre uma condição diferente para alcançar o resultado.

Vantagens e desvantagens dos testes de caixa branca

Vejamos as vantagens e desvantagens dos testes de caixa branca.

Vantagens:

  • Permitem encontrar erros numa fase inicial do ciclo de vida do desenvolvimento de software
  • Testam a estrutura interna do código.
  • Testam a cobertura e a lógica do código.
  • Melhoram o conhecimento da base de código.
  • Podem ser utilizados em testes de desempenho e escalabilidade.

Desvantagens:

  • Funcionam melhor num nível de testes mais baixo 
  • Exigem bons conhecimentos da linguagem de programação do sistema
  • Testes limitados na perspetiva do utilizador final
  • Podem ignorar cenários do mundo real

Quando utilizar testes de caixa branca 

Os testes de caixa branca são mais adequados para níveis inferiores, como os testes unitários e de integração. Isto ajuda a identificar erros e defeitos numa fase inicial do processo de desenvolvimento. Executar estes testes após cada implementação é uma boa prática, especialmente ao trabalhar num ambiente de CI/CD. 

Os testes de caixa branca podem ser utilizados para testar funcionalidades, mas também podem ser utilizados para descobrir vulnerabilidades no sistema - algo que seria difícil de conseguir com técnicas de testes de caixa preta.

More Articles

Testes de caixa preta vs. testes de caixa branca: resumo 

Vejamos quais são as principais diferenças entre os testes de caixa preta e os testes de caixa branca:

Testes de caixa pretaTestes de caixa branca
Não é necessário ter conhecimentos sobre o funcionamento interno.Baseiam-se numa boa compreensão do código do sistema.
São realizados principalmente pela equipa de QA.São normalmente realizados pelos programadores.
Centram-se no comportamento do sistema.Centram-se na lógica e na implementação do software.
As técnicas incluem:
Particionamento de equivalência
Análise de valores-limite
Tabela de decisão
Transição de estados
As técnicas incluem:
Cobertura de instruções
Cobertura de ramos
Cobertura de condições
Os cenários podem ser executados manualmente ou de forma automatizada.São normalmente realizados através de testes automatizados.
São mais adequados para níveis de testes superiores.Funcionam melhor nos níveis de testes inferiores.
Testam na perspetiva dos utilizadores finais.Testam de uma perspetiva técnica.

Mas não nos devemos esquecer de que, embora ambas as abordagens tenham vantagens e desvantagens, devemos utilizar as duas no nosso processo de testes, para obter uma boa cobertura dos testes e do código e encontrar os defeitos mais importantes.

Conclusões

Os testes de caixa preta e de caixa branca são duas abordagens diferentes e cada uma é adequada a necessidades diferentes durante o processo de desenvolvimento. Embora os testes de caixa branca sejam realizados principalmente por programadores e se apliquem a testes de nível inferior, e os testes de caixa preta sejam realizados pela equipa de QA em níveis superiores, funcionam melhor quando utilizados em conjunto.

Se gostou deste artigo, subscreva a newsletter para receber todos os artigos recentemente publicados sobre testes e garantia da qualidade!

Andreea Draniceanu
Hi there! My name is Andreea, I’m a software test engineer based in Romania. I’ve been in the software industry for over 10 years. Currently my main focus is UI test automation with C#, but I love exploring all QA-related areas 😊

You may also like