aula18 teste software
DESCRIPTION
Aula USPTRANSCRIPT
![Page 1: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/1.jpg)
Teste de Software
SCE307 - Engenharia de Software II
Simone do Rocio Senger de Souza
![Page 2: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/2.jpg)
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.
![Page 3: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/3.jpg)
Introdução
Alguém já testou algum programa ou software?
Quais foram os maiores desafios?
![Page 4: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/4.jpg)
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
![Page 5: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/5.jpg)
Introdução
Por que existem falhas nos sistemas?
Quais são as causas das falhas?
Como melhorar o processo de desenvolvimento e evitar falhas?
![Page 6: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/6.jpg)
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.
![Page 7: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/7.jpg)
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!!!
![Page 8: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/8.jpg)
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.
![Page 9: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/9.jpg)
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
![Page 10: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/10.jpg)
Introdução
Por que falhas desse gênero ainda ocorrem?
Qual o impacto das falhas nos softwares?– É possível garantir a qualidade do
software?
![Page 11: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/11.jpg)
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);}
![Page 12: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/12.jpg)
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);}
![Page 13: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/13.jpg)
Exemplo
Quais valores escolher ?
Entrada Saída esperada
Saída obtida
1 0 0
42 0 0
32000 1 1
-32000 -1 -1
Não revelam o erro !
int blech(int j) { j = j - 1; // deveria ser j = j + 1 j = j / 30000; return(j);}
![Page 14: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/14.jpg)
Nenhum dos casos de testes anteriores revelou o erro. Somente quatro valores do intervalo de entrada válido revelam o erro:
Exemplo
Entrada Saída esperada
Saída obtida
-30000 0 -1
-29999 0 -1
30000 1 0
29999 1 0
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???
![Page 15: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/15.jpg)
Teste Exaustivo
Exemplo:– Para testar um programa que calcula xy
– Domínio de entrada (x,y) inteiros• 2n * 2n (n = n. de bits)• 32 bits 264 = 18446744073709551616
valores possíveis• 1 milissegundos = 5.849.424 séculos!!
![Page 16: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/16.jpg)
Objetivo do Teste
Revelar a presença de erros
Inexistência de erroSoftware é de alta qualidade?
T é de baixa qualidade?
?D P
XT
![Page 17: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/17.jpg)
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 3o lado
![Page 18: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/18.jpg)
Exemplo
1. Existe c.t. para triângulo escaleno válido?2. Existe c.t. para triângulo isósceles válido?3. Existe c.t. para triângulo eqüilátero válido?4. Existem pelo menos 3 c.t. para isósceles válido
contendo a permutação dos mesmos valores?5. Existe c.t. com um valor zero?6. Existe c.t. com um valor negativo?7. Existe c.t. em que a soma de 2 lados é igual ao
terceiro lado?8. Para o item 7, tem um c.t. para cada permutação de
valores?
![Page 19: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/19.jpg)
Exemplo
9. Existe c.t. em que a soma de 2 lados é menor que o terceiro lado?
10. Para o item 9, tem um c.t. para cada permutação de valores?
11. Existe c.t. para os 3 valores iguais a zero?
12. Existe c.t. com valores não inteiros?
13. Existe c.t. com número de valores errados, por exemplo, 2 valores ao invés de 3?
14. Para cada c.t. você especificou a saída esperada para a entrada projetada?
![Page 20: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/20.jpg)
Exemplo:
Questões baseadas em erros encontrados em implementações deste programa!!!
![Page 21: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/21.jpg)
Teste de Software
A qualidade da atividade de teste está fortemente ligada à qualidade do conjunto de casos de teste
– Como selecionar casos de teste?
![Page 22: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/22.jpg)
![Page 23: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/23.jpg)
Técnicas de Teste
Teste Funcional Teste Estrutural Teste Baseado em Erros
![Page 24: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/24.jpg)
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)
![Page 25: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/25.jpg)
Exemplo: Teste Funcional
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)
Exemplo de Conjunto de Casos de Teste:• T0 = {(a1,Válido), (2B3, Inválido),
(Z-12, Inválido), (A1b2C3d, Inválido)}
![Page 26: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/26.jpg)
Alguns Critérios de Teste Estrutural
Critérios de Fluxo de Controle1. Testar todos os comandos
2. Testar todos desvios condicionais
3. Testar todos os caminhos básicos Critérios de Fluxo de Dados
1. Testar todo uso a partir de uma definição de variável
![Page 27: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/27.jpg)
Exemplo: Teste Estruturalint main() {/*1*/ int p=1, divisor, cont, num; /*1*/ printf("Digite um inteiro positivo: ");/*1*/ scanf("%d",&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("\nO inteiro %d ",p);/*8*/ if (cont == 2) /*9*/ printf("e' primo\n");/*10*/ else/*10*/ printf("nao e' primo\n");/*11*/ p++;/*11*/ }/*12*/ return 0;/*12*/ }
![Page 28: Aula18 Teste Software](https://reader033.vdocuments.site/reader033/viewer/2022061601/55799d92d8b42ac1148b45a3/html5/thumbnails/28.jpg)
Exercício: Teste Estrutural