Você está na página 1de 7

A adição da linguagem Perl à ferramenta de analise de código Analizo

Caio Costa Salgado1

Abstract Este Artigo visa a descrever a adição de uma nova funcionalidade à ferramenta Analizo. A funcionalidade de poder analisar uma linguagem a mais, Perl, a partir de um coletor de métricas B::Xref(Malcolm Beattie 1998)

1 Introdução
Existe uma ferramenta de coleta de métricas para diferentes linguagens de programação, essa ferramenta é expansível porém, não trabalha com a linguagem Perl, aqui descrevemos a inclusão dessa nova funcionalidade. Esse artigo baseia-se na estrutura do estudo que descreve a Analizo (Terceiro et al. 2010), uma vez que propusemos uma inclusão de funcionalidade à ferramenta, logo para melhor explanação procuraremos mostrar a constituição da Analizo e sua formação para, assim, mostrar onde encaixamos nossa pesquisa dentro do projeto da Analizo. Ferramentas automatizadas de análise de código, como a Analizo, são de grande importância para desenvolvedores e pesquisadores uma vez que elas permitem um maior entendimento do software em foco, trazendo informações gráficas e métricas sobre o código analisado. Porém, quase sempre essas ferramentas são limitadas a uma ou poucas

1 Caio.csalgado@gmail.com, Universidade de São Paulo (USP)

Propriedades Linguagens Suportadas Extensível Mantida código não compilado CCCC C++. ao mesmo tempo que trabalha com as outras2 dessa forma é possível fazer uma análise de projetos que tenham código escrito em mais línguas. e Analizo. poder modificar a ferramenta adicionado mais funcionalidades • Abrange uma grande quantidade de linguagens. C++ CTAGX C CPPX C. Procuramos nos focar em ferramentas que já trabalhavam com mais de uma linguagem e das mais diferentes possíveis. CTAGX(Hassan et al.   Hans­Bernhard   e   Horman   2009). isto é. C++. LDX (Hassan et al. Java Cscope C LDX C. Java Não Sim Sim Não Sim Não Não Não Não Não Não Não Não Não Não Sim Sim Sim 2quando esse estudo foi feito a Analizo só operava com C.linguagens de programação. ou línguas diferentes. C++ e Java . o que torna muito difícil uma análise automatizada de projetos escritos em várias línguas. C++ Analizo C. que adiciona a possibilidade de trabalho dessa ferramenta com uma outra linguagem específica: Perl. 2005). das quais a Analizo previamente aceitava. 2005). 2 Trabalhos relacionados Durante nosso trabalho fizemos uma pesquisa entre diferentes coletores de métricas: CCCC (Littlefair   2010)„ Cscope (Steffen. Com o intuito de procurar a ferramenta mais flexível e abrangente. Descrevemos aqui uma expansão para a Analizo. CPPX (Hassan et al. 2005). dessa forma algumas características são indispensáveis: • Ser extensível.

Como a Analizo também ainda é mantida isso significa que ela apresenta uma comunidade que fornece suporte. Essa fato é devido ao coletor fazer parte do compilador. da melhor qualidade possível. e trabalha com a maior quantidade de linguagens simultaneamente (C.Table 1: Ferramentas encontradas versus Características Visando a aproveitar o máximo de código. C++. analisar código não compilado. apesar de que durante a análise ele compile o código mas. Devido ao fato de ser a única ferramenta que é expansível temos a oportunidade de aumentar sua abrangência para trabalhar com mais linguagens. O coletor possui uma opção que o faz modificar a sua saída padrão por uma mais robusta e simples. O B::Xref é capaz de analisar código não compilado. apresentará um resultado independente do sucesso ou fracasso da compilação. uma vez que não apresenta uma indentação (dificultando a leitura humana). enquanto compila analisa os arquivos O B::Xref ser integrado ao Perl. 3 O coletor B::xref Para poder coletar informações de código Perl se faz necessário o uso de um coletor. ele é integrado ao funcionamento. ele é mantido pela comunidade oficial apresentando suporte e atualizações frequentes. e é rica em repetições 3Todas as ferramentas descritas são Open Source  . a qual poderia ajudar-nos na pesquisa. significa que ele é um pacote que vem por padrão junto com a instalação normal logo. e produzir uma saída bruta de fácil assimilação por outros programas. escolhemos o B::Xref como coletor por ser integrado ao compilador Perl. que não visa ser lida por humanos e sim por outras maquinas. Java). a Analizo foi a que pareceu mais adequada uma vez que possui código aberto3. é expansível.

foi necessário compreender como a ferramenta coleta informações da outras linguagens e como fazer para o nosso coletor fornecer as mesma informações no mesmo formato. • Analizo::Extractors::Sloccount é uma interface para David A. porque diminui um passo na interface entre coletor e ferramenta. Está árvore é mais eficiente que a analise textual que seria feita pelo regex. e como ela 4 5 Doxygen.org/ Dwheeler. ela realiza diversas funções em tempo de execução ao invés de em tempo de compilação. isto é. onde o tipo da variável só é definido no uso.e etiquetas que auxiliam a busca e manipulação de informações por analise de expressões regulares. que pudesse ser consumida pela Analizo assim como as outras interfaces: Analizo::Extractors::Sloccount e Analizo::Extractors::Doxyparse. A camada de extratores da Analizo é composta por dois parceadores: • Analizo::Extractors::Doxyparse é uma interface para o Doxyparse. uma vez que a árvore construída é igual a utilizada pela Analizo para armazenar as informações. O próximo desafio foi que Perl é uma linguagem dinâmica. um parceador de C. C++ e Java (Costa 2009). que contém um parceador robusto. O primeiro desafio foi que a saída do B::Xref é muito diferente da saída dos outros coletores. uma ferramenta que calcula o número efetivo de linhas de código.Wheeler’s Sloccount5. logo qualquer tratamento com expressões regulares (regex) para formatar os resultados do coletor seria muito custosa em relação a tática abordada. logo não requer nenhum tratamento para ser consumida.com/sloccount/ . Por exemplo a tipagem dinâmica. 5 integração do B::Xref com a analizo Para integrar o B::Xref com a Analizo. Doxyparse é baseado no Doxygen4 um sistema de documentação de código-fonte para diversas línguas. está que foi a construção de uma árvore de hierarquia. Logo o nossa pesquisa foi implementar uma interface do B::Xref. criando assim Analizo::Extractors::B::Xref.

Ainda não existe uma integração completa com a linguagem Perl pela Analizo na medida em que ainda são necessárias adaptações para uma análise eficiente de uma linguagem dinâmica. que pode suportar agora C. utilizando uma ferramenta livre e expansível. Isso faz com que a relação entre arquivos em Perl seja muito difícil de se rastrear. C++. sendo necessária uma analise posterior dos dados coletados pelo B::Xref. esta utiliza a última versão da Analizo. Os dados que advêm desse tipo de linguagem são muito diferentes dos coletados por linguagens não dinâmicas. 1998. causando alguns buracos nas árvores de informações da Analizo quando o código era em Perl. nem todas podiam ser encontradas quando a linguagem era Perl pois em alguns casos nem fazia sentido coletá-las.pode ser usada várias vezes ao longo do programa seu tipo pode mudar. Sometimes the type of a non-lexical variable's use is impossible to determine. algo que os autores não preverão durante o desenvolvimento da ferramenta. . B::Xref.”(BEATTIE. Introductions of non-lexical non-scalars don't seem to be reported properly. baseada na Analizo está em desenvolvimento. Outro problema era um bug no B::Xref :”Non-lexical variables are quite difficult to track through a program. Java e Perl. que contém o extrator para Perl. Uma plataforma web para análise de código-fonte. no qual os autores da Analizo devem integrar um novo extrator na ferramenta. Podendo ser utilizada tanto na procura de problemas quanto na busca por melhorias em programas. Esse fato trouxe uma grande mudança em relação as métricas coletadas. bugs section). logo não é possível rastrear os tipos de variáveis. Após a conclusão do Analizo::Extractors::B::Xref um pedido de integração de código foi feito. 6 Considerações finais Apresentamos aqui a implementação de um coletor de métricas para a linguagem Perl integrado a ferramenta Analizo.

.. 2009. HANS-BERNHARD. CCCC . T.l.sourceforge. Referências (Hassan. M. In: Proceedings of the 12th Working Conference on Reverse Engineering (WCRE’05). (Steffen.. Disponível em: <http://cscope. 2010.: s. (Littlefair 2010) LITTLEFAIR. Last access on June 3rd. potencializando a eficiência e precisão da ferramenta. HOLT. A. Z.]. E. HORMAN. 2005. JIANG. [S. 2010.net/. C.Trabalhos futuros discutem a integração na Analizo de outros extratores para outras linguagens e também mais extratores para as linguagens atuais.net/>. R.. N.net/. Source versus object code extraction for recovering software architecture.sourceforge.sourceforge. B. Cscope. Available at http://cccc. J. Jiang e Holt 2005) HASSAN. http://cscope.C and C++ Code Counter. Hans-Bernhard e Horman 2009) STEFFEN.n.

BEATTIE. and Holt. Z. 1998 Hassan. 2010) TERCEIRO. p. 1–6. E.. (2005). A. B::Xref. In Proceedings of the 12th Working Conference on Reverse Engineering (WCRE’05). et al. R. part III. chapter 8. Paper published in the Tools Session of the 1st Brazilian Conference on Software .(Terceiro et al. .Available at http://cpan. Source versus object code extraction for recovering software architecture. Analizo: an extensible multi-language source code analysis and visualization toolkit. C.pm.html Book Per in a Nutshell.ca/htdocs/perl/Xref. M. A. 2010. Jiang..uwinnipeg. M B::Xref: Generates cross reference reports for Perl programs.