defesa mestrado

Post on 13-Jan-2015

642 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Minha Defesa de Mestrado

TRANSCRIPT

UNIRIOUniversidade Federal do Estado do Rio de Janeiro

CodeMI – Source Code as XMIUma 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

Agenda

• Contexto

• Motivação

• Problema

• Solução Proposta

• Atividades Realizadas

• Limitações e Contribuições

• Conclusões

• Trabalhos Futuros

joao.santos@uniriotec.br

• 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

Contexto

joao.santos@uniriotec.br

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

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

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

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?

Problema

joao.santos@uniriotec.br

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).

joao.santos@uniriotec.br

• Representação de código em XML• Facilidade de manipulação

• Diversidade de mecanismos de consulta –Xpath, Xquery, XSLT

Principais Representações

joao.santos@uniriotec.br

Críterios JavaMLM&K

JavaML1.0

XJava JavaML2.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

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

• 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

Representação Proposta

joao.santos@uniriotec.br

Formato XMI

• Troca de modelos entre ferramentas

– Arquitetura MOF (4 camadas)

joao.santos@uniriotec.br

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”)

Pacote: org.compiere.processClasse: CompiereService

joao.santos@uniriotec.br

Exemplo XMI

CodeMI

• Extensão XMI – elementos do código-fonte

<xmi:extension>

//elementos estruturais do código-fonte do método

</xmi:extension>

• Mapeamento dos elementos estruturais

– Condições: if, switch, …

– Repetições: loop, for, while, …

– Comandos

– Declarações

joao.santos@uniriotec.br

CodeMI (cont...)

Marcadores Atributos

<if> </if> conditions

<else> </else>

<switch> </switch>

<case> </case>

<break>

<for> </for> conditions

<while> </while> conditions

<try> </try>

<catch> </catch>

<statement>

<localvar> type

<return>

joao.santos@uniriotec.br

• Conjunto reduzido de marcadores

• 1 marcador por linha de código-fonte

Baixa verbosidade

CodeMI – Esboço Intramétodo

<xmi:extension>

<statement />

<localvar type="int"/>

<statement />

<localvar type="Enumeration"/>

<while>

<statement />

<localvar type="Aluguel"/>

<statement />

</while>

<return />

</xmi:extension>

joao.santos@uniriotec.br

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

joao.santos@uniriotec.br

Código-fonte

JavaParser Java

Representação

CodeMI

Pacote: org.compiere.processClasse: CompiereService

Método: terminate

Teste do Parser – Código-fonte

joao.santos@uniriotec.br

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

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)

joao.santos@uniriotec.br

Preservação dos detalhes do código-fonte da CodeMI.

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

Avaliação – Exemplo XSLT

• Complexidade Ciclomática - McCabe

joao.santos@uniriotec.br

<xsl:for-each select="packagedElement/packagedElement">

<xsl:for-each select="ownedOperation">

<xsl:value-of select="(

count(xmi:extension//if) +

count(xmi:extension//for) +

count(xmi:extension//while) +

count(xmi:extension//case) +

count(xmi:extension))"/>

</xsl:for-each>

</xsl:for-each>

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

joao.santos@uniriotec.br

Obter Repositório

CVS

Extrair Versão do Código-fonte

Converter Código-

fonte para CodeMI

Coletar Métricas

Estudo de Caso - Conversão

compiere.model.xmi org.compiere.common.constants.xmi org.compiere.print.xmi

org.apache.ecs.filter.xmi org.compiere.common.xmi org.compiere.process.xmi

org.apache.ecs.storage.xmi org.compiere.controller.xmi org.compiere.report.core.xmi

org.apache.ecs.xhtml.xmi org.compiere.db.xmi org.compiere.report.xmi

org.apache.ecs.xmi org.compiere.esb.xmi org.compiere.server.xmi

org.apache.ecs.xml.xmi org.compiere.excel.xmi org.compiere.session.xmi

org.compiere.acct.xmi org.compiere.framework.xmi org.compiere.sla.xmi

org.compiere.api.xmi org.compiere.grid.ed.xmi org.compiere.sqlj.xmi

org.compiere.apps.form.xmi org.compiere.grid.tree.xmi org.compiere.startup.xmi

org.compiere.apps.graph.xmi org.compiere.grid.xmi org.compiere.swing.xmi

org.compiere.apps.info.xmi org.compiere.images.xmi org.compiere.test.xmi

... ... ...

66 pacotes CodeMI

joao.santos@uniriotec.br

Estudo de Caso – Coleta de Métricas

joao.santos@uniriotec.br

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)

Média dos Métodos de Instância por Classe (ANIM)

Número de Atributos de Instância numa Classe (NIA)

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)

Média dos Atributos de Classe por Classe (ANCA)

Número de Parâmetros por Método (PPM)

Complexidade Ciclomática

McCabe

Myers

Chidamber & Kemerer

Métodos Ponderados por Classe (WMC)

Número de Filhos (NOC)

Estudo de Caso - Resultado

Pacote: org.compiere.grid

joao.santos@uniriotec.br

Total de Classes Total de Metodos Total de Comandos ANIM ANIAANCAANCM C.C. Média C.C. Total

13 160 2652 12.08 17.460.23 0.23 4.16 665

Nome da Classe LOC/NM PIM NIM NIA NCM NCA NA NM LOC WMC NOC CC Média CC Total CCM Média CCM Total

APanelTab 0 4 4 0 0 0 0 4 0 4 0 1 4 1:1 4:4

GridController 11.72 34 36 21 0 0 22 36 422 134 0 3.72 134 3.72:4.94 134:178

RecordAccessDialog 19.63 2 8 21 0 0 21 8 157 28 0 3.5 28 3.5:3.63 28:29

VCreateFrom 12.24 7 17 32 0 0 32 17 208 42 3 2.47 42 2.47:2.76 42:47

VCreateFromInvoice 18.27 5 11 4 0 0 4 11 201 48 0 4.36 48 4.36:5.73 48:63

VCreateFromShipment 18.08 5 11 3 1 0 3 12 217 45 0 3.75 45 3.75:5.25 45:63

VCreateFromStatement 11.1 4 10 2 0 0 2 10 111 22 0 2.2 22 2.2:2.9 22:29

VPanel 14 8 14 16 2 2 21 16 224 65 0 4.06 65 4.06:5.69 65:91

VPayment 63.82 4 11 94 0 0 94 11 702 151 0 13.73 151 13.73:22.45 151:247

VSortTab 19.38 9 13 25 0 1 30 13 252 59 0 4.54 59 4.54:5.92 59:77

VTabbedPane 8.67 9 9 5 0 0 5 9 78 31 0 3.44 31 3.44:4.11 31:37

VTable 7.33 5 6 2 0 0 2 6 44 17 0 2.83 17 2.83:3.67 17:22

XLookup 5.14 7 7 2 0 0 2 7 36 19 0 2.71 19 2.71:3.71 19:26

cla

sse

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

Arquitetura do Ambiente

joao.santos@uniriotec.br

Atividades do Ambiente

joao.santos@uniriotec.br

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

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

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

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

top related