Esse artigo faz parte da revista Engenharia de Software 6 edição especial. Clique aqui para ler todos os artigos desta edição

 

Projeto

Utilizando Visualização de Informação para Compreensão de Software

De que se trata o artigo:

Este artigo apresenta como a visualização de informação em conjunto com as métricas de código fonte podem ajudar no processo de compreensão do software.

Para que serve:

A cada dia, com o contínuo aumento na complexidade dos sistemas de software, o processo para análise e compreensão do código visando evolução e manutenção do sistema se torna mais complexo e demorado. Aplicando os conceitos discutidos neste artigo, podemos tornar estas etapas menos difíceis e trabalhosas.

Em que situação o tema é útil:

Atualmente, existem diversas ferramentas que auxiliam a modelagem de sistemas, o controle de versões, testes, que possibilitam o desenvolvimento em grupo, mas ainda não é comum o uso de ferramentas que facilitem o processo de compreensão do software. Talvez por isso, ainda seja comum a existência de código duplicado, com alta complexidade, entre outros pontos negativos que reduzem a qualidade do sistema desenvolvido. A partir deste ponto, percebemos a importância da compreensão do software nas etapas de desenvolvimento e manutenção.

 

É cada vez mais evidente a importância de se ter controle sobre o modo como um software está sendo desenvolvido. Quando as primeiras linguagens de programação foram criadas, considerando aspectos como tamanho e complexidade dos sistemas desenvolvidos e o conhecimento sobre técnicas de programação, percebeu-se que os desenvolvedores não possuíam uma metodologia para estruturação de seu código. Possivelmente, os desenvolvedores não imaginavam uma forma bem definida na qual fosse possível analisar os códigos escritos sem ter que, necessariamente, olhar as centenas, ou até mesmo milhares de linhas de código (uma tarefa difícil e custosa). Além disso, retirar informações úteis e precisas dessas linhas com objetivo de dar continuidade ou manutenção ao sistema não era uma atividade trivial.

Embora muito tempo tenha se passado e muita evolução tenha ocorrido no desenvolvimento de técnicas para apoiar o desenvolvimento de sistemas, a tarefa de análise de código ainda é um campo com tópicos a serem explorados. Neste contexto, apresentaremos neste artigo o que se tem estudado sobre compreensão de código utilizando técnicas de visualização de informação, métricas e mineração visual de dados e ao final comentaremos sobre um plug-in de visualização desenvolvido para o Eclipse.

Visualização de Informação

Os seres humanos possuem dificuldades em processar dados no formato de textos e tabelas; por isso, freqüentemente, recorremos a meios visuais para interpretar o mundo a nossa volta [1]. Imagine por exemplo, dois mapas geográficos apresentando o número de habitantes (dado em análise) de cada país. No mapa 1, apresentamos sobre cada país o número de habitantes. No mapa 2, utilizamos cores com tonalidades diferentes para indicar o dado em análise, onde, a cor mais escura representa o país com maior população. Considerando que seu interesse seja estudar os países com população entre 50 e 100 milhões, qual mapa você utilizaria para obter esta informação de maneira mais rápida e segura?

O objetivo da visualização de informação é possibilitar que dados sejam apresentados através de formas simples e intuitivas [2].

A grande preocupação da visualização de informação é como os dados serão apresentados, pois uma boa escolha da forma de apresentação resulta na facilidade do entendimento e possibilita a descoberta de (novas) informações. Voltando ao exemplo do mapa, é possível que você “descubra” rapidamente, através do mapa que utiliza cores, que a região com maior concentração populacional esteja no continente asiático.

Como o número de habitantes é um dado comum e bastante discutido, talvez este não seja o melhor exemplo. Agora, como você analisaria o código do seu sistema com milhares de linhas para encontrar os pontos mais complexos, com alto índice de acoplamento e que a refatoração se torna indicada para facilitar a evolução e manutenção do software?

Muitas maneiras podem ser utilizadas para apresentar dados, dentre elas, o formato, cores, movimentos, posicionamento na tela e tamanho. Um exemplo dessa abordagem pode ser visto na Figura 1. Através dela, conseguimos notar como a forma, o tamanho e a cor podem ser usados para diferenciar os dados.

 Hoje em dia é comum encontrarmos técnicas de visualização de informação até mesmo em players de música para dispositivos móveis, onde cada música é representada por um ponto e este ponto é inserido em um plano. Os pontos mais a esquerda indicam que aquelas músicas possuem um ritmo mais rápido, pontos localizados a direita, músicas lentas e assim por diante. Com isso, para escolher as músicas que você deseja ouvir basta marcar o plano com o ponto, então o programa definirá um raio e tocará apenas as músicas que estiverem dentro da região especificada.

Imaginemos que cada símbolo geométrico da Figura 1 representa um filme de uma pequena locadora, onde a cor está relacionada com o gênero (comédia-verde; drama-vermelho; ação-azul; e suspense-preto), o tamanho relacionado com a duração e o formato indicando se é um dvd ou uma fita. Agora imagine que você deseja alugar uma comédia, de longa duração e que esteja disponível em DVD. Fácil, não? E se quiséssemos apresentar também o dado que indica o número de vezes que o filme foi locado? Seria necessário relacionar este dado com algum atributo visual existente ou escolher outra técnica de visualização para a apresentação dos dados.

 

Figura 1. Dados representados através da cor, tamanho e forma.

 

Por isso, é importante ressaltar que o formato visual da apresentação dos dados pode não somente facilitar, mas também dificultar a análise que se deseja fazer. Neste sentido, a escolha correta do paradigma visual e os atributos visuais que serão usados para representar os dados tornam-se uma escolha crucial à atividade de visualização.

O paradigma visual utilizado deve se adaptar à natureza dos dados representados. Por exemplo, grafos são adequados para representar dados que descrevem relacionamentos (por exemplo, sites de relacionamento podem ser representados através de grafos). Árvores são adequadas para representar dados hierárquicos (por exemplo, estrutura de diretórios).

Uma vez definido o paradigma visual, vários atributos visuais podem ser associados aos dados a serem representados. A adequação de um atributo visual ao dado depende da escala e tipo desse último atributo. Para exemplificar esta situação, imagine representar todos os países participantes de uma copa do mundo utilizando apenas duas cores.

Os dados podem ser do tipo categórico ou numérico. Enquanto os dados categóricos não possuem um sentido de ordem ou unidade, os dados numéricos possuem. Considere o caso da análise de sistema de softwares que queremos visualizar; neste caso, o nome dos pacotes, classes e métodos são dados categóricos, enquanto o tamanho e a complexidade dos métodos são dados numéricos.

Atributos numéricos podem ser mapeados naturalmente para atributos visuais como tons de cores, tamanho e posicionamento na tela. Atributos categóricos podem ser mapeados naturalmente para formas e conjuntos diferentes de cores. É importante ressaltar que o tipo e a natureza do dado pode também sugerir qual o mapeamento mais indicado para a sua representação visual. Voltando ao exemplo da copa do mundo onde desejamos representar visualmente o registro dos países participantes. Caso se decida representar o país por cores, espera-se que a cor usada para representar cada país esteja relacionada com a nossa percepção natural. Por exemplo, o registro do Brasil poderia estar representado com a cor verde ou amarela e o registro dos Estados Unidos representado pela cor vermelha ou azul.

Dado o cenário acima descrito e a tarefa que temos em mão – representar visualmente atributos do código fonte do software – temos que escolher que paradigma e atributos visuais melhor se adaptam para representar a estrutura e as métricas dos sistemas de software que queremos analisar.

Para uma boa escolha da forma de apresentação, é preciso conhecer a respeito do domínio no qual os dados serão utilizados, como esses dados serão utilizados, as informações que serão apresentadas e o objetivo da apresentação dos dados.

Após escolher a forma de apresentação, o projetista deve levar em consideração alguns dos fatores como: o tipo dos dados, se estes são textuais e/ou numéricos; se existe a necessidade de interação entre o usuário e os dados; com que freqüência os dados apresentados devem ser atualizados; e se o usuário está interessado em informações precisas ou na relação entre o conjunto de dados. ...

Quer ler esse conteúdo completo? Tenha acesso completo