Upload
campus-party-brasil
View
1.092
Download
6
Embed Size (px)
Citation preview
Como calcular as métricas?
Como extrair informações do código para calcular as métricas?
Duas ferramentas: Analizo Novo extrator
Analizo
Ferramenta para análise do código-fonte Multi-linguagem (C, C++ e Java) Uso simples pela linha de comando Reporta informações gerais e individuais de
cada módulo Feita em Perl
http://softwarelivre.org/mezuro/analizo
Usando a Analizo
Um exemplo bem simples em Java...
HelloWorld.java
Main.java
Usando a Analizo
$ analizo-metrics hello_world/java/
Resultados Gerais Resultados do HelloWorld.java
Resultados doMain.java
Entendendo Analizo
Funcionamento da Analizo
Doxyparse
O Doxyparse usa o parser do Doxygen e reporta as informações das suas estruturas de dados
A chave para a extração de informações multi-linguagem é o Doxygen
Usando o Doxyparse
Outro exemplo simples, agora em C++...
cat.cc
cat.h mammal.h animal.h
main.cc
Usando o Doxyparse
$ doxyparse animals/cpp/
O problema
Queriamos extrair mais informações dos métodos, atributos e classes
Complexidade Ciclomática, parâmetros, abstratos e virtuais
Para resolver teríamos que mexer no Doxygen
Decidimos fazer um novo extrator!
Novo Extrator
Uso da ANTLR (www.antlr.org)
”is a language tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions in a variety of target languages”
Gerador de Lexer e Parser na target language
Novo Extrator
● Definição de uma gramática para reconhecer os padrões desejados
Trecho da gramática para definição de método em Java
● Target Language: Ruby
Uma Gramática
Queremos reconhecer uma simples declaração de variável:
• Toda declaração de variável é formada por um tipo e seu nome
• Pode também conter uma inicialização com um número
Como fica a gramática?
O Modelo
Utilizamos o modelo para guardar as informações e reportá-las ao final
Classe Atributos Métodos
Variáveis Locais Parâmetros Usos de variáveis e métodos
Cada um contém seu tipo e modificadores
Usando o Novo Extrator
Rodando para o mesmo HelloWorld.java