validação e testes de software - mod2

65
1 Técnicas de Teste de Software Uma Breve Introdução Compilado a partir do material original gentilmente cedido pelos professores Sandra Fabbri (UFSCar) e José Carlos Maldonado (ICMC-USP)

Upload: fernando-palma-portal-gsti-wwwportalgsticombr

Post on 27-Jun-2015

9.166 views

Category:

Documents


0 download

DESCRIPTION

Este material pertence ao Professor Manuel Mendonça e está disponível para Download no site do DCC da UFBA.

TRANSCRIPT

Page 1: Validação e Testes de Software - MOD2

1

Técnicas de Teste de Software

Uma Breve Introdução

Compilado a partir do material original gentilmente cedido pelos professoresSandra Fabbri (UFSCar) e José Carlos Maldonado (ICMC-USP)

Page 2: Validação e Testes de Software - MOD2

2

O Que é Teste de Software

Inexistência de erro:Software é de alta Qualidade?T é de baixa Qualidade?

?D P

XT

Page 3: Validação e Testes de Software - MOD2

3

Caso de Teste

� Especificação de uma entrada para o programa e a correspondente saída esperada

� Entrada: conjunto de dados necessários para uma execução do programa

� Saída esperada: resultado de uma execução do programa (um oráculo é esperado)

� Um bom caso de teste tem alta probabilidade de revelar um erro ainda não descoberto

Page 4: Validação e Testes de Software - MOD2

4

Projeto de Casos de Teste

�Projeto de teste pode ser tão difícil quanto o projeto do próprio produto a ser testado

�Poucos programadores/analistas gostam de teste; menos ainda de projeto de casos de teste

Page 5: Validação e Testes de Software - MOD2

5

Técnicas de Projeto de Casos de Teste

Maneira sistemática e planejada para conduzir os testes ( Critérios de Teste )

Conjunto de Casos de Teste Tcaracterísticas desejáveis:

i ) deve ser finitoii) o custo de aplicação deve ser razoável

Page 6: Validação e Testes de Software - MOD2

6

Critérios de Teste

�Critério de Teste CObjetivo:

... obter, de maneira sistemática um conjunto T de casos de teste efetivo quanto à meta principal de teste - revelar a presença de erros no programa

�Critério de Seleção de Casos de Teste�Critério de Adequação

T é C-adequado ⇔ todo elemento requerido por C é exercitado por pelo menos um t, t ∈ T

Page 7: Validação e Testes de Software - MOD2

7

Técnicas de Teste

�Funcional

�Estrutural�Baseada em Erros

A diferença está na fonte utilizada para estabelecer os requisitos de teste

O importante não é definir qual usar, mas saber usá-las de forma complementar

Page 8: Validação e Testes de Software - MOD2

8

Técnicas de Teste

�Funcional ou Teste Caixa Pretabaseada na especificação do software

�Estrutural ou Teste Caixa Brancabaseada numa implementação em particular

�Baseada em Errosbaseada nos erros típicos e comuns

cometidos durante o desenvolvimento

Page 9: Validação e Testes de Software - MOD2

9

Teste Funcional

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

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

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

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

�Critérios:Particionamento de EquivalênciaAnálise do Valor LimiteGrafo Causa-Efeito

Page 10: Validação e Testes de Software - MOD2

10

Particionamento 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, que podem ser válidas ou inválidas, são definidas de acordo com as seguintes diretrizes:se a condição de entrada especifica um intervalo, são definidas

uma classe válida e duas inválidasse a condição de entrada especifica um membro de um conjunto,

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

válida e uma inválida

Page 11: Validação e Testes de Software - MOD2

11

Particionamento de Equivalência

�Aplicação:de acordo com sua especificação existem, basicamente,

quatro entradas:um inteiro positivo (entre 1 e 20 ⇒ 3 partições)uma cadeia de caracteresum caractere a ser procuradoa 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 caractere foi encontrado na string (caractere

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

(caractere de entrada não pertencente à string)

Page 12: Validação e Testes de Software - MOD2

12

Particionamento de Equivalência

Dados de teste para o Teste de Particionamento de E quivalê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 caractere c aparece na posição 3

sk o caractere k não ocorre na string fornecida

n

Page 13: Validação e Testes de Software - MOD2

13

Particionamento de Eqüivalência

�Observação:reduz o tamanho do domínio de entradaconcentra-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 ocorrera técnica não fornece um guia para a determinação dos dados de

teste

Page 14: Validação e Testes de Software - MOD2

14

Análise do Valor Limite

�Descrição:complementa o Particionamento de Equivalênciacoloca 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 15: Validação e Testes de Software - MOD2

15

Análise do Valor Limite

�Aplicação:os valores inteiros 0, 1, 20 e 21encontrar o caractere na primeira e na última posição da

cadeia de caracteres

Dados de teste para o Teste de Análise do Valor Lim iteentrada 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 caractere a aparece na posição 1

sx o caractere x não ocorre na string fornecida

n

20 abcdefghijklmnopqrst a o caractere a aparece na posição 1s

t o caractere t aparece na posição 20n

Page 16: Validação e Testes de Software - MOD2

16

Teste Estrutural

�Os requisitos de teste são extraídos de uma implementação em particular

�Teste dos detalhes procedimentais

�A maioria dos critérios dessa técnica utiliza uma representação conhecida do programa como grafo de programa ou grafo de fluxo de controle

Page 17: Validação e Testes de Software - MOD2

17

Teste Estrutural

� Critérios: Teste de Comandos

Teste de RamosCaminho DD

Teste de Condição

Teste de Decisão/Condição Teste de Condição Múltipla

Teste do Caminho Básico

Teste de Caminho

Teste Baseado em Fluxo de Controle

Teste Baseado em Fluxo de Dados

� Critério: Todos-usos

Page 18: Validação e Testes de Software - MOD2

18

Teste Estrutural

� 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 19: Validação e Testes de Software - MOD2

19

Teste Estrutural

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

seqüência if while repeat case

Page 20: Validação e Testes de Software - MOD2

20

Teste Estrutural

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

inícioleia nroraiz = raiz-quadrada(nro)escreva raiz

fim

1

Programa com um caminho

Page 21: Validação e Testes de Software - MOD2

21

Teste Estrutural

inícioleia nrose nro > 0

raiz = raiz-quadrada(nro)escreva raiz

senãoescreva mensagem de erro

fim-sefim

Programa com dois caminhos

1

2

3

4

1

2 3

4

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

Page 22: Validação e Testes de Software - MOD2

22

Teste Estrutural

inícioleia nroenquanto nro ≠ 0

se nro > 0raiz = raiz-quadrada(nro)escreva raiz

senãoescreva mensagem de erro

fim-seleia nro

fim-enqtofim

Programa com loop

1

2

3

4

5

6

7

3

4 5

6

1

2

7

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

Page 23: Validação e Testes de Software - MOD2

23

Teste Estrutural1 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 (resposta = ‘n’) or (resposta = ‘N’);38 end.

1

2

3

4

5

67

8

9

10

11

12

1314

15

16

17

18

Programa com blocos marcados

Page 24: Validação e Testes de Software - MOD2

24

Teste Estrutural 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

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 (resposta = ‘n’) or (resposta = ‘N’);38 end.

1

2

3

4

5

67

8

9

10

11

12

1314

15

16

17

18

Grafo de fluxode controle

Programa com blocos marcados

Page 25: Validação e Testes de Software - MOD2

25

Teste 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çõesfornecer 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

Page 26: Validação e Testes de Software - MOD2

26

Teste 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 caractere que esteja na cadeia e que force a procura dentro dela

a entrada no while (linha 23) é garantidao comando if (linha 30) precisa ser executado, com as

alternativas then e else (linhas 31 e 33) ⇒ um caractere que pertença e outro que não pertença à cadeia (combinando com o if anterior ⇒ uma cadeia de caracteres a, de um caractere e valores para a variável cque ocorra e que não ocorra em a)

por fim, é preciso terminar o loop para executar o comando end

Page 27: Validação e Testes de Software - MOD2

27

Teste de Comandos

Dados de teste para o Teste de Comandos (suíte 1)

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

estrutural

entrada saída esperadax a c resposta

25 entre com um inteiro entre 1 e 203 abc b o caractere b aparece na posição 2

n

25 entre com um inteiro entre 1 e 203 abc d o caractere d não ocorre na string fornecida

n

Page 28: Validação e Testes de Software - MOD2

28

Teste de Comandos

Dados de teste para o Teste de Comandos (suíte 2)

�Observação:A busca de um caractere que não existe pode ser feita

na mesma execução do programa

entrada saída esperadax a c resposta

25 entre com um inteiro entre 1 e 201 x x o caractere x aparece na posição 1

sa o caractere a não ocorre na string fornecida

n

Page 29: Validação e Testes de Software - MOD2

29

Teste de Ramos�Descrição:

Estabelece como dados de teste exercitar todas as saídas verdadeiro e falso de todas as decisões

�Aplicação:é conveniente observar o grafo do programaobservando 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 verdadeiroe falso, desde que o valor de x seja ao menos 1 (e terá que ser para chegar nesse ponto)

Page 30: Validação e Testes de Software - MOD2

30

Teste 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 caractere 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 caractere 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 caractere que seja encontrado e um outro que não seja encontrado

o nó 17 requer pelo menos mais uma iteração do looprepeat (arco r) antes que o final do programa seja encontrado (arco w)

Page 31: Validação e Testes de Software - MOD2

31

Teste de Ramos

Dados de teste para o Teste de Ramos

� Observação: O conjunto de dados de testes é o mesmo da Suíte 2 do Teste de

Comandos Note que suíte 1 do Teste de Comandos não satisfaz o Teste de

Ramos No Teste de Ramos, a execução do loop repeat é obrigatória !

entrada saída esperadax a c resposta

25 entre com um inteiro entre 1 e 201 x x o caractere x aparece na posição 1

sa o caractere a não ocorre na string fornecida

n

Page 32: Validação e Testes de Software - MOD2

32

Teste de Condiçã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) dovalores 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

Page 33: Validação e Testes de Software - MOD2

33

Teste de Condiçã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 34: Validação e Testes de Software - MOD2

34

Teste de Condição�Aplicação (cont.):

loop while, linha 23 (nó 9): while (not(achou))and(i<=x) doas duas condições nessa decisão são verdadeiras quando se

entra nesse loopPara torná-las com valor falso, é preciso prever as duas

alternativas, ou seja, o caso de um caractere que pertença à string e o caso de um caractere que não pertença

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

a última decisão a ser considerada é o comando until da linha 37 (nó 17): until (resposta = ‘n’) or (resposta = ‘N’)quando é fornecido o valor ‘n’, a primeira condição é verdadeira e

a segunda é falsa; quando é fornecido o valor ‘N’, a primeira é falsa e a segunda é verdadeira (executar o programa duas vezes)

Page 35: Validação e Testes de Software - MOD2

35

Teste de Condição

Dados de teste para o Teste de Condição

�Observação:o Teste de Condição pode não satisfazer o Teste de

Ramosneste caso, o loop do repeat não é executado

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 caractere x aparece na posição 1

n

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

Page 36: Validação e Testes de Software - MOD2

36

Teste 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

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 sendo:

G: um grafo direcionadoa: arestas (ramos)

n: nós

P: no. de nós predicativos

Um caminho linearmente independente é aquele que contém ao menos um novo nó

Page 37: Validação e Testes de Software - MOD2

37

Teste do Caminho Base

�Aplicação:V(G) = 23 - 18 + 2 = 7V(G) = 6 +1 = 7V(G) = no. de regiões = 7a partir desse número deve-se escolher 7 caminhos

linearmente independentes do grafo:1. 1-2-4-5-7-8-9-14-15-17-182. 1-2-4-5-7-8-9-14-16-17-183. 2-3-24. 5-6-55. 9-10-11-13-96. 9-10-12-13-97. 8-9-14-15-17-8

Page 38: Validação e Testes de Software - MOD2

38

Teste do Caminho Base

�Aplicação: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-182. 1-2-4-5-7-8-9-14-16-17-183. 2-3-24. 5-6-55. 9-10-11-13-96. 9-10-12-13-97. 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

Page 39: Validação e Testes de Software - MOD2

39

Teste do Caminho Base

�Observação:esse conjunto é conhecido como conjunto base a partir

do qual qualquer outro caminho pode ser construído Por exemplo, o caminho:

1-2-3-2-4-5-6-5-6-5-7-8-9-10-11-13-9-14-15-17-18

é uma combinação dos caminhos 1, 3, 4 (2 vezes) e 5neste caso, o conjunto de dados de teste é o mesmo do

Teste de Ramos

Page 40: Validação e Testes de Software - MOD2

40

Teste de Fluxo de Dados

�Descrição:estabelece requisitos de teste que seguem o modelo de

dados usados dentro do programacada ocorrência de uma variável dentro de um programa

pode ser classificada como sendo uma das seguintes:def: definiçãoc-use: uso-computacionalp-use: uso-predicativo

Page 41: Validação e Testes de Software - MOD2

41

Teste de Fluxo de Dados

definição: quando uma variável é definida através de uma leitura ou quando ela aparece do lado esquerdo de um comando de atribuição, isto é, é dado um valor à variável

uso-computacional: quando a variável é usada na avaliação de uma expressão ou em um comando de saída

uso-predicativo: quando a variável ocorre em um predicado e portanto, afeta o fluxo de controle do programa

Page 42: Validação e Testes de Software - MOD2

42

Teste de Fluxo de Dados

�Aplicação:seja a aplicação do critério de fluxo de dados:

todos-usos (uso inclui c-uso e p-uso)a idéia é identificar e classificar todas as ocorrências de

variáveis no programa e então gerar, para cada variável, dados de teste de modo que todas as definições e usos (denominado par d-u) sejam exercitados

as variáveis que precisam ser consideradas são: x, i, c, achou, resposta e o vetor a

para cada uma dessas variáveis constrói-se uma tabela de pares d-u

Page 43: Validação e Testes de Software - MOD2

43

Teste de Fluxo de Dados

par d-u d u

1 8 92 8 143 8 154 8 235 12 96 12 147 12 158 12 23

Pares d-u da variável x

Requisitos de teste:

1) um valor válido de x é fornecido na primeira entrada (input), e então é usado dentro do programa

2) um valor inválido de x seguido por um valor válido, que é usado subseqüentemente

Page 44: Validação e Testes de Software - MOD2

44

Teste de Fluxo de Dados

Pares d-u da variável i Requisitos de teste:

1) o par d-u 1 é satisfeito lendo-se pelo

menos um valor no vetor

2) os pares 2 e 3 serão cobertos automaticamente

3) o par 4 é exercitado quando a procura do caractere não obtém sucesso no primeiro elemento do vetor

4) o par 5, por outro lado, é o resultado de uma procura com sucesso no primeiro elemento do vetor

5) os pares 6 a 9 são exercitados por uma futura procura sem sucesso seguida por uma procura com sucesso

par d-u d u

1 15 162 22 233 22 254 22 285 22 316 28 237 28 258 28 289 28 31

Page 45: Validação e Testes de Software - MOD2

45

Teste de Fluxo de Dados

par d-u d u

1 20 252 20 313 20 33

Pares d-u da variável c

par d-u d u

1 21 232 21 303 26 234 26 30

Pares d-u da variável achou

Requisitos de teste:

para a variável c:

1) encontrando-se com sucesso o

caractere c no vetor

2) não encontrando o caractere c no vetor

para a variável achou: similar à c

Page 46: Validação e Testes de Software - MOD2

46

Teste de Fluxo de Dados

par d-u d u

1 36 37

Pares d-u da variável resposta

par d-u d u

1 16 25

Pares d-u da variável a

Requisitos de teste:

para a variável resposta:

1) fornecendo um valor ‘s’

para a variável a:

o vetor é tratado como uma variável simples

ele é exercitado pela execução normal do programa

Page 47: Validação e Testes de Software - MOD2

47

Teste de Fluxo de Dados

entrada saída esperadax a c resposta

1 D D o caractere D aparece na posição 1n

21 entre com um inteiro entre 1 e 203 XYZ Z o caractere Z aparece na posição 3

ya o caractere a não ocorre na string fornecida

n

Dados de teste para o Teste de Fluxo de Dados

Page 48: Validação e Testes de Software - MOD2

48

Teste Baseado em Erros

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

�Critério:Análise de Mutantes

Page 49: Validação e Testes de Software - MOD2

49

Análise de Mutantes

�Descrição:

Mutantes

operadores de mutação

P

op1

op2

opn

T

Hipóteses:

1) programador competente

2) efeito de acoplamento

escore de mutação = # mutantes mortos# mutantes gerados não equivalentes

Page 50: Validação e Testes de Software - MOD2

50

Análise de Mutantes

�Garantir a ausência de determinados tipos de defeitos

�Considerando todos os programas Q, é possível provar a correção de P

P Q

T

P(t) ≠ Q(t)

t ∈ T

Page 51: Validação e Testes de Software - MOD2

51

Análise de Mutantes

�É impraticável executar e comparar todos os programas Q

�Estabelece-se então uma vizinhança Φ(P) que contém apenas um conjunto finito de programas

�Esses programas contêm pequenos desvios sintáticos que representam defeitos simples

Page 52: Validação e Testes de Software - MOD2

52

Análise de Mutantes

� ∃ t ∈ T | ∀ Q, P(t) ≠ Q(t) ⇒ que P não contém os tipos de defeitos representados pelos programas Q

Q...

Q... PQ...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Qn

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q02

Q...

Q01

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Q...

Φ(P)

Page 53: Validação e Testes de Software - MOD2

53

Análise de Mutantes

�Hipótese do Programador Competente

�Efeito de Acoplamento

Programadores experientes escrevem programas corretos ou muito próximos do correto.

Casos de teste capazes de revelar erros simples são tão sensíveis que, implicitamente, também são capazes de revelar erros mais complexos.

Page 54: Validação e Testes de Software - MOD2

54

Análise de Mutantes

�Os operadores de mutação determinam o tipo de alteração sintática que deve ser feita para a criação dos mutantesIntroduzir pequenas alterações semânticas

através de pequenas alterações sintáticas que representam defeitos típicos

�Operadores dependem da linguagem alvoFORTRAN (22 operadores) C (71 operadores)

Page 55: Validação e Testes de Software - MOD2

55

Análise de Mutantes

�Exemplos de operadores de mutaçãoRetira um comando de cada vez do programaTroca operador relacional por operador relacionalTroca o comando while por do-whileInterrompe a execução do laço após duas execuçõesTroca constante por constanteRequer valor negativo, positivo e zero para cada

referência escalar

Page 56: Validação e Testes de Software - MOD2

56

Análise de Mutantes

�Dados P e T

�Passos para a Aplicação da Análise de MutantesP é executado com os casos de teste de TMutantes são geradosMutantes são executados com os casos de teste de TMutantes são analisados

Page 57: Validação e Testes de Software - MOD2

57

Análise de Mutantes

�Aplicação:Considere o trecho do programa e o conjunto de teste

obtido para o Teste de Ramos

entrada saída esperadax a c resposta25 entre com um inteiro entre 1 e 201 x x o caractere x aparece na posição 1

sa o caractere a não ocorre na string fornecida

n

M

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;M

Page 58: Validação e Testes de Software - MOD2

58

Análise de Mutantes

�Aplicação:Mutante 1: alteração na linha 21

de: achou := FALSEpara: achou := TRUE

• considere agora que o mutante seja re-executado com os dados de teste obtidos para o Teste de Ramos

• a saída gerada seria: “o caractere a aparece na posição 1” em vez de: o caractere a não ocorre na string fornecida

• mutante seria morto por esse conjunto de dados de teste

Page 59: Validação e Testes de Software - MOD2

59

Análise de Mutantes�Aplicação:

Mutante 2: alteração na linha 22

de: i := 1para: x := 1

• considere agora que o mutante seja re-executado com os dados de teste obtidos para o Teste de Ramos

• o erro não é revelado; o mutante continua vivo pois a saída gerada por ele é igual à saída gerada pelo programa original, uma vez que a string é de tamanho 1 e o loop while da linha 23 executa exatamente uma vez (somente se o for sair com i=1)

• para matar esse mutante deve-se criar um caso de teste que possua uma string de tamanho maior que 1 e assim, qualquer caractere da posição 2 em diante será considerado como não pertencente à string, mesmo que faça parte dela

Page 60: Validação e Testes de Software - MOD2

60

Análise de Mutantes�Aplicação:

Mutante 2: novos dados de teste para ser morto

entrada saída fornecida pelo mutantex a c resposta

3 xCv x o caractere x aparece na posição 1y

v o caractere v não ocorre na string forneciday

C o caractere C não ocorre na string fornecidan

Dado de teste que mata o mutante 2

Obs: se o programa original fosse executado com esses dados, os caracteres ve C seriam encontrados nas posições 3 e 2 respectivamente.

Page 61: Validação e Testes de Software - MOD2

61

Análise de Mutantes�Aplicação:

Mutante 3: alteração na linha 28

de: i := i + 1para: i := i + 2

• considere agora que o mutante seja re-executado com os dados de teste obtidos para o Teste de Ramos

• o erro não é revelado; o mutante continua vivo pois a saída gerada por ele é igual à saída gerada pelo programa original, uma vez que a string é de tamanho 1 e o loop while da linha 23 executa exatamente uma vez (o incremento de 2 não será executado)

• para matar esse mutante deve-se criar um caso de teste que possua uma string de tamanho maior que 1 e, além disso, é necessário procurar por um caractere nas posições pares da string

Page 62: Validação e Testes de Software - MOD2

62

Análise de Mutantes�Aplicação:

Mutante 3: novos dados de teste para ser morto

entrada saída fornecida pelo mutantex a c resposta

3 xCv x o caractere x aparece na posição 1y

v o caractere v aparece na posição 3y

C o caractere C não ocorre na string fornecidan

Dado de teste que mata o mutante 3

Obs: Se o programa original fosse executado com esse dado de teste, o caractere C seria encontrado na posição 2

Page 63: Validação e Testes de Software - MOD2

63

Análise de Mutantes

�Observação:Teste de Mutação consegue mostrar a ausência de erros

particulares, pois ao matar os mutantes está sendo mostrado que o programa original não possui aquele erro

esse critério força o testador a analisar cuidadosamente o programa, uma vez que ele precisa criar dados de teste que exponham os erros introduzidos

desvantagem:ele é computacionalmente caro devido ao grande número de

mutantes gerados e o tempo e recurso usados para compilar e executar todos eles

Page 64: Validação e Testes de Software - MOD2

64

Estratégias de Teste

�Aspectos genéricos das Estratégias de Testea atividade de teste inicia-se no nível de módulos e

caminha na direção da integração de todo o sistemadiferentes técnicas de teste são apropriadas para

diferentes situaçõesa atividade de teste, em geral, é realizada pela equipe de

desenvolvimento e, no caso de grandes projetos, por um grupo de teste independente

as atividades de teste e depuração são atividades diferentes, mas a depuração é necessária em qualquer estratégia de teste

Page 65: Validação e Testes de Software - MOD2

65

Estratégias 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