O teste caixa branca é baseado na estrutura interna do objeto que está sob teste. Nesse tipo de teste, o testador se concentrará em como o código fonte trabalha. o CTFL apresenta duas técnicas que são mais usadas no nível de teste de componentes, mas vale notar que há outras técnicas que podem ser aplicadas em alguns ambientes de segurança crítica e missão crítica ou ainda de alta integridade, de maneira que a cobertura obtida seja mais completa, mas não serão apresentados nesse vídeo.
Vamos então conhecer as duas técnicas que o CTFL descreve A primeira delas é o teste e cobertura de instruções, onde os casos de testes são projetados para executar todas as instruções de um código-fonte e a segunda é o teste e a cobertura que decisão, onde os casos de testes são projetados para percorrer os resultados das estruturas de decisão existentes no código-fonte. Agora que você já sabe quais são as duas técnicas, vamos conhecê-los com pouco mais de detalhes começando pela técnica teste e cobertura de instruções. Essa técnica testa as instruções executáveis de um código fonte.
Geralmente em qualquer software, se olharmos para o código-fonte, haverá uma grande variedade de elementos tais como operadores, funções, loop, tratamento de exceções etc, mas veja que dependendo da entrada de dados feita algumas das instruções do código podem não ser executadas. Assim o objetivo desse teste é cobrir todos os caminhos, linhas e declarações possíveis no código ajudando a descobrir, por exemplo, trechos de código inúteis já que não são executados. Nesta técnica, os casos de teste devem ser gerados de forma que ao serem executados, o fluxo do programa passa por todas as instruções existentes no mesmo.
Como exemplo vamos usar um código bem simples Como podemos ver, temos duas entradas de dados "a" e "b". Há uma repetição e uma seleção. Nossos casos de teste têm que serem projetados para atribuir valores para "a" e "b" de forma que possamos acompanhar a quantidade de instruções que foram executadas.
Por isso os casos de teste são criados com o objetivo de executarem todos os comandos pelo menos uma vez e assim atingir um valor de cobertura. A cobertura é medida como o número de instruções executadas pelos testes dividido pelo número total de instruções existentes, normalmente expresso como uma porcentagem. Se um caso de teste conseguir 100 porcento de cobertura significa que todas as linhas do nosso código foram executadas.
Sem prestar muita atenção ao código, vamos executar o seguinte caso de teste e descobrir qual é a cobertura dele. Neste caso as instruções 1 e 2 são executadas. Por que, enfim são as atribuições de valores.
A instrução 3 tem uma estrutura de repetição mas há um teste: a repetição só acontece se o valor de a for menor que zero, o que nesse caso é falso. Assim sendo, a execução vai direto para instrução 9. Qual foi a cobertura obtida?
Bom, nesse caso, é só dividir quatro, que foi o número de instruções executadas por 7, que é o total de instruções do programa. Veja que as linhas 6 de 8 apenas tem um símbolo de fechamento de uma estrutura, OK, assim temos 57,14% de cobertura, o que significa que com esse caso de teste conseguimos passar ou conseguimos executar 57,14 por cento das linhas do código-fonte. Mas será que todo o código-fonte em algum momento pode ser executado?
Então vamos a mais um teste. Agora "a" e "b" valem -1. Novamente as instruções 1, 2 e 3 são executadas, mas agora como "a" é menor que zero, vamos executar as linhas que estão dentro da repetição while, ou seja as linhas 4, 5 e 7 sendo que a linha 5 depende de um teste para ser executada.
Vamos seguir. A linha 4 tem um teste que verifica se "b" é menor do que 0. Como "b" vale -1, o teste é verdadeiro e por isso vamos Executar a linha 5 mudando o valor de "b" que agora passa a valer 1.
A linha 7 Adiciona uma unidade ao valor de "a" se tinha -1, mais 1, passa a valer 0, voltando novamente para a linha 3. A condição para repetir o laço é falsa porque agora "a" é igual a 0, por isso vamos para a linha 9. A variável "c" agora vai valer um.
Diferentemente do exemplo anterior, nesse todas as linhas foram executadas. Assim sendo, foi possível atingir uma cobertura de 100%. Agora vamos falar sobre teste e cobertura de decisões.
O teste e cobertura de decisões verifica as decisões existentes no código e as instruções executadas a partir delas. É uma forma de teste de controle de fluxo Pois ela vai gerar fluxos a partir dos pontos das decisões. Nesta técnica, os casos de teste serão gerados de tal forma que cada decisão tenha todas as suas opções de saída percorridas ao menos uma vez.
A cobertura obtida por ela é mais eficiente do que a cobertura de instruções que vimos anteriormente. Como exemplo, eu vou usar o mesmo código que foi usado para o teste e cobertura de instruções. Os casos de teste devem cobrir cada saída é possível de uma decisão.
Assim, no caso de um IF poderíamos ter dois fluxos um para o resultado verdadeiro e outro para o resultado falso. Já para uma instrução Case, seriam necessários casos de teste para todos os possíveis resultados incluindo o resultado padrão. Esse caso de teste com os valores de entrada iguais a -1 possibilitaram a obtenção de 100% de cobertura para o teste e cobertura de instruções.
Esse mesmo caso de teste coincidentemente vai obter 100% de cobertura no teste de decisões também, mas veja uma coisa importante 100% de cobertura de decisão garante 100% de cobertura de instrução, mas não vice-versa, veja se nós tivéssemos feito esse teste aqui antes com esse caso de teste nós obteríamos 100% de cobertura no teste de decisões e também de cara já obteríamos 100% de cobertura no teste de instruções, ok? então nós apresentamos primeiro teste de instruções e depois o teste de decisões se você obtiver 100% de cobertura do teste de decisão, automaticamente você obtém 100% de cobertura no teste de instrução, mas o contrário nem sempre será possível ou seja se você tem 100% de cobertura de instrução, não necessariamente você terá 100% de cobertura no teste de decisão, ok? e aqui veja o ponto importante é justamente a linha quatro mesmo que aquela linha quatro ali é ter if é o outro que a gente precisa prestar atenção aqui porque é aquela linha cinco ela pode ser executada ou não dependendo do valor do teste da linha 4 a mesma coisa a gente tem que prestar atenção com a linha sete e a linha quatro pois Dependendo do valor de a eles podem ser executados ou não ok mas aqui o inferior só tem a parte verdadeira então eu preciso criar um caso de teste que passe que exercite o teste verdadeiro a condição verdadeira naqueles e eu preciso também ter um caso de teste que seja capaz de exercitar o while para fazer no repetir e para fazer um saindo a repetição também, ok?
Nesse vídeo você viu as duas técnicas de teste que compõe a categoria de técnicas caixa-branca e são descritos no CTFL, além disso viu onde e como elas são aplicadas e com medidas sua cobertura Obrigado por assistir e bons estudos!