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 do
Main.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