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
Agenda


 •   Contexto
 •   Motivação
 •   Problema
 •   Solução Proposta
 •   Atividades Realizadas
 •   Limitações e Contribuições
 •   Conclusões
 •   Trabalhos Futuros


                  joao.santos@uniriotec.br
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
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
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
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
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
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
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
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
Exemplo XMI




                          Pacote: org.compiere.process
                            Classe: CompiereService




              joao.santos@uniriotec.br
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             • 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
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



         Código-fonte                              Representação
                               Parser Java
            Java                                      CodeMI




                        joao.santos@uniriotec.br
Teste do Parser – Código-fonte




                                          Pacote: org.compiere.process
                                            Classe: CompiereService
                                               Método: terminate




               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)




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


                   joao.santos@uniriotec.br
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
    <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
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
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


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




                                                                                                                         classe
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




                                            joao.santos@uniriotec.br
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

Defesa Mestrado

  • 1.
    UNIRIO Universidade Federal doEstado 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.
    Agenda • Contexto • Motivação • Problema • Solução Proposta • Atividades Realizadas • Limitações e Contribuições • Conclusões • Trabalhos Futuros joao.santos@uniriotec.br
  • 3.
    Contexto • Evoluçãode 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 • Estudosem 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çãodos 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 • Poucosestudos 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
  • 13.
    Exemplo XMI Pacote: org.compiere.process Classe: CompiereService joao.santos@uniriotec.br
  • 14.
    CodeMI • ExtensãoXMI – 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.
    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.
    CodeMI – EsboçoIntramé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.
    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çãode 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.
    Avaliação – ExemploXSLT • 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.
    Avaliação - Estudode 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.
    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.
    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
  • 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 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 classe 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 joao.santos@uniriotec.br
  • 27.
    Ambiente de Suportea 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.
    Arquitetura do Ambiente joao.santos@uniriotec.br
  • 29.
    Atividades do Ambiente 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çãoGené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