DEL 1 TEMATISK BAKGRUNN, PROBLEMSTILLING OG TEORETISK FORANKRING
2.2 Bakgrunnen for Smartbyen Stavanger
No processo de derivação (Sybren et al., 2005) é recomendado a aplicação de ferramentas que promovam a seleção, agregação e configuração de artefatos que compõem uma linha de produto. Gears (Gears, 2010) e pure::variants (pure::variants, 2010) são exemplos de ferramentas que se inserem nesse contexto. Essas ferramentas se apresentam como alternativas para promover a automatização da geração de produtos durante a engenharia de aplicação com base em configurações e artefatos produzidos durante a engenharia de domínio e que refletem as características associadas a cada membro da LPS. As subseções seguintes apresentam uma descrição geral das ferramentas mencionadas, bem como do GenArch (Cirilo, 2008), ferramenta também desenvolvida para auxiliar a construção de LPSs e derivação de produtos.
2.5.1 Gears
O Gears é uma ferramenta stand-alone formada por três elementos – infra- estrutura, ambiente de desenvolvimento e configurador – os quais trabalhando em conjunto permitem a derivação de produtos de uma LPS. A infra-estrutura representa os arquivos e diretórios que foram adicionados aos artefatos de software (código fonte, casos de teste, componentes) que tanto implementam a linha de produto como podem ser reusados pelos membros da LPS. O ambiente de desenvolvimento garante a elaboração, manutenção e organização dos artefatos que fazem parte da linha. O configurador é encarregado pela geração dos produtos. O processo de derivação implementada pela ferramenta é baseada em descrições de alto nível que apresentam as características configuradas para um determinado produto.
No Gears, cada LPS é formada por um conjunto de artefatos e são modeladas pelas suas características e pontos de variação. Na atividade de configuração de um membro da LPS, é necessário que o usuário da ferramenta atribua valores para os parâmetros existentes em cada característica que irá compor o produto específico. O Gears permite também que as características que implementam a linha sejam modularizadas. Além disso, como os módulos apresentam definições próprias das características que os constituem, é possível a derivação individualizada deles. A ferramenta usa outros dois conceitos importantes:
mixins e matrizes. Com os mixins é obtido o melhor gerenciamento de
características que se espalham em diversos módulos, uma vez que esse tipo de característica pode ser definida num lugar central e usada pelos módulos que dependem dela. As matrizes se apresentam como a alternativa que o Gears possui para garantir a agregação de módulos que fazem parte de uma LPS. Com as configurações, módulos, mixins e matrizes, o configurador da ferramenta é capaz de derivar automaticamente os membros da linha de produto.
2.5.2 pure::variants
O pure::variants é uma ferramenta de derivação que usa modelos para descrever os conceitos, características e abstrações que estão ligados ao domínio da LPS em construção, elementos de implementação como arquitetura e componentes e os membros que formam a linha de produto. A ferramenta foi construída como um plug-in da plataforma Eclipse e apresenta também a capacidade de prover o gerenciamento das características relacionadas à linha durante todo o ciclo de desenvolvimento da LPS.
No processo de derivação de produtos suportado pelo pure::variants são empregados dois tipos de modelos : modelo de características e modelo de família. O modelo de característica descreve as características identificadas na LPS, apresentando as propriedades, relacionamentos e restrições dessas características. O modelo de família representa a estrutura interna dos componentes e a relação de dependência deles com as características. Tal modelo é estruturado em diversos níveis. O nível mais alto é constituído por componentes, os quais representam uma ou mais características funcionais e compreende partes lógicas do software em produção, tais como, classes, objetos, funções, variáveis. A parte física, por sua vez, pode ser formada por arquivos já existentes ou que ainda serão desenvolvidos, bem como por ações que serão aplicadas com base nos mapeamentos definidos entre características e artefatos que implementam a linha de produto. Com as informações contidas nos modelos do pure::variants, assim como pela definição de um grupo de características para compor um produto específico (configuração) a partir do modelo de características, o processo de geração dos membros da LPS pode ser realizado. A ferramenta também possui um recurso de análise da corretude das configurações, bem como busca resolver problemas nessas configurações e relatar os que não
puderam ser revertidos. Além disso, o pure::variants fornece uma linguagem baseada em XML, denominada XMLTrans, para especificar as ações que devem ser executadas durante a derivação dos produtos da LPS.
2.5.3 Ferramenta GenArch
O GenArch - Generative Architectures (Cirilo, 2008) é uma ferramenta baseada em modelos que permite a derivação de membros de uma linha de produto de software e que foi desenvolvida como um plug-in da plataforma Eclipse (Shavor et al., 2003). Embora outras ferramentas de derivação de produtos como o Gears e o pure::variants apresentem um conjunto de funcionalidades úteis para auxiliar na construção e geração automática de linhas de produto de software, elas se mostram, em geral, como ferramentas difíceis de serem empregadas pela comunidade tradicional de desenvolvedores que possuem pouca familiaridade com vários dos novos conceitos relacionados à área de LPS. Com base nesse contexto, o GenArch foi construído com o objetivo de simplificar o processo de preparação de LPSs, bem como ajudar na derivação de produtos de uma linha.
A ferramenta GenArch utiliza três modelos para representar os elementos que compõe uma linha de produto, os quais são: modelo de arquitetura, modelo de característica e modelo de configuração. O modelo de arquitetura permite a representação visual das entidades que implementam a LPS como classes, aspectos, templates ou arquivos de configuração. Com a sua criação é possível relacionar os elementos de implementação da linha com as entidades do modelo de característica. O modelo de característica, como o próprio nome insinua, é empregado para representar as características obrigatórias, alternativas e opcionais da linha de produto. A ferramenta usa como base o modelo de características apresentado por (Czarnecki, 1998), o qual permite definir o relacionamento, restrições, dependência e atributos associados às características identificadas na LPS. Para implementar esse modelo no GenArch foi adotado o plug-in do Eclipse chamado Feature Modelling Plugin (FMP) (Antkiewicz e Czarnecki, 2004). Por fim, o modelo de configuração tem a função de definir o relacionamento entre as características e os elementos de implementação. Dessa forma, uma vez definida uma configuração para um produto a partir do modelo de característica, o GenArch
poderá automaticamente carregar os elementos de implementação desse produto durante a derivação.
2.5.3.1 Visão Geral de Funcionamento
A ferramenta GenArch para suportar o processo de derivação de um produto necessita da definição dos seus modelos base, ou seja, o modelo de arquitetura, característica e configuração. Os modelos são produzidos através da varredura e identificação de anotações Java especificas (próprias do GenArch) nos elementos de implementação existentes no diretório de um projeto Java usado no desenvolvimento da linha de produto.
A Figura 4 apresenta o funcionamento geral do GenArch. No início é preciso anotar os elementos de implementação (passo 1). A ferramenta suporta dois tipos de anotações: @Feature e @Variability. A primeira é para determinar a relação entre os elementos de implementação com as características da LPS. Essa anotação também permite especificar o nome da característica, o tipo (obrigatória, opcional ou alternativa) e seu respectivo pai, caso exista. A segunda é para indicar os pontos de extensão (hotspot) existentes. Em LPS, os pontos de extensão representam o que pode variar na implementação de uma linha de produto e estão ligados a outro conceito conhecido como variante (Pohl et al., 2005), (Pohl e Metzger, 2006). Esse termo, por sua vez, especifica uma variação concreta que estará presente num produto depois da derivação. Por exemplo, pode existir na linha um ponto de extensão denominado “cor do carro” e atrelado a esse conceito as variantes de nome “vermelho”, “azul” e “verde”.
Figura 4 - Funcionamento do GenArch. Adaptado de (Cirilo et al. 2007).
Em seguida, o módulo de importação do GenArch (passo 2) realiza uma varredura nos elementos de implementação e recupera as anotações do tipo
@Feature para gerar a versão inicial do modelo de arquitetura, característica e
configuração, bem como identifica as anotações do tipo @Variability para criar os
templates, os quais são implementados através da linguagem XPand do plug-in
openArchitectureWare (oAW) que fornece uma completa infra-estrutura para o desenvolvimento orientado a modelos (openArchitectureWare, 2010). Os templates no Genarch são usados tanto para especificar o código que será usado por todos os membros da LPS como código variável customizado de acordo com informações obtidas do modelo de características ou pelo uso de elementos conhecidos como fragmentos que encapsulam trechos de código ou texto, os quais são associados a características da LPS e gerenciados por meio do modelo de configuração. Em outras palavras, os templates auxiliam a determinar o conteúdo fixo e gerenciar a inclusão ou não de código variável de elementos de implementação com base nas
características encontradas na configuração de dado produto da LPS criado após o processo de derivação.
Depois da criação preliminar dos modelos, eles precisam ser melhorados através de refinamentos e incrementos (passo 3). Nesse momento, existem trabalhos que visam, por exemplo, incluir novas características no modelo de característica, adição ou reestruturação dos elementos do modelo de arquitetura, novas relações entre os elementos de implementação e as características no modelo de configuração ou incremento dos templates com código que representem novas possibilidades de variações concretas para um produto. Depois a ferramenta GenArch através do módulo de derivação (passo 4) permite a geração dos produtos da LPS. Para criar cada membro da linha, é preciso inicialmente definir uma configuração com base no modelo de característica, ou seja, selecionar um conjunto de característica que irá compor um produto específico. Com a configuração do modelo de característica e com os modelos de arquitetura e configuração, o GenArch é capaz de derivar os produtos. Por fim, para armazenar a implementação referente a cada produto é necessário apenas a construção de projetos Java na plataforma Eclipse (passo 5).