Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperlink-Induced Topic Search (HITS) e Identificação de God Classes.
1. Aplicação da Teoria dos Grafos
e Algoritmos na Engenharia de Software:
Hyperlink-Induced Topic Search (HITS) e Identificação de God Classes.
Mestrado em Ciência da Computação - UFBA/UEFS
Thiago Colares
Vagner Amaral
Salvador, 28/03/2013
2. Agenda
• Problema da busca textual
• Hyperlink-Induced Topic Search (HITS)
• Por que identificar God Classes?
• HITS para identificação de God Classes
• Conclusão / Trabalhos Futuros
3. Quero comprar
um carro.
http://www.flickr.com/photos/buzrael/4981570801/sizes/l/in/photostream/
5. Quero comprar
A busca na Web
uma bicicleta.
por termos.
“melhores
fabricantes de
carro dos últimos
4 anos”
http://www.flickr.com/photos/buzrael/4981570801/sizes/l/in/photostream/
http://www.flickr.com/photos/daniel_gies/5427386376/sizes/l/in/photostream/
6. Maecenas sed diam eget risus varius
blandit sit amet non melhores
fabricantes. Donec id elit non mi porta
gravida at eget metus. Cras justo odio,
dapibus ac facilisis in, egestas eget
quam. Etiam porta sem malesuada
magna mollis euismod. Carros mollis
interdum. Cras justo odio, dapibus ac
facilisis in, egestas ege últimos 4 anos.
13. Ferrari
Website oficial da Ferrari.
http://www.ferrari.com
Fiat
Car Rankings Grande empresa italiana.
http://www.Edmunds.com http://www.ferrari.com
Ford
Car Rankings
http://www.ConReport.com
Fabricante de carros.
http://www.ferrari.com
Manufacturer Websites Chyrsler
http://www.CarManu.com
Compania america de jeep
e carros esportivos.
http://www.ferrari.com
14. Autoridades
Ferrari
Website oficial da Ferrari.
http://www.ferrari.com
Fiat
Car Rankings Grande empresa italiana.
http://www.Edmunds.com http://www.ferrari.com
Ford
Car Rankings
http://www.ConReport.com
Fabricante de carros.
http://www.ferrari.com
Manufacturer Websites Chyrsler
http://www.CarManu.com
Compania america de jeep
e carros esportivos.
http://www.ferrari.com
15. Autoridades
Ferrari
Website oficial da Ferrari.
http://www.ferrari.com
Hubs Fiat
Car Rankings Grande empresa italiana.
http://www.Edmunds.com http://www.ferrari.com
Ford
Car Rankings
http://www.ConReport.com
Fabricante de carros.
http://www.ferrari.com
Manufacturer Websites Chyrsler
http://www.CarManu.com
Compania america de jeep
e carros esportivos.
http://www.ferrari.com
16. Autoridades
Ferrari
Website oficial da Ferrari.
http://www.ferrari.com
Hubs Fiat
Car Rankings Grande empresa italiana.
http://www.Edmunds.com http://www.ferrari.com
Ford
Car Rankings
http://www.ConReport.com
Fabricante de carros.
http://www.ferrari.com
Manufacturer Websites Chyrsler
http://www.CarManu.com
Compania america de jeep
e carros esportivos.
http://www.ferrari.com
17. Hyperlink-
Induced Topic
Search (HITS)
(“hubs and authorities”)
Algoritmo de análise de
links para classificar
páginas na Web
Jon Kleinberg, 99 (IBM)
Precursor do PageRank
25. Resultado: subgrafo R (root)
Características
(1) Ainda é proporcionalmente pequeno
(2) Deve ser rico em páginas importantes
(3) Provavelmente não contém autoridades
30. Resultado: subgrafo S (seed)
Características
(1) Ainda é proporcionalmente pequeno
(2) Provavelmente conterá autoridades
31. Definições
• Cada página tem dois índices
• a authority weight da página i
i
• h hub weight da página i
i
• Páginas com grande a são Autoridades
i
• Páginas com grande h são Hubs
i
32. Atualizando pesos de S
ap é...
soma do hi de todos os nós i apontando para p
i1
p
i2
33. Atualizando pesos de S
hp é...
soma do ai de todos os nós i apontados por p
i1
p
i2
34. Atualizando pesos de S
Ou seja,
Um bom Hub aumenta o a de quem aponta;
Uma boa Autoridade aumenta o h de quem
aponta para ela.
35. Atualizando pesos de S
Seja,
A a matriz de adjacência de S;
a vetor com pesos de autoridade de S;
h vetor com pesos de hubs do subgrafo S;
O sistema que atualiza os pesos de S é:
• a = . h (Eq. 1)
A t
• h = A . a (Eq. 2)
43. Observações
• Neste caso, novas iterações irão gerar
vetores equivalentes ao atuais, mas
multiplicados por um escalar;
• O algoritmo deve se repetir até o critério
de parada ou equilíbrio;
• Em grafos mais complexos, o equilíbrio
pode não existir.
45. Itere(G,k)
G:
coleção
de
n
páginas
linkadas
k:
um
número
natural
z
é
o
vetor
(1;1;1;...;1)
E
Rn
Set
x0
:=
z:
Set
y0
:=
z:
For
i
=
1;2;...;k
Opere
(xi−1;
yi−1),
set
x’i
//
Eq.
1
Opere
(x’i;
yi−1),
set
y’i
//
Eq.
2
Normalize
x'i,
set
xi
Normalize
y'i,
set
yi
End
Return
(xk;
yk).
46. Análise da
Complexidade
• Eq. 1 é uma multiplicação matriz-vetor
• Eq. 2 é uma multiplicação matriz-vetor
• Ambas são executas k vezes.
• O(k)[O(n ) + O(n )] = O(k.n )
2 2 2
• Existem formas de melhorar
• (vide anexos e referências)
48. God Classes
Centralização da inteligência / complexidade de um sistema
(herança da programação procedural)
http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
49. God Classes
Violam o princípio da distribuição uniforme de
responsabilidades.
http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
50. God Classes
Difíceis de implementar, manter e testar.
http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
51. God Classes
Delegam pequenos detalhes e utilizam dados de outras
classes mais triviais do sistema.
http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
52. God Classes
Impacto negativo na reutilização de componentes e na
compreensão do sistema.
http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
53. Estratégia para Detecção de God
Classes [Lanza, 2006]
Acessam diretamente muitos dados de outras classes mais
simples.
http://doi.ieeecomputersociety.org/cms/Computer.org/dl/trans/ts/2009/03/figures/tts20090303471.gif
54. Estratégia para Detecção de God
Classes [Lanza, 2006]
São grandes (LOC) e complexas.
http://doi.ieeecomputersociety.org/cms/Computer.org/dl/trans/ts/2009/03/figures/tts20090303471.gif
55. Estratégia para Detecção de God
Classes [Lanza, 2006]
Baixa coesão entre os métodos da classe.
http://doi.ieeecomputersociety.org/cms/Computer.org/dl/trans/ts/2009/03/figures/tts20090303471.gif
56. Estratégia para Detecção de God
Classes [Lanza, 2006]
http://doi.ieeecomputersociety.org/cms/Computer.org/dl/trans/ts/2009/03/figures/tts20090303471.gif
63. HITS x God Classes
a = vetor dos pesos das autoridades;
h = vetor dos pesos dos hubs;
A = matriz de adjacência do Grafo;
AT = matriz transposta de A;
65. HITS x God Classes
Resolução do sistema: iterativa (Gauss-Seibel) ou
utlizando o Teorema de Perron ou o Método das
Potências
66. HITS x God Classes
Os vetores a e h podem ser obtidos através do principal
autovetor normalizado de ATA e AAT. O principal
autovetor é aquele associado ao maior autovalor.
67. Autovetor e Autovalor?
Seja V um espaço vetorial sobre um corpo F e A:V→ V uma transformação linear.
v é um autovetor quando v não é um vetor não nulo e existe um escalar k tal que
A*v=k*v
Nesse caso, pode-se dizer também que k é um autovalor.
68. HITS x God Classes
Como identificar a God Class?
Peso do HUB é alto: Behavioral God Class
Peso da Autoridade é alto: Structure God Class
Utilizar a média entre os dois pesos
72. A classe 3 é uma God Class?
a3 = 0
Pois nenhum dos hubs associados a ele recebe
mensagens de outra classe que não da própria 3.
73. A classe 3 é uma God Class?
h3 = 1
Essa classe é a única que inicia alguma atividade no
sistema.
74. Conclusões / Trabalhos Futuros
• O HITS é uma boa solução para “rankeamento”
de documentos resultantes de busca textual, do
qual o PageRank também se utilizou como
inspiração.
• O HITS é indicado para “rankeamento” onde se
precisa identificar autoridades e hubs.
• O PageRank usa abordagem parecida, mas
apenas se preocupa com autoridades e
apresenta uma complexidade melhor O(n).
75. Conclusões / Trabalhos Futuros
• Análise de outras informações do software
que podem ser identificadas com o uso do
HITS.
• Benchmarking com outras técnicas da área
de Engenharia de Software para extração
de God Classes.
• Aplicação do algoritmo PageRank para
extração de God Classes.
76. Referências
[1] Riel, A. J. Object-Oriented Design Heuristics. Addison- Wesley,
Boston, MA, 1996.
[2] Lanza, Michele and Radu Marinescu. Object Oriented Metrics
in Practice: Using Software Metrics to Characterize, Evaluate, and
Improve the Design of Object-Oriented Systems. Springer, 2006.
[3] Chatzigeorgiou, Alexander, Nikolaos Tsantalis, and George
Stephanides. "Application of graph theory to OO software
engineering." Proceedings of the 2006 international workshop on
Workshop on interdisciplinary software engineering research.
ACM, 2006.
77. Referências
[4] Chatzigeorgiou, Alexander, Spiros Xanthos, and George
Stephanides. "Evaluating object-oriented designs with link analysis."
Proceedings of the 26th International Conference on Software
Engineering. IEEE Computer Society, 2004.
[5] Fokaefs, Marios, et al. "Identification and application of Extract
Class refactorings in object-oriented systems." Journal of Systems
and Software(2012).
[6] Chatzigeorgiou, Alexander. "Mathematical assessment of object-
oriented design quality." Software Engineering, IEEE Transactions on
29.11 (2003): 1050-1053.
78. Referências
[7] Fowler, Martin, and Kent Beck. Refactoring: improving the design of
existing code. Addison-Wesley Professional, 1999.
[8] Kleinberg, Jon M. "Authoritative sources in a hyperlinked
environment." Journal of the ACM (JACM) 46.5 (1999): 604-632
[9] Kleinberg, Jon M. "Hubs, authorities, and communities." ACM
Computing Surveys (CSUR) 31.4es (1999): 5.
[10] Sergey Brin and Lawrence Page. 1998. The anatomy of a large-
scale hypertextual Web search engine. In Proceedings of the seventh
international conference on World Wide Web 7 (WWW7), Philip H.
Enslow, Jr. and Allen Ellis (Eds.). Elsevier Science Publishers B.V.,
Amsterdam, The Netherlands, The Netherlands, 107-117.
79. Anexo 1: Convergência
• Na prática, estipula-se um número máximo de iterações para
o algoritmo convergir;
• Ou verifica se houve alterações significativas nos x primeiras
autoridades e hubs, pois é bastante custoso realizar esse
procedimento.
• Não é possível garantir que sempre irá convergir.
• O critério de parada é escolhido de acordo com objetivo ou
contexto do problema. Pode ser um número fixo ou
porcentagem de modificação ao fim de cada ciclo.
80. Anexo II: Multiplicação
Matriz-Vetor
Algoritmo Sequencial Simples
Input: Matrix mat[m][n]
Vector vec[n]
Output: out[m]
for ( i = 0; i < m; i++ )
{
out[i] = 0;
for ( j = 0; j < n; j++ )
out[i] += mat[i][j] * vec[j];
}
Vê-se claramente que a complexidade é da ordem de O(n2).
Veja mais: http://www.cs.umsl.edu/~sanjiv/classes/cs5740/
lectures/mvm.pdf
81. Anexo III:
Normalização
• Normalização de um vetor (mx1): dividir
cada elemento pela raiz quadrada da
soma dos quadrados de cada elemento;
• Normalizar uma matriz: dividir cada
elemento da matriz pelo determinante da
matriz.
82. Anexo IV: Generalização do
Sistema de Equeções
• Iteração 0: (inicializando os pesos)
a = [1,1,1...1]
0
t e h = [1,1,1...1]
0
t
Iteração 1:
a =A .h h
1
t
0 1 =A.a 1
Iteração 2:
a =A .h h
2
t
1 2 =A.a 2
Iteração 3:
a =A .h h
3
t
2 3 =A.a 3
83. Anexo IV: Generalização do
Sistema de Equeções
Iteração k-1:
a =A .h
k-1
t h =A.a
k-2 k-1 k-1
Iteração k:
a =A .h
k
t h =A.a
k-1 k k
84. Anexo IV: Generalização do
Sistema de Equeções
Iteração k-1:
a =A .h
k-1
t h =A.a
k-2 k-1 k-1
Iteração k:
a =A .h
k
t h =A.a
k-1 k k
Então:
a = A . h ->
k
t a = (A . A) a
k-1 k
t
k-1
h =A.a
k -> k h = (A . A ) hk
t
k-1