Desenvolvimento Dirigido por Modelos (SELIC, 2003) ´e uma espe- cializa¸c˜ao contida na Engenharia Dirigida por Modelos (EDM) ou, em inglˆes, Model-Driven Engineering(MDE) descrita em (SCHMIDT, 2006) como uma abordagem promissora para lidar com a complexidade de di- ferentes plataformas e expressar conceitos de dom´ınio de forma eficaz. A EDM combina tecnologias como Domain-specific modeling languages (DSML) e Transformation engines and generators.
De acordo com (B´eZIVIN, 2005), para se compreender o termo “modelo”, deve-se levar em considera¸c˜ao o contexto em que o mesmo ´e utilizado. Para sistemas relacionados `a computa¸c˜ao, h´a uma defini¸c˜ao
consensual de modelo dada por Rothenberg (ROTHENBERG, 1989), que diz:
“modelagem, no sentido mais amplo, ´e o uso econˆomico de algo no lugar de outra coisa para algum prop´osito cognitivo. Ela permite usar algo que ´e mais simples, mais seguro ou mais barato do que a realidade para algum prop´osito. Um modelo representa a realidade para um determi- nado prop´osito; o modelo ´e uma abstra¸c˜ao da re- alidade, no sentido de que ele n˜ao pode represen- tar todos os aspectos da realidade. Desta forma, ´
e poss´ıvel lidar com o mundo de uma forma sim- plificada, evitando a complexidade, o perigo e a irreversibilidade da realidade”.
O uso de modelos se torna cada vez mais significante tanto para o desenvolvimento e engenharia de softwares quanto em qualquer outra disciplina da engenharia. Para usar estes potenciais benef´ıcios que a EDM prega, o DDM surgiu com o objetivo de amadurecer estas t´ecnicas ao ponto que elas possam ser aplic´aveis.
Segundo (SELIC, 2003), uma das principais vantagens do DDM ´
e a possibilidade de expressar modelos usando conceitos que s˜ao muito menos ligados `a tecnologia a ser implementada e mais `a proximidade junto ao dom´ınio do problema, considerado um problema para as lin- guagens de programa¸c˜ao mais populares. Estas vantagens fazem com que os modelos sejam mais f´aceis de especificar, de serem compreen- didos e atualizados. Com isso, a modelagem dos sistemas pode ser atribu´ıda a especialistas de dom´ınio ao inv´es de especialistas em tecno- logia, melhorando a qualidade do software e aprimorando a utiliza¸c˜ao dos recursos. Os modelos gerados acabam sendo menos sens´ıveis a plataformas que ser˜ao utilizadas e mais independente em rela¸c˜ao as mudan¸cas evolutivas da tecnologia.
Com o avan¸co das t´ecnicas e ferramentas foi poss´ıvel alcan¸car um grau de maturidade que tornou vi´avel o uso de DDM mesmo em aplica¸c˜oes industriais de larga escala. A utiliza¸c˜ao do DDM em pro- jetos industriais em diversas ´areas se torna cada vez mais comum, e mais casos de sucesso s˜ao divulgados a cada dia (HUTCHINSON; ROUN- CEFIELD; WHITTLE, 2011). Uma pesquisa realizada pela Middleware Company (COMPANY, 2003) indicou que com o uso de DDM no projeto houve um acr´escimo de 37% na produtividade.
De acordo com (HERRINGTON, 2003), a gera¸c˜ao de c´odigo n˜ao se limita a ser apenas uma maneira r´apida de produzir c´odigo fonte. Outros benef´ıcios podem ser alcan¸cados durante o processo conforme
segue:
• Qualidade: ferramentas geradoras de c´odigo utilizam templates para produzir um c´odigo (para uma plataforma alvo) a partir de elementos especificados em modelos de alto n´ıvel. Quanto maior e mais completo for o conjunto de templates, melhor ´e a qualidade do c´odigo fonte obtido. Se os templates descreverem uma gera¸c˜ao de c´odigo otimizada com base em crit´erios de otimiza¸c˜ao e qua- lidade de design, o aumento de qualidade ´e refletido no c´odigo fonte final;
• Consistˆencia: a padroniza¸c˜ao de nomenclatura para classes, m´etodos e atributos ´e totalmente consistente no c´odigo gerado. Tal padroniza¸c˜ao facilita a interface entre classes e suas utiliza¸c˜oes porque os padr˜oes utilizados foram definidos dentro dos templa- tes;
• Produtividade: a gera¸c˜ao de c´odigo aumenta os ganhos de produ- tividade, devido `a sua capacidade de adaptar-se rapidamente `as mudan¸cas durante o projeto. Em outras palavras, as modifica¸c˜oes na especifica¸c˜ao podem ser propagadas automaticamente para a implementa¸c˜ao do sistema. Al´em disso, como a gera¸c˜ao de c´odigo pode comprimir o tempo em determinados projetos, resta mais tempo para ser gasto com uma modelagem adequada e testes do prot´otipo, evitando retrabalhos no futuro.
• Abstra¸c˜ao: vantagens em termos de n´ıvel de abstra¸c˜ao de projeto podem ser obtidas usando ferramentas de gera¸c˜ao de c´odigo que funcionam com parˆametros de entrada (por exemplo, modelos es- truturais e de comportamento do sistema, os modelos da base de dados ou defini¸c˜oes sobre as interfaces de usu´ario,etc.) em um formato que seja independente de linguagem. Em outras pala- vras, ´e poss´ıvel gerar o c´odigo-fonte para diferentes linguagens de programa¸c˜ao (tais como Java, Smalltalk ou C++) a partir de um mesmo modelo abstrato.
Por´em, a gera¸c˜ao de c´odigo ´e um recurso somente poderoso quando usado apropriadamente e pode ser muito trabalhoso quando usado em circunstˆancias erradas. Para obter uma solu¸c˜ao eficaz ´e ne- cess´ario usar uma s´erie de ferramentas heterogˆeneas que devem estar bem adaptadas para suas tarefas espec´ıficas.
A estabilidade do projeto e o conjunto de recursos devem ser considerados. Quando o conjunto de recursos n˜ao ´e particularmente
est´avel, ou o projeto para a implementa¸c˜ao ´e periodicamente alterado junto com as tecnologias, ´e preciso avaliar se a gera¸c˜ao de c´odigos ´e a melhor op¸c˜ao, j´a que seu uso torna-se realmente ´util apenas ap´os um grande esfor¸co de planejamento e implementa¸c˜ao dos componentes de transforma¸c˜ao de c´odigos.
O princ´ıpio do DDM ´e especificar a funcionalidade do sistema utilizando um modelo independente de plataforma (PIM) usando um DSL apropriado. O PIM fornece uma especifica¸c˜ao do sistema que seja adequado para a sua implementa¸c˜ao em diferentes plataformas. Al´em disso, este PIM ´e traduzido para um modelo especifico de plata- forma (PSM), que, por sua vez, oferece um ponto de vista espec´ıfico da plataforma do sistema, por exemplo, ele combina o PIM com as espe- cifica¸c˜oes que o sistema ir´a utilizar para uma determinada plataforma. A fim de possibilitar esta transforma¸c˜ao (ou mapeamento), um modelo de plataforma (PM) deve ser fornecido. O PSM fornece um conjunto de conceitos t´ecnicos, representando as diferentes partes e os diferentes servi¸cos que comp˜oem a plataforma. Ele tamb´em proporciona conceitos que representam os diferentes tipos de elementos para serem utilizados na especifica¸c˜ao e qual plataforma deve ser utilizado pela aplica¸c˜ao. Ao final deste processo ´e realizada a gera¸c˜ao de c´odigos para auxiliar na constru¸c˜ao de novas aplica¸c˜oes.
Gera¸c˜ao de c´odigo significa usar um ou mais programas de com- putador para auxiliar na produ¸c˜ao de c´odigo-fonte, seja o c´odigo-fonte de aplicativos, c´odigos para a configura¸c˜ao da plataforma, entre outros. Resumidamente, pode-se dizer que um programa gerador de c´odigo ´e um conjunto de transformadores que recebem como entrada especi- fica¸c˜oes de alto n´ıvel, normalmente em formato de modelos, a fim de criar um ou mais arquivos de c´odigo-fonte como sa´ıda. Esses transfor- madores formam um conjunto de templates que adequam os arquivos de sa´ıda de acordo com as informa¸c˜oes proporcionadas a partir dos modelos de entrada.
Os transformadores especificados em ferramentas como (BOO- COCK, 2013) e (OLDEVIK, 2005) s˜ao est´aticos. Um transformador ´e est´atico quando n˜ao ´e poss´ıvel modificar a sua transforma¸c˜ao. Existem propostas em que os transformadores s˜ao dinˆamicos (WILLINK, 2003). Em transformadores dinˆamicos ´e poss´ıvel modificar as transforma¸c˜oes que ele realiza, assim como criar novos transformadores a partir de transformadores pr´e-fabricados. Como as tecnologias dispon´ıveis para desenvolver um sistema mudam com frequˆencia (GRAAF; LORMANS; TOETENEL, 2003; BASSO; BECKER; OLIVEIRA, 2006), a maioria dos transformadores de modelos precisam ser reescritos para efetuar novas
transforma¸c˜oes. Isto ocorre porque eles s˜ao desenvolvidos para aplicar transforma¸c˜oes voltadas `a uma tecnologia espec´ıfica. Logo, eles n˜ao s˜ao reutiliz´aveis se existirem mudan¸cas nas tecnologias utilizadas pelos sistemas.
Apenas ap´os o desenvolvimento de toda a estrutura de trans- formadores, ´e poss´ıvel gerar um volume significativo de c´odigos que poder˜ao ser empregues ao trabalho. Esta disserta¸c˜ao aplica na pr´atica alguns conceitos de transforma¸c˜oes dinˆamicas baseadas em Linhas de Produto de Software, ou Software Product Lines (SPL)(BASSO et al., 2013).
3 TRABALHOS RELACIONADOS
Neste cap´ıtulo ser˜ao apresentados os trabalhos relacionados com este tema de mestrado. Por se tratar de um estudo que envolve a in- tegra¸c˜ao de diferentes tecnologias coletamos diferentes referˆencias em diversos campos de pesquisa e, por isso, os trabalhos foram classifica- dos por assuntos. Apesar dos trabalhos estarem alocados `a se¸c˜ao que indica o tema principal do estudo, muitas das referencias deste cap´ıtulo tamb´em tratam da integra¸c˜ao de mais de uma tecnologia conforme dis- cutido a seguir.