• Nenhum resultado encontrado

SSC5877 – Validação Verificação e Teste de Software - USP

N/A
N/A
Protected

Academic year: 2023

Share "SSC5877 – Validação Verificação e Teste de Software - USP"

Copied!
24
0
0

Texto

(1)

SSC5877 – Validação Verificação e Teste de Software

Teste Estrutural – Fluxo de Dados

Prof. Marcio E. Delamaro

delamaro@icmc.usp.br

(2)

Critérios Baseados em Fluxo de Dados

Critérios pertencentes à Técnica de Teste Caixa Branca.

Complementares aos critérios baseados em fluxo de controle.

Busca testar o uso das variáveis em um programa, ou seja, como os dados são usados nas computações.

(3)

Motivação

Teste de fluxo de dados é uma ferramenta poderosa para o uso incorreto de valores resultante de erros de codificação.

Tornou-se popular com a publicação do trabalho de Rapps e Weyuker (1982):

“"It is our belief that, just as one would not feel confident about a program without executing every statement in it as part of some test, one should not feel confident about a program without having seen the effect of using the

value produced by each and every computation."

(4)

Ciclo de vida das variáveis

Variáveis são criadas, usadas e destruídas.

Em algumas linguagens de programação (BASIC e FORTRAN, por exemplo) a criação e destruição são automáticas.

Em outras (C, C++ e Java, por exemplo), a criação deve ser explícita.

Exemplos de declaração:

1 i n t x ; / / x é c r i a d a como um i n t e i r o 2 S t r i n g y ; / / y é c r i a d a como uma S t r i n g

(5)

Ciclo de vida das variáveis

Declarações, em geral, ocorrem dentro de um bloco.

Variáveis são criadas quando a definição das mesmas são executadas.

Variáveis são destruídas no final do bloco (conceito de escopo da variável).

1 { / / i n í c i o do b l o c o 1

2 i n t x ; / / x é d e f i n i d a no b l o c o 1

3 . . . ; / / x pode s e r usada a q u i

4 { / / i n í c i o do bl odo 2

5 i n t y ; / / y é d e f i n i d a no b l o c o 2

6 . . . ; / / x e y podem s e r usadas a q u i

7 } / / y é automaticamente d e s t r u í d a no f i n a l do b l o c o 2

8 . . . ; / / x ai nda pode s e r usada daqui em d i a n t e

9 } / / x é automaticamente d e s t r u í d a no f i n a l do b l o c o 1

(6)

utilização de variáveis

No ciclode vida de uma variável podemos ainda distinguir dois tipos de utilização de uma variável

Quando o valor da variável é modificado. Por exemplo, via comando de atribuição: a = 10 e b = 5.

Quando o valor da variável é usado mas seu valor não é modificado Por exemplo: a = b * 1.

(7)

Grafo def-uso

Para avaliar os diferentes estados das variável no programa é utilizado um grafo denominado Grafo

Definição-Uso ou Grado Def-Uso Rapps e Weyuker (1982).

Semelhante ao Grafo de Fluxo de Controle.

Inclui ainda variáveis definidas, usadas e destruídas em cada nó.

Análise estática e dinâmica do Grafo Def-Uso.

Estático: examinar o grafo procurando por problemas, simulando mentalmente o comportamento.

Dinâmico: executar o programa com casos de testes e avaliar o resultado.

(8)

Grafo def-uso

Exemplo de GFC com anotações de fluxo de dados.

define x

use y kill z

define x use x use z

kill z use x define z

define y use z

use y use z

kill y define z

(9)

Teste de fluxo de dados

Assumir que o fluxo de controle do módulo está correto.

Criar casos de testes de modo que:

Cada definição de variável é rastreada até seus usos.

Cada uso é rastreado a partir de sua definição correspondente.

Para fazer isso:

Enumerar os caminhos no GDU usando a mesma abordagem do teste de fluxo de controle.

Criar casos de testes que cubram cada par

“definição-uso” (associações de fluxo de dados) entre as variáveis.

(10)

Conceitos

A ocorrência de variáveis em um programa pode ser classificada em:

Definição (def ou d): ocorre quando uma variável recebe um valor.

a = 1

Uso: ocorre quando a variável é referenciada e tem o seu valor consultado. Um uso pode ser:

Computacional (c-uso ou uc): a variável é utilizada em uma computação.

b = a * 2

Predicativo (p-uso ou up): a variável é utilizada em uma condição.

if (a > 0)

(11)

Conceitos

c-uso global quando não existe def da variável no bloco em que ocorre o c-uso.

caminho livre de definição em relação a uma variável

x (c.d.l.(x)): caminho entre nós A e B, sendo que x pode ser definida em A, mas não existe nenhuma outra

definição de x entre A e B.

def global: quando a def de uma variável x em um

bloco A é usada em um bloco B (ou em um predicado) um du-caminho no grafo def-uso em relação a uma variável x do nó i ao nó j é um caminho simples (sem repetição de nós exceto possivelmente o primeiro e o último), livre de definição em relação a x que possui uma definição de x no nó i e um uso no nó j.

(12)

Exemplo – Identifier

p u b l i c boolean v a l i d a t e I d e n t i f i e r ( S t r i n g s ) { char achar ;

/01/ boolean v a l i d _ i d = f a l s e ; /01/ i f ( s . l e n g t h ( ) > 0 ) {

/02/ achar = s . c h a r A t ( 0 ) ;

/02/ v a l i d _ i d = v a l i d _ s ( achar ) ; /02/ i f ( s . l e n g t h ( ) > 1 ) {

/03/ achar = s . c h a r A t ( 1 ) ; /03/ i n t i = 1 ;

/04/ while ( i < s . l e n g t h ( ) 1 ) { /05/ achar = s . c h a r A t ( i ) ;

/05/ i f ( ! v a l i d _ f ( achar ) )

/06/ v a l i d _ i d = f a l s e ;

/07/ i ++;

} }

} /08/ /09/ /10/

i f ( v a l i d _ i d && ( s . l e n g t h ( ) >= 1 ) && ( s . l e n g t h ( ) < 6 ) ) /11/ r e t u r n t r u e ;

el se

/12/ r e t u r n f a l s e ; }

(13)

Identifier – GFC

1

2

8 3

9

12 4

5

6

7 10

11

(14)

Identifier – GFC + defs

1

2

8 3

9

12 4

5

6

7 10

11

d = {s,valid_id}

d = {valid_id,achar}

d = {achar,i}

d = {achar}

d = {valid_id}

d = {i}

d = {definições}

(15)

Identifier – GFC + defs + usos

1

2

8 3

9

12 4

5

6

7 10

11

d = {s,valid_id}

s s

d = {valid_id,achar}

achar s

d = {achar,i} s s

s,i s,i

d = {achar}

s,i

achar achar

d = {valid_id}

d = {i}

i

valid_id valid_id

s

s

s

d = {definições} s (c-uso)

(p-uso)

(16)

Critérios de Rapps e Weyuker (1982)

Basseiam-se no Grafo Def-Uso para derivar os requisitos de testes.

Objetivos: exercitar caminhos ligando definições globais a usos globais de variáveis do programa.

Tipos:

todas as definições.

todos os p-usos.

todos os p-usos e alguns c-usos.

todos os c-usos e alguns p-usos.

todos os usos.

(17)

Critérios de Rapps e Weyuker (1982)

Critério Descrição

todas-defs para todas as definições de variáveis deve ser exercitado um caminho para um de seus usos.

todos-p-usos para todas as definições de variáveis deve ser exercitado um caminho para todos os seus p-usos.

todos-p-usos-alguns- c-usos

para todas as definições de variáveis deve ser exercitado um caminho para todos os seus p-usos e alguns c-usos.

todos-c-usos-alguns- p-usos

para todas as definições de variáveis deve ser exercitado um caminho para todos os seus c-usos e para alguns p-usos.

todos-usos para todas as definições de variáveis deve ser exercitado um caminho para todos os seus c-usos e para todos os seus p-usos.

(18)

Requisitos de teste

Requisitos gerados pelos critérios de fluxo de dados:

Associações Definição-Uso

Em geral uma tripla: h var, def, usoi, sendo:

var - variável para a qual a associação definição-uso foi estabelecida.

def - nó contendo a definição da variável var.

uso - nó/arco com uso computacional/predicativo de var.

(19)

Requisitos de teste

1

2

8 3

9

12 4

5

6

7 10

11

d = {s,valid_id}

s s

d = {valid_id,achar}

achar s

d = {achar,i} s s

s,i s,i

d = {achar}

s,i

achar achar

d = {valid_id}

d = {i}

i

valid_id valid_id

s

s

s s

d = {definições}

(c-uso) (p-uso)

Critérios de Fluxo de Dados:

Todas-Defs Todas-Usos

hi, 3, 5i hi, 3, 7i

hvalid_id, 1, (8,9) i hvalid_id, 1, (8,12) i ..

.

(20)

Comentários

Complementares aos critérios de fluxo de controle.

Mais comum no teste de unidade e de integração.

Também requerem conhecimento do programa para serem aplicados.

Exigem a análise de associações definição-uso quando a sua executabilidade.

(21)

Executabilidade

for (i = 0; i < 10; i++) {

printf("\%d", i);

}

return;

1

2

3

4

d = {i}

d = {i}

i i i

<i, 1, (2,4)>

(22)

A ferramenta JaBUTi

http://incubadora.fapesp.br/projects/jabuti/

Jabuti-bin.zip possui tudo que precisa para executar a ferramenta java -cp Jabuti-bin.zip br.jabuti.gui.JabutiGUI

Programa “dot” (GraphViz – http://www.graphviz.org/) deve estar instalado no seu diretório padrão.

(23)

Exercício

Compute todas as associações definição-uso para o programa Identifier

1

2

8 3

9

12 4

5

6

7 10

11

d = {s,valid_id}

s s

d = {valid_id,achar}

achar s

d = {achar,i} s s

s,i s,i

d = {achar}

s,i

achar achar

d = {valid_id}

d = {i}

i

valid_id valid_id

s

s

s

d = {definições} s (c-uso)

(p-uso)

(24)

Referências

Refer ˆencias

RAPPS, S.; WEYUKER, E. J. Data flow analysis techniques for program test data selection. In:

6th International Conference on Software Engineering, Tokio, Japan, 1982, p. 272–278.

Referências

Documentos relacionados

Um subespa¸co que cont´em todas as matrizes sim´etricas e todas as matrizes trian- gulares inferiores deve conter tamb´em todas as somas de uma matriz sim´etrica e uma matriz