Teste Software

32
1 FABBRI, Sandra C. Pinto Ferraz. Teste e Validação de Software. MOLINARI, Leonardo. Testes de Software: Produzindo sistemas melhores e mais confiáveis. São Paulo: Érica, 2003. MYERS, Glenford J. The Art of Software Testing. New York: A Wiley- Interscience, 1979 PRESSMAN, R. S. Engenharia de Software. 5 ed. Rio de Janeiro: McGraw-Hill 2002. RUV, Marcelo. Notas de Aula. Universidade de Taubaté. Taubaté, 2006 SOMMERVILLE, I. Engenharia de Software. 6 ed. São Paulo: Pearson Addison Wesley, 2003. Referência Bibliogr Referência Bibliográ fica fica TESTE DE SOFTWARE Problema Problema Um programa lê três valores de Entrada. Os três valores são interpretados como sendo os lados de um triângulo. O programa imprime uma mensagem que indica se o triângulo é escaleno, isósceles ou eqüilátero. Proposta: Proposta: Como este programa seria testado para garantir que o mesmo esteja correto? Elabore casos de teste para o problema acima.

Transcript of Teste Software

Page 1: Teste Software

1

FABBRI, Sandra C. Pinto Ferraz. Teste e Validação de Software.

MOLINARI, Leonardo. Testes de Software: Produzindo sistemas melhores e mais confiáveis. São Paulo: Érica, 2003.

MYERS, Glenford J. The Art of Software Testing. New York: A Wiley-Interscience, 1979

PRESSMAN, R. S. Engenharia de Software. 5 ed. Rio de Janeiro: McGraw-Hill 2002.

RUV, Marcelo. Notas de Aula. Universidade de Taubaté. Taubaté, 2006

SOMMERVILLE, I. Engenharia de Software. 6 ed. São Paulo: Pearson Addison Wesley, 2003.

Referência BibliogrReferência Bibliográáficafica

TESTE DE SOFTWARE

ProblemaProblema

� Um programa lê três valores de Entrada. Os três valores são interpretados como sendo os lados de um triângulo. O programa imprime uma mensagem que indica se o triângulo é escaleno, isósceles ou eqüilátero.

Proposta:Proposta:

� Como este programa seria testado para garantir que o mesmo esteja correto?

� Elabore casos de teste para o problema acima.

Page 2: Teste Software

2

Check List:Check List:1. Você tem um caso de teste que represente um triângulo escaleno válido?2. Você tem um caso de teste que represente um triângulo eqüilátero válido?3. Você tem um caso de teste que represente um triângulo isósceles válido?4. Você tem ao menos três casos de teste que representem triângulos isósceles de tal

forma que tenham sido testadas todas as permutações dos lados? Por exemplo: 3, 3, 4; 3, 4, 3; 4, 3, 3.

5. Você tem um caso de teste onde um dos lados é zero?6. Você tem um caso de teste onde um dos lados possui valor negativo?7. Você tem um caso de teste com três números inteiros maiores que zero tal que a soma

dos dois lados menores é igual ao lado maior?8. Você tem ao menos três casos de teste na categoria 7 tal que você tenha tentado todas

as permutações dos lados?9. Você tem um caso de teste com três números inteiros maiores que zero tal que a soma

dos dois lados menores seja menor que o lado maior?10. Você tem ao menos três casos de teste na categoria 9 tal que você tenha tentado todas

as permutações?11. Você tem um caso de teste onde todos os lados são zero?12. Você tem ao menos um caso de teste especificando valores não inteiros?13. Você tem ao menos um caso de teste especificando valores errados? Por exemplo: dois

ao invés de três lados.14. Para cada caso de teste, você especificou o(s) resultado(s) esperado(s) para cada

conjunto de entradas?

VerificaVerificaçção, Validaão, Validaçção e Testeão e Teste

Para Boehm (1979):� Validação: estamos construindo o produto certo?� Verificação: estamos construindo certo o produto?

No processo VV &T, as seguintes técnicas de checagem e análise de sistemas podem ser utilizadas:� Inspeções de Software� Testes de software

Page 3: Teste Software

3

DefiniDefiniççõesões

� Defeito Erro Falha– Não há um consenso sobre a definição de

termos. Existe sim um conceito comum que recebe diferentes nomes em diferentes momentos.

– Defeito: deficiência mecânica ou algorítmica que se ativada pode levar a uma falha

– Erro: item de informação ou estado de execução inconsistente

– Falha: evento notável onde o sistema viola suas especificações

DefiniDefiniççõesões

� Teste: é o processo de executar um programa ou sistema com a finalidade de encontrar erros.

� Teste: é qualquer atividade que vise avaliar uma característica ou recurso de programa ou sistema”.

� Teste: Processo de executar um programa com o objetivo de revelar a presença de defeitos; ou, falhando nesse objetivo, aumentar a confiança sobre o programa

� Depuração: é uma conseqüência não previsível do teste. Após revelada a presença do defeito ele deve ser encontrado e corrigido

Page 4: Teste Software

4

� A maior parte é de origem humana

� São gerados na comunicação e na transformação de informações

� Permanecem presentes nos diversos produtos de software produzidos e liberados. (10 defeitos a cada 1000 linhas de código)

� A maioria encontram-se em partes do código raramente executadas

� Quanto antes a presença do defeito for revelada, menor o custo de correção do defeito e maior a probabilidade de corrigí-lo corretamente

� Principal causa: tradução incorreta de informações

� Solução: introduzir atividades de Verificação, Validação &Teste ao longo de todo o ciclo de desenvolvimento

Defeitos no Processo de DesenvolvimentoDefeitos no Processo de Desenvolvimento

Objetivo:Objetivo:

� Um teste tem por objetivo encontrar erros através de verificação/ validação de uma característica, atributo etc., de um programa.

� Um caso de teste caracteriza-se pelos experimentos feitos no software a fim de cumprir o objetivo do teste.

Page 5: Teste Software

5

�Principal Objetivo: refutar a assertiva de que o produto está correto

� Determinar entradas que façam as saídas obtidas diferirem das saídas esperadas segundo a especificação (busca de um contra-exemplo)

� É um processo destrutivo, sob o ponto de vista psicológico, contrariamente às demais fases da Engenharia de Software, onde constrói-se um produto

Objetivo:Objetivo:

Teste de SoftwareTeste de Software

– Uma das atividades mais onerosas do desenvolvimento de software

– Atividade essencial para ascensão ao nível 3 do Modelo CMMI/SEI

– Atividade relevante para avaliação de produtos de software

(ISO 9126, ISO 14598-5)

Page 6: Teste Software

6

Teste de Software Teste de Software -- AtividadesAtividades

– Planejamento

– Projeto de Casos de Teste– Execução de Casos de Teste

– Análise de Resultados

Teste de Software Teste de Software -- TTéécnicascnicas

– Estrutural ou Teste Caixa Branca» Os requisitos de teste são extraídos de uma

implementação em particular

– Funcional ou Teste Caixa Preta» Baseada na especificação do software

– Baseada em Erros» Baseada nos erros típicos e comuns cometidos

durante o desenvolvimento

Page 7: Teste Software

7

Teste de Software Teste de Software -- Estrutural ou Teste Caixa BrancaEstrutural ou Teste Caixa Branca

– São testados os caminhos lógicos do software, fornecendo casos de testes que põem a prova conjuntos de condições e/ou laços

– Testes dos detalhes procedimentais

– Utiliza uma representação gráfica conhecida como grafo de programa ou grafo de fluxo de controle

Teste de Software Teste de Software -- Estrutural ou Teste Caixa BrancaEstrutural ou Teste Caixa Branca

� Consiste de nós conectados por arcos com setas que mostram sua direção

� Os nós representam blocos de comandos – bloco de comando: é um conjunto de comandos tal que se o

primeiro comando for executado, então todos os comandos subseqüentes também o serão

� Os arcos indicam precedência, ou transferência de controle

� Essa representação permite que o programa seja examinado independentemente de sua função

Grafo de Fluxo de Controle ou Grafo de Programa

Page 8: Teste Software

8

Teste de Software Teste de Software -- Estrutural ou Teste Caixa BrancaEstrutural ou Teste Caixa Branca

☺Construções Básicas do Grafo de Fluxo de Controle

seqseqüüênciaência decisãodecisãoRepetiRepetiççãoão

whilewhileRepetiRepetiççãoão

repeatrepeatDecisãoDecisão

CaseCase

Teste de Software Teste de Software -- Estrutural ou Teste Caixa BrancaEstrutural ou Teste Caixa Branca

☺ Exemplo:Procedimento Maior (A:Vetor; Tam:inteiro; Var Max:inteiro);

Variáveis

I,M: inteiro;

Início

1 M←A[1];

2 I ←2;

3 Enquanto I < Tam Faça

4 Se A[I] > M Então

5 M ←A[I];

6 I ←I+1;

7 Senão I ←I+1;

8 Fim Se

9 Fim Enquanto

10 Max ←M;

Fim Procedimento

1,2

3

4

5,67

8

9

10

Page 9: Teste Software

9

Teste de Software Teste de Software -- Estrutural ou Teste Caixa BrancaEstrutural ou Teste Caixa Branca

início1 leia (nro)2 enquanto nro <> 0 faça3 se nro > 0 então4 raiz ← raiz-quadrada(nro)5 escreva (raiz)6 Senão escreva (‘mensagem de erro’)7 Fim se8 leia (nro)1 Fim enquanto2 Escreva (‘fim de programa’)fim

Exemplo de Construção do Grafo de Fluxo de Controle

3

4 5

6

1

2

8

7

1

2

3

4

5

6

7

8

Teste EstruturalTeste Estrutural1

2

3

4

5

6

7

8

9

10

13

14

17

18

15 16

11 12

a

b cd

e

f g

h

i

j

k

l m

n o

p

q

r

s t

u v

w

1 program exemplo(input, output);2 var a: array[1..20] of char;3 x, i: integer;4 c, resposta: char;5 achou: boolean;6 begin7 writeln (‘entre com um inteiro entre 1 e 20’);8 readln (x);9 while (x < 1) or (x > 20) do10 begin11 writeln (‘entre com um inteiro entre 1 e 20’);12 readln (x)13 end;14 writeln (‘digite’, x, ‘caracteres’);15 for i := 1 to x do16 read (a[ i ]);17 readln;18 repeat19 writeln (‘digite o caracter a ser pesquisado: ‘);20 readln (c);21 achou := FALSE;22 i := 1;23 while (not(achou)) and (i <= x) do24 begin25 if a[ i ] = c then26 achou := TRUE27 else28 i := i + 129 end;30 if achou then31 writeln (‘o caracter ’, c, ‘ aparece na posicao’, i)32 else33 writeln (‘o caracter ’, c, ‘ não ocorre na string fornecida’);34 writeln;35 writeln (‘deseja fazer a procura para outro caracter? [s/n]’);36 readln (resposta);37 until (UpCase(resposta)='N');38 end.

1

2

3

4

5

67

8

9

10

11

12

1314

15

16

17

18

Grafo de fluxo

de controle

Programa com blocos marcados

Page 10: Teste Software

10

Teste do Caminho BaseTeste do Caminho Base

� Descrição:– Esse critério fornece uma maneira de determinar um conjunto básico de

caminhos linearmente independentes, de modo que executando-os garante-se a execução de todos os comandos ao menos uma vez.

– Um caminho independente é qualquer caminho através do programa que introduza pelo menos um novo conjunto de instruções de processamento ou uma nova condição.

– Esse número é determinado pela fórmula da Complexidade Ciclomática de Mc’Cabe

– V(G) = a – n + 2 ou

– V(G) = P + 1 ou

– V(G) = no. de regiões

– Onde:» G: um grafo direcionado

» a: arestas (ramos)

» n: nós

» P: no. de nós predicativos

Teste de Software Teste de Software -- Teste do Caminho BaseTeste do Caminho Base

Determinar o nº de caminhos lineramente independentes.

Complexidade CiclomComplexidade Ciclomáática de tica de Mc’Cabe:1. V(G) = O grafo de fluxo tem 3 regiões

2. V(G) = 9 arestas - 8 nós + 2 = 3

3. V(G) = 2 nós predicativos + 1 = 3

A Complexidade Ciclomática é 3.

1,2

3

4

5,67

8

9

10

R1

R2

R3

CaminhosCaminhos

Caminho 1: 1, 2, 3, 10

Caminho 2: 1, 2, 3, 4, 5, 6, 8, 9, 3, 10

Caminho 3: 1, 2, 3, 4, 7, 8, 9, 3, 10

Page 11: Teste Software

11

Teste de Software Teste de Software -- Teste do Caminho BaseTeste do Caminho Base

1,2

3

4

5,67

8

9

10

R1

R2

R3

CaminhosCaminhos

Caminho 1Caminho 1:: 1, 2, 3, 101, 2, 3, 10

A=(1,5) Tam=0A=(1,5) Tam=0Resultado Esperado => Max=1Resultado Esperado => Max=1

Caminho 2Caminho 2:: 1, 2, 3, 4, 5, 6, 8, 9,1, 2, 3, 4, 5, 6, 8, 9, 3,103,10

A=(1,5) Tam=2A=(1,5) Tam=2Resultado Esperado => Max=5Resultado Esperado => Max=5

Caminho 3Caminho 3:: 1, 2, 3, 4, 7, 8, 3, 9, 101, 2, 3, 4, 7, 8, 3, 9, 10

A=(5,1,) Tam=2A=(5,1,) Tam=2Resultado Esperado => Max=5Resultado Esperado => Max=5

início1 leia (nro)2 enquanto nro <> 0 faça3 se nro > 0 então4 raiz ← raiz-quadrada(nro)5 escreva (raiz)6 Senão escreva (‘mensagem de erro’)7 Fim se8 leia (nro)1 Fim enquanto2 Escreva (‘fim de programa’)fim

3

4 5

6

1

2

8

7

1

2

3

4

5

6

7

8

Teste do Caminho Base Teste do Caminho Base -- Outro exemplo

� Aplicação:– V(G) = 9 - 8 + 2 = 3

– V(G) = 2 +1 = 3

– V(G) = no. de regiões = 3

– A partir desse número deve-se escolher 3 caminhos linearmente independentes do grafo:

» 1. 1-2-8

» 2. 1-2-3-5-6-7-2-8

» 3. 1-2-3-4-6-7-2-8

R1

R2

R3

Page 12: Teste Software

12

public long fatorial (int n){

int i; long fat;

1 if (n==0) || (n==1)2 fat=1;3 else4 {5 fat=1;6 for (i=1;i<=n;i++)7 fat=fat*i;8 }9 return fat;10 }

Teste do Caminho Base Teste do Caminho Base -- Outro exemplo

� Aplicação:– V(G) = 23 - 18 + 2 = 7

– V(G) = 6 +1 = 7

– V(G) = no. de regiões = 7

– A partir desse número deve-se escolher 7 caminhos linearmente independentes do grafo:

» 1. 1-2-4-5-7-8-9-14-15-17-18

» 2. 1-2-4-5-7-8-9-14-16-17-18

» 3. 2-3-2

» 4. 5-6-5

» 5. 9-10-11-13-9

» 6. 9-10-12-13-9

» 7. 8-9-14-15-17-8

1

2

3

4

5

6

7

8

9

10

13

14

17

18

15 16

11 12

a

b cd

e

f g

h

i

j

k

l m

n o

p

q

r

s t

u v

w

Teste de Software Teste de Software -- Teste do Caminho BaseTeste do Caminho Base

Page 13: Teste Software

13

Teste de ComandosTeste de Comandos

� Descrição:– Estabelece como requisito de teste que sejam executados todos

os comandos do programa ao menos uma vez

� Aplicação:– É necessário concentrar-se nos comandos que são controlados

por condições

– Fornecer um valor para x que esteja fora do intervalo para forçar a execução dos comandos no loop (linhas 11-12)

– Quando x está dentro do intervalo, ele será no mínimo 1 e o comando dentro do for (linha 16) será executado

Teste de ComandosTeste de Comandos

� Aplicação (cont.):– O comando if (linha 25) precisa ser executado, com as

alternativas then e else (linhas 26 e 28) ⇒ procurar por um caracter que esteja na cadeia e que force a procura dentro dela

– A entrada no while (linha 23) é garantida

– O comando if (linha 30) precisa ser executado, com as alternativas then e else (linhas 31 e 33) ⇒ um caracter que pertença e outro que não pertença à cadeia (combinando com o if anterior ⇒ uma cadeia de caracteres a, de um caracter e valores para a variável c que ocorra e que não ocorra em a)

– Por fim, é preciso terminar o loop para executar o comando end

Page 14: Teste Software

14

Teste de ComandosTeste de Comandos

entrada saída esperadax a c resposta

25 entre com um inteiro entre 1 e 201 b b o caracter b aparece na posicao 1

sa o caracter a não ocorre na string fornecida

n

Dados de teste para o Teste de Comandos

� Observação:– É o nível mínimo de cobertura esperado no teste estrutural

Teste de RamosTeste de Ramos

� Descrição:– Com dados de teste deve-se exercitar todas as saídas verdadeiro

e falso de todas as decisões

� Aplicação:– É conveniente observar o grafo do programa

– Observando o grafo, é necessário gerar dados de teste que causem as duas saídas verdadeiro e falso que ocorrem nos nós 2, 5, 9, 10, 14 e 17

– Para o nó 2, um valor da variável x menor que 1 ou maior que 20 causa a saída pelo ramo verdadeiro e um valor de x dentro desse intervalo causa a saída pelo ramo falso

– O nó 5, comando for (linha 15), terá as saídas verdadeiro e falso, desde que o valor de x seja ao menos 1 (e terá que ser para chegar nesse ponto)

Page 15: Teste Software

15

Teste de RamosTeste de Ramos

� Aplicação (cont.):– Para o nó 9, loop while (linha 23), a saída verdadeiro (arco k) é

garantida devido aos comandos das linhas 21 e 22; a saída falso

(arco q) é garantida ou quando o caracter que está sendo procurado é encontrado ou quando o final da cadeia éencontrado

– O nó 10, if (linha 25), requer uma comparação que encontre o caracter que está sendo procurado (arcos l, n) e uma outra que cause o incremento de i (arcos m, o)

– O nó 14 (linha 30) precisa de um caracter que seja encontrado e um outro que não seja encontrado

– O nó 17 requer pelo menos mais uma iteração do loop repeat

(arco r) antes que o final do programa seja encontrado (arco w)

Teste de RamosTeste de Ramos

entrada saída esperadax a c resposta

25 entre com um inteiro entre 1 e 201 x x o caracter x aparece na posicao 1

sa o caracter a não ocorre na string fornecida

n

Dados de teste para o Teste de Ramos

� Observação:– O conjunto de dados de testes é o mesmo do Teste de

Comandos, mas neste, o caracter a poderia ser fornecido através de outra execução do programa, já no Teste de Ramos, a execução do loop repeat é obrigatória

Page 16: Teste Software

16

Teste de CondiTeste de Condiççãoão

� Descrição:– Estabelece os requisitos de teste tal que todas as condições em

uma decisão requeiram as duas saídas, verdadeiro e falso, se for possível, ao menos uma vez

� Aplicação:– É necessário considerar todos os nós identificados no Teste de

Ramos, mas neste caso, devem ser consideradas todas as condições das decisões

– No loop while (linha 9), tem-se uma decisão com duas condições: while (x<1) or (x>20) do

» valores de x: 0 e 21 obtém-se a cobertura das condições.

» Se x=0 então a primeira condição é verdadeira e a segunda é falsa;

» Se x=21 então a primeira condição é falsa e a segunda é verdadeira

Teste de CondiTeste de Condiççãoão

� Aplicação (cont.):– É necessário gerar um outro valor para x que esteja dentro do

intervalo, de forma que seja possível a execução do resto do programa

– Esse valor pode ser determinado pelo requisito imposto pela outra condição do programa, que corresponde ao loop for do comando: for i:=1 to x do

» para uma saída verdadeira a variável i deve ser menor ou igual a x; para uma saída falsa a variável i deve ser maior que x. Como x é pelo menos 1 para se chegar nessa parte do programa, o for é executado até que i seja maior que x

Page 17: Teste Software

17

Teste de CondiTeste de Condiççãoão

� Aplicação (cont.):– Loop while, linha 23 (nó 9): while (not(achou))and(i<=x) do

» as duas condições nessa decisão são verdadeiras quando se entra nesse loop

» Para torná-las com valor falso, é preciso prever as duas alternativas, ou seja, o caso de um caracter que pertença à string e o caso de um caracter que não pertença

– Essas duas alternativas geram também os valores verdadeiro e falso para os comandos if da linha 25 e if da linha 30

– A última decisão a ser considerada é o comando until da linha 37 (nó 17): until (UpCase(resposta)='N' );

» executar o programa duas vezes, uma com ‘n’ e outra com ‘N’

Teste de CondiTeste de Condiççãoão

entrada saída esperadax a c resposta

21 entre com um inteiro entre 1 e 200 entre com um inteiro entre 1 e 201 x x o caracter x aparece na posicao 1

n

1 x a o caracter a não ocorre na string fornecidaN

Dados de teste para o Teste de Condição

Page 18: Teste Software

18

Teste FuncionalTeste Funcional

� Os requisitos de teste são extraídos da especificação do software

� Aborda o software de um ponto de vista macroscópico

� Procura descobrir erros nas seguintes categorias:

� Funções incorretas ou ausentes

� Erros de Interface

� Erros nas estruturas de Dados ou acesso a bancos de dados externos

� Erros de desempenho

� Erros de inicialização e término

Teste FuncionalTeste Funcional

� Problema:– Dificuldade em quantificar a atividade de teste - não se

pode garantir que partes essenciais ou críticas do software foram executadas

– Está sujeito a inconsistências decorrentes da especificação.

� Critérios:– Particionamento de Equivalência

– Análise do Valor Limite

– Grafo Causa-Efeito

– Teste Estatístico de Software

Page 19: Teste Software

19

Particionamento de EquivalênciaParticionamento de Equivalência

� Descrição:– Divide o domínio de entrada em classes ou partições de

equivalência que, de acordo com a especificação do programa, são tratadas da mesma maneira

– As classes de equivalência representam um conjunto de estados válidos ou inválidos e podem ser definidas de acordo com as seguintes diretrizes:

» Se a condição de entrada especificar um intervalo, são definidas uma classe válida e duas inválidas

» Se a condição de entrada exige um valor específico, são definidas uma classe válida e duas inválidas

» Se a condição de entrada especifica um membro de um conjunto, são definidas uma classe válida e uma inválida

» Se a condição de entrada for booleana, são definidas uma classe válida e uma inválida

Programa ExemploPrograma Exemplo1

2

3

4

5

6

7

8

9

10

13

14

17

18

15 16

11 12

a

b cd

e

f g

h

i

j

k

l m

n o

p

q

r

s t

u v

w

1 program exemplo(input, output);2 var a: array[1..20] of char;3 x, i: integer;4 c, resposta: char;5 achou: boolean;6 begin7 writeln (‘entre com um inteiro entre 1 e 20’);8 readln (x);9 while (x < 1) or (x > 20) do10 begin11 writeln (‘entre com um inteiro entre 1 e 20’);12 readln (x)13 end;14 writeln (‘digite’, x, ‘caracteres’);15 for i := 1 to x do16 read (a[ i ]);17 readln;18 repeat19 writeln (‘digite o caracter a ser pesquisado: ‘);20 readln (c);21 achou := FALSE;22 i := 1;23 while (not(achou)) and (i <= x) do24 begin25 if a[ i ] = c then26 achou := TRUE27 else28 i := i + 129 end;30 if achou then31 writeln (‘o caracter ’, c, ‘ aparece na posicao’, i)32 else33 writeln (‘o caracter ’, c, ‘ não ocorre na string fornecida’);34 writeln;35 writeln (‘deseja fazer a procura para outro caracter? [s/n]’);36 readln (resposta);37 until (UpCase(resposta)='N');38 end.

1

2

3

4

5

67

8

9

10

11

12

1314

15

16

17

18

Grafo de fluxo

de controle

Programa com blocos marcados

Page 20: Teste Software

20

Particionamento de EquivalênciaParticionamento de Equivalência

� Aplicação:– De acordo com a especificação, existem basicamente quatro

entradas:» um inteiro positivo (entre 1 e 20 ⇒ 3 partições)

» uma cadeia de caracteres

» um caracter a ser procurado

» a opção por procurar por mais caracteres (duas partições: uma para “S” e outra para “N”)

– O domínio de saída consiste de duas respostas, que levam a outra divisão do domínio de entrada:

» a posição na qual o caracter foi encontrado na string (caracter de entrada pertencente à string)

» uma mensagem declarando que ele não foi encontrado (caracter de entrada não pertencente à string)

Particionamento de EquivalênciaParticionamento de Equivalência

Dados de teste para o Teste de Particionamento de Equivalência

entrada saída esperadax a c resposta

34 entre com um inteiro entre 1 e 200 entre com um inteiro entre 1 e 203 abc c o caracter c aparece na posicao 3

sk o caracter k não ocorre na string fornecida

n

Page 21: Teste Software

21

Particionamento de EquivalênciaParticionamento de Equivalência

� Observação:– Reduz o tamanho do domínio de entrada

– Concentra-se em criar dados de teste baseados unicamente na especificação

– É especialmente adequado para aplicações em que as variáveis de entrada podem ser facilmente identificadas e podem ter valores distintos

– Problemas:» embora a especificação possa sugerir que um grupo de dados seja

processado de forma idêntica, isso pode não ocorrer

» a técnica não fornece um guia para a determinação dos dados de teste

AnAnáálise do Valor Limitelise do Valor Limite

� Descrição:– Complementa o Particionamento de Equivalência

– Coloca sua atenção em uma fonte propícia a erros – os limites de uma classe ou partição de equivalência

Partição de Equivalência

Limites

Page 22: Teste Software

22

AnAnáálise do Valor Limitelise do Valor Limite

� Aplicação:– Os valores inteiros 0, 1, 20 e 21

– Encontrar o caracter na primeira e na última posição da cadeia de caracteres

Dados de teste para o Teste de Análise do Valor Limiteentrada saída esperada

x a c resposta

21 entre com um inteiro entre 1 e 200 entre com um inteiro entre 1 e 201 a a o caracter a aparece na posicao 1

sx o caracter x não ocorre na string fornecida

n

20 abcdefghijklmnopqrst a o caracter a aparece na posicao 1s

t o caracter t aparece na posicao 20n

Teste Baseado em ErrosTeste Baseado em Erros

� Os requisitos de teste são estabelecidos com base nos erros típicos e comuns cometidos durante o desenvolvimento do software.

� Consistem em incluir propositalmente algum erro no programa e observar seu comportamento comparando com o comportamento do programa original.

� Fornecem indicadores para gerenciar o processo de teste: porcentagem de erros remanescentes e qualidade dos casos de testes.

� Tipos de testes baseados em erros:Semeadura de Erros [DeMillo, 1980]Análise de Mutantes [Budd, 1981]

Page 23: Teste Software

23

Teste Baseado em Erros: Semeadura de ErrosTeste Baseado em Erros: Semeadura de Erros1. Uma quantidade definida de erros artificiais (típicos) são introduzidos em um programa que já foi testado, e cujos erros são conhecidos.

2. Os casos de teste já realizados são repetidos para o programamodificado e verifica-se a quantidade de novos erros que foram identificados.3. A proporção:

total de novos erros identificados / total de erros introduzidos

... permite estimar a quantidade de erros remanescentes parao conjunto de casos de teste definidos para o programa.

Se os casos de teste foram capazes de identificar 60% dos novos erros pode-se supor que isto se verifique para o conjunto total dos erros do programa original.

Desta forma pode-se comparar a estimativa de erros remanescentes com a confiabilidade esperada (especificada) para o software.

Teste Baseado em Erros: AnTeste Baseado em Erros: Anáálise de Mutanteslise de MutantesEsta técnica é empregada para avaliar o quanto um conjunto de casos

de teste é adequado para testar um dado programa.

1. Casos de teste T são gerados para um programa P;2. A aplicação de T revela e existência do conjunto de erros E no

programa P;3. Gera-se um programa mutante P’ que possua pequenas mudançasem relação ao original (defeitos comuns em programação );4. A aplicação de T revela e existência do conjunto de erros E’ noprograma P’;� se E ≠E’ o mutante é “morto”� se E = E’ o mutante continua “vivo”5. Análise dos mutantes vivos;

verificar se os casos de teste foram insuficiente para detectar a modificação introduzida, o que significa que outros erros podem estar escondidos no programa P... e novos casos de teste devem ser definidos;

Page 24: Teste Software

24

EstratEstratéégias de Testegias de Teste

C

P

R

S

U

I

V

TS

Engenharia de SistemaRequisitos

ProjetoCódigo

Teste de UnidadeTeste de IntegraçãoTeste de ValidaçãoTeste de Sistema

Relação entre o processo de desenvolvimento e uma estratégia de teste

EstratEstratéégias de Testegias de Teste

Page 25: Teste Software

25

EstratEstratéégias de Teste para o Paradigma OOgias de Teste para o Paradigma OO

Segundo Colanzi (1999):

•• Teste de Unidade:Teste de Unidade: Testa os métodos individualmente;

•• Teste de Classe:Teste de Classe: Testa a interação entre os métodos de uma classe;

•• Teste de IntegraTeste de Integraçção:ão: Testa a interação entre as classes do sistema;

•• Teste de Sistema:Teste de Sistema: Testa a funcionalidade do sistemacomo um todo.

Teste de UnidadeTeste de Unidade

� Concentra-se no módulo

� Utiliza a técnica de teste estrutural

� Pode ser realizado em paralelo para vários módulos

� Aspectos considerados:

InterfaceEstrutura de dados localCondições limiteCaminhos independentesCaminhos de tratamento de erros

Casos de teste

Módulo__________________________________________________

_____

Page 26: Teste Software

26

Teste de UnidadeTeste de Unidade

� Geralmente, um programa não é um módulo único, mas formado de diversos módulos que, para efeito do teste de unidade devem ser testados separadamente

InterfaceEstrutura de dados localCondições limiteCaminhos independentesCaminhos de tratamento de erros

Casos de teste

Driver

Módulo a ser testado

Stub Stub Resultados

driver : é um “programa principal” que aceita dados de casos de teste, passa esses dados para o módulo a ser testado e imprime os dados relevantes que ele recebe do módulo

stub : são módulos que servem para substituir outros módulos que estejam subordinados, isto é, que são chamados pelo módulo testado; ele usa a interface do módulo subordinado, faz o mínimo de manipulação de dados, imprime uma verificação da entrada e retorna

Teste de IntegraTeste de Integraççãoão

� Constrói-se, de uma forma sistemática, a estrutura do programa realizando, ao mesmo tempo, testes para detectar erros de interface

� Embora os módulos, depois do teste de unidade, funcionem corretamente de forma isolada, o teste de integração énecessário pois quando colocados juntos, várias situações inesperadas podem acontecer

� Integração dos módulos é feita através de uma abordagem

incremental

– integração top-down

– integração bottom-up

Page 27: Teste Software

27

Teste de IntegraTeste de Integraççãoão

� Integração Top-down– A integração dos módulos é feita de cima para baixo

– Pode ser realizada de duas maneiras: » por profundidade (M2, M5 e M8 ou M2, M5, M6 e M8)

» por largura (M2, M3 e M4)

M1

M2 M3 M4

M5 M6

M8

M7

Teste de IntegraTeste de Integraççãoão

� Integração Top-down– O processo de integração é feito através de cinco passos:

» 1. O módulo de controle principal é usado como um driver e substitui-se por stubs todos os módulos reais diretamente subordinados ao módulo principal;

» 2. Dependendo da abordagem de integração a ser utilizada – por profundidade ou largura – os stubs são substituídos pelos módulos reais, um de cada vez;

» 3. São realizados testes para cada módulo que seja integrado;

» 4. Quando um teste é concluído, outro stub é substituído pelo módulo real;

» 5. Teste de regressão, isto é, repetição de todos ou alguns dos testes járealizados pode ser aplicado novamente para garantir que novos erros não tenham sido introduzidos.

Page 28: Teste Software

28

Teste de IntegraTeste de Integraççãoão

� Integração Top-down

– Por profundidade: permite que uma função específica do módulo principal possa ser testada por completo

– Nem sempre a construção de um stub é uma tarefa fácil, pois se a função do módulo real que ele representa for complexa, o stub tem que tratar os aspectos principais desse módulo para que o teste seja significativo

Teste de IntegraTeste de Integraççãoão

� Integração Bottom-up– A integração dos módulos é feita de baixo para cima

– Quando os módulos de níveis superiores vão ser testados, os módulos subordinados já estão prontos e portanto, não se torna necessária a construção de stubs

Mc

Ma Mb

D1 D2 D3

Cluster3

Cluster2

Cluster1

Page 29: Teste Software

29

Teste de IntegraTeste de Integraççãoão

� Integração Bottom-up– O processo de integração é feito através de quatro passos:

» 1. Os módulos de nível mais baixo são combinados em clusters que executam funções específicas do módulo principal;

» 2. Para cada cluster é elaborado um driver que coordena a entrada e saída dos casos de teste;

» 3. O cluster é testado;

» 4. Os drivers são substituídos pelos clusters que passam a interagir com os módulos acima, na estrutura do programa.

Teste de IntegraTeste de Integraççãoão

� A escolha por uma dessas duas abordagens de integração depende do tipo de software e, às vezes, do cronograma do projeto

� Em geral, uma integração combinada - sanduíche - é mais aconselhável:– módulos superiores � abordagem top-down

– módulos mais inferiores � abordagem bottom-up

� top-down– vantagem: testar logo no início as funções principais do software

– desvantagem: os stubs e a dificuldade de teste quando eles são usados

� bottom-up– vantagem: não se precisa de stubs– desvantagem:o módulo principal não existe enquanto todos módulos não estiverem

testados

Page 30: Teste Software

30

Teste de ValidaTeste de Validaççãoão

� O software está montado como um pacote e a validação do mesmo é realizada através de uma série de testes caixa preta.

� Finalidade:• Demonstrar a conformidade aos requisitos funcionais e de

desempenho (testar todos os casos de uso).

• Verificar se a documentação está correta

� Duas possibilidades:– Aceito

– Não está totalmente de acordo com os requisitos: negociar com o usuário

Teste de ValidaTeste de Validaççãoão

� Engloba o Teste de Aceitação: realizado pelo próprio usuário

� No caso de software desenvolvido para vários usuários:–– TesteTeste alfaalfa:: realizado pelo usuário no ambiente do

desenvolvedor

–– TesteTeste betabeta:: realizado pelo usuário em seu próprio ambiente

Page 31: Teste Software

31

Teste de SistemaTeste de Sistema

� Considera o software dentro do seu ambiente mais amplo (todos os aspectos de interação com ele, como outro hardware, software, pessoas, etc.)

� Corresponde a uma série de testes que tem por objetivo verificar se todos os elementos do sistema foram integrados adequadamente e realizam corretamente suas funções

– teste de segurança: tem por objetivo verificar se todos os mecanismos de proteção protegem realmente o software de acessos indevidos.

– teste de estresse: tem por objetivo confrontar os programas com situações anormais de freqüência, volume ou recursos em quantidade.

– teste de desempenho: tem por objetivo testar o tempo de resposta do sistema e éaplicado, geralmente, para sistemas de tempo real

DepuraDepuraççãoão

Casosde

Teste

Resultados

Depuração

Causassuspeitas

Testesadicionais

Causasidentificadas

Correções

Testes deregressão

Processo de Depuração

Page 32: Teste Software

32

DepuraDepuraççãoão

� abordagens para se conduzir a depuração:– força bruta: quando o erro não é analisado para se descobrir a

causa, tentando que o próprio computador a descubra, inserindo, por exemplo, vários comandos de escrita no programa.

– backtracking: inicia-se no local em que o sintoma foi detectado e rastreia-se para trás, manualmente, até que o local da causa seja encontrado.

– eliminação da causa: supõe-se uma causa e elaboram-se casos de teste para comprovar ou refutar essa hipótese

PontosPontos--ChavesChaves

� O objetivo do teste é encontrar erros e se eles não forem detectados, o teste não pode afirmar sua ausência

� Testar tudo é impossível

� As técnicas de teste são complementares, isto é, devem aplicadas conjuntamente

� a execução do teste é criativa e difícil, pois para testar com eficiência é preciso conhecer o software a fundo