Teste de Software SCE307 - Engenharia de Software II Simone do Rocio Senger de Souza
Material de Apoio Maldonado, J.C.  et al.  Introdução ao Teste de Software , Notas Didáticas do ICMC, n. 65, 2004. Delamaro, M.E. et al.  Introdução ao Teste de Software , 1a Ed, Elsevier, 2007.
Introdução Alguém já testou algum programa ou software? Quais foram os maiores desafios?
Introdução Alguns problemas comuns... Não há  tempo  suficiente para o teste Muitas combinações de entrada  para serem exercitadas Dificuldade em  determinar os resultados esperados  para cada caso de teste Requisitos do software  inexistentes ou que mudam rapidamente Não há tempo para o  teste exaustivo Não há treinamento no  processo de teste Falta de  ferramenta  de apoio Gerentes que  desconhecem   teste  ou que não se preocupam com qualidade
Introdução Por que existem falhas nos sistemas? Quais são as causas das falhas? Como melhorar o processo de desenvolvimento e evitar falhas?
ARIANE 5 Em 1996, o veículo espacial Ariane 5 saiu do curso e explodiu segundos após o seu lançamento.  Levou uma década de desenvolvimento e custou 7 bilhões de dólares para a Agência Espacial Européia. Causa do acidente: reutilização de componentes do veículo Ariane 4.
ARIANE 5 Motivo da falha: Erro de software no cálculo da velocidade horizontal do foguete. A variável que armazenava este valor tinha 64 bits (floating point) e foi erroneamente modificada para 16 bits (signed integer). O valor era maior que 32.767 (maior inteiro), gerando uma falha de conversão!!!
O Foguete Espacial Challenger A explosão a bordo do Challenger é uma das falhas mais notáveis da tecnologia moderna. Em 1986, após 73 segundos do seu lançamento, uma explosão envolveu o foguete matando 7 astronautas. As investigações concluíram que o problema estava em algumas juntas do motor que não estavam projetadas para a temperatura e pressão ocorrida.
Motivo da falha: A especificação da pressão não estava de acordo com os requisitos do sistema. Os testes realizados foram inapropriados para detectar a falha. O Foguete Espacial Challenger
Introdução Por que falhas desse gênero ainda ocorrem? Qual o impacto das falhas nos softwares? É possível garantir a qualidade do software?
Exemplo Observe o exemplo a seguir: Considerando o tipo inteiro com 16 bits (2 bytes), o menor valor possível seria: - 32.768 e o maior seria 32.767, resultando em  65.536  valores diferentes possíveis int blech(int j) {   j = j - 1;  // deveria ser j = j + 1   j = j / 30000;   return(j); }
Exemplo Observe o exemplo a seguir: Haverá tempo suficiente para se criar  65.536 casos de teste ? E para programas maiores? Quantos casos de teste serão necessários? int blech(int j) {   j = j - 1;  // deveria ser j = j + 1   j = j / 30000;   return(j); }
Exemplo Quais valores escolher ?   Não revelam o erro ! int blech(int j) {   j = j - 1;  // deveria ser j = j + 1   j = j / 30000;   return(j); } -1 -1 -32000 1 1 32000 0 0 42 0 0 1 Saída obtida Saída esperada Entrada
Nenhum dos casos de testes anteriores revelou o erro . Somente quatro valores do intervalo de entrada válido revelam o erro: Exemplo int blech(int j) {   j = j - 1;  // deveria ser j = j + 1   j = j / 30000;   return(j); } Qual a chance de tais valores serem selecionados??? 0 1 29999 0 1 30000 -1 0 -29999 -1 0 -30000 Saída obtida Saída esperada Entrada
Teste Exaustivo Exemplo: Para testar um programa que calcula x y Domínio de entrada (x,y) inteiros 2 n  * 2 n  (n = n. de bits) 32 bits   2 64  = 18446744073709551616 valores possíveis 1 milissegundos = 5.849.424 séculos!!
Objetivo do Teste Revelar a presença de erros Inexistência de erro Software é de alta qualidade? T é de baixa qualidade? ? D P X T
Exemplo O programa lê três valores inteiros que representam os lados de um triângulo. A partir dos valores, o programa informa se os lados formam um triângulo isósceles, escaleno ou eqüilátero Condição: a soma de 2 lados tem que se maior que o 3 o   lado
Exemplo Existe c.t. para triângulo escaleno válido? Existe c.t. para triângulo isósceles válido? Existe c.t. para triângulo eqüilátero válido? Existem pelo menos 3 c.t. para isósceles válido contendo a permutação dos mesmos valores? Existe c.t. com um valor zero? Existe c.t. com um valor negativo? Existe c.t. em que a soma de 2 lados é igual ao terceiro lado? Para o item 7, tem um c.t. para cada permutação de valores?
Exemplo Existe c.t. em que a soma de 2 lados é menor que o terceiro lado? Para o item 9, tem um c.t. para cada permutação de valores? Existe c.t. para os 3 valores iguais a zero? Existe c.t. com valores não inteiros? Existe c.t. com número de valores errados, por exemplo, 2 valores ao invés de 3? Para cada c.t. você especificou a saída esperada para a entrada projetada?
Exemplo: Questões baseadas em erros encontrados em implementações deste programa!!!
Teste de Software A qualidade da atividade de teste está fortemente ligada à qualidade do conjunto de casos de teste Como selecionar casos de teste?
 
Técnicas de Teste Teste Funcional Teste Estrutural Teste Baseado em Erros
Exemplo: Programa Identifier O programa deve determinar se um identificador é válido ou não em Silly Pascal. Um identificador válido deve começar com uma letra e conter apenas letras ou dígitos. Além disso, deve ter no mínimo 1 caractere e no máximo 6 caracteres de comprimento.  Exemplo: abc12 (válido);  cont*1 (inválido); 1soma (inválido); a123456 (inválido)
Exemplo: Teste Funcional Exemplo de Conjunto de Casos de Teste: T 0  =  {(a1,Válido), (2B3, Inválido),    (Z-12, Inválido), (A1b2C3d, Inválido)} Tamanho  t  do identificador Condições de Entrada Classes Válidas Classes Inválidas 1     t    6 (1) Primeiro caractere  c  é uma letra Só contém caracteres válidos t    6 (2) Sim (3) Não (4) Sim (5) Não (6)
Alguns Critérios de Teste Estrutural Critérios de Fluxo de Controle Testar todos os comandos Testar todos desvios condicionais Testar todos os caminhos básicos Critérios de Fluxo de Dados Testar todo uso a partir de uma definição de variável
Exemplo: Teste Estrutural int main() { /*1*/  int p=1, divisor, cont, num;  /*1*/  printf(&quot;Digite um inteiro positivo: &quot;); /*1*/  scanf(&quot;%d&quot;,&num); /*2*/  while (p <= num) /*3*/  { /*3*/  cont = 0; /*4*/  for (divisor=1; divisor <= p; divisor ++) /*5*/  { /*5*/    if (p % divisor == 0)  /*6*/    cont++;  /*7*/  } /*8*/    printf(&quot;\nO inteiro %d &quot;,p); /*8*/    if (cont == 2)  /*9*/   printf(&quot;e' primo\n&quot;); /*10*/    else /*10*/   printf(&quot;nao e' primo\n&quot;); /*11*/    p++; /*11*/  } /*12*/  return 0; /*12*/ }
Exercício: Teste Estrutural

Teste De Software Aula

  • 1.
    Teste de SoftwareSCE307 - Engenharia de Software II Simone do Rocio Senger de Souza
  • 2.
    Material de ApoioMaldonado, J.C. et al. Introdução ao Teste de Software , Notas Didáticas do ICMC, n. 65, 2004. Delamaro, M.E. et al. Introdução ao Teste de Software , 1a Ed, Elsevier, 2007.
  • 3.
    Introdução Alguém játestou algum programa ou software? Quais foram os maiores desafios?
  • 4.
    Introdução Alguns problemascomuns... Não há tempo suficiente para o teste Muitas combinações de entrada para serem exercitadas Dificuldade em determinar os resultados esperados para cada caso de teste Requisitos do software inexistentes ou que mudam rapidamente Não há tempo para o teste exaustivo Não há treinamento no processo de teste Falta de ferramenta de apoio Gerentes que desconhecem teste ou que não se preocupam com qualidade
  • 5.
    Introdução Por queexistem falhas nos sistemas? Quais são as causas das falhas? Como melhorar o processo de desenvolvimento e evitar falhas?
  • 6.
    ARIANE 5 Em1996, o veículo espacial Ariane 5 saiu do curso e explodiu segundos após o seu lançamento. Levou uma década de desenvolvimento e custou 7 bilhões de dólares para a Agência Espacial Européia. Causa do acidente: reutilização de componentes do veículo Ariane 4.
  • 7.
    ARIANE 5 Motivoda falha: Erro de software no cálculo da velocidade horizontal do foguete. A variável que armazenava este valor tinha 64 bits (floating point) e foi erroneamente modificada para 16 bits (signed integer). O valor era maior que 32.767 (maior inteiro), gerando uma falha de conversão!!!
  • 8.
    O Foguete EspacialChallenger A explosão a bordo do Challenger é uma das falhas mais notáveis da tecnologia moderna. Em 1986, após 73 segundos do seu lançamento, uma explosão envolveu o foguete matando 7 astronautas. As investigações concluíram que o problema estava em algumas juntas do motor que não estavam projetadas para a temperatura e pressão ocorrida.
  • 9.
    Motivo da falha:A especificação da pressão não estava de acordo com os requisitos do sistema. Os testes realizados foram inapropriados para detectar a falha. O Foguete Espacial Challenger
  • 10.
    Introdução Por quefalhas desse gênero ainda ocorrem? Qual o impacto das falhas nos softwares? É possível garantir a qualidade do software?
  • 11.
    Exemplo Observe oexemplo a seguir: Considerando o tipo inteiro com 16 bits (2 bytes), o menor valor possível seria: - 32.768 e o maior seria 32.767, resultando em 65.536 valores diferentes possíveis int blech(int j) { j = j - 1; // deveria ser j = j + 1 j = j / 30000; return(j); }
  • 12.
    Exemplo Observe oexemplo a seguir: Haverá tempo suficiente para se criar 65.536 casos de teste ? E para programas maiores? Quantos casos de teste serão necessários? int blech(int j) { j = j - 1; // deveria ser j = j + 1 j = j / 30000; return(j); }
  • 13.
    Exemplo Quais valoresescolher ? Não revelam o erro ! int blech(int j) { j = j - 1; // deveria ser j = j + 1 j = j / 30000; return(j); } -1 -1 -32000 1 1 32000 0 0 42 0 0 1 Saída obtida Saída esperada Entrada
  • 14.
    Nenhum dos casosde testes anteriores revelou o erro . Somente quatro valores do intervalo de entrada válido revelam o erro: Exemplo int blech(int j) { j = j - 1; // deveria ser j = j + 1 j = j / 30000; return(j); } Qual a chance de tais valores serem selecionados??? 0 1 29999 0 1 30000 -1 0 -29999 -1 0 -30000 Saída obtida Saída esperada Entrada
  • 15.
    Teste Exaustivo Exemplo:Para testar um programa que calcula x y Domínio de entrada (x,y) inteiros 2 n * 2 n (n = n. de bits) 32 bits  2 64 = 18446744073709551616 valores possíveis 1 milissegundos = 5.849.424 séculos!!
  • 16.
    Objetivo do TesteRevelar a presença de erros Inexistência de erro Software é de alta qualidade? T é de baixa qualidade? ? D P X T
  • 17.
    Exemplo O programalê três valores inteiros que representam os lados de um triângulo. A partir dos valores, o programa informa se os lados formam um triângulo isósceles, escaleno ou eqüilátero Condição: a soma de 2 lados tem que se maior que o 3 o lado
  • 18.
    Exemplo Existe c.t.para triângulo escaleno válido? Existe c.t. para triângulo isósceles válido? Existe c.t. para triângulo eqüilátero válido? Existem pelo menos 3 c.t. para isósceles válido contendo a permutação dos mesmos valores? Existe c.t. com um valor zero? Existe c.t. com um valor negativo? Existe c.t. em que a soma de 2 lados é igual ao terceiro lado? Para o item 7, tem um c.t. para cada permutação de valores?
  • 19.
    Exemplo Existe c.t.em que a soma de 2 lados é menor que o terceiro lado? Para o item 9, tem um c.t. para cada permutação de valores? Existe c.t. para os 3 valores iguais a zero? Existe c.t. com valores não inteiros? Existe c.t. com número de valores errados, por exemplo, 2 valores ao invés de 3? Para cada c.t. você especificou a saída esperada para a entrada projetada?
  • 20.
    Exemplo: Questões baseadasem erros encontrados em implementações deste programa!!!
  • 21.
    Teste de SoftwareA qualidade da atividade de teste está fortemente ligada à qualidade do conjunto de casos de teste Como selecionar casos de teste?
  • 22.
  • 23.
    Técnicas de TesteTeste Funcional Teste Estrutural Teste Baseado em Erros
  • 24.
    Exemplo: Programa IdentifierO programa deve determinar se um identificador é válido ou não em Silly Pascal. Um identificador válido deve começar com uma letra e conter apenas letras ou dígitos. Além disso, deve ter no mínimo 1 caractere e no máximo 6 caracteres de comprimento. Exemplo: abc12 (válido); cont*1 (inválido); 1soma (inválido); a123456 (inválido)
  • 25.
    Exemplo: Teste FuncionalExemplo de Conjunto de Casos de Teste: T 0 = {(a1,Válido), (2B3, Inválido), (Z-12, Inválido), (A1b2C3d, Inválido)} Tamanho t do identificador Condições de Entrada Classes Válidas Classes Inválidas 1  t  6 (1) Primeiro caractere c é uma letra Só contém caracteres válidos t  6 (2) Sim (3) Não (4) Sim (5) Não (6)
  • 26.
    Alguns Critérios deTeste Estrutural Critérios de Fluxo de Controle Testar todos os comandos Testar todos desvios condicionais Testar todos os caminhos básicos Critérios de Fluxo de Dados Testar todo uso a partir de uma definição de variável
  • 27.
    Exemplo: Teste Estruturalint main() { /*1*/ int p=1, divisor, cont, num; /*1*/ printf(&quot;Digite um inteiro positivo: &quot;); /*1*/ scanf(&quot;%d&quot;,&num); /*2*/ while (p <= num) /*3*/ { /*3*/ cont = 0; /*4*/ for (divisor=1; divisor <= p; divisor ++) /*5*/ { /*5*/ if (p % divisor == 0) /*6*/ cont++; /*7*/ } /*8*/ printf(&quot;\nO inteiro %d &quot;,p); /*8*/ if (cont == 2) /*9*/ printf(&quot;e' primo\n&quot;); /*10*/ else /*10*/ printf(&quot;nao e' primo\n&quot;); /*11*/ p++; /*11*/ } /*12*/ return 0; /*12*/ }
  • 28.