SMarty

Stereotype-based Management of Variability

Uma abordagem UML para gerenciamento de Variabilidade.

SMartyProfile


O SMartyProfile baseia-se no inter-relacionamento dos principais conceitos de LPS no que tange o gerenciamento de variabilidade (Seção \ref{sec:GV}). Tais conceitos são aplicados aos elementos de interesse do metamodelo da UML. Com base no relacionamento entre os conceitos de gerenciamento de variabilidade e os modelos UML, a Figura 3 apresenta o perfil UML SMartyProfile 5.1.

O Perfil SMartyProfile 5.0 com Suporte a Modelos de Casos de Uso, Classes, Componentes, Atividades e Sequência.
Figura 3 - O Perfil SMartyProfile 5.0 com Suporte a Modelos de Casos de Uso, Classes, Componentes, Atividades e Sequência.

A seguir são elencados os estereótipos e meta-atributos (tagged values) que compõem o SMartyProfile:

  • « variability » representa o conceito de variabilidade, sendo esta uma extensão da metaclasse UML Comment. É aplicado somente em notas UML. É composto dos seguintes meta-atributos:

    • name, o nome que referencia uma variabilidade;
    • maxSelection, representa a quantidade máxima de variantes a serem selecionadas para resolver um ponto de variação ou variabilidade;
    • minSelection, apresenta a quantidade mínima de variantes a serem selecionadas para resolver um ponto de variação ou variabilidade;
    • maxSelection, representa a quantidade máxima de variantes a serem selecionadas para resolver um ponto de variação ou variabilidade;
    • bindingTime, define o momento no qual uma variabilidade será resolvida. O tempo no qual ocorrerá está representado pela classe de enumeração BindingTime;
    • allowsAddingVar, apresenta se há a possibilidade de inclusão de novas variantes após uma variabilidade ser resolvida;
    • variants, representa a coleção de instâncias associada à variabilidade; e
    • realizes, representa a coleção de variabilidades de modelos de nível inferior, que realiza a variabilidade.
  • « variationPoint » representa o conceito de ponto de variação e é uma extensão das metaclasses UML DecisionNode, Actor, UseCase, Interface e Class. Tal estereótipo aplica-se apenas a nós de decisão, atores, casos de uso, interface, classes e pacotes. É composto dos seguintes meta-atributos:

    • numberOfVariants, indica o número de variantes associadas que podem ser selecionadas para resolver esse ponto de variação;
    • bindingTime, especifica o momento no qual uma variabilidade deve ser resolvida. Esse tempo é representado pela classe de enumeração BindingTime;
    • variants, representa a coleção de instâncias associada à variabilidade; e
    • variabilities, coleção de variabilidades com as quais essa variante está associada.
  • « variant » abrange o conceito de variante e é uma extensão abstrata das meta classes UML Actor, UseCase, Interface, Class, Action, ActivityPartition, Component, Dependency e Comment. Trata-se de um estereótipo abstrato e não pode ser aplicado diretamente a nenhum elemento UML, entretanto, suas especializações não abstratas podem ser aplicadas em atores, casos de uso, interfaces, classes, ações, partição de atividade, componente, dependência, comentário, fragmento combinado, mensagem e pacotes. Suas especializações, não abstratas são: « mandatory », « optional »,« alternative_OR » e « alternative_XOR ». O estereótipo « variant » é composto dos seguintes meta-atributos:

    • rootVP, representa o ponto de variação ao qual está associado; e
    • variabilities, coleção de variabilidades com as quais essa variante está associada;
  • « mandatory » representa uma variante obrigatória que está presente em todos os produtos de uma LPS.
  • « optional » representa uma variante que pode ser escolhida para resolver uma variabilidade ou um ponto de variação.
  • « alternative_OR » representa uma variante que faz parte de um grupo de variantes inclusivas e assim, diferentes combinações dessas podem resolver pontos de variação de diferentes maneiras, gerando desse modo, produtos distintos.
  • « alternative_XOR » simboliza uma variante que pertence a um grupo de variantes exclusivas, na qual apenas uma variante do grupo pode ser selecionada para resolver um ponto de variação.
  • « mutex » simboliza o conceito de exclusão mútua, logo é um relacionamento mutuamente exclusivo entre variantes. Isso significa que para uma variante ser selecionada, a variante relacionada não pode ser selecionada.
  • « requires » denota o conceito de restrição "complemento" e é um relacionamento entre variantes, onde a variante escolhida requer outra variante relacionada.
  • « variable » é uma extensão da meta classe UML Component. Este estereótipo indica que um componente é formado por um conjunto de classes com variabilidades explícitas. Este estereótipo possui o meta-atributo classSet, que é a coleção de instâncias das classes variáveis que forma o componente.

A grande vantagem de SMarty, mediante a outras abordagens é a extensão dos elementos que fazem parte do metamodelo da UML e, consequentemente, apoiada por ferramentas automatizadas que manipulam arquivos XML Metadata Interchange (XMI) contendo modelos UML.

Além disso, o perfil SMartyProfile se beneficia do conceito de pontos de extensão da UML em casos de uso, e de recursos próprios de cada modelo que suporta, para representar relações entre pontos de variação e suas variantes. Ainda, a cardinalidade de variantes é representada na forma de um meta-atributo. Dessa forma a representação de variabilidades fica totalmente compatível com os metamodelos da UML e permite o apoio de ferramentas UML.


[1] Oliveira Junior, E. A.; Gimenes, I. M. S. & Maldonado, J. C. Systematic Evaluation of Software Product Line Architectures Journal of Universal Computer Science, 2013, 19, 25-52.
[2] Oliveira Junior, E. A.; Gimenes, I. M. S.; Huzita, E. H. M. & Maldonado, J. C. A Variability Management Process for Software Product Lines Proc. Conf. of the Centre for Advanced Studies on Collaborative research, IBM Press, 2005, 225-241.