Teste De Software Aula

Post on 30-Jun-2015

3.283 views 3 download

description

Aula de Eng. De Soft. II

Transcript of Teste De Software Aula

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 ?

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);}

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???

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!!

Objetivo do Teste

Revelar a presença de erros

Inexistência de erroSoftware é de alta qualidade?

T é de baixa qualidade?

?D P

XT

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

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?

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?

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

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)}

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

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*/ }

Exercício: Teste Estrutural