Vous êtes sur la page 1sur 7

A adio da linguagem Perl ferramenta de analise de cdigo Analizo

Caio Costa Salgado1

Abstract Este Artigo visa a descrever a adio de uma nova funcionalidade ferramenta Analizo. A funcionalidade de poder analisar uma linguagem a mais, Perl, a partir de um coletor de mtricas B::Xref(Malcolm Beattie 1998)

1 Introduo
Existe uma ferramenta de coleta de mtricas para diferentes linguagens de programao, essa ferramenta expansvel porm, no trabalha com a linguagem Perl, aqui descrevemos a incluso dessa nova funcionalidade. Esse artigo baseia-se na estrutura do estudo que descreve a Analizo (Terceiroetal. 2010), uma vez que propusemos uma incluso de funcionalidade ferramenta, logo para melhor explanao procuraremos mostrar a constituio da Analizo e sua formao para, assim, mostrar onde encaixamos nossa pesquisa dentro do projeto da Analizo. Ferramentas automatizadas de anlise de cdigo, como a Analizo, so de grande importncia para desenvolvedores e pesquisadores uma vez que elas permitem um maior entendimento do software em foco, trazendo informaes grficas e mtricas sobre o cdigo analisado. Porm, quase sempre essas ferramentas so limitadas a uma ou poucas

1Caio.csalgado@gmail.com,UniversidadedeSoPaulo(USP)

linguagens de programao, o que torna muito difcil uma anlise automatizada de projetos escritos em vrias lnguas. Descrevemos aqui uma expanso para a Analizo, que adiciona a possibilidade de trabalho dessa ferramenta com uma outra linguagem especfica: Perl, ao mesmo tempo que trabalha com as outras2 dessa forma possvel fazer uma anlise de projetos que tenham cdigo escrito em mais lnguas, ou lnguas diferentes, das quais a Analizo previamente aceitava.

2 Trabalhos relacionados
Durante nosso trabalho fizemos uma pesquisa entre diferentes coletores de mtricas: CCCC (Littlefair 2010) Cscope (Steffen, HansBernhard e Horman 2009), LDX (Hassan et al. 2005), CTAGX(Hassan et al. 2005), CPPX (Hassan et al. 2005), e Analizo. Com o intuito de procurar a ferramenta mais flexvel e abrangente, dessa forma algumas caractersticas so indispensveis: Ser extensvel, isto , poder modificar a ferramenta adicionado mais funcionalidades Abrange uma grande quantidade de linguagens. Procuramos nos focar em ferramentas que j trabalhavam com mais de uma linguagem e das mais diferentes possveis.

Propriedades Linguagens Suportadas Extensvel Mantida cdigo no compilado

CCCC C++, Java

Cscope C

LDX C, C++

CTAGX C

CPPX C, C++

Analizo C, C++, Java

No Sim Sim

No Sim No

No No No

No No No

No No No

Sim Sim Sim

2quandoesseestudofoifeitoaAnalizosoperavacomC,C++eJava

Table 1: Ferramentas encontradas versus Caractersticas

Visando a aproveitar o mximo de cdigo, da melhor qualidade possvel, a Analizo foi a que pareceu mais adequada uma vez que possui cdigo aberto3, expansvel, e trabalha com a maior quantidade de linguagens simultaneamente (C, C++, Java). Devido ao fato de ser a nica ferramenta que expansvel temos a oportunidade de aumentar sua abrangncia para trabalhar com mais linguagens. Como a Analizo tambm ainda mantida isso significa que ela apresenta uma comunidade que fornece suporte, a qual poderia ajudar-nos na pesquisa.

3 O coletor B::xref
Para poder coletar informaes de cdigo Perl se faz necessrio o uso de um coletor, escolhemos o B::Xref como coletor por ser integrado ao compilador Perl, analisar cdigo no compilado, e produzir uma sada bruta de fcil assimilao por outros programas. O B::Xref capaz de analisar cdigo no compilado, apesar de que durante a anlise ele compile o cdigo mas, apresentar um resultado independente do sucesso ou fracasso da compilao. Essa fato devido ao coletor fazer parte do compilador, ele integrado ao funcionamento, enquanto compila analisa os arquivos O B::Xref ser integrado ao Perl, significa que ele um pacote que vem por padro junto com a instalao normal logo, ele mantido pela comunidade oficial apresentando suporte e atualizaes frequentes. O coletor possui uma opo que o faz modificar a sua sada padro por uma mais robusta e simples, que no visa ser lida por humanos e sim por outras maquinas, uma vez que no apresenta uma indentao (dificultando a leitura humana), e rica em repeties
3TodasasferramentasdescritassoOpenSource

e etiquetas que auxiliam a busca e manipulao de informaes por analise de expresses regulares.

5 integrao do B::Xref com a analizo


Para integrar o B::Xref com a Analizo, foi necessrio compreender como a ferramenta coleta informaes da outras linguagens e como fazer para o nosso coletor fornecer as mesma informaes no mesmo formato. A camada de extratores da Analizo composta por dois parceadores: Analizo::Extractors::Doxyparse uma interface para o Doxyparse, um parceador de C, C++ e Java (Costa 2009). Doxyparse baseado no Doxygen4 um sistema de documentao de cdigo-fonte para diversas lnguas, que contm um parceador robusto.

Analizo::Extractors::Sloccount

uma interface para David A.Wheelers

Sloccount5, uma ferramenta que calcula o nmero efetivo de linhas de cdigo. Logo o nossa pesquisa foi implementar uma interface do B::Xref, que pudesse ser consumida pela Analizo assim como as outras interfaces: Analizo::Extractors::Sloccount e Analizo::Extractors::Doxyparse, criando assim Analizo::Extractors::B::Xref. O primeiro desafio foi que a sada do B::Xref muito diferente da sada dos outros coletores, logo qualquer tratamento com expresses regulares (regex) para formatar os resultados do coletor seria muito custosa em relao a ttica abordada, est que foi a construo de uma rvore de hierarquia. Est rvore mais eficiente que a analise textual que seria feita pelo regex, porque diminui um passo na interface entre coletor e ferramenta, uma vez que a rvore construda igual a utilizada pela Analizo para armazenar as informaes, logo no requer nenhum tratamento para ser consumida. O prximo desafio foi que Perl uma linguagem dinmica, isto , ela realiza diversas funes em tempo de execuo ao invs de em tempo de compilao. Por exemplo a tipagem dinmica, onde o tipo da varivel s definido no uso, e como ela
4 5 Doxygen.org/ Dwheeler.com/sloccount/

pode ser usada vrias vezes ao longo do programa seu tipo pode mudar, logo no possvel rastrear os tipos de variveis. Esse fato trouxe uma grande mudana em relao as mtricas coletadas, nem todas podiam ser encontradas quando a linguagem era Perl pois em alguns casos nem fazia sentido colet-las, causando alguns buracos nas rvores de informaes da Analizo quando o cdigo era em Perl. Outro problema era um bug no B::Xref :Non-lexical variables are quite difficult to track through a program. Sometimes the type of a non-lexical variable's use is impossible to determine. Introductions of non-lexical non-scalars don't seem to be reported properly.(BEATTIE; B::Xref, 1998, bugs section). Isso faz com que a relao entre arquivos em Perl seja muito difcil de se rastrear, sendo necessria uma analise posterior dos dados coletados pelo B::Xref. Aps a concluso do Analizo::Extractors::B::Xref um pedido de integrao de cdigo foi feito, no qual os autores da Analizo devem integrar um novo extrator na ferramenta.

6 Consideraes finais
Apresentamos aqui a implementao de um coletor de mtricas para a linguagem Perl integrado a ferramenta Analizo, que pode suportar agora C, C++, Java e Perl, utilizando uma ferramenta livre e expansvel. Podendo ser utilizada tanto na procura de problemas quanto na busca por melhorias em programas. Ainda no existe uma integrao completa com a linguagem Perl pela Analizo na medida em que ainda so necessrias adaptaes para uma anlise eficiente de uma linguagem dinmica, algo que os autores no prevero durante o desenvolvimento da ferramenta. Os dados que advm desse tipo de linguagem so muito diferentes dos coletados por linguagens no dinmicas. Uma plataforma web para anlise de cdigo-fonte, baseada na Analizo est em desenvolvimento, esta utiliza a ltima verso da Analizo, que contm o extrator para Perl.

Trabalhos futuros discutem a integrao na Analizo de outros extratores para outras linguagens e tambm mais extratores para as linguagens atuais, potencializando a eficincia e preciso da ferramenta.

Referncias
(Hassan, Jiang e Holt 2005) HASSAN, A. E.; JIANG, Z. M.; HOLT, R. C. Source versus object

code extraction for recovering software architecture. In: Proceedings of the 12th Working Conference on Reverse Engineering (WCRE05). [S.l.: s.n.], 2005. (Littlefair 2010) LITTLEFAIR, T. CCCC - C and C++ Code Counter. 2010. Available at

http://cccc.sourceforge.net/. Last access on June 3rd, 2010. (Steffen, Hans-Bernhard e Horman 2009) STEFFEN, J.; HANS-BERNHARD; HORMAN, B. N.

Cscope. http://cscope.sourceforge.net/, 2009. Disponvel em: <http://cscope.sourceforge.net/>.

(Terceiro et al. 2010)

TERCEIRO, A. et al. Analizo: an extensible multi-language source code analysis

and visualization toolkit. Paper published in the Tools Session of the 1st Brazilian Conference on Software , p. 16, 2010. BEATTIE, M B::Xref: Generates cross reference reports for Perl programs.Available at

http://cpan.uwinnipeg.ca/htdocs/perl/Xref.pm.html Book Per in a Nutshell, part III, chapter 8, B::Xref, 1998 Hassan, A. E., Jiang, Z. M., and Holt, R. C. (2005). Source versus object code extraction for recovering software architecture. In Proceedings of the 12th Working Conference on Reverse Engineering (WCRE05).

Vous aimerez peut-être aussi