SlideShare ist ein Scribd-Unternehmen logo
1 von 84
Downloaden Sie, um offline zu lesen
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
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
Quero comprar
um carro.




     http://www.flickr.com/photos/buzrael/4981570801/sizes/l/in/photostream/
Pergunta para amigos.
“melhores fabricantes de carro?”
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/
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.
melhores fabricantes carro automóvel
veículo melhores melhores fabricantes
carro automóvel veículo melhores
melhores fabricantes carro automóvel
veículo melhores melhores fabricantes
carro automóvel veículo melhores
melhores fabricantes carro automóvel
veículo melhores melhores fabricantes
carro automóvel veículo melhores
Ocorrência de termos não
 implica em relevância.
melhores fabricantes carro automóvel
veículo melhores melhores fabricantes
carro automóvel veículo melhores
melhores fabricantes carro automóvel
veículo melhores melhores fabricantes
carro automóvel veículo melhores
melhores fabricantes carro automóvel
veículo melhores melhores fabricantes
carro automóvel veículo melhores
Grandes marcas falam mais
sobre seus produtos,
  não sobre si mesmas.
Milhões de resultados.
 Como trazer primeiro os
mais relevante para a busca?
Precisamos identificar as
Autoridades sobre a
    busca realizada.
Classificação de resultados
 em Autoridades e Hubs.
Através da análise de links.
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
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
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
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
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
Pré-processamento
Documentos na Web
conectados por hyperlinks
1º Passo: Busca textual
Q: “melhores fabricantes de
 carro dos últimos 4 anos”
Q: “melhores fabricantes de
 carro dos últimos 4 anos”
Resultado: subgrafo R (root)
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
2º Passo: Expande-se o subgrafo R
     (Region Growing Method)
2º Passo: Expande-se o subgrafo R
     (Region Growing Method)
Resultado: subgrafo S (seed)
     Base do algoritmo
Resultado: subgrafo S (seed)
     Base do algoritmo
Resultado: subgrafo S (seed)




Características
(1) Ainda é proporcionalmente pequeno
(2) Provavelmente conterá autoridades
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
Atualizando pesos de S
ap é...
soma do hi de todos os nós i apontando para p


          i1
                             p
          i2
Atualizando pesos de S
hp é...
soma do ai de todos os nós i apontados por p


                             i1
           p
                             i2
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.
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)
Exemplo

1
      3
2
Exemplo

1
      3
          A=   [ ]
               0 0 1
               0 0 1
               0 0 0



2
Exemplo

1         A=       [ ]
                   0 0 1
                   0 0 1
                   0 0 0


                   [ ]
      3            0 0 0
          At   =   0 0 0
2                  1 1 0
Exemplo

1         A=        [ ]
                     0 0 1
                     0 0 1
                     0 0 0


                    [ ]
      3              0 0 0
          At    =    0 0 0
2                    1 1 0

          h t   = [1,1,1]
Exemplo

a = At . h =   [ ][ ] [ ]
                0 0 0
                0 0 0
                1 1 0
                        1
                        1
                        1
                            =
                                0
                                0
                                2
Exemplo

a = At . h =   [ ][ ] [ ]
                0 0 0
                0 0 0
                1 1 0
                        1
                        1
                        1
                            =
                                0
                                0
                                2


h=A.a=         [ ][ ] [ ]
                0 0 1
                0 0 1
                0 0 0
                        1
                        1
                        1
                            =
                                2
                                2
                                0
Exemplo
a1 = 0
h1 = 2
         1
                       a3 = 2
                   3
                       h3 = 0
a2 = 0
h2 = 2
         2
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.
O Algoritmo
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).
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)
Por que identificar God Classes?
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
God Classes

Violam o princípio da distribuição uniforme de
responsabilidades.




                             http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
God Classes

Difíceis de implementar, manter e testar.



                                 http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
God Classes

Delegam pequenos detalhes e utilizam dados de outras
classes mais triviais do sistema.




                                 http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
God Classes

Impacto negativo na reutilização de componentes e na
compreensão do sistema.




                                 http://www.corej2eepatterns.com/Patterns2ndEd/images/SLMainClass.gif
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
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
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
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
Exemplo: Forno Elétrico
HITS x God Classes
HITS x God Classes
HITS x God Classes
HITS x God Classes
HITS x God Classes
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;
HITS x God Classes
HITS x God Classes


Resolução do sistema: iterativa (Gauss-Seibel) ou
utlizando o Teorema de Perron ou o Método das
Potências
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.
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.
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
Forno Elétrico: Cadê a God Class?
Forno Elétrico: Cadê a God Class?
Forno Elétrico: Cadê a God Class?
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.
A classe 3 é uma God Class?



h3 = 1

Essa classe é a única que inicia alguma atividade no
sistema.
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).
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.
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.
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.
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.
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.
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
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.
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
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
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

Weitere ähnliche Inhalte

Andere mochten auch

Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafosPriscila Mayumi
 
Resumo - Pesquisas Doutorado - Análise de Redes Sociais - 2009
Resumo - Pesquisas Doutorado - Análise de Redes Sociais - 2009Resumo - Pesquisas Doutorado - Análise de Redes Sociais - 2009
Resumo - Pesquisas Doutorado - Análise de Redes Sociais - 2009Dalton Martins
 
Análise de Redes Sociais: novas possibilidades de serviços e pesquisa para bi...
Análise de Redes Sociais: novas possibilidades de serviços e pesquisa para bi...Análise de Redes Sociais: novas possibilidades de serviços e pesquisa para bi...
Análise de Redes Sociais: novas possibilidades de serviços e pesquisa para bi...Dalton Martins
 
Olap 1p
Olap 1pOlap 1p
Olap 1pValldo
 
Introdução à Teoria das Redes (estudo dos graphos)
Introdução à Teoria das Redes (estudo dos graphos)Introdução à Teoria das Redes (estudo dos graphos)
Introdução à Teoria das Redes (estudo dos graphos)Luiz Agner
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos GrafosChromus Master
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordGabriel Albuquerque
 
Definição de sociedade em rede
Definição de sociedade em redeDefinição de sociedade em rede
Definição de sociedade em redeAdelaide Dias
 
Análise de Redes Sociais
Análise de Redes SociaisAnálise de Redes Sociais
Análise de Redes SociaisInês Amaral
 
Introduction to Graph Databases
Introduction to Graph DatabasesIntroduction to Graph Databases
Introduction to Graph DatabasesMax De Marzi
 
Análise de Redes Sociais - Teoria e Prática
Análise de Redes Sociais - Teoria e PráticaAnálise de Redes Sociais - Teoria e Prática
Análise de Redes Sociais - Teoria e Práticafhguarnieri
 

Andere mochten auch (16)

Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafos
 
Resumo - Pesquisas Doutorado - Análise de Redes Sociais - 2009
Resumo - Pesquisas Doutorado - Análise de Redes Sociais - 2009Resumo - Pesquisas Doutorado - Análise de Redes Sociais - 2009
Resumo - Pesquisas Doutorado - Análise de Redes Sociais - 2009
 
Análise de Redes Sociais: novas possibilidades de serviços e pesquisa para bi...
Análise de Redes Sociais: novas possibilidades de serviços e pesquisa para bi...Análise de Redes Sociais: novas possibilidades de serviços e pesquisa para bi...
Análise de Redes Sociais: novas possibilidades de serviços e pesquisa para bi...
 
Olap 1p
Olap 1pOlap 1p
Olap 1p
 
OLAP, BI, EIS
OLAP, BI, EISOLAP, BI, EIS
OLAP, BI, EIS
 
Introdução à Teoria das Redes (estudo dos graphos)
Introdução à Teoria das Redes (estudo dos graphos)Introdução à Teoria das Redes (estudo dos graphos)
Introdução à Teoria das Redes (estudo dos graphos)
 
Dawarehouse e OLAP
Dawarehouse e OLAPDawarehouse e OLAP
Dawarehouse e OLAP
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos Grafos
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Definição de sociedade em rede
Definição de sociedade em redeDefinição de sociedade em rede
Definição de sociedade em rede
 
Análise de Redes Sociais
Análise de Redes SociaisAnálise de Redes Sociais
Análise de Redes Sociais
 
Apostila grafos
Apostila grafosApostila grafos
Apostila grafos
 
Grafos e Árvores
Grafos e ÁrvoresGrafos e Árvores
Grafos e Árvores
 
Introduction to Graph Databases
Introduction to Graph DatabasesIntroduction to Graph Databases
Introduction to Graph Databases
 
Análise de Redes Sociais - Teoria e Prática
Análise de Redes Sociais - Teoria e PráticaAnálise de Redes Sociais - Teoria e Prática
Análise de Redes Sociais - Teoria e Prática
 

Mehr von Thiago Colares

O básico que ainda deveríamos entender sobre Unicode e encondings
O básico que ainda deveríamos entender sobre Unicode e encondingsO básico que ainda deveríamos entender sobre Unicode e encondings
O básico que ainda deveríamos entender sobre Unicode e encondingsThiago Colares
 
The Pragmatic Agilist: estimating, improving quality, and communication with...
The Pragmatic Agilist: estimating, improving quality, and communication  with...The Pragmatic Agilist: estimating, improving quality, and communication  with...
The Pragmatic Agilist: estimating, improving quality, and communication with...Thiago Colares
 
Getting started with GraphQL
Getting started with GraphQLGetting started with GraphQL
Getting started with GraphQLThiago Colares
 
Domain-Driven Design com PHP
Domain-Driven Design com PHPDomain-Driven Design com PHP
Domain-Driven Design com PHPThiago Colares
 
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapAplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapThiago Colares
 
eBook: Como abrir uma empresa em Salvador, Bahia?
eBook: Como abrir uma empresa em Salvador, Bahia?eBook: Como abrir uma empresa em Salvador, Bahia?
eBook: Como abrir uma empresa em Salvador, Bahia?Thiago Colares
 
Processos de Negócio e Colaboração
Processos de Negócio e ColaboraçãoProcessos de Negócio e Colaboração
Processos de Negócio e ColaboraçãoThiago Colares
 
Como NÃO transformar sua startup em uma tragédia
Como NÃO transformar sua startup em uma tragédiaComo NÃO transformar sua startup em uma tragédia
Como NÃO transformar sua startup em uma tragédiaThiago Colares
 
Colaboração em Projetos FLOSS: CakePHP
Colaboração em Projetos FLOSS: CakePHPColaboração em Projetos FLOSS: CakePHP
Colaboração em Projetos FLOSS: CakePHPThiago Colares
 
Usability (and some thoughts on mobile)
Usability (and some thoughts on mobile)Usability (and some thoughts on mobile)
Usability (and some thoughts on mobile)Thiago Colares
 
API Evolution and Usability
API Evolution and UsabilityAPI Evolution and Usability
API Evolution and UsabilityThiago Colares
 
Apresentação sobre Árvores B
Apresentação sobre Árvores BApresentação sobre Árvores B
Apresentação sobre Árvores BThiago Colares
 
O não e o empreendedor
O não e o empreendedorO não e o empreendedor
O não e o empreendedorThiago Colares
 
Startups como meio de inovação
Startups como meio de inovaçãoStartups como meio de inovação
Startups como meio de inovaçãoThiago Colares
 

Mehr von Thiago Colares (16)

O básico que ainda deveríamos entender sobre Unicode e encondings
O básico que ainda deveríamos entender sobre Unicode e encondingsO básico que ainda deveríamos entender sobre Unicode e encondings
O básico que ainda deveríamos entender sobre Unicode e encondings
 
The Pragmatic Agilist: estimating, improving quality, and communication with...
The Pragmatic Agilist: estimating, improving quality, and communication  with...The Pragmatic Agilist: estimating, improving quality, and communication  with...
The Pragmatic Agilist: estimating, improving quality, and communication with...
 
Getting started with GraphQL
Getting started with GraphQLGetting started with GraphQL
Getting started with GraphQL
 
The Pragmatic Agilist
The Pragmatic AgilistThe Pragmatic Agilist
The Pragmatic Agilist
 
Domain-Driven Design com PHP
Domain-Driven Design com PHPDomain-Driven Design com PHP
Domain-Driven Design com PHP
 
Mobile Usability
Mobile UsabilityMobile Usability
Mobile Usability
 
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapAplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
 
eBook: Como abrir uma empresa em Salvador, Bahia?
eBook: Como abrir uma empresa em Salvador, Bahia?eBook: Como abrir uma empresa em Salvador, Bahia?
eBook: Como abrir uma empresa em Salvador, Bahia?
 
Processos de Negócio e Colaboração
Processos de Negócio e ColaboraçãoProcessos de Negócio e Colaboração
Processos de Negócio e Colaboração
 
Como NÃO transformar sua startup em uma tragédia
Como NÃO transformar sua startup em uma tragédiaComo NÃO transformar sua startup em uma tragédia
Como NÃO transformar sua startup em uma tragédia
 
Colaboração em Projetos FLOSS: CakePHP
Colaboração em Projetos FLOSS: CakePHPColaboração em Projetos FLOSS: CakePHP
Colaboração em Projetos FLOSS: CakePHP
 
Usability (and some thoughts on mobile)
Usability (and some thoughts on mobile)Usability (and some thoughts on mobile)
Usability (and some thoughts on mobile)
 
API Evolution and Usability
API Evolution and UsabilityAPI Evolution and Usability
API Evolution and Usability
 
Apresentação sobre Árvores B
Apresentação sobre Árvores BApresentação sobre Árvores B
Apresentação sobre Árvores B
 
O não e o empreendedor
O não e o empreendedorO não e o empreendedor
O não e o empreendedor
 
Startups como meio de inovação
Startups como meio de inovaçãoStartups como meio de inovação
Startups como meio de inovação
 

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/
  • 4. Pergunta para amigos. “melhores fabricantes de carro?”
  • 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.
  • 7. melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores
  • 8. Ocorrência de termos não implica em relevância. melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores melhores fabricantes carro automóvel veículo melhores
  • 9. Grandes marcas falam mais sobre seus produtos, não sobre si mesmas.
  • 10. Milhões de resultados. Como trazer primeiro os mais relevante para a busca?
  • 11. Precisamos identificar as Autoridades sobre a busca realizada.
  • 12. Classificação de resultados em Autoridades e Hubs. Através da análise de links.
  • 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
  • 21. 1º Passo: Busca textual
  • 22. Q: “melhores fabricantes de carro dos últimos 4 anos”
  • 23. Q: “melhores fabricantes de carro dos últimos 4 anos”
  • 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
  • 26. 2º Passo: Expande-se o subgrafo R (Region Growing Method)
  • 27. 2º Passo: Expande-se o subgrafo R (Region Growing Method)
  • 28. Resultado: subgrafo S (seed) Base do algoritmo
  • 29. Resultado: subgrafo S (seed) Base do algoritmo
  • 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)
  • 36. Exemplo 1 3 2
  • 37. Exemplo 1 3 A= [ ] 0 0 1 0 0 1 0 0 0 2
  • 38. Exemplo 1 A= [ ] 0 0 1 0 0 1 0 0 0 [ ] 3 0 0 0 At = 0 0 0 2 1 1 0
  • 39. Exemplo 1 A= [ ] 0 0 1 0 0 1 0 0 0 [ ] 3 0 0 0 At = 0 0 0 2 1 1 0 h t = [1,1,1]
  • 40. Exemplo a = At . h = [ ][ ] [ ] 0 0 0 0 0 0 1 1 0 1 1 1 = 0 0 2
  • 41. Exemplo a = At . h = [ ][ ] [ ] 0 0 0 0 0 0 1 1 0 1 1 1 = 0 0 2 h=A.a= [ ][ ] [ ] 0 0 1 0 0 1 0 0 0 1 1 1 = 2 2 0
  • 42. Exemplo a1 = 0 h1 = 2 1 a3 = 2 3 h3 = 0 a2 = 0 h2 = 2 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)
  • 47. Por que identificar God Classes?
  • 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
  • 58. HITS x God Classes
  • 59. HITS x God Classes
  • 60. HITS x God Classes
  • 61. HITS x God Classes
  • 62. HITS x God Classes
  • 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;
  • 64. HITS x God Classes
  • 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
  • 69. Forno Elétrico: Cadê a God Class?
  • 70. Forno Elétrico: Cadê a God Class?
  • 71. Forno Elétrico: Cadê a God Class?
  • 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