• Nenhum resultado encontrado

Estrategia de Teste...

N/A
N/A
Protected

Academic year: 2021

Share "Estrategia de Teste..."

Copied!
29
0
0

Texto

(1)

Sumário

 Processo de teste  Fundamentos de teste  Estratégias de teste  caixa preta  caixa branca  Níveis de teste  Depuração  Princípios de teste

(2)

Estratégias de testes caixa branca

 Conceito de grafo de programa

 Critério de adequação de teste

(3)

Testes caixa branca

 teste caixa branca, ou teste estrutural

 testador possui conhecimento da estrutura interna do software a ser testado

 este conhecimento se torna disponível ao

testador enquanto o código do software estiver sendo desenvolvido

 útil para testar componentes pequenos

(4)

Grafo de programa/ fluxo de controle

Uma notação para representar o fluxo de controle. Cada construção estruturada tem um símbolo de grafo

correspondente.

 nodos representam comandos

(5)

Exemplo

1 soma_vetor (a, num_elementos, soma)

2 soma = 0

3 i = 1

4 while (i <= num_elementos) 5 if a[i] > 0

6 soma = soma + a[i]

endif 7 i = i + 1 end while 8 end soma_vetor falso verdadeiro 1,2,3 4 verdadeiro 5 6 7 falso

(6)

Caminhos do grafo de programa

 Um caminho é uma sequência de nodos

começando do nodo de entrada do grafo e chegando ao nodo de saída

 Exercício: Encontre caminhos no grafo anterior.

 Exercício: A sequência 1,2,3,4,5,6,7,8 é um caminho factível?

(7)

Critério de adequação de teste

 também chamado de critério de cobertura de teste

 uma regra de parada de execução de testes  já foram executados testes suficientes?

 critérios mínimos de teste de um programa

 Um programa é dito estar adequadamente testado com relação a um determinado critério se todos os elementos estruturais alvo foram exercitados

segundo o critério

 Um conjunto de casos de teste é dito adequado para testar um programa de acordo com o critério de

comandos se ele exercitar todos os comandos ou seja, causar todos os comandos serem executados.

(8)

Critérios de cobertura de teste

 Critérios de adequação/cobertura

 comandos (statements)

 desvios ou decisões (branches)

 condições compostas

 caminhos

 caminhos específicos

 Alguns critérios possuem uma habilidade de detecção de defeitos maior do que outros

(9)

Grau de cobertura

 Em algumas condições o grau de cobertura pode ser menor do que 100% devido a:

 alguns comandos podem ser inatingíveis

 falta de recursos (tempo, testadores, ferramentas)

(10)

Boa prática de cobertura

 A criação de um conjunto de testes:

 maximizar a cobertura

 os testes devem explorar o maior número de possibilidades

 minimizar o tempo

 deve-se buscar executar o menor número possível de testes

(11)

Tipos de cobertura

 cobertura de código

 objetivo é cobrir possíveis maneiras em que o código é executado

 cobertura de dados

 objetivo é cobrir as possíveis combinações de dados

(12)

Cobertura de comandos (statements)

 objetivo é executar todos os comandos das linhas de código pelo menos uma vez

 é a abordagem mais simples

 em termos do grafo de fluxo de controle consiste em garantir que todos os nodos

serão exercitados pelo menos uma vez pelo conjunto de testes

(13)

Cobertura de comandos (statements)

 não é capaz de detectar diversos tipos de defeito

 if (a > 0) onde deveria ser if (a >= 0)

 basta executar um comando de repetição uma única vez

 condições compostas não são testadas

 ifs sem elses são particularmente vulneráveis

 se houver um defeito na condição e esta for sempre

verdadeira, como não existe comando a ser testado no else este defeito não é descoberto usando cobertura de

(14)

Cobertura de comandos (statements)

public int thisHasAnError(int x, int y ) { String c; if (x == y) { c = new String; } return c.length(); }

(15)

92

Exercício: cobertura de comandos

1 public int determinaTipo (int a,b,c ) { 2 int tipo = ESCALENO;

3 if (a <= 0 || b <= 0 || c <= 0) { 4 tipo = INEXISTENTE;

} else

5 if (! (a + b > c && a + c > b && b + c > a)) { 6 tipo = INEXISTENTE; } else 7 if (a == b){ 8 tipo = ISOSCELES; 9 if (b == c) { 10 tipo = EQUILATERO; } } else 11 if (b == c || a == c) { 12 tipo = ISOSCELES; } Exercício: Determine um conjunto de casos de teste que garanta cobertura de comandos para o seguinte programa. Use o grafo de programa.

(16)

Solução:

grafo de programa

F 1,2 3 V 4 5 F V 6 7 F V 8 11 9 F V 10 F V 12

(17)

Solução: casos de teste

 cobertura de comandos: todos os nodos do grafo devem ser exercitados

 entrada 0,0,0 saída INEXISTENTE

 caminho 1,2,3,4,13

 entrada 1,2,3 saída INEXISTENTE

 caminho 1,2,3,5,6,13

 entrada 1,1,1 saída EQUILÁTERO

 caminho 1,2,3,5,7,8,9,10,13

 entrada 1,2,2 saída ISÓSCELES

(18)

Cobertura de desvios (branches)

 Cada desvio ou decisão consiste em uma condição (simples ou composta) que deve ser avaliada pelo menos uma vez como

verdadeira e uma como falsa

 para n condições, exige no máximo n+1 casos de teste

 em termos do grafo de fluxo de controle consiste em garantir que todos as arestas serão exercitados pelo menos uma vez pelo

(19)

Cobertura de desvios (branches)

 resolve alguns problemas da cobertura por comandos, mas não todos

 condições compostas podem não ser testadas

 podem haver caminhos não testados

 comandos de repetição só necessitam ser executados uma vez apesar da condição de repetição ter de ser testada duas vezes

 ou seja, apenas o caminho de comprimento um foi testado

(20)

Cobertura de desvios

public int testThis(int i) { if (a == b) ++i;

if (x == y) –-i; return i;

}

(4 caminhos possíveis, apenas 2 precisam ser testados para garantir cobertura de desvios)

(21)

98

Exercício: cobertura de desvios

1 public int determinaTipo (int a,b,c ) { 2 int tipo = ESCALENO;

3 if (a <= 0 || b <= 0 || c <= 0) { 4 tipo = INEXISTENTE;

} else

5 if (! (a + b > c && a + c > b && b + c > a)) { 6 tipo = INEXISTENTE; } else 7 if (a == b){ 8 tipo = ISOSCELES; 9 if (b == c) { 10 tipo = EQUILATERO; } } else 11 if (b == c || a == c) { 12 tipo = ISOSCELES; } Exercício: Determine um conjunto de casos de teste que garanta cobertura de desvios para o seguinte programa. Use o grafo de programa.

(22)

Solução: casos de teste

 cobertura de desvios: todas as arestas do grafo devem ser exercitadas

 entrada 0,0,0 saída INEXISTENTE

 caminho 1,2,3,4,13

 entrada 1,2,3 saída INEXISTENTE

 caminho 1,2,3,5,6,13

 entrada 1,1,1 saída EQUILÁTERO

 caminho 1,2,3,5,7,8,9,10,13

 entrada 1,2,2 saída ISÓSCELES

 caminho 1,2,3,5,7,11,12,13

 entrada 2,2,1 saída ISÓSCELES

(23)

Comparação

 Cobertura de comandos

 Cobertura de desvios

 as arestas em destaque não foram exercitadas na cobertura de comandos

 isso sugere que a

cobertura de desvios é melhor que a cobertura de comandos F 1,2 3 V 4 5 F V 6 7 F V 8 11 9 F V 10 F V 12

(24)

Cobertura de condições

 Cada parte de uma condição deve ser testada pelo menos uma vez como verdadeira e uma vez como falsa

 não requer testar todas as possibilidades

 Não requer que todos os desvios sejam cobertos

 o desvio pode ser sempre falso, por exemplo, mas cada parte da condição foi testada como V e F

 pode-se combiná-la com a cobertura de desvios

(25)

Cobertura de múltiplas condições

 Todas as combinações de V ou F de cada condição devem ser testadas

 uma condição composta de n partes deverá ter 2n combinações

 Cobre todos os comandos, desvios e condições

(26)

Cobertura de caminhos

 Deve-se cobrir todos os caminhos possíveis da entrada até a saída

 O número de caminhos pode chegar a 2n

para n condições

 No caso de comandos de repetição, o

número de caminhos é muito grande e pode ser infinito

 Em geral, o custo desse tipo de cobertura é proibitivo

(27)

Orientação a objetos

 Ao testar programas orientados a objetos é preciso tomar atenção especial com

chamadas polimórficas

 Cada chamada polimórfica deve ser

considerada como um desvio condicional com tantos pontos de entrada quantos

(28)

Cobertura de fluxo de dados

 Uma análise do padrão de fluxo de dados para

variáveis específicas é útil na detecção de defeitos  uso de variáveis sem serem definidas indica um defeito no

código – variável sem inicialização

 Todas as definições de variáveis devem ser exercitadas pelo menos uma vez

 uma variável é definida em um comando quando seu valor é atribuído ou alterado

 Todos os usos de variáveis devem ser exercitadas pelo menos uma vez

(29)

O que testar, então?

 Testar o funcionamento típico

 No mínimo, conseguir cobertura de comandos

 Testar dois valores em cada borda

 Testar casos de erro prováveis

 Testar os seus erros mais frequentes

 manter uma checklist com os seus bugs pessoais

 o uso de checklists personalizadas reduz o número de bugs em até 75%

Referências

Documentos relacionados

O saldo negativo da balança financeira diminuiu 6.278 milhões de escudos em termos homólogos, determinado pelo aumento dos ativos externos dos bancos (3.458 milhões de

A presente pesquisa demonstrou a participação ativa dos coletores de material reciclado e o reconhecimento do Poder Público local com o trabalho de parceria,

Uma vez conhecidos os fatores de estrutura F hkl , a densidade eletrônica ρ(xyz) pode ser calculada para cada ponto xyz na cela unitária, viabilizando a construção de mapas

Vale ressaltar que, para direcionar os trabalhos da Coordenação Estadual do Projeto, é imprescindível que a mesma elabore seu Planejamento Estratégico, pois para Mintzberg (2006,

Na experiência em análise, os professores não tiveram formação para tal mudança e foram experimentando e construindo, a seu modo, uma escola de tempo

volver competências indispensáveis ao exercício profissional da Medicina, nomeadamente, colheita da história clínica e exame físico detalhado, identificação dos

A Lei nº 2/2007 de 15 de janeiro, na alínea c) do Artigo 10º e Artigo 15º consagram que constitui receita do Município o produto da cobrança das taxas

A transcrição do caderno está sendo feita pela bolsista voluntária (PEVIC) Taylane Vieira dos Santos.. Etapa EM ANDAMENTO previsto para concluir em julho