Teste De Software Aula

3.440 visualizações

Publicada em

Aula de Eng. De Soft. II

0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.440
No SlideShare
0
A partir de incorporações
0
Número de incorporações
25
Ações
Compartilhamentos
0
Downloads
95
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Teste De Software Aula

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

×