Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP Câmpus Jacareí Tecnologia em Análise e Desenvolvimento de Sistemas ADS 10 Semestre de 2023 Teste de Software – TSWI5 Prof. Lineu Mialaret Aula 9: Teste Estrutural (1) ©Prof. Lineu TSWI5 - Aula 9 - 1/51 Teste Funcional Teste Funcional é um tipo de teste que utiliza como entrada a especificação funcional. • Procura verificar se todas as funcionalidades previstas foram implementadas e se respondem como esperado. • Incapaz de verificar funcionalidades ou comportamentos extras não especificados. O Teste de Unidade, já estudado é um tipo de Teste Funcional. ©Prof. Lineu TSWI5 - Aula 9 - 2/51 Teste Estrutural Teste Estrutural usa como ponto de entrada o código fonte. Características do teste estrutural: • Mais propenso a automação. • Procura exercitar o maior número possível de possibilidades de execução do programa, de acordo com algum critério pré-definido. • No teste estrutural, a especificação funcional é usada apenas como oráculo. ©Prof. Lineu TSWI5 - Aula 9 - 3/51 Teste Funcional X Estrutural Teste Estrutural e Teste Funcional são complementares: • Teste estrutural ajuda a detectar comportamentos que foram implementados especificados. (programados) mas não • Teste funcional detecta comportamentos que foram especificados, mas não implementados – e que o teste estrutural não (jamais) testaria. ©Prof. Lineu TSWI5 - Aula 9 - 4/51 Teste Estrutural Duas principais categorias de teste: • Teste de fluxo de controle. • Teste de fluxo de dados. Compartilham uma característica importante: baseiam-se no conceito de Grafo de Programa ou Grafo de Fluxo de Programa. ©Prof. Lineu TSWI5 - Aula 9 - 5/51 Grafo de um Programa Grafo de Fluxo de Programa: • Grafo dirigido onde os nodos representam comandos e os arcos representam o fluxo de execução • Existe um arco de um nodo i para um nodo j se e somente se j pode ser executado imediatamente após i. ©Prof. Lineu TSWI5 - Aula 9 - 6/51 Grafo de um Programa (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 7/51 Grafo de um Programa (cont.) Quais comandos representar? • Dependente do paradigma e da linguagem • Em C/C++/Java não se representam as declarações de variáveis porque executáveis. não correspondem a comandos • Todo grafo de programa tem um único nodo inicial e um nodo final. ©Prof. Lineu TSWI5 - Aula 9 - 8/51 Grafo de um Programa (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 9/51 Estruturas de um Grafo de Programa ©Prof. Lineu TSWI5 - Aula 9 - 10/51 Teste da Caixa Branca O Teste de Caixa Branca abrange testes com base na estrutura interna do sistema analisado. • E essa estrutura pode englobar vários itens, como código, design e fluxos de informações dentro do sistema de software testado. • A sua eficácia pode ser medida por meio da cobertura estrutural do software, considerando quanto da estrutura do componente de software (funções, decisões e instruções) foi abordado no teste, esse valor é expresso em porcentagem. ©Prof. Lineu TSWI5 - Aula 9 - 11/51 Teste da Caixa Branca (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 12/51 Teste de Caixa Branca (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 13/51 Teste de Caixa Branca (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 14/51 Adequação Como não pode testar exaustivamente um sistema de software, as duas questões centrais em teste de software são: • (a) O que constitui um conjunto adequado de casos de teste? • (b) Como gerar um conjunto finito de casos de teste que satisfaça esses critérios de adequação? Goodenough e Gerhard definiram um conjunto de testes como adequado se sua correta execução implica na ausência de erros no programa, sendo que soluções mais pragmáticas são baseadas em um insight básico: se alguma unidade de código não for executada, ou seja, não coberta, então por definição, o teste não pode revelar quaisquer falhas contidas nele. ©Prof. Lineu TSWI5 - Aula 9 - 15/51 Adequação (cont.) A adequação de um conjunto de testes pode, portanto, ser medido por quanto de um programa é coberto pelo conjunto de testes. Embora idealmente se gostaria de saber quanto do possível comportamento do programa é coberto, não uma maneira fácil de quantificar a cobertura comportamento e, portanto, a maioria dos critérios adequação gira em torno de medições relacionadas código ou especificações do programa. ©Prof. Lineu há de de ao TSWI5 - Aula 9 - 16/51 Medidas de Adequação (cont.) Muitos critérios de cobertura (coverage criteria) têm sido propostos. Um critério de cobertura em teste de software deve atender três propósitos: ©Prof. Lineu TSWI5 - Aula 9 - 17/51 Medidas de Adequação (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 18/51 A Necessidade do Teste Estrutural ©Prof. Lineu TSWI5 - Aula 9 - 19/51 Cobertura de Código A ideia de cobertura de código (code coverage) é intuitiva e simples: • Se nenhum teste executa uma instrução com defeito, então o defeito não pode ser encontrado; e portanto, toda instrução deve ser coberta (coverage) por algum teste. ©Prof. Lineu TSWI5 - Aula 9 - 20/51 Cobertura de Código (cont.) Cobertura de código (code coverage) é o critério mais básico. • Um conjunto de casos de testes é considerado ser adequado com o critério de cobertura de código se todas as linhas do código são executadas. ©Prof. Lineu TSWI5 - Aula 9 - 21/51 Programa Blackjack Suponha um programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve devolver o número de pontos do vencedor. Quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ©Prof. Lineu TSWI5 - Aula 9 - 22/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ©Prof. Lineu TSWI5 - Aula 9 - 23/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ©Prof. Lineu TSWI5 - Aula 9 - 24/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ©Prof. Lineu TSWI5 - Aula 9 - 25/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ©Prof. Lineu TSWI5 - Aula 9 - 26/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ©Prof. Lineu TSWI5 - Aula 9 - 27/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ©Prof. Lineu TSWI5 - Aula 9 - 28/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ? ©Prof. Lineu TSWI5 - Aula 9 - 29/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ? ©Prof. Lineu TSWI5 - Aula 9 - 30/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ? ©Prof. Lineu TSWI5 - Aula 9 - 31/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ? ©Prof. Lineu TSWI5 - Aula 9 - 32/51 Programa Blackjack (cont.) O programa que recebe o número de pontos de dois jogadores de blackjack. O programa deve retornar o número de pontos do vencedor. Neste jogo, quem chegar mais perto de 21 pontos ganha. Se um jogador ultrapassar 21 pontos, o jogador perde. Se ambos os jogadores perderem, o programa deve retornar 0. ©Prof. Lineu TSWI5 - Aula 9 - 33/51 Programa Blackjack (cont.) Using lines of code as a way to determine line coverage is a simple and straightforward idea. However, counting the covered lines is not always a good way of calculating the coverage. The number of lines in a piece of code depends on the decisions taken by the programmer who writes the code. ©Prof. Lineu TSWI5 - Aula 9 - 34/51 Programa Blackjack (cont.) Using lines of code as a way to determine line coverage is a simple and straightforward idea. However, counting the covered lines is not always a good way of calculating the coverage. The number of lines in a piece of code depends on the decisions taken by the programmer who writes the code. ©Prof. Lineu TSWI5 - Aula 9 - 35/51 Programa Blackjack (cont.) Using lines of code as a way to determine line coverage is a simple and straightforward idea. However, counting the covered lines is not always a good way of calculating the coverage. The number of lines in a piece of code depends on the decisions taken by the programmer who writes the code. ©Prof. Lineu TSWI5 - Aula 9 - 36/51 Cobertura de Decisão A Cobertura de código (instrução/linha) é geralmente vista como um critério fraco, embora na prática, seja um dos critérios mais comumente usados. • Uma razão para isso é que é muito intuitivo e fácil de entender. • Critérios mais fortes são frequentemente com base no grafo de fluxo de controle do programa em teste. ©Prof. Lineu TSWI5 - Aula 9 - 37/51 Cobertura de Decisão (cont.) Seja o seguinte trecho de código. É possível atingir 100% de cobertura de código deste trecho de instruções com um único teste onde e é menor que 0 e b é igual a 0. Este caso de teste faria ambas as condições if avaliar como verdadeiro, mas não haveria nenhum caso de teste em que qualquer uma das condições fossem avaliadas como falso. ©Prof. Lineu TSWI5 - Aula 9 - 38/51 Cobertura de Decisão (cont.) Seja o seguinte trecho de código. A cobertura de decisão captura a noção de cobertura de todas as arestas do grafo de fluxo de controle, o que significa que cada condição if requer pelo menos um teste em que é avaliado como verdadeiro e pelo menos um teste em que é avaliado como falso. ©Prof. Lineu TSWI5 - Aula 9 - 39/51 Cobertura de Decisão (cont.) Seja o seguinte trecho de código. No caso do trecho de código acima, precisa-se de pelo menos dois casos de teste para atingir 100% de cobertura de decisão, ou seja, • t1: e<0 e b==0; e • t2: e>=0 e b!=0. ©Prof. Lineu TSWI5 - Aula 9 - 40/51 Cobertura de Decisão (cont.) Programas complexos geralmente dependem de muitas condições complexas (por exemplo, compostas por muitas condições). instruções if • Quando se testar esses programas, visando 100% de cobertura de linha, pode não ser suficiente para cobrir todos os casos que se quer, ou seja, precisa-se de algum critério mais forte. • A cobertura de decisão funciona de maneira semelhante à cobertura de código, exceto que com cobertura de decisão conta-se (ou visa-se cobrir) todos os possíveis resultados de decisão. ©Prof. Lineu TSWI5 - Aula 9 - 41/51 Cobertura de Decisão (cont.) Um conjunto de casos de teste atingirá 100% de ramificação (ou decisão) cobertura quando os testes exercitam todos os resultados possíveis dos blocos de decisão. ©Prof. Lineu TSWI5 - Aula 9 - 42/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 43/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 44/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 45/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 46/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 47/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 48/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 49/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 50/51 Cobertura de Decisão (cont.) ©Prof. Lineu TSWI5 - Aula 9 - 51/51