Nos últimos tempos tenho andado envolvido num projecto que pretende integrar no processo de desenvolvimento a utilização de abordagens baseadas em modelos. Vou tentar dentro do possivel ir apresentando neste espaço alguns aspectos genéricos sobre essas abordagens bem como alguns aspectos especificos do projecto sempre que tal não traga problemas de confidencialidade.

uma nota preliminar: neste momento o âmbito deste trabalho é apenas Model Driven Development e a utilização da suite IBM Rational Software Architect, por isso o DSL no título do post não se refere às DSL Tools para Visual Studio mas sim genericamente a Domain Specifc Languages.

Uma introdução

Model Driven Software Development (MDSD) [48] ou Model Driven Engineering (MDE) são termos recentes que pretendem essencialmente identificar as práticas de desenvolvimento de software baseadas na criação e especificação de modelos com posterior transformação desses modelos noutros artefactos de software (ex., novos modelos a um nível conceptual diferente ou código). Estas abordagens centram-se na utilização de especificações (chamadas modelos) de alto nível utilizando linguagens de domínio para a descrição e implementação do sistema [10]. O termo Model Driven DevelopmentTM (MDD) refere-se exactamente ao mesmo conceito mas é uma marca registada do OMG (Object Management Group) no âmbito da sua iniciativa MDA ® (Model Driven Architecture).

Esta abordagem não deve ser confundida com a utilização existente de UML para documentação (ou mesmo round-trip engineering) uma vez que há normalmente nessas práticas uma distanciação entre o modelo e o código (principalmente após a primeira iteração de codificação manual). O que se pretende com MDD é a utilização de modelos como entidades de primeira classe que vão “conduzir” a geração do sistema (pode ser código executável, ficheiros de configuração, documentação, etc.). Numa abordagem baseada em modelos, os modelos possuem detalhe suficiente para a geração completa do sistema. Para tal é necessário [48]:

·         Linguagens de domínio para a formulação dos modelos.

·         Linguagens que possam expressar as transformações necessárias (modelo-para-modelo ou modelo-para-código).

·         Compiladores, geradores ou transformadores que executem as transformações definidas com base nos modelos fornecidos.

Adicionalmente, estas abordagens pretendem capturar modelos ao nível conceptual de domínio e permitir a utilização desses modelos para geração de artefactos, enquanto que o nível actual de ferramentas de modelação normalmente só permitem capturar (para geração de código) ao nível lógico de implementação (ex., diagramas de classes design) [48].

Modelos e meta-modelos

Uma linguagem de domínio (Domain Specific Language ou DSL) é uma linguagem de programação/modelação, textual ou gráfica, criada para uma tarefa em concreto num dado domínio (ex., CSound, uma linguagem para criação de ficheiros áudio) [28] [60]. Um modelo é uma especificação escrita numa DSL que captura determinados detalhes de um programa/problema. Como Booch et al. dizem, “o potencial completo [da abordagem baseada em modelos] só é alcançado quando os conceitos de modelação mapeiam directamente nos conceitos de domínio em vez de em conceitos tecnológicos” [19].

Cada modelo representa um conjunto limitado de informação, por isso um programa é normalmente obtido através de vários modelos. Um modelo pode ser obtido automaticamente através de outro modelo e o processo de desenvolvimento de um programa consiste na transformação de modelos de alto nível para executáveis (considerados também modelos). Um aspecto a salientar é que “modelo” não significa modelos gráficos ou UML, mas sim uma descrição “computer-readable” de um sistema a partir de uma perspectiva particular a um nível conceptual que o torne fácil de perceber [25].

Transformações

Os passos existentes numa abordagem MDSD consistem na criação de modelos com base em determinados meta-modelos que posteriormente serão transformados em código executável e outros artefactos [25] [26].

modelo fonte + transformação = modelo destino

Esta transformação pode ocorrer em um ou mais passos intermédios de transformações modelo-para-modelo (Figura 1, retirada de [26]), sendo que potencialmente o mesmo modelo pode ser usado para gerar código executável em várias plataformas. O processo de geração tipicamente aplica padrões e transformações dos modelos em código (ou outros artefactos) havendo alguma liberdade na escolha desses padrões (ex., diferentes estilos arquitecturais). Esta abordagem normalmente baseia-se na existência de frameworks standard ou proprietárias o que facilita o processo de transformação e manutenção, bem como força e reforça o uso de (boas) práticas [2].

 

 (ver attachment)

Figura 1 – passos MDSD

MDSD não implica que todo o sistema final tenha que ser gerado: há espaço para situações em que código manual seja incorporado no sistema. Obviamente o tópico de como permitir essa integração e mais importante garantir o devido isolamento entre artefactos gerados e artefactos ou extensões manuais terá que ser alvo de uma discussão futura mais aprofundada.

Referências

[2]                Alan Brown (2004) “An introduction to Model Driven Architecture - Part I: MDA and today's systems”. http://www-128.ibm.com/developerworks/rational/library/3100.html

[10]                D. Batory (2006) Multilevel models in model-driven engineering, product lines, and metaprogramming. IBM Systems Journal, volume 45, number 3. http://www.research.ibm.com/journal/sj/453/batory.html

[19]                Grady Booch, Alan Brown, Sridhar Iyengar, Jim Rumbaugh, Bran Selic (2004) MDA Journal, May 2004.

[25]                Larry Yusuf, Mandy Chessell, Tracy Gardner (2006) “Implement model-driven development to increase the business value of your IT system” http://www-128.ibm.com/developerworks/library/ar-mdd1/

[26]                Markus Völter (URL) “Model Driven Software Development Tutorial”. http://www.voelter.de/services/mdsd-tutorial.html

[28]                Martin Fowler (2004) Domain Specific Language. http://www.martinfowler.com/bliki/DomainSpecificLanguage.html

[48]                Tom Stahl, Markus Völter (2006) Model-Driven Software Development. Wiley.

[60]                Martin Fowler (2005) “Language Workbenches: The Killer-App for Domain Specific Languages?” http://martinfowler.com/articles/languageWorkbench.html