O documento apresenta uma representação estrutural de código-fonte chamada CodeMI para permitir a coleta de métricas em softwares industriais preservando propriedade intelectual. CodeMI mapeia elementos estruturais do código como declarações e comandos para XML de baixa verbosidade. Isso permite extrair métricas usando XSLT enquanto impede a recuperação do código original. O formato é testado em um estudo de caso no sistema Compiere.
1. UNIRIO
Universidade Federal do Estado do Rio de Janeiro
CodeMI – Source Code as XMI
Uma Representação Estrutural de Código-fonte para Coleta de Métricas
João Paulo Oliveira dos Santos
Márcio de Oliveira Barros
joao.santos@uniriotec.br
3. Contexto
• Evolução de Software
– Pesquisas nesta área estudam o comportamento
de projetos de software ao longo do tempo
– Em geral, estes estudo se baseiam em
repositórios de sistemas de controle de versão
joao.santos@uniriotec.br
4. Contexto
• Estudos em evolução de software
– Análise de repositórios de controle de versão de
softwares
– Coleta de métricas a partir do código-fonte ou de
outros artefatos desenvolvidos
– Formação de séries temporais com dados
colhidos através das métricas
– Análise (estatística) das séries históricas
joao.santos@uniriotec.br
5. Contexto
• Concentração dos estudos em repositórios
de software livre
– Ex: SourceForge, GNU, Apache, Eclipse, ...
• Problemas:
– Projetos extintos e revisões anteriores perdidas
– Software comercial/industrial é desenvolvido de
forma diferente do software livre
– Formulação de teorias baseadas neste tipo de
repositório
joao.santos@uniriotec.br
6. Motivação
• Poucos estudos são realizados sobre software
desenvolvido segundo um modelo industrial
– Empresas desenvolvedoras de software restringem
o acesso ao código-fonte de seus produtos
• Consequências
– Falta de métricas colhidas de softwares industriais
– Métricas colhidas de forma oportunista (muitas
vezes sem associação com uma pesquisa)
– Falta de teorias evolutivas sobre estes softwares
joao.santos@uniriotec.br
7. Problema
Como realizar estudos de evolução de
software baseados em sistemas industriais
sem ferir restrições de propriedade intelectual
e sem definir, antes de planejar os objetivos
da pesquisa, quais métricas devem ser
analisadas?
joao.santos@uniriotec.br
8. Solução Proposta
Prover uma representação de código-fonte
que evidencie as características estruturais do
código sem deixar explícita a lógica que ele
implementa (propriedade intelectual).
• Representação de código em XML
• Facilidade de manipulação
• Diversidade de mecanismos de consulta –
Xpath, Xquery, XSLT
joao.santos@uniriotec.br
9. Principais Representações
Críterios JavaML JavaML XJava JavaML
M&K 1.0 2.0
Elementos essenciais
Informações textuais
Verbosidade Alta Média Baixa Alta
Linhas em branco
Comentários
Representa AST
Exposição do código
Granularidade Classe Classe Sistema Classe
joao.santos@uniriotec.br
10. Critérios Desejáveis
• Verbosidade baixa
– facilita a realização de consultas
– viabiliza análise de grandes sistemas
• Não exposição do código
– impede a extração do código-fonte
– restrições de propriedade
joao.santos@uniriotec.br
11. Representação Proposta
• CodeMI
– Baseado no formato XMI v2.1
• Requisitos
– Baixa verbosidade
– Baixa exposição do código-fonte
– Granularidade em nível de pacote
– Independência de linguagem de programação
– Alinhamento ao paradigma OO
joao.santos@uniriotec.br
12. Formato XMI
• Troca de modelos entre ferramentas
– Arquitetura MOF (4 camadas)
Nível Descrição
M3 MOF
M2 Metamodelo UML
(elemento: “Classe”)
M1 Elemento UML
(classe: “Hóspede”)
M0 Instâncias de elementos UML
(hospede: “João”)
joao.santos@uniriotec.br
17. Construindo a Representação
• Criação do Parser Java
– Análise dos lexemas da linguagem Java
– Verificação da ordem dos lexemas
– Geração da CodeMI
– JRefactory & Gramática do Java 1.5
Código-fonte Representação
Parser Java
Java CodeMI
joao.santos@uniriotec.br
18. Teste do Parser – Código-fonte
Pacote: org.compiere.process
Classe: CompiereService
Método: terminate
joao.santos@uniriotec.br
19. Engenharia Reversa & CodeMI
• Engenharia Reversa
– Obtenção de informações de projeto
• CodeMI
– Estendida do formato XMI
– Importação por ferramenta CASE
– Obtenção dos elementos do modelo UML
• Resultados
– Diagramas estruturais (classe, pacote)
• Alto nível de Abstração
• Baixa completeza (detalhamento)
joao.santos@uniriotec.br
20. Reengenharia & CodeMI
• Reengenharia
– Reconstrução do sistema
– Utilizando documentação – Engenharia Reversa
– Dificultada (baixa completeza)
• CodeMI
– Inviabilidade de extração do código-fonte (XSLT)
Preservação dos detalhes do código-fonte da CodeMI.
joao.santos@uniriotec.br
21. Avaliação - Extração de Métricas
• Coleta de métricas
– Suíte de métricas de Lorenz & Kidd (projeto)
– Suíte de métricas de Chidamber & Kemerer
– Complexidade ciclomática (McCabe – Myers)
– Tamanho (LOC)
• Utilização de transformações XSLT
joao.santos@uniriotec.br
23. Avaliação - Estudo de Caso
• Compiere
– Médio porte
– Gestão empresarial - ERP
– Gestão de relacionamento com cliente - CRM
– Open source
– Comércio, indústria e serviços
Extrair Converter
Obter
Versão do Código- Coletar
Repositório
Código- fonte para Métricas
CVS
fonte CodeMI
joao.santos@uniriotec.br
25. Estudo de Caso – Coleta de Métricas
Lorenz & Kidd
Tamanho do Método (LOC)
Tamanho Médio do Método
Número de Métodos Públicos de Instância (PIM)
Número de Métodos de Instância numa Classe (NIM) Complexidade Ciclomática
Média dos Métodos de Instância por Classe (ANIM) McCabe
Número de Atributos de Instância numa Classe (NIA) Myers
Média de Atributos de Instância por Classe (ANIA)
Número de Métodos de Classe numa Classe (NCM)
Média dos Métodos de Classe por Classe (ANCM)
Número de Atributos de Classe numa Classe (NCA) Chidamber & Kemerer
Média dos Atributos de Classe por Classe (ANCA) Métodos Ponderados por Classe (WMC)
Número de Parâmetros por Método (PPM) Número de Filhos (NOC)
joao.santos@uniriotec.br
27. Ambiente de Suporte a Pesquisas
• CodeMI – Coletas periódicas
• Acompanhar evolução das métricas
• Elaboração de séries temporais
• Proposição de novas métricas
• Evolução de softwares industriais
• Interface com as empresas
joao.santos@uniriotec.br
30. Contribuições
• Conjunto de marcadores - Métricas estruturais
• CodeMI
• Parser Java
• XSLT – suíte de métricas
• Estudo de Caso – Compiere
• Proposta do ambiente de suporte à pesquisa
joao.santos@uniriotec.br
31. Limitações
• Parser – Gramática Java 1.5
• Engenharia Reversa parcial (baixa
completeza)
• XSLT - coletar métricas em nível de sistema
– Ausência de operação de junção (join)
joao.santos@uniriotec.br
32. Conclusões
• Representação Genérica
• Granularidade em Nível de Pacote
• Baixa Verbosidade
• Baixa Exposição do Código-Fonte
joao.santos@uniriotec.br
33. Trabalhos Futuros
• Implementação do ambiente proposto
• Analisar repositórios industriais de controle de
versão
• Construção do parser/plug-in para outras
linguagens
• Extrair métricas ao longo do tempo
• Utilização da representação para construção de
séries históricas das métricas
• Realização de estimativas e simulações utilizando
estas séries históricas
joao.santos@uniriotec.br