SMartyParser
Um Parser XMI para Modelos UML de Variabilidade




                                     Leandro A. Lanceloti
                        Prof. Dr. Edson A. Oliveira Junior
Tópicos

• Introdução

• Linha de Produto de Software e Variabilidade

• A abordagem SMarty

• XML Metadata Interchange (XMI)

• O SMartyParser

• Trabalhos relacionados, conclusão e trabalhos
  futuros
Introdução

• Linha de produto de software (LP)
  • Ajuda a diminuir o custo do desenvolvimento
  • Ajuda a diminuir o time to market

• Gerenciar variabilidade é um ponto importante
  • A abordagem SMarty ajuda neste gerenciamento

• SMarty é baseada em UML e pode ser exportada via
  XMI
• O SMartyParser é um parser XMI para modelos UML
  baseados em SMarty
LP e Variabilidade

• LP
  • Conjunto de sistemas que compartilham funcionalidades
    • Também conhecido como família de produtos
  • Desenvolvidos a partir de uma infraestrutura comum, o
    núcleo de artefatos

• Variabilidade
  • É como os membros de uma família se distinguem
  • Pode estar ligada à: documentação, arquitetura, códigos
    fonte, compilado, executável e etc
  • Permite que as decisões sejam adiadas, aumentando o
    número de variabilidades
  • O Gerenciamento está ligado a todas as etapas do processo:
    identificação, delimitação e implementação
Abordagem SMarty

• SMartyProfile
  • Conjunto de estereótipos / meta-atributos
  • Baseado em UML
  • Casos de uso, classes, componentes e atividades

• SMartyProcess
  • Identificação, delimitação, representação, rastreame
    nto e análise de configurações de produtos de uma
    LP.
  • Conjunto de diretrizes
Abordagem SMarty
Exemplo de SMarty
cd: AGM - Core As s ets



     c oreAs s ets

                                                                                              << c om ponent v ariabl e
                                                                                                           ,          >>
                                                                                                         Gam e
                                                                                                                           <<v ariabi l ity >>
                                                                                                                           nam e = "g ame s pri te "                        <<v ariabi l ity >>
                                                                                                                           m inSel ec tion = 1                              nam e = "s pri te pair"
                                                                                                                           m ax Selec ti on = 2                             m inSel ec tion = 0
                                                                                              << m andatory >
                                                                                                          >                bi ndingTi m e = DESIGN_TIM E                    m ax Selec ti on = 1
                                                                                                    Point                  al lows Add ingVar = true                        bi ndingTi m e = DESIGN_TIM E
                                                                                              (from c oreAs s ets
                                                                                                               )           v ariants = {c oreAs s e ts .Mov ab leSprite,
              <<v ariabi l ity >>                                                                                                                                           al lows Add ingVar = fa ls e
                                                                                                                           c oreAs s ets .Stati onary Spri te}              v ariants = {c oreAs s e ts .Spri tePair}
              nam e = "m ov abl e s p ri te"                                                                -p
              m inSel ec tion = 1
              m ax Selec ti on = 2
                                                         << m andatory >
                                                                     >                        << m andatory >
                                                                                                          >                            << v ariationPoint andatory
                                                                                                                                                       ,m        >>                              << optional
                                                                                                                                                                                                           >>
              bi ndingTi m e = DESIGN_TIM E                                                                                                                                  - s ec ond
              al lows Add ingVar = true                        Siz e                             Rectangle                                        Gam eSprite                                     SpritePair
              v ariants = {c oreAs s e ts .Paddle ,      (from c oreAs s ets
                                                                          )    -s             (from c oreAs s ets
                                                                                                               )      #r                        (from c oreAs s ets
                                                                                                                                                                 )                           (from c oreAs s ets
                                                                                                                                                                                                              )
              c oreAs s ets .Puc k }                                                                                                                                          - firs t




           << m andatory
                       >>             << al ternati v e_OR v ariationPoint
                                                         ,              >>
                                                                                    <<v ariabi l ity >>                             << optional
                                                                                                                                              >>                           << al ternati v e_OR
                                                                                                                                                                                              >>
                Velocity                         M ovableSprite                     nam e = "wall "                                      Wall                               Stationary Sprite
           (from c oreAs s ets # v
                            )                  (from c oreAs s ets
                                                                )                   m inSel ec tion = 0
                                                                                                                                  (from c oreAs s ets
                                                                                                                                                   )                        (from c oreAs s ets
                                                                                                                                                                                             )
                                                                                    m ax Selec ti on = 1
                                                                                    bi ndingTi m e = DESIGN_TIM E
                                                                                    al lows Add ingVar = fa ls e
                                                                                    v ariants = {c oreAs s e ts .Wal l}

            << al ternati v e_OR
                               >>                     << al ternati v e_OR
                                                                         >>                                                                                       # app
                     Puck                                   Paddle                          << m andatory
                                                                                                        >>                           << m andatory
                                                                                                                                                 >>                           << m andatory
                                                                                                                                                                                          >>
              (from c oreAs s ets
                               )                       (from c oreAs s ets
                                                                        )                      Gam eMen u                                 Board                                          M enu
                                                                                            (from c oreAs s ets
                                                                                                             )      # board                        ::Wall # board
                                                                                                                                  (from c oreAs s ets   )                     (from c oreAs s ets
                                                                                                                                                                                               )
XML Metadata Interchange (XMI)


• Baseado em XML (Extensible Markup Language)

• Criado pela OMG (Object Management Group)

• Facilita o intercâmbio de dados entre diferentes
  ferramentas

• Formato padrão entre a maior parte das
  ferramentas de modelagem UML (Unified
  Modeling Language)

• Compatível com a abordagem SMarty
XML Metadata Interchange (XMI)
O SMartyParser para
       Modelos UML de LP
• Baseado no framework SDMetrics Open Core

• Metamodel Definition File
  • Arquivo contendo as definições dos elementos UML

• XMI Transformation File
  • Arquivo contendo instruções de como extrair os
    dados dos elementos UML

• Adaptado para abordagem SMarty
O SMartyParser para Modelos
  UML de LP: diagrama de
         classes
  cd: S MartyP arser - Diagrama de Classes



                                                                                  << interface >>
                                                                         IP r oductLineUMLModelP ar ser                     << interface >>
                                                                                                                   IP r oductLineV ar iabilityP ar ser




       MetaModelElem ent                         MetaModel
                              *                                      1

                                                                                         *


                   1                                     1

               *                                     *

          ModelE lem ent                            Model                              X MIReader                    P r oductLineModelPar ser
                              *                                      1                                     1

                                                                              1                                1


                                                                                                 *
                                                 X MITr igger




                                                         *

                                                                                             1

                                             X MITr ansfor m ation                X MITr ansfor m ations
                                                                     *
O SMartyParser para Modelos
          UML de LP: exemplo de uso
1)
ProductLineModelParser smartyParser = new ProductLineModelParser
("AGM.xmi","metamodel.xml","xmiTrans1_2.xml");
2)
List<ModelElement> vars = smartyParser.getAllVariabilities();
3)
for (ModelElement element : vars) {
       System.out.println(element.getName());
}
4)
sprite pair
movable sprite
wall
game sprite
...
O SMartyParser para Modelos
UML de LP: exemplo hipotético de
             tela
Trabalhos relacionados

• O EMF (Eclipse Modeling Framework)
  (Eclipse.org)

• O Netbeans XMI Writer (Netbeans.org)

• UML2Django (Petry, 2008)
Conclusão

• Este trabalho apresentou um parser XMI para
  modelos UML de LP com o objetivo de facilitar a
  análise de variabilidade segundo a abordagem
  SMarty.

• Vários trabalhos foram encontrados em projetos
  de código fonte aberto e na literatura, porém
  nenhum trata efetivamente de LP.

• O framework Open Core foi estendido para linha
  de produto e variabilidade.
Trabalhos futuros

• Projeto e implementação de um ambiente
  experimental gráfico de avaliação de LP com base na
  abordagem SMarty

• Análise de métricas de modelo UML a fim de
  identificar problemas na modelagem e na abordagem
  de LP

• Proposta e validação experimental de métricas para
  arquitetura de LP

• Realização de experimentos e análises de trade-off
  para priorizar atributos de qualidade de LP

Apresentação SMartyParser

  • 1.
    SMartyParser Um Parser XMIpara Modelos UML de Variabilidade Leandro A. Lanceloti Prof. Dr. Edson A. Oliveira Junior
  • 2.
    Tópicos • Introdução • Linhade Produto de Software e Variabilidade • A abordagem SMarty • XML Metadata Interchange (XMI) • O SMartyParser • Trabalhos relacionados, conclusão e trabalhos futuros
  • 3.
    Introdução • Linha deproduto de software (LP) • Ajuda a diminuir o custo do desenvolvimento • Ajuda a diminuir o time to market • Gerenciar variabilidade é um ponto importante • A abordagem SMarty ajuda neste gerenciamento • SMarty é baseada em UML e pode ser exportada via XMI • O SMartyParser é um parser XMI para modelos UML baseados em SMarty
  • 4.
    LP e Variabilidade •LP • Conjunto de sistemas que compartilham funcionalidades • Também conhecido como família de produtos • Desenvolvidos a partir de uma infraestrutura comum, o núcleo de artefatos • Variabilidade • É como os membros de uma família se distinguem • Pode estar ligada à: documentação, arquitetura, códigos fonte, compilado, executável e etc • Permite que as decisões sejam adiadas, aumentando o número de variabilidades • O Gerenciamento está ligado a todas as etapas do processo: identificação, delimitação e implementação
  • 5.
    Abordagem SMarty • SMartyProfile • Conjunto de estereótipos / meta-atributos • Baseado em UML • Casos de uso, classes, componentes e atividades • SMartyProcess • Identificação, delimitação, representação, rastreame nto e análise de configurações de produtos de uma LP. • Conjunto de diretrizes
  • 6.
  • 7.
    Exemplo de SMarty cd:AGM - Core As s ets c oreAs s ets << c om ponent v ariabl e , >> Gam e <<v ariabi l ity >> nam e = "g ame s pri te " <<v ariabi l ity >> m inSel ec tion = 1 nam e = "s pri te pair" m ax Selec ti on = 2 m inSel ec tion = 0 << m andatory > > bi ndingTi m e = DESIGN_TIM E m ax Selec ti on = 1 Point al lows Add ingVar = true bi ndingTi m e = DESIGN_TIM E (from c oreAs s ets ) v ariants = {c oreAs s e ts .Mov ab leSprite, <<v ariabi l ity >> al lows Add ingVar = fa ls e c oreAs s ets .Stati onary Spri te} v ariants = {c oreAs s e ts .Spri tePair} nam e = "m ov abl e s p ri te" -p m inSel ec tion = 1 m ax Selec ti on = 2 << m andatory > > << m andatory > > << v ariationPoint andatory ,m >> << optional >> bi ndingTi m e = DESIGN_TIM E - s ec ond al lows Add ingVar = true Siz e Rectangle Gam eSprite SpritePair v ariants = {c oreAs s e ts .Paddle , (from c oreAs s ets ) -s (from c oreAs s ets ) #r (from c oreAs s ets ) (from c oreAs s ets ) c oreAs s ets .Puc k } - firs t << m andatory >> << al ternati v e_OR v ariationPoint , >> <<v ariabi l ity >> << optional >> << al ternati v e_OR >> Velocity M ovableSprite nam e = "wall " Wall Stationary Sprite (from c oreAs s ets # v ) (from c oreAs s ets ) m inSel ec tion = 0 (from c oreAs s ets ) (from c oreAs s ets ) m ax Selec ti on = 1 bi ndingTi m e = DESIGN_TIM E al lows Add ingVar = fa ls e v ariants = {c oreAs s e ts .Wal l} << al ternati v e_OR >> << al ternati v e_OR >> # app Puck Paddle << m andatory >> << m andatory >> << m andatory >> (from c oreAs s ets ) (from c oreAs s ets ) Gam eMen u Board M enu (from c oreAs s ets ) # board ::Wall # board (from c oreAs s ets ) (from c oreAs s ets )
  • 8.
    XML Metadata Interchange(XMI) • Baseado em XML (Extensible Markup Language) • Criado pela OMG (Object Management Group) • Facilita o intercâmbio de dados entre diferentes ferramentas • Formato padrão entre a maior parte das ferramentas de modelagem UML (Unified Modeling Language) • Compatível com a abordagem SMarty
  • 9.
  • 10.
    O SMartyParser para Modelos UML de LP • Baseado no framework SDMetrics Open Core • Metamodel Definition File • Arquivo contendo as definições dos elementos UML • XMI Transformation File • Arquivo contendo instruções de como extrair os dados dos elementos UML • Adaptado para abordagem SMarty
  • 11.
    O SMartyParser paraModelos UML de LP: diagrama de classes cd: S MartyP arser - Diagrama de Classes << interface >> IP r oductLineUMLModelP ar ser << interface >> IP r oductLineV ar iabilityP ar ser MetaModelElem ent MetaModel * 1 * 1 1 * * ModelE lem ent Model X MIReader P r oductLineModelPar ser * 1 1 1 1 * X MITr igger * 1 X MITr ansfor m ation X MITr ansfor m ations *
  • 12.
    O SMartyParser paraModelos UML de LP: exemplo de uso 1) ProductLineModelParser smartyParser = new ProductLineModelParser ("AGM.xmi","metamodel.xml","xmiTrans1_2.xml"); 2) List<ModelElement> vars = smartyParser.getAllVariabilities(); 3) for (ModelElement element : vars) { System.out.println(element.getName()); } 4) sprite pair movable sprite wall game sprite ...
  • 13.
    O SMartyParser paraModelos UML de LP: exemplo hipotético de tela
  • 14.
    Trabalhos relacionados • OEMF (Eclipse Modeling Framework) (Eclipse.org) • O Netbeans XMI Writer (Netbeans.org) • UML2Django (Petry, 2008)
  • 15.
    Conclusão • Este trabalhoapresentou um parser XMI para modelos UML de LP com o objetivo de facilitar a análise de variabilidade segundo a abordagem SMarty. • Vários trabalhos foram encontrados em projetos de código fonte aberto e na literatura, porém nenhum trata efetivamente de LP. • O framework Open Core foi estendido para linha de produto e variabilidade.
  • 16.
    Trabalhos futuros • Projetoe implementação de um ambiente experimental gráfico de avaliação de LP com base na abordagem SMarty • Análise de métricas de modelo UML a fim de identificar problemas na modelagem e na abordagem de LP • Proposta e validação experimental de métricas para arquitetura de LP • Realização de experimentos e análises de trade-off para priorizar atributos de qualidade de LP