Utilização de Análise de Características Dinâmicas em analises estáticas. Felipe A. Miziara 1, Marcelo A. Maia 1 1 Departamento de pós-graduação em Ciências da Computação Universidade Federal de Uberlândia (UFU) Uberlândia MG Brazil felipe.miziara@gmail.com, marcmaia@facom.ufu.br Abstract. This paper describes a proposal for using features execution traces of a software to a better statics analysis comprehension done by the opensource software Sonar. Resumo. Este artigo descreve uma proposta para utilizar rastros de execução de características de um software para uma melhor compreensão dos resultados (métricas) das análises estáticas realizadas pelo software opensource Sonar. 1. Caracterização do Problema Ao longo de um ciclo de manutenções em um sistema de software, uma importante tarefa é a análise de impacto que as novas implementações podem gerar. Estes impactos podem ser insignificantes ou podem gerar bugs em características inesperadas do sistema. A não consciência das classes que estão envolvidas em alguma característica específica é comum no mercado [Wilde et al. 2003]. Isto pode ocorrer por falta de documentação do projeto, falha no compartilhamento do conhecimento ou até mesmo em sistemas onde o código mantém um alto acoplamento e uma alta complexidade. O rastreamento da causa raiz destes bugs pode ser uma tarefa difícil e pode gerar manutenções desnecessárias no sistema. Este problema pode ser minimizado caso tenhase total ciência do impacto gerado em todas as atividades de manutenção realizadas no software em questão. Para tal tarefa este trabalho propõe separar os resultados da análise estática do software por características extraídas via extração de rastros de execução. 2. Fundamentação Teórica Através de experimentos realizados com seres humanos, [Lafetá et al. 2011] comprovou que com o uso de uma abordagem estática em conjunto com uma abordagem dinâmica a assertividade e tempo gasto na compreensão de sistemas foram melhores ou pelo menos similares à abordagens comumente utilizadas na indústria. Neste mesmo trabalho [Lafetá et al. 2011] mostrou que as características obtidas através de coleta de rastros de execução podem contribuir fazendo parte da documentação do sistema, melhorando o processo de compreensão, já que esta prática não é amplamente utilizada por sua dificuldade de manutenção [Wilde et al. 2003].
Este trabalho propõe utilizar como principal ferramenta de análise estática o sistema opensource chamado Sonar [http://www.sonarsource.org]. O sistema Sonar é um analisador estático de códigos fontes, onde dentre suas características se destacam as análises de métricas de projetos orientados a objetos. A imagens 1 mostra um exemplo de uma análise estática realizada pelo Sonar. Foram retiradas do projeto Nemo, que é uma execução publica do próprio Sonar [http://nemo.sonarsource.org]. Figure 1. Exemplo de mais Métricas analisadas pelo Sonar Dentre as métricas mensuradas pelo Sonar destacam-se as métricas Chidamber e Kemerer, que foi umas das grandes adições ao sistema em sua versão 2.0 [Conforme descrito no Release Notes 2.0 http://www.sonarsource.org/downloads/]. Chidamber e Kemerer propuseram [Chidamber e Kemerer et al. 1994] um conjunto de métricas para projetos orientados a objetos. Elas foram: Peso dos métodos por classes: WMC; Profundidade da árvore de Herança: DIT; Números de filhos: NOC; Acoplamento entre classes de objetos: CBO; Resposta por classe: RFC;
Falta de Coesão nos Métodos: LCOM A figura 2 demonstra um exemplo tirado do projeto Nemo [http://nemo.sonarsource.org] cruzando algumas destas métricas: Figure 2. Exemplo das métricas Chidamber e Kemerer. 4. Caracterização da Contribuição O objetivo deste trabalho é propor uma visão por características, obtidas através de coletas de rastros de execução, para análise estática. Acreditamos que, através da relação entre rastros de execução e o resultado das métricas da analise estática seja possível traçar uma ligação entre os rastros coletados da características e as classes envolvidas. Com a coleta de rastros de uma característica em específico, temos o conjunto de classes responsáveis pela execução da mesma. De posse disto é possível relacionar a característica com os resultados das análises estáticas das classes responsáveis. Desta forma, ao submeter uma nova manutenção no software em estudo, haverá impacto em suas métricas estáticas (não importando, neste momento, se o impacto será positivo ou negativo), o que por sua vez estarão relacionadas com as características e seus rastros de execução. Esta relação mostrará quais características sofreram o impacto causado pela manutenção e ainda quais métricas estáticas foram alteradas. Ao tornar este tipo de atividade uma prática constante no ciclo de vida de manutenção de um software, o sistema Sonar criará um histórico de submissões (funcionalidade já presente no software), o que nos permitirá visualizar todos os impactos gerados nas características individuais do software e com isto, caso ocorra algum bug gerado por uma implementação qualquer, acreditamos que a busca pela causa raiz do bug exija menos esforço. Outra contribuição resultante deste trabalho é a melhoria do algoritmo de sumarização proposto por [Silvia et al. 2011]. Em seu trabalho [Silvia et al. 2011] demonstra técnicas de compreensão de rastros de execução de programas, uma das técnicas apresentadas mostra o processo de sumarização de rastros que mede a relevância de um rastro pelo tamanho de sua sub-árvore, o que pode dar falsa relevância aos métodos com uma alta complexidade ciclomática.
Com a utilização das análises estáticas realizadas pelo software Sonar, como a CC dos métodos (complexidade ciclomática), estas informações poderão ser utilizadas na forma de um interchange format (IF) com a ferramenta de sumarização melhorando assim a acurácia da ferramenta. 5. Estado Atual do Trabalho Atualmente o trabalho proposto está em seu estado inicial. Já se iniciou o trabalho de compreensão do software Sonar com o objetivo de realizar a manutenção evolutiva para incluir o conceito de características (coletadas dinamicamente) nas métricas de análise estática. Para facilitar a atividade de manutenção foi utilizada a abordagem proposta por [Lafetá et al. 2011], onde foi definido características específicas e seus rastros foram coletados. O trabalho atual está sendo analisar os rastros na tentativa de identificar objetos chaves para tornar a tarefa de manutenção mais assertiva. Durante a análise dos rastros e com ajuda da análise estática dos fontes do projeto, encontrou-se que o módulo sonar-server será o alvo principal de tarefa de manutenção evolutiva. Para conclusão do trabalho é necessário finalizar as implementações na ferramenta Sonar e realizar testes no software final. Para realização destes testes iremos submeter alguns projetos open-source no Sonar e definir características individuais para cada Software avaliado. Desta forma podemos verificar a eficiência da influência da métrica complexidade ciclomática (CC) para tentar eliminar os falsos positivos na busca de rastros com alta profundidade em sua sub-árvore. Após finalizar as atividades de evolução do software sonar, o próximo passo é realizar pequenas manutenções (tamanho medido em volume de implementação) nos softwares escolhidos e que foram submetidos para análise no sonar. Ao realizar estas manutenções iremos re-submeter o software no Sonar, e analisar qual impacto a manutenção realizada teve nas métricas das características. Com a análise destes resultados poderemos determinar a eficiência ou não da abordagem em análise de impacto das manutenções.
6. Trabalhos Relacionados O trabalho proposto por [Lafetá et al. 2011] realizou experimentos com seres humanos sobre o impacto o do uso de rastros de execução em atividades de localização de características de software, e como conclusão principal percebeu que a utilização da abordagem proposta no mínimo se igual a não utilização, o que prova a eficiência da utilização da técnica apresentada. O trabalho apresentado por [Silva et al. 2011] demonstra técnicas para compreensão de rastros de execução de programas orientados a objetos. Uma das técnicas apresentadas foi a sumarização dos rastros coletados de forma a simplificar e melhorar a qualidade destes rastros. 7. Avaliação dos Resultados Os resultados obtidos até o presente momento ainda estão muito superficiais para uma avaliação consistente. Isto ocorre, pois o trabalho ainda está em seu estágio inicial de desenvolvimento, onde a primeira etapa (modificação do sonar para inclusão de rastros de execução) ainda não finalizou. 8. Referências [Chidamber e Kemerer et al. 1994] Churcher, N.I., Shepperd, M.J., Chidamber, S., Kemerer, C.F. (1994). A Metrics Suite for Object Oriented Design. [http://nemo.sonarsource.org] (2011) Sonar as a Service, http://nemo.sonarsource.org, novembro. [http://www.sonarsource.org] (2011) Sonar Portal, http://www.sonarsource.org, novembro. [Lafetá et al. 2011] Lafetá, R, Maia, M (2011). O impacto do uso de rastros de execução em atividades de localização de características de software: Um experimento controlado. [Silva et al. 2011] Silva, L (2011). Técnicas para compreensão de rastros de execução de programas orientados a objetos. [Wilde et al. 2003] Wilde, N., Buckellew, M., Page, H., Rajlich, V., e Pounds, L. (2003). A Comparison of Methods for Locating Features in Legacy Software. J. Syst. Software, 65(2):105 114.