Teste Simbólico Execução do programa com dados simbólicos ao invés de dados reais Técnica de poio à seleção de dados para o teste estrutural
Teste Simbólico valores simbólicos são atribuídos às variáveis de entrada do programa processador simbólico interpreta as instruções do programa resultados: valores de variáveis são fórmulas simbólicas predicado do caminho: conjunção das condições do caminho executado
Execução Simbólica A, B - vars de entrada S - var de saída
Teste Simbólico promove o entendimento do programa regra de formação dos valores das variáveis ex: procedure Potência para y = -3, x = 1/(1*x*x*x) determinar o intervalo de valores das variáveis de entrada que fazem o programa executar determinado caminho para o caminho 1-2-3-4- ... y > 0 para o caminho 1-2-3-5- ... y <= 0
procedure potencia(x,y:integer; var z:real); var p: integer; begin p=-y 1 2 3 4 5 6 7 8 9 11 12 13 10 p:=0 z:=0 (x,y) y>0 y<=0 p=y z:=1 p<>0 p:=p-1 z:=z*x y<0 y>=0 p=0 z:=1/z procedure potencia(x,y:integer; var z:real); var p: integer; begin p:=0; z:=0; if y>0 then p:=y else p:=-y; z:=1; while p<>0 do begin p:=p-1; z:=z*x; end; if y<0 then z:=1/z; end;
Predicado de Caminho sistema de inequações a < b & 2 a <= 0 quando resolvido determina intervalo de dados que leva à execução do caminho problemas: sistema de equações não lineares
Processadores Envolvidos na Execução Simbólica Interpretador Simbólico Simplificador de Expressões ex: y > 0 & . . . & y-1-1-1 = 0 & . . . Solucionador de Sistemas de Equações Provador de Teoremas se x<=y & x=y então x=y se x<0 & x>0 então “caminho impraticável” 7 p=0 p<>0 8 p:=p-1 z:=z*x 9 y<0
Teste Simbólico dirigido por Caminho atribuir valores simbólicos para variáveis de entrada; especificar caminho a ser executado; interpretar simbólicamente as instruções do programa; resolver o predicado (sistema de inequações); escolher dados dentro do intervalo resultante; executar o programa com os dados reais; comparar resultados computados com resultados esperados.
Caminho: 1-2-3-5-6-7-8-7-9-10-11-12-13 (x,y) 1 Caminho: 1-2-3-5-6-7-8-7-9-10-11-12-13 PC : y<=0 & -y<>0 & -y-1=0 & y<0 Resolvendo o predicado: y = -1 Execução real: x= 3 y=-1 esperado z=1/3 p:=0 z:=0 2 y>0 3 y<=0 p=-y 4 5 p=y 6 z:=1 7 p=0 p<>0 8 9 p:=p-1 z:=z*x y<0 10 y>=0 11 z:=1/z 12 13
Teste Estrutural + Simbólico procedimentos envolvidos análise estática do programa grafo de fluxo + tabela def-uso seleção de caminhos (critério de cobertura) execução do programa com dados (método funcional) análise de cobertura caso existam caminhos não cobertos interpretação simbólica => predicados de caminho identificação de caminhos impraticáveis resolução de predicados, determinação de dados comparação de resultados e de caminhos
procedure potencia(x,y:integer; var z:real); var p: integer; begin p=-y 1 2 3 4 5 6 7 8 9 11 12 13 10 p:=0 z:=0 (x,y) y>0 y<=0 p=y z:=1 p°0 p:=p-1 z:=z*x y<0 y>=0 p=0 z:=1/z procedure potencia(x,y:integer; var z:real); var p: integer; begin Tabela Def -Uso 1 2 3 - 4 def uso x y p z y 3 - 5 4 5 6 7 - 8 7 - 9 8 10-11 10-12 11 p z p z x p:=0; z:=0; if y>0 then p:=y else p:=-y; z:=1; while p<>0 do begin p:=p-1; z:=z*x; end; if y<0 then z:=1/z; end;
Subcaminhos que satisfazem o critério todos-usos p=-y 1 2 3 4 5 6 7 8 9 11 12 13 10 p:=0 z:=0 (x,y) y>0 y<=0 p=y z:=1 p<>0 p:=p-1 z:=z*x y<0 y>=0 p=0 z:=1/z 1-2-3-4 1-2-3-5 1-2-3-4-6-7-8 * 1-2-3-4-6-7-9-10-11 * 1-2-3-4-6-7-9-10-12 4-6-7-8 * 4-6-7-9 5-6-7-8 5-6-7-9 6-7-8 * 6-7-9-10-11 8-7-8 8-9-10-11 * caminhos impraticáveis
Subcaminhos impraticáveis p=-y 1 2 3 4 5 6 7 8 9 11 12 13 10 p:=0 z:=0 (x,y) y>0 y<=0 p=y z:=1 p<>0 p:=p-1 z:=z*x y<0 y>=0 p=0 z:=1/z Subcaminhos impraticáveis * 1-2-3-4-6-7-9-10-11 pc: y>0 & y=0 & y<0 * 1-2-3-4-6-7-9-10-12 pc: y>0 & y=0 & y>0 * 4-6-7-9 pc: y>0 & y=0 * 6-7-9-10-11 pc: y=0 & y<0
Execução Simbólica de Caminho (x,y) 1 2 y>0 3 y<=0 Caminho: (1,2,3,5,6,7,8,7,9,10,11,12,13) (1,2,3,5) (y <= 0) (1,2,3,5,6,7,8) (y <= 0) & (- y <> 0) (1,2,3,5,6,7,8,7,8) (y <= 0) & (- y <> 0) & (- y - 1<> 0) (1,2,3,5,6,7,8,7,9, 10,11,12,13) (y <= 0) & (- y<> 0) & (- y - 1 = 0) & ( y < 0) 4 5 p=-y 6 7 p=0 p<>0 8 9 p:=p-1 z:=z*x 10 y<0 z:=1/z y>=0 11 12 13
Execução Simbólica problemas: predicados longos tem que ser simplificados sistemas de equações não lineares predicados de caminhos impraticáveis variáveis indexadas e dinâmicas processadores não triviais interpretador simbólico simplificador solucionador de sistemas, provador de teoremas