• Nenhum resultado encontrado

Um exemplo pr´ atico utilizando a Similarity

6.2 A fun¸c˜ ao objetivo Similarity

6.2.3 Um exemplo pr´ atico utilizando a Similarity

Para demonstrar o funcionamento da Similarity, ser´a dado um exemplo pr´atico utilizando um programa cl´assico para o c´alculo do n´umero de Fibonacci, cujo c´odigo-fonte e CFG instrumentado est˜ao apresentados na Figura 6.3.

Este programa possui dez blocos b´asicos, sendo que os blocos 0 e 9 representam o bloco de entrada e sa´ıda, respectivamente. Como foi visto no Cap´ıtulo 2, um caminho completo em um programa deve obrigatoriamente come¸car em um bloco de entrada e terminar em um de sa´ıda. Este requisito nos permite extrair in´umeros caminhos do programa da Figura 6.3. Note que cada uma das arestas do CFG foram marcadas (ou instrumenta- das) com letras; estas instrumenta¸c˜oes no CFG equivalem a instrumenta¸c˜oes inseridas no c´odigo-fonte do programa, que podem ser feitas com uma instru¸c˜ao printf(...) ou Sys- tem.out.println(...), por exemplo. Dessa forma, um caminho ´e formado por uma seq¨uˆencia de caracteres (que seriam as arestas), come¸cando no bloco b´asico 0 e encerrando no bloco

0 long fibonacci(int n) {

concatenaCaminhoPercorrido("a"); 1 long fibArray[ ] = new long[50]; 1 fibArray[0] = 1; 1 fibArray[1] = 1; concatenaCaminhoPercorrido("b"); // Verifica os parâmetros 2 if(n < 0 || n >= 50) { concatenaCaminhoPercorrido("c"); concatenaCaminhoPercorrido("d"); 3 System.out.println("Parâmetro inválido!"); } 4 else { concatenaCaminhoPercorrido("e"); concatenaCaminhoPercorrido("f"); 5 if(fibArray[n] == 0) { concatenaCaminhoPercorrido("h"); concatenaCaminhoPercorrido("i"); 6/7/8 for(int i = 2; i <= n; i++) { concatenaCaminhoPercorrido("k"); 9 if(fibArray[i] == 0) { concatenaCaminhoPercorrido("l"); 10 fibArray[i] = fibArray[i-1] + fibArray[i-2]; } concatenaCaminhoPercorrido("m"); concatenaCaminhoPercorrido("n"); } concatenaCaminhoPercorrido("j"); } else { concatenaCaminhoPercorrido("g"); } } 11 return fibArray[n]; } 0 1 2 3 4 5 6 7 9 11 8 10 a b c d e f g h i j k l m m n

Figura 6.3: C´odigo-fonte e CFG instrumentados do programa Fibonacci.

b´asico 9. A Tabela 6.4 a seguir apresenta um subconjunto de caminhos selecionados alea- toriamente a partir do CFG na Figura 6.3. A seq¨uˆencia de caracteres envolvidas em . . . e em it´alico indicam loops.

Suponha que o caminho 4 (CA4) seja selecionado como caminho alvo. Os caminhos que ser˜ao comparados com ele ser˜ao os caminhos 3 (CA3) e 9 (CA9), nesta ordem. O CA3 e CA9 foram escolhidos para demonstrar o funcionamento da fun¸c˜ao objetivo para caminhos com loops (CA9) e sem loops (CA3). Seguindo os passos do fluxograma da Figura 6.2, a ordem m´axima ´e calculada. Sabendo que o n´umero de arestas distintas do caminho alvo CA4 ´e 10, a ordem m´axima OCA4MAX = 10. A partir da´ı, os conjuntos de arestas para os dois caminhos, distˆancias sim´etricas, distˆancias normalizadas e as similaridades s˜ao calculadas, iniciando-se na ordem k = 1 e indo at´e k = OMAXCA4 . O processo ´e interrompido

6.2. A fun¸c˜ao objetivo Similarity 67

Tabela 6.4: Subconjunto de caminhos.

Caminho Seq¨uˆencia de caracteres 1 abcd 2 abefg 3 abefhij 4 abefhikmnj 5 abefhikmn kmnj 6 abefhikmn kmn kmnj 7 abefhiklmnj 8 abefhiklmn klmnj 9 abefhiklmn kmn klmnj

somente se SCA4,CA3k = 0 ou SCA4,CA3k = 1 durante os c´alculos. Este ´ultimo caso implica na cobertura do caminho alvo, o que justifica a interrup¸c˜ao nos c´alculos. A Tabela 6.5 apresenta os c´alculos passo-a-passo para CA4 e CA3.

Tabela 6.5: C´alculo das similaridades SCA4,CA3k .

k Caminho Ck ∪k ∩k Dk DNk Sk

1 CA4 a,b,e,f,h,i,k,m,n,j a,b,e,f,h,i, a,b,e,f,h,i,j k,m,n 103 0,70 CA3 a,b,e,f,h,i,j k,m,n,j

CA4 ab,be,ef,fh,hi, ab,be,ef,fh, ab,be,ef,fh,hi ik,km,mn,nj, 105 0,50 2 ik,km,mn,nja hi,ik,km,mn, ij

CA3 ab,be,ef,fh,hi,ij nj,ij

CA4 abe,bef,efh,fhi, abe,bef,efh, abe,bef,efh, hik,ikm,kmn, 59 0,44 3 hik,ikm,kmn,mnj fhi,hik,ikm, fhi mnj,hij

CA3 abe,bef,efh,fhi,hij kmn,mnj,hij

abef,befh,efhi, abef,befh,efhi, abef,befh, fhik,hikm, 58 0,38 4 CA4 fhik,hikm,ikmn, fhik,hikm,ikmn, efhi ikmn,kmnj,

kmnj kmnj,fhij fhij

CA3 abef,befh,efhi,fhij

CA4 abefh,befhi,efhik, abefh,befhi,efhik, abefh,befhi efhik,fhikm, 57 0,29 5 fhikm,hikmn,ikmnj fhikm,hikmn, hikmn,ikmnj,

CA3 abefh,befhi,efhij ikmnj,efhij efhij

abefhi,befhik, abefhi,befhik, abefhi befhik,efhikm, 56 0,17 6 CA4 efhikm,fhikmn, efhikm,fhikmn, fhikmn,hikmnj,

hikmnj hikmnj,befhij befhij CA3 abefhi,befhij

CA4 abefhik,befhikm, abefhik,befhikm,  abefhik,befhikm, 55 0,00b 7 efhikmn,fhikmnj efhikmn,fhikmnj, efhikmn,fhikmnj,

CA3 abefhij abefhij abefhij

aNote que os loops j´a s˜ao considerados (arestas destacadas em it´alico). bComoS7= 0, o algoritmo p´ara neste momento.

´

E importante ressaltar que os valores de SCA4,CA3k para k = 8, 9, 10 ser˜ao iguais a zero, o que dispensa o seu c´alculo. Os c´alculo dos fatores de peso PCA4k s˜ao mostrados na Tabela 6.6.

Tabela 6.6: Fatores de peso. k C´alculo Pk 1 1, por defini¸c˜ao 1 2 CCA41 ∗ PCA41 = 10∗ 1 10 3 CCA42 ∗ PCA42 = 9∗ 10 90 4 CCA43 ∗ PCA43 = 8∗ 90 720 5 CCA44 ∗ PCA44 = 7∗ 720 5040 6 CCA45 ∗ PCA45 = 6∗ 5040 30240 7 CCA46 ∗ PCA46 = 5∗ 30240 151200 8 CCA47 ∗ PCA47 = 4∗ 151200 604800 9 CCA48 ∗ PCA48 = 3∗ 604800 1814400 10 CCA49 ∗ PCA49 = 2∗ 1814400 3628800

dada pela Equa¸c˜ao 6.7 abaixo.

SIMCA4,CA3 = S1∗ PCA41 + S2∗ PCA42 + . . . + SOMAX ∗ PCA4OMAX (6.7) SIMCA4,CA3 = 0, 70∗1+0, 50∗10+0, 44∗90+0, 38∗720+0, 29∗5040+0, 17∗30240+0∗151200

SIMCA4,CA3 = 0, 70 + 5, 00 + 39, 60 + 273, 60 + 1461, 60 + 5140, 80 + 0 SIMCA4,CA3= 6921, 3

A partir de agora, os mesmos c´alculos ser˜ao feitos para comparar CA4 e CA9 e boa parte dos c´alculos feitos para o caminho alvo, CA4, ser˜ao reaproveitados. Por´em, como o caminho CA9 possui um n´umero maior de arestas, inclusive loops, os resultados inter- medi´arios e final certamente ser˜ao diferentes, como pode ser visto nos c´alculos passo-a- passo da Tabela 6.7 no final deste cap´ıtulo.

Os fatores de peso est˜ao diretamente associados ao n´umero de elementos dos conjuntos de arestas do caminho alvo3. Como o caminho alvo ´e o mesmo, os mesmos fatores de peso apresentados na Tabela 6.6 poder˜ao ser utilizados. A similaridade total entre CA4 CA9 ser´a, ent˜ao,

SIMCA4,CA9 = S1∗ PCA41 + S2∗ PCA42 + . . . + SOMAX ∗ PCA4OMAX

SIMCA4,CA9 = 0, 91∗ 1 + 0, 75 ∗ 10 + 0, 57 ∗ 90 + 0, 24 ∗ 720 + 0, 18 ∗ 5040+ 0, 13∗ 30240 + 0, 07 ∗ 151200 + 0 ∗ 604800

SIMCA4,CA9 = 0, 91 + 7, 50 + 51, 30 + 172, 80 + 907, 20 + 3931, 20 + 10584, 00 + 0 SIMCA4,CA9 = 15654, 91

3Vale lembrar que o primeiro fator de peso ´e sempre igual a 1, e os demais s˜ao calculados utilizando