• Nenhum resultado encontrado

Uma Notação para Modelagem de Features Estáticas e Dinâmicas

A.1 Estudos primários versus ciclo de controle autônomo MAPE-K

6.3 Uma Notação para Modelagem de Features Estáticas e Dinâmicas

ticas e Dinâmicas

Como discutido na Seção 2.3.3, a maioria das notações propostas para modelagem de features lida apenas com a variabilidade no espaço, ou seja, representam a variabilidade sem especificar o binding time. Entre as notações listadas, apenas três lidam com varia- bilidade no tempo, representando os binding times ou diferenciando as features estáticas e dinâmicas [77, 117, 116]. Ferber et al. [77] e Lee and Muthig [117] utilizam a estratégia de múltiplos modelos para representar a variabilidade no tempo, enquanto que somente a notação proposta por Lee et al. utiliza a estratégia de modelo único. Lee et al. [116] propuseram uma notação para modelo de features estendida da notação FODA [107], re- presentando composições estáticas e dinâmicas. A notação de Lee et al. distingue o tipo de composição, usando uma linha tracejada para representar a composição dinâmica, e mantendo a composição estática como uma linha contínua.

A notação proposta nesta tese é uma extensão das notações FODA [107], Lee et al. [116], Czarnecki e Eisenecker [58] e Thum et al. [177], incorporando conceitos de composição dinâmica, feature abstrata e restrições entre árvores1. Esses três conceitos são

combinados no modelo de features para representar a informação necessária para permitir a variabilidade dinâmica. Além disso, representar todas as informações necessárias para as variabilidades estática e dinâmica em um único modelo facilita a manutenção e a compreensão da DSPL.

A notação proposta segue a notação gráfica introduzida por Czarnecki e Eisenecker [58] para representar as features e a notação de fórmulas proposicionais apresentadas por Thum et al. [177] para representar a restrição entre árvores. A Figura 6.3 ilustra o metamodelo da notação proposta, apresentando os conceitos representados no modelo de features e a relação entre eles. A Tabela 6.3 fornece uma visão geral da notação proposta, com a sua representação gráfica e a descrição dos elementos que a compõem. A seguir é detalhado cada conceito aplicado.

Figura 6.3: Metamodelo da notação proposta para a modelagem de features.

6.3.1

Composição Estática e Dinâmica

O conceito de composição dinâmica tem sido usado por Lee et al. [116] e Rosenmüller et al. [162, 161] para se referir à variabilidade dinâmica em DSPLs. A notação proposta utiliza esse conceito, representando as features dinâmicas com uma borda tracejada e uma composição dinâmica como um relacionamento que contém features dinâmicas como filhas (Tabela 6.3).

Uma composição estática, comumente chamada simplesmente de composição, é um relacionamento entre um grupo de features que (i) possui a mesma feature mãe e (ii) representa um ponto de variação que requer binding time estático. Já uma composição dinâmica é um relacionamento entre um grupo de features que (i) possui a mesma feature

mãe e (ii) representa um ponto de variação que requer binding time dinâmico. Se uma composição possui ao menos uma feature filha dinâmica, então todas as features que pertencem à mesma composição devem ser dinâmicas (Figura 6.3).

Tabela 6.3: Notação proposta para a modelagem de features estáticas e dinâmicas.

Símbolo Título Descrição

Feature Concreta

Uma feature concreta é mapeada a um ou mais elementos arquiteturais. Feature

Abstrata

Uma feature abstrata não é mapeada a elementos arquiteturais, sendo somente usada para a organização conceitual de features.

Feature Di- nâmica

Uma feature dinâmica pertence a uma composição dinâmica e é associada a um ou mais componentes arquiteturais.

Feature Obrigatória

A feature filha é requerida e deve estar presente em todas as configura- ções, quando sua feature mãe estiver presente.

Feature Opcional

A feature filha pode ou não ser incluída na configuração, quando sua mãe estiver presente. Esse ponto de variação é estático e deve ser resolvido durante a fase de projeto.

Composição Alternativa

Exatamente uma feature filha do conjunto de features deve ser escolhida para a configuração, caso a feature mãe esteja presente. Esse ponto de variação é estático e deve ser resolvido durante a fase de projeto. Composição

OU

Uma ou mais features filhas do conjunto de features deve(m) ser esco- lhida(s) para a configuração, caso a feature mãe esteja presente. Esse ponto de variação é estático e deve ser resolvido durante a fase de projeto. Opcional

Dinâmica

A feature filha é dinâmica e pode ou não ser incluída na configuração, quando sua mãe for selecionada. Esse ponto de variação é dinâmico e deve ser resolvido durante a execução.

Composição Alternativa Dinâmica

É uma composição alternativa composta de features dinâmicas. Exata- mente uma feature filha do conjunto de features deve ser escolhida para a configuração, caso a feature mãe esteja selecionada. Esse ponto de variação é dinâmico e deve ser resolvido durante a execução.

Composição OU Dinâ- mica

É uma Composição OU composta de features dinâmicas. Uma ou mais features filhas do conjunto de features deve(m) ser escolhida(s) para a configuração, caso a feature mãe esteja selecionada. Esse ponto de variação é dinâmico e deve ser resolvido durante a execução.

F1 ⇒ F2 Implica A seleção da primeira feature implica na obrigatoriedade da seleção da segunda feature. Se a primeira feature estiver presente, então a segunda também deve estar presente na mesma configuração, mas a recíproca não é verdadeira.

F1 ⇒ ¬F2 Exclui A seleção da primeira feature implica na proibição da seleção da segunda feature. Se a primeira feature estiver presente, então a segunda não pode estar presente na mesma configuração.

6.3.2

Feature

Abstrata

Thum et al. [177] propuseram o conceito de feature abstrata para melhorar a semântica do modelo de features e para fornecer mais flexibilidade aos engenheiros de software. As features abstratas são features usadas para estruturar um modelo de features, mas sem impactar no nível de implementação [177]. Thum et al. [177] argumentam que o uso de features abstratas melhora a compreensão do modelo de features, bem como fornece

cálculos mais precisos durante o processo de validação das configurações do produto. Assim, a notação proposta também utilizou o conceito de feature abstrata, como mostrado na Tabela 6.3.

6.3.3

Restrição entre Árvores

Uma restrição entre árvores é uma restrição adicional sobre as features do modelo de features, que excede uma relação hierárquica através do modelo de features [177]. Uma restrição entre árvores representa uma restrição entre features que não estão diretamente (hierarquicamente) relacionadas entre si. Esse tipo de restrição é importante no contexto de variabilidade dinâmica, uma vez que podem ocorrer dependências (como requerer ou excluir) entre os elementos arquiteturais de features que não possuem parentesco. Esse tipo de restrição não é possível de ser representada usando as notações tradicionais de modelagem de features, uma vez que estas consistem em árvores hierárquicas de featu- res (mãe-filha). Comumente, os engenheiros de software projetam a SPL tomando esse cuidado e verificando tais dependências após a compilação, entretanto, para ser utilizada durante a execução, essa informação precisa ser previamente definida e registrada.

Uma restrição entre árvores é tipicamente representada como: (i) requerer, onde se uma feature A requer uma feature B, sendo que a inclusão de A em uma configuração implica na inclusão de B em tal configuração; ou (ii) excluir, onde se uma feature A exclui uma feature B, então ambas as features não podem fazer parte da mesma configuração. Alguns autores usam o conceito de restrição entre árvores, representando-o na forma de gráficos [77, 31] ou de fórmulas proposicionais [177, 30, 134].

A notação proposta junto à ISALYNE-Instance usa a notação de Thum et al. [177], representando uma restrição entre árvores como uma fórmula proposicional abaixo do diagrama de features. Apesar da notação gráfica ser interessante, sua desvantagem é a limitação de apenas duas features em uma restrição, além da poluição visual causada quando há muitas restrições. A restrição entre árvores geralmente é representada em notações gráficas por uma seta conectando uma feature em uma sub-árvore a outra feature em outra sub-árvore, incluindo apenas as restrições inclui ou exclui. Por outro lado, as fórmulas proposicionais permitem compor restrições entre árvores mais complexas, envolvendo duas ou mais features com operadores matemáticos e também com o uso de parênteses. A Tabela 6.3 mostra como representar a exclusão e a inclusão usando o operador requer (⇒). Além disso, operadores matemáticos como AND (∧), OR (∨) e NOT (¬) podem ser usados para compor restrições entre árvores mais elaboradas. Por exemplo, a restrição entre árvores:

F1 ⇒ (F2 ∧ F3 ∧ ¬F4) (6.1)

Indica que a feature F1 requer as features F2 e F3 e exclui F4, portanto, quando F1 está presente, F2 e F3 também devem estar presentes e F4 é proibida.

6.4

ISALYNE-IDE: Uma Ferramenta de Apoio para a