Anais da Semana de Informática CESIT/UEA. Volume 1, Número 1. Manaus/AM: UEA Edições, 2013. ISSN 2319-0418 Um Estudo Sobre Transformações Modelos-Modelos Baseado na Arquitetura Dirigida Por Modelos Stephany C. da Silva1, Romário L. Batista1, Christophe Saint-Christie de L. Xavier1, Jonatan L. da Silva1 1 Instituto de Ciências Exatas e Tecnologia– Universidade Federal do Amazona (UFAM) – Itacoatiara – AM – Brazil [email protected], [email protected], [email protected], [email protected] Abstract. This paper describes a study on model transformations through the literature search and study of related work. In addition, this study also illustrates an experiment performed using transformation into a Petri net model which simulates an assembly line of package. Resumo. Este artigo descreve um estudo sobre transformações de modelos, através da pesquisa bibliográfica e estudo de trabalhos correlatos. Além disso, o presente estudo demonstra também um experimento realizado, usando dentro da transformação de modelos uma Rede de Petri que simula uma linha de montagem de pacote. 1. Introdução A Arquitetura Dirigida por Modelo - MDA é uma abordagem onde o desenvolvimento de softwares está baseado em modelos, metamodelos e transformações de modelos. Segundo Barbosa (2011), dentro do contexto da MDA, entendem-se como modelos as representações da estrutura, função ou comportamento de sistemas. Os metamodelos são modelos que descrevem a estrutura dos modelos e definem a forma de entender os modelos e as linguagens para a construção das modelagens ou programas sem que ocorram ambiguidades. As transformações entre modelos são conjuntos de regras que descrevem como gerar um modelo de saída a partir de um ou vários modelos de entrada, usando para isso consultas aos metamodelos. A MDA foi desenvolvida pela Object Management Group - OMG baseada nas ideias presentes dentro do cenário da Model-Driven Engineering – MDE, uma abordagem onde modelos é a base para a implementação e evolução dos softwares, o que permite a criação de sistemas mais claros e concisos. As transformações de modelos possuem um papel chave dentro do processo MDA. Segundo Pelligrini (2010), permitem a implementação de sistemas baseados em modelos independentes de plataforma Plataform Independent Model - PIM, que através dessas transformações geram modelos para plataformas específicas Plataform Specific Model – PSM e assim a partir de tais modelos geram códigos-fonte livres de erros. Para que as transformações entre modelos sejam expressas de uma forma simples e, que a execução automática do código aconteça, utiliza-se a linguagem padrão criada pela OMG (2005), chamada Query View Transformation – QVT. A sigla QVT vêm de consulta, visão e transformação. Durante a consulta, o modelo é inserido na entrada e elementos específicos deles são extraídos. Na visão ocorre uma projeção de um metamodelo que pode gerar modelos na linguagem de modelagem UML e nas transformações, o modelo inserido na entrada é atualizado, gerando em seguida um novo modelo. O presente trabalho faz um estudo dos conceitos existentes dentro das transformações de modelos, da própria Arquitetura Dirigida Por Modelos e da Rede de Petri, como um meio de compreender o funcionamento da Rede de Petri dentro das transformações Modelo-modelo. Além disso, apresenta um experimento realizado utilizando tais conceitos. Além dessa Seção, as demais estão organizadas da seguinte forma: a Seção 2 apresenta a Model Driven Architecture e o seus conceitos; A Seção 3 define a Rede de Petri; A Seção 4 apresenta os métodos utilizados para a realização do trabalho; A Seção 5 descreve o experimento realizado a qual foi utilizado um modelo em Rede de Petri para a realização da transformação Modelo-Modelo; A Seção 6 discute os resultados obtidos com o experimento; A conclusão é apresentada na Seção 7. 2. Model Driven Architecture (MDA) A Model Driven Architecture (MDA) é uma abordagem de desenvolvimento de software desenvolvido pela Object Management Group - OMG baseado na Model Driven Engineering - MDE. Segundo Alves (2011), a MDA segue os princípios da MDE, que visa o aumento de produtividade ao lado da diminuição do tempo e custo no desenvolvimento de um software através do uso efetivo de modelos. A ideia é que a partir do uso das técnicas da MDE o foco do desenvolvimento deixe de ser a codificação do software e se torne os modelos do sistema e as regras de transformações entre tais modelos. A MDA segue a mesma ideia e segundo Alves (2011), é um framework sustentado pela OMG. O mesmo se baseia num conjunto de padrões já bem estabelecidos e difundidos por esta organização, que tem por principal objetivo ao propor tal abordagem, padronizar vários modelos para que as empresas os usem a fim de poderem representar suas aplicações. Dentro dos principais padrões utilizados e que sustentam a MDA estão: 1.Unified Modeling Language 2.0 (UML2), linguagem usada para representar de forma os sistemas computacionais. É composta por treze diagramas diferentes que permitem a modelagem desde a parte estática (diagramas de classes, de componentes, etc.) à dinâmica (diagramas de sequência, de atividades, etc.) de um sistema computacional. 2.Query/View/Transformation (QVT), é uma linguagem para descrever as regras de transformação entre modelos. Os modelos que são descritos em MDA possuem em sua maioria quatro níveis de abstração, segundo Alves (2011) são eles: 1. CIM (Computational Independent Model) são os modelos de domínio. Tais modelos representam os requisitos e o domínio onde o sistema está inserido. São os modelos de maior nível de abstração. 2. PIM (Platform Independent Model) são os modelos que já possuem detalhes (estruturais, comportamentais, etc.) de como os sistemas serão computacionalmente. Porém, tais modelos serão livres de detalhes de uma tecnologia (ou plataforma) específica. 3. PSM (Platform Specific Model), modelos que além das informações já presentes ao nível PIM também incluem descrições detalhadas e elementos específicos da plataforma. 4. Código, código-fonte executável do sistema. 2.1. Modelos, Metamodelos e Transformações de Modelos. Segundo Soares (2009), dentro do contexto MDA, entende-se como modelos as representações da estrutura, função ou do comportamento de quaisquer sistemas. Um exemplo simples que pode ser citado como um modelo presente no mundo real são os mapas geográficos, os quais permitem uma visualização gráfica de um dado local. Por permitirem uma visualização gráfica, modelos fornecem uma visão antecipada do funcionamento de um determinado sistema antes de sua implementação. Entretanto, para se compreender tais modelos, faz-se necessário a criação de um ou vários outros modelos capazes de interpretá-los. Tais modelos interpretativos são chamados de metamodelos. Sendo assim, os mesmos são modelos que descrevem a estrutura funcional e comportamental de outros modelos, segundo Soares (2009). Além disso, definem a forma de entender os modelos e as linguagens para a construção das modelagens ou programas sem que ocorram ambiguidades. Neste contexto, os mapas seriam como os modelos e as legendas que permitem interpretar os mesmos de maneira clara e concisa, ao mesmo tempo em que repassam uma dada informação contida nos modelos seriam os metamodelos. Segundo Pereira (2007), a transformação de modelos é um dos principais focos da MDA, pois apoia o desenvolvimento rápido de sistemas de software através da realização de transformações de modelos e também através da obtenção de códigos em linguagem de programação de uma forma automática. Tais transformações são conjuntos de regras que descrevem como gerar um modelo de saída a partir de um ou vários modelos de entrada, usando para isso consultas aos metamodelos. As transformações podem ser chamadas de Modelo-Modelo ou Modelo-texto. A Figura 1, ilustra os conceitos básicos da transformação Modelo-Modelo. Segundo Pereira (2007), para que ocorra a transformação entre modelos é preciso definir as Regras de Mapeamento responsáveis pela transformação. Figura 1. Definição de regras de transformações (Pereira 2007). Estas regras são baseadas no conhecimento das estruturas dos elementos Metamodelo Origem e do Metamodelo Destino. Toda transformação acontece de acordo com as regras de mapeamento que foram definidas. Assim, um Modelo Origem é transformado em um Modelo Destino. Entretanto, uma transformação de modelo do tipo Modelo-texto acontece quando o código fonte é gerado a partir de um modelo de entrada. Todavia, apesar das transformações de modelos e a própria MDA ser uma tendência dentro da área de desenvolvimento de software, segundo Barbosa (2011), ainda assim não existe a formalização de alguns de seus artefatos e processos, o que acarreta vários questionamentos sobre a corretude dos códigos gerados durante essas transformações. O fato de atualmente, não existir a garantia de que as transformações MDA usem modelos formais o suficiente para se permitir o uso de técnicas de verificação de equivalência, ocasiona críticas em relação à eficácia de tal abordagem. Nesse contexto, o uso de um método formal durante o processo de modelagem poderia ser uma solução para os problemas que ocorrem dentro das transformações de modelos. 3. Rede de Petri Segundo Lachtermacher (2008), a linguagem formal conhecida como Rede de Petri é uma ferramenta gráfica em forma de grafo que permite a modelagem de uma série de sistemas e que permite também a verificação formal dos modelos criados. Um grafo é um diagrama que consiste de pontos, chamados nós ou vértices, que estão unidos por linhas, chamadas arestas. Este diagrama tem outra especificidade: cada aresta une exatamente dois vértices. Neste caso, como definido por Paquete (2013) dizemos que os dois vértices são vizinhos. A Figura 2 apresenta um grafo simples. Figura 2. Modelo de um grafo. Os Grafos são muito úteis na representação de problemas da vida real e são usados em várias funções profissionais. Por exemplo, podemos representar um mapa de estradas através dos Grafos e desenvolver um algoritmo para determinar o caminho mais curto, ou mais econômico. Por permitir a visualização gráfica de algum problema, os grafos podem ser vistos como modelos. A partir disso, uma Rede de Petri é um grafo orientado que tem dois tipos de nós: uma ativa denominada transição, que corresponde a uma ação realizada dentro do sistema, e o outro passivo denominado lugar, relacionado a uma variável de estado do sistema. As ações estão associadas à pré-condições (variáveis de estado), ou seja, há uma relação entre lugares e transições que permitem assim a realização de uma ação. Com isso, após uma ação ser realizada, determinados lugares terão suas informações alteradas. De forma gráfica, os lugares são representados por círculos e as transições por traços ou barras. A Rede de Petri é orientada simultaneamente por estados e ações. Ao estado da rede chama-se de marcação, cada um dos lugares é definido pela quantidade de marcas presentes. A função de cada transição dentro de uma Rede de Petri consiste em destruir e/ou criar marcas. Como as transições, segundo Lachtermacher (2008), estão obrigatoriamente entre lugares é através da sua ação, denominado disparo que um lugar altera a sua marcação. Os arcos por sua vez indicam para cada transição, os lugares sobre os quais estas atuam. A Teoria inicial das Redes de Petri foi apresentada em 1962, na tese de doutorado de Carl Adam Petri, chamada Kommunikation mit Automaten, que fora defendida na faculdade de Matemática e Física da Universidade de Darmstadt, Alemanha. Segundo Pádua (2002), as redes de Petri são uma ferramenta para estudo de sistemas, pois permitem representação matemática e análise, fornecendo assim informações importantes sobre a estrutura e o comportamento dinâmico dos sistemas modelados. A partir desse contexto, a utilização de uma Rede de Petri dentro da MDA poderia ser um meio de formalizar o processo das transformações de modelos. 4. Material e Métodos O presente trabalho foi elaborado de acordo com as etapas previstas. Foram realizadas as seguintes atividades: 1. Pesquisa Bibliográfica. Foram realizadas pesquisas bibliográficas, estudos de artigos e de trabalhos relacionados ao tema proposto pelo o trabalho. Além disso, foram realizados experimentos na plataforma de desenvolvimento Java-Eclipe e em alguns de seus plug-ins como: o Eclipse Modeling Framework, Graphical Modeling Framework e o QVT Transformation. 2. Análise das Transformações de modelos e da linguagem Query/View/Transformation. Foram realizados estudos sobre o funcionamento das transformações de modelos para obtenção de conhecimento sobre os conceitos abordados dentro da área. Isso por meio, de estudos dirigidos realizados na plataforma de desenvolvimento Eclipse e de estudos de trabalhos correlacionados ao assunto. Para se compreender o funcionamento do plug-in QVT Transformation (plu-gin usado para realizar a transformação Modelo-modelo), foram realizados estudos embasados em trabalhos correlacionados a Linguagem QVT, como o trabalho de Lachtermacher (2008) que permitiu a compreensão lógica do funcionamento de tal linguagem e da maneira que as transformações são feitas. O trabalho estudado realiza a transformação de um modelo feito em UML para um modelo em Rede de Petri usando a linguagem QVT. 3. Análise do ambiente Eclipse e dos plug-ins Eclipse Modeling Framework, Graphical Modeling Framework e QVT Transformation. Com intuito de se utilizar um modelo em Rede de Petri dentro das transformações de modelos, fez-se necessário à criação de um editor gráfico capaz de permitir a criação de um modelo usando uma Rede de Petri. Criou-se então, primeiramente, o metamodelo usando o plug-in Eclipse Modeling Framework, através do Diagrama Ecore que especifica as classes e os tipos de transição entre eles como mostrado na Figura 3. Figura 3. Metamodelo ecore. Com a implementação do metamodelo, utilizou-se o plug-in Graphical Modeling Framework que transformou o mesmo em algo mais abstrato, ou seja, em interface gráfica. Esse estudo foi realizado, através da análise de tutoriais e de trabalhos relacionados ao assunto como o trabalho de Lachtermacher (2008). 4. Estudo sobre Rede de Petri. Nesta etapa, foram realizados estudos de trabalhos correlacionados a Rede de Petri com objetivo de entender o seu funcionamento e de suas propriedades gerais. 5. Realização de experimentos usando Rede de Petri dentro das transformações Modelo-modelo. Foram realizados transformações de modelos usando um modelo em Rede de Petri e scripts criados usando a linguagem QVT no plug-in QVT transformation. 3. Experimento Fazendo uso da interface gráfica para Rede de Petri desenvolvida foi possível à realização de um experimento usando o modelo em Rede de Petri que simula o funcionamento de uma linha de montagem (figura 4). Figura 4. Representação gráfica em Rede de Petri de uma linha de montagem. No modelo, foi descrito o empacotamento e o envio ao setor de expedição (depósito) de conjuntos de porcas, parafusos. O sistema descrito na Figura 4, forma conjuntos de duas porcas e de dois parafusos. Um novo conjunto só poderá ser empacotado quando o atual conjunto for enviado à próxima fase do processo e quando a única ferramenta da linha de montagem voltar ao seu lugar de origem. Quando os pacotes estão formados, os mesmos são enviados ao setor de depósito o que libera a máquina para formar novos pacotes. Após a manufatura dos parafusos eles são armazenados no lugar Parafusos, o mesmo acontece com as porcas que são armazenadas no lugar Porcas e o lugar Ferramenta recebe uma ferramenta que será responsável em unir as porcas e parafusos. A transição T1 (monta pacote inicial) representa a tarefa de unir em um só os pacotes contendo porcas, parafusos e ferramenta. Essa transição só estará habilitada a serem usados, quando receber duas porcas, dois parafusos e uma ferramenta. Após receber esses conjuntos, a transição T1 é responsável em enviá-las para o lugar Máquina (monta pacote final) que será responsável em unir porcas e parafusos em um pacote, enviá-los para o Lugar Estoque e depois devolver a ferramenta para o lugar Ferramentas, fazendo assim, com o processo seja feito novamente. No experimento em questão, o modelo foi transformado em três novos modelos. Para isso foi utilizada a transformação Modelo-modelo através da linguagem QVT. Dentro do processo de tal transformação, o Modelo de origem é transformado é um novo modelo usando um script contendo as regras da transformação. O novo modelo recebe as informações importantes do Modelo Origem, tais como, o nome de cada lugar e além de novas informações que são definidas através do script QVT. A partir disso, foi realizado implementação de um script usando o plu-gin Qvt Transformation. Tais scripts foram capazes de transformar o modelo origem apresentada na Figura 4 em outros três modelos que são apresentados na Figura 5, Figura 6 e Figura 7. . Figura 5. Modelo gerado durante a primeira transformação. Figura 6. Modelo gerado durante a segunda transformação. Figura 7. Modelo gerado durante a terceira transformação. Para cada execução dos scripts um novo modelo era gerado. Os três modelos obtidos através da transformação Modelo-modelo representam em sequência o funcionamento da linha de montagem descrita no modelo origem contido na Figura 4. Como pode ser observado nas Figuras 5, 6 e 7 ocorreram mudanças em relação ao número de marcas que cada lugar possuía no modelo origem. Isso aconteceu por conta das transformações realizadas, ou seja, a transformação Modelo-modelo permitiu alterar os estados de um modelo de acordo com o que foi definido no script QVT. 5. Discussões No experimento realizado, o modelo origem criado no editor gráfico que desenvolvemos para Rede de Petri foi transformado em outros modelos de forma automática, através de um script criado na linguagem QVT e usando o Qvt Transformation (plug-in pertencente à plataforma de desenvolvimento em Java, o Eclipse). Como pode ser observado nas Figuras 5, 6 e 7 ocorreram mudanças em relação ao número de marcas que cada lugar possuía no modelo origem. Isso aconteceu por conta das transformações realizadas, ou seja, a transformação Modelo-modelo permitiu alterar os estados de um modelo de acordo com o que foi definido no script QVT. Entretanto, se algo estiver errado no modelo origem consequentemente os demais modelos gerados a partir do mesmo também estarão errados, isso ocasionará problemas no código fonte que for gerado posteriormente. Sendo assim, o experimento realizado permitiu compreender o funcionamento das transformações Modelo-modelo, além de que, permitiu a compreensão dos conceitos presentes dentro da Rede de Petri e a forma que a mesma pode ser usada dentro das transformações de modelos, como um meio de confirmar a corretude dos modelos origens criados antes dos mesmos serem transformados. Como trabalho futuro, pretende-se agora, realizar a transformação chamada Modelo-texto, onde serão usados como modelo origem os três Modelos descritos nas Figuras 6, 7 e 8 e que foram gerados durante as transformações anteriores. A partir disso, pretende-se transformar em código fonte os modelos usando para isso a linguagem ATL e o plug-in ATL transformation. 6. Conclusão Este artigo apresentou um estudo sobre transformação Modelo-Modelo baseado na Arquitetura Dirigida Por Modelos, exemplificando com a transformação de um modelo em Rede de Petri. A importância do estudo está no fato de que no contexto do desenvolvimento de um software, o uso das transformações de modelos e a própria Arquitetura Dirigida Por Modelos está se tornando uma tendência por automatizar e acelerar o processo de desenvolvimento ao fornecer o código fonte através de modelagem. Sendo assim, o estudo realizado permitiu compreender o funcionamento das transformações Modelo-modelo e dos conceitos presentes dentro da Rede de Petri, e a forma que a mesma pode ser usada como um meio de assegurar a corretude dos processos existentes dentro das transformações de modelos e da própria MDA. 7. Agradecimentos Os autores agradecem primeiramente a Deus que nos deu força e coragem para não desistir durante as dificuldades que surgiram, a FAPEAM (Fundação de Amparo a Pesquisa do Amazonas) pelo apoio financeiro, a UFAM (Universidade Federal do Amazonas) pela a estrutura cedida para que o trabalho pudesse ser realizado e a todos aqueles que contribuíram de alguma forma para o sucesso do presente trabalho. Referências Alves, E. L. G. (2011). “Usando MDA e MDT para Modelagem e Geração Automática de Arquiteturas de Teste para Sistemas de Tempo Real”, Universidade Federal de Campina Grande Centro de Engenharia Elétrica e Informática, Coordenação de PósGraduação em Ciência da Computação. Barbosa, P. E. S. (2011). “MDA-Veritas: Uma Arquitetura MDA Estendida para Transformações de Sistemas Concorrentes Preservadoras de Semântica”, Universidade Federal de Campina Grande, Coordenação do Curso de Pós-Graduação em Ciência da Computação. Lachtermacher, L., (2008), “Transformando o Diagrama de Atividade em uma Rede de Petri, Pontifica Universidade Católica do Rio de Janeiro”. Paquete (2013), “Grafos”, Universidade de Coimbra, (http://academy.deic.uc.pt/page/programacao/progAvancado/Grafos). Pellegrini, Fabrício G. (2013), “Transformações de Modelos para um processo MDA”, Universidade Federal da Bahia, Faculdade Ruy Barbosa. Departamento de Ciência da Computação. 2011. Pereira, M. A. (2007), “Transformação de Modelos Orientados a Objetos em Modelos de Banco de Dados Objeto-Relacional”, Dissertação de Mestrado, Universidade Federal de São Carlos, Departamento de Computação, Programa de Pós-Graduação em Ciência da Computação.