Você está na página 1de 8

17/11/13

Bate Byte

O que o Bate Byte


O Bate Byte foi um jornal tcnico que circulou mensalmente dentro da CELEPAR e nos seus clientes. Abrigava tudo, idias, mtodos, tendncias, tecnologias, hardware e software. Suas edies esto preservadas neste repositrio.

Graph viz: uma ferramenta para a gerao de grafos Autor: Ioquir Afonso Sotile

Introduo Minha dissertao de mestrado trata da descoberta de dependncias entre servios de software, descobertas a partir da anlise do trfego de rede. Cada dependncia representada basicamente pelas informaes origem, destino e servio utilizado. Em determinado momento necessrio representar as dependncias de forma grfica, transformando estas informaes, a princpio desconexas umas das outras, em um mapa de relacionamentos que permita a visualizao das relaes indiretas de dependncia. A possibilidade de construir um programa para gerar o mapa de dependncias surgiu, mas sabia-se que seria descartada caso fosse considerado muito grande o esforo necessrio. Por isso partiu-se em busca de uma forma de importar as relaes de dependncias para um grfico do Visio ou de ferramenta equivalente, de uma biblioteca grfica de programao que pudesse ser utilizada ou mesmo de uma ferramenta j existente para a gerao dos grficos. Para minha felicidade, nestes tempos de Internet, listas e principalmente software livre, j havia algo pronto: o GraphViz, que se demonstrou ideal para a aplicao. Grafos Um grafo uma abstrao matemtica, til na resoluo de vrios tipos de problemas. Essencialmente, um grafo consiste de um conjunto de vrtices e um conjunto de arestas, onde uma aresta algo que conecta dois vrtices no grafo. Um grafo G(V,E) um conjunto finito no vazio V e um conjunto E de pares (u,v) no ordenados de elementos de V. Em um grafo no direcionado, as arestas so pares no ordenados e conectam dois vrtices em ambas as direes, neste caso (u,v) e (v,u) so duas maneiras de referenciar a mesma aresta, o que no acontece para os grafos direcionados. Esta definio de um grafo um tanto quanto vaga: ela no diz o que representam os vrtices e arestas. Podem ser cidades e as estradas que as conectam, ou pginas Internet com seus hyperlinks. Estes detalhes so deixados de lado na definio de um grafo por uma razo: no so parte necessria da abstrao do grafo. Ignorando os detalhes, pode-se construir uma teoria que reutilizvel e pode auxiliar na resoluo de vrios tipos de problemas. Um grafo pode ser representado matematicamente por: V = {v, b, x, z, a, y } E = { (b,y), (b,y), (y,v), (z,a), (x,x), (b,x), (x,v), (a,z) } G = (V, E)
www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1123 1/8

17/11/13

Bate Byte

A Figura 1 a representao grfica deste grafo. A aresta (x,x) chamada de lao. As arestas (b,y) e (b,y) so arestas paralelas. Laos e arestas paralelas aparecem em multigrafos mas no costumam ser permitidas em grafos direcionados e no direcionados.

Figura 1 - Multigrafo direcionado Na Figura 2 o mesmo grafo representado, mas agora como no direcionado. A repetio de aresta (b,y), o lao (x,x) e a aresta (a,z) que repete a (z,a) foram removidas.

Figura 2 - Grafo no direcionado O Pacote GraphViz O GraphViz um conjunto de programas, de cdigo fonte aberto, para a automatizao do desenho de grafos. O pacote, cujo cdigo fonte e executveis esto disponveis para as plataformas mais comuns, inclui ferramentas para a criao de representaes hierrquicas de grafos direcionados (dot ), de representaes no modelo spring para grafos no direcionados (neato), uma interface ajustvel escrita em LEFTY (dotty), uma interface grfica ajustvel (tcldot ) escrita com a biblioteca libgraph tlc7.6, e uma interface web, o webdot . As ferramentas do GraphViz rodam em modo stand-alone, mas interfaces para sistemas e bancos de dados externos podem ser utilizadas. Isso envolve criar scripts dotty ou tcldot para mudar o comportamento do editor de grafos e para faz-lo comunicar-se com os arquivos ou programas externos.
www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1123 2/8

17/11/13

Bate Byte

O GraphViz tem componentes para a criao de representaes hierrquicas de rvores e grafos acclicos direcionados e representaes fsicas virtuais (modelo spring) de grafos no direcionados, que podem ser utilizados em reas como projetos de bancos de dados, engenharia de software, projeto de redes, entre outros. Os algortimos utilizados pelo GraphViz so eficientes a ponto de construirem grafos com centenas de ns, com qualidade comparvel a grafos gerados manualmente com ferramentas de CAD. Para isso, buscando revelar caractersticas interessantes dos dados e evitar distraes e irrelevncias, so seguidos alguns princpios visuais simples: - Favorecer o reconhecimento e leitura de objetos individuais. Atravs de rtulos de texto, formato, cores e estilos, facilitar a identificao de objetos. - Evitar o cruzamento ou superposio de elementos. - Facilitar a leitura do diagrama, diminuindo o movimento dos olhos para buscar ns e caminhos, origens e destinos. - Revelar padres, enfatizando simetria, paralelismo e regularidade, que tornam o grafo mais fcil de ler e memorizar. A maior vantagem do GraphViz que o programador no precisa se preocupar com a disposio dos ns (ou vrtices): o programa arranja-os de forma a obter a melhor e mais clara disposio. possvel agrupar e influenciar a disposio dos ns de maneira rpida e fcil, o que permite ao desenvolvedor concentrar-se nos dados. Os mdulos do GraphViz utilizam como entrada uma descrio do grafo na linguagem dot , bastante simples. J a sada pode ser feita em vrios formatos grficos vetoriais ou de mapa de bits como: ps2, jpeg e gif . Os grafos podem ser gerados a partir de descries armazenadas em um arquivo texto ASCII, que tem tamanho bastante reduzido. A Figura 3 apresenta em linguagem dot as definies necessrias para gerar os grafos ilustrados nas Figura 1 e Figura 2. Percebe-se que basta apenas indicar as arestas. Na definio dada na Figura 3(b), foram removidos os laos, arestas paralelas e redundantes, pois o GraphViz representa-os mesmo em grafos no direcionados.

Figura 3 - Definio na linguagem dot de um grafo simples direcionado (a) e no direcionado (b)

www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1123

3/8

17/11/13

Bate Byte

Figura 4 - Definio na linguagem dot do grafo direcionado de uma Mquina Finita de Estados O GraphViz permite a utilizao de variaes da abstrao bsica de grafo, onde um vrtice representado por um ponto e as arestas no possuem atributos. Os exemplos a seguir acompanham o pacote e demonstram tanto a facilidade de uso quanto o poder da ferramenta. A Figura 4 apresenta o cdigo na linguagem dot para o grafo de uma mquina finita de estados e a Figura 5 o grafo resultante.

Figura 5 - Grafo de uma Mquina Finita de Estados, gerado a partir da definio As Figura 6 e Figura 7 ilustram a utilizao do GraphViz para a criao de grafos bem diferentes dos tradicionais, no caso uma tabela hashing.

www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1123

4/8

17/11/13

Bate Byte

Figura 6 - Definio de um grafo de hashing na linguagem dot

Figura 7 - Representao hashing gerada a partir de definio em linguagem dot Outros exemplos, que no sero colocados aqui, mostram a utilizao de diretivas do dot para a alterao do smbolo utilizado nos ns, das setas das arestas, da diviso em camadas e agrupamento em blocos, entre outros. De pacotes de rede para grafo de dependncias Uma primeira etapa da anlise de pacotes de rede, buscando informaes de dependncias, gera informaes bsicas, no formato endereo IP de origem, endereo IP de destino, porta TCP utilizada e servio representado pelo nmero da porta TCP, como as ilustradas na Figura 8, em que cada linha ou registro representa uma dependncia.

www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1123

5/8

17/11/13

Bate Byte

Figura 8 Informaes de dependncias obtidas a partir do trfego de rede Um programa simples, escrito em linguagem C, transforma as informaes bsicas das dependncias em um arquivo de definio no formato dot . O resultado da transformao dos dados da Figura 8 ilustrado abaixo, e o grafo resultante na Figura 10.

Figura 9 Arquivo de definio de grafo gerado de informaes obtidas da anlise de rede

www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1123

6/8

17/11/13

Bate Byte

Figura 10 - Grafo de dependncias entre hosts e servios Apenas com os dados obtidos da anlise do trfego TCP/IP da rede no possvel determinar quais servios utilizam quais servios, mas apenas que determinados hosts utilizam determinados servios em outros hosts. Por isso foi utilizada a facilidade de agrupamento em blocos, definida no arquivo dot como um subgraph e visualizada na forma de retngulos que contm os ns do bloco. Concluso O GraphViz demonstrou-se ideal para a resoluo do problema bsico de transformar informaes desconexas sobre dependncias entre servios em uma representao grfica legvel. Isso suficiente para a validao dos dados e para a construo de prottipos. No caso de sua utilizao em um sistema de gerncia de dependncias, tero de ser exploradas outras facilidades como a sua utilizao como um mdulo de programa, utilizao na web, a alterao do grafo aps a sua construo e a possibilidade de visualizao e navegao hierrquica entre grafos e subgrafos. O GraphViz no trata de grafos animados, ou seja: no possvel alterar o grafo ou suas propriedades em tempo real. Isso pode ser contornado fazendo-se com que o grafo seja recriado se o arquivo dot sofrer alteraes. Cada um dos ns de um grafo gerado com a ferramenta dotty pode conter um ponteiro (URL). Uma aplicao bem construda pode permitir ao usurio navegar por vrios nveis de abstrao do grafo. Na verdade, os ponteiros apontariam para grafos gerados com diferentes nveis de abstrao. Caractersticas como boa qualidade dos grafos gerados, simplicidade de definio na linguagem dot , ser de cgido aberto, estar disponvel para vrias plataformas, ter odesenvolvimento promovido pela ATT, fazem do GraphViz um produto sem similar. Referncias: 1. FOWLER, M. Graphviz. Disponvel em: <http://www.perladvent.org/2001/9th/>. Acesso em: 19 set.
www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1123 7/8

17/11/13

Bate Byte

2003. 2. GRAPHVIZ examples. Disponvel em: <http://www.research.att.com/sw/tools/graphviz/examples/> Acesso em: 19 set. 2003. 3. GRAPH VISUALIZATION PROJECT. Disponvel em: <http://www.graphviz.org/>. Acesso em: 05 set. 2003. 4. HUSSMAN, D. Exploring Graphviz dotty application in a pure Perl/Tk canvas. Disponvel em: <http://perlhorizons.com/02/08/28/101240>. Acesso em: 19 set. 2003. 5. OVERVIEW of Graphviz source package. Disponvel em: <http://packages.qa.debian.org/g/graphviz.html>. Acesso em: 19 set. 2003. 6. PORTAL OFICIAL DO GRAPHVIZ. Disponvel em: <http://www.research.att.com/sw/tools/graphviz/>. Acesso em: 05 set. 2003. 7. PORTS/GRAPHICS/GRAPHVIZ. Disponvel em: <http://www.freebsd.org/cgi/cvsweb.cgi/ports/graphics/graphviz/>. Acesso em: 19 set. 2003 8. REVISO da teoria elementar dos grafos. Disponvel em: <http://www.boost.org/libs/graph/doc/graph_theory_review.html>. Acesso em: 05 set. 2003. 9. SIEK, J. et al. The Boost Graph Library (BGL). Disponvel em: <http://www.boost.org/libs/graph/doc/index.html>. Acesso em: 19 set. 2003. 10 . SOME applications that use Graphviz. Disponvel em: <http://www.research.att.com/sw/tools/graphviz/webapps.html>. Acesso em: 19 set. 2003. 11. SZWARCFITER, J. Grafos e algoritmos computacionais. 2. ed. Rio de Janeiro: Campus, 1986.

2009 - Companhia de Informtica do Paran - Celepar Rua Mateus Leme 1561 - Centro Cvico 80530-010 - Curitiba - PR - 41 3350-5000

www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1123

8/8