CodeCity e outras visualizações de código com Moose e Pharo

Nestas últimas duas semanas tive contato com ambientes de programação e análise de código diferentes e pretendo contar aqui as primeiras experiências. A primeira delas foi o ambiente integrado chamado Pharo http://pharo.org/ e a outra é uma plataforma para análise de código e dados chamada Moose http://www.moosetechnology.org/. Moose é uma ferramenta open source, desenvolvida utilizando Pharo e sob a licença BSD/MIT. O Moose permite a análise código escrito em Smalltalk/Pharo e de outras linguagens através da utilização de parsers.

Nosso objetivo aqui é mostrar algumas visualizações de código presentes na ferramenta Moose, não entraremos em detalhes do ambiente Pharo (farei outro post depois!). Para executar o Moose precisaremos ter a máquina virtual do Pharo.

Pharo 3.0

Pharo é uma ambiente integrado, IDE e Linguagem de programação, que proporciona uma experiência de programação imersiva, lhe dando total controle sobre sua experiência em programação. O Pharo é focado no feedback imediato e baseado em smalltalk, linguagem de programação puramente orientada a objetos.

A instalação é simples, basta baixar a versão para seu sistema operacional e executar o arquivo pharo.exe. O Pharo abre arquivos de imagem e já vem com uma com vários pacotes de código (inclusive o código do próprio Pharo).

Tela do Pharo com o System browser e o workspace abertos

Moose 5.0

A ferramenta Moose é uma plataforma desenvolvida no ambiente Pharo. Ele permite análise de código e de dados. Sua instalação também é simples, basta baixar e abrir o arquivo moose-5.0.image com o pharo.exe (no windows usei o Abrir com …). O Moose 5 é uma versão ainda em desenvolvimento.

Tela do Moose 5.0 com o Moose Panel aberto

O Moose é totalmente integrado com o Pharo permitindo a análise de programas escritos em smalltalk/pharo facilmente. Além disso, é composto de várias APIs para a manipulação e visualização de dados.

Em http://agilevisualization.com/, há vários exemplos de utilização das várias APIs. Os códigos abaixo são da API Roassal2 (https://dl.dropboxusercontent.com/u/31543901/AgileVisualization/Roassal/0104-Roassal.html). Copie e cole o código no workspace do Moose e execute o código.

Um exemplo de visualização:

v := RTView new.
shape := RTEllipse new size: 20; color: Color lightBlue.
shape := shape + RTLabel.

es := shape elementsOn: (1 to: 20).
v addAll: es.

RTEdgeBuilder new view: v; objects: (1 to: 20) from: [ :i | i // 2 ].

RTTreeLayout on: es.
es @ RTDraggable.
v

Dados Geográficos em CSV:

tab := RTTabTable new input: (ZnEasy get: ‘http://earthquake.usgs.gov/earthquakes/feed/v0.1/summary/2.5_month.csv') contents usingDelimiter: $,.
tab removeFirstRow.
tab replaceEmptyValuesWith: ‘0' inColumns: #(2 3 4 5).
tab convertColumnsAsFloat: #(2 3 4 5).
b := RTMapLocationBuilder new.
b shape circle size: [ :v | 2 raisedTo: (v — 1) ]; color: (Color red alpha: 0.3).
tab values do: [ :row | b addPoint: row second @ row third value: row fifth ].
b build.

Primeiras visualizações

Para criar as visualizações de código o Moose trabalha com modelos gerados a partir do código. A importação de código interno escrito smalltalk/pharo e contido na imagem em utilização é muito simples e está integrado na ferramenta. Basta usar o botão ST no Moose Panel e escolher os pacotes que deseja gerar o modelo. No exemplo abaixo, abri o pacote Compiler e gerei a visualização de System Complexity.

Ao selecionar as classes, pacotes, atributos, etc, do modelo teremos acesso a algumas visualizações. Acima, escolhi todas as classes e gerei o gráfico de complexidade (Complexity). Ao clicar com o botão direito no MooseModel, temos outras opções de visualização, inclusive uma Customizable System Complexity.

Importando Código Externo

Para gerarmos visualizações de código escrito em outras linguagens precisamos utilizar um parser para gerar o modelo no formato MSE.

Utilizei o parser inFamix para gerar os modelos de meus projetos Java no formato MSE (a ferramenta é 64bits e você deve utilizar um Jdk 64bits). Segue o comando que utilizamos:

inFamix -lang java -path c:\dev\workspace\meuprojeto -mse meuprojeto.mse

Agora basta usar o botão MSE no Moose Panel e importar o modelo selecionando o arquivo meuprojeto.mse. No exemplo abaixo, abri o modelo e gerei a visualização de System Attraction.

Visualização System Attraction: em preto as Classes, em vermelho os Métodos e em azul os Atributos

CodeCity no Moose

A visualização CodeCity desenvolvida por Richard Wettel pode ser integrada no Moose através da instalação do pacote CodeCity. A instalação demora um pouco! :-P

Gofer new smalltalkhubUser: ‘RichardWettel’ project: ‘CodeCity’;
configuration; load. (Smalltalk at: #ConfigurationOfCodeCity)
loadDevelopment

Para mais detalhes sobre o CodeCity acesse a página http://www.inf.usi.ch/phd/wettel/codecity.html. No link http://www.inf.usi.ch/phd/wettel/codecity-wof.html temos gráficos de vários softwares. Segue abaixo um exemplo da visualização do tipo CodeCity:

Considerações Finais

Achei muito interessante e promissor as várias formas de visualização que podem ajudar o desenvolvedor ou analista a entender o código e encontrar possíveis problemas. Contudo, acho que poderíamos ter alguns estudos de caso práticos como motivadores na documentação do Moose.

Um outro ponto é a necessidade de funcionalidades que permitam uma customização mais simples para modificar as visualizações adequando a necessidade do analista. Até onde pude verificar, tais customizações precisam ser programadas e isso implica em maior experiência no Moose e em desenvolvimento com Pharo.

--

--