Académique Documents
Professionnel Documents
Culture Documents
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.
Cscope C
LDX C, C++
CTAGX C
CPPX C, C++
No Sim Sim
No Sim No
No No No
No No No
No No No
2quandoesseestudofoifeitoaAnalizosoperavacomC,C++eJava
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.
Analizo::Extractors::Sloccount
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.
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).