Defesa Mestrado

923 visualizações

Publicada em

Minha Defesa de Mestrado

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
923
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
12
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Defesa Mestrado

  1. 1. UNIRIOUniversidade 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
  2. 2. Agenda • Contexto • Motivação • Problema • Solução Proposta • Atividades Realizadas • Limitações e Contribuições • Conclusões • Trabalhos Futuros joao.santos@uniriotec.br
  3. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  13. 13. Exemplo XMI Pacote: org.compiere.process Classe: CompiereService joao.santos@uniriotec.br
  14. 14. 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
  15. 15. CodeMI (cont...) Marcadores Atributos <if> </if> conditions • Conjunto reduzido de <else> </else> marcadores <switch> </switch> • 1 marcador por linha de <case> </case> código-fonte <break> <for> </for> conditions <while> </while> conditions <try> </try> <catch> </catch> <statement> Baixa verbosidade <localvar> type <return> joao.santos@uniriotec.br
  16. 16. 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
  17. 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. 18. Teste do Parser – Código-fonte Pacote: org.compiere.process Classe: CompiereService Método: terminate joao.santos@uniriotec.br
  19. 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. 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. 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
  22. 22. Avaliação – Exemplo XSLT • Complexidade Ciclomática - McCabe <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> joao.santos@uniriotec.br
  23. 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
  24. 24. 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
  25. 25. Estudo de Caso – Coleta de MétricasLorenz & KiddTamanho do Método (LOC)Tamanho Médio do MétodoNúmero de Métodos Públicos de Instância (PIM)Número de Métodos de Instância numa Classe (NIM) Complexidade CiclomáticaMédia dos Métodos de Instância por Classe (ANIM) McCabeNúmero de Atributos de Instância numa Classe (NIA) MyersMé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 & KemererMé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
  26. 26. Estudo de Caso - Resultado Pacote: org.compiere.grid Total de Classes Total de Metodos Total de Comandos ANIM ANIA ANCA ANCM C.C. Média C.C. Total 13 160 2652 12.08 17.46 0.23 0.23 4.16 665Nome da Classe LOC/NM PIM NIM NIA NCM NCA NA NM LOC WMC NOC CC Média CC Total CCM Média CCM TotalAPanelTab 0 4 4 0 0 0 0 4 0 4 0 1 4 1:1 4:4GridController 11.72 34 36 21 0 0 22 36 422 134 0 3.72 134 3.72:4.94 134:178RecordAccessDialog 19.63 2 8 21 0 0 21 8 157 28 0 3.5 28 3.5:3.63 28:29VCreateFrom 12.24 7 17 32 0 0 32 17 208 42 3 2.47 42 2.47:2.76 42:47VCreateFromInvoice 18.27 5 11 4 0 0 4 11 201 48 0 4.36 48 4.36:5.73 48:63VCreateFromShipment 18.08 5 11 3 1 0 3 12 217 45 0 3.75 45 3.75:5.25 45:63 classeVCreateFromStatement 11.1 4 10 2 0 0 2 10 111 22 0 2.2 22 2.2:2.9 22:29VPanel 14 8 14 16 2 2 21 16 224 65 0 4.06 65 4.06:5.69 65:91VPayment 63.82 4 11 94 0 0 94 11 702 151 0 13.73 151 13.73:22.45 151:247VSortTab 19.38 9 13 25 0 1 30 13 252 59 0 4.54 59 4.54:5.92 59:77VTabbedPane 8.67 9 9 5 0 0 5 9 78 31 0 3.44 31 3.44:4.11 31:37VTable 7.33 5 6 2 0 0 2 6 44 17 0 2.83 17 2.83:3.67 17:22XLookup 5.14 7 7 2 0 0 2 7 36 19 0 2.71 19 2.71:3.71 19:26 joao.santos@uniriotec.br
  27. 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
  28. 28. Arquitetura do Ambiente joao.santos@uniriotec.br
  29. 29. Atividades do Ambiente joao.santos@uniriotec.br
  30. 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. 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. 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. 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

×