15.04.2013 Views

A Model-Driven Software Reuse Approach (in portuguese)

A Model-Driven Software Reuse Approach (in portuguese)

A Model-Driven Software Reuse Approach (in portuguese)

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

158<br />

• Remoção de funcionalidades: se refere à remoção de componentes, classes, funções,<br />

estruturas de dados ou trechos de código. É a chamada variabilidade negativa. Por<br />

exemplo, no domínio web, a <strong>in</strong>clusão da feature de busca pode resultar na remoção de<br />

um banner de propaganda do site, por falta de espaço;<br />

• Substituição de funcionalidades: se refere à substituição de componentes, classes,<br />

funções, estruturas de dados ou trechos de código. Pode-se considerar como uma<br />

comb<strong>in</strong>ação de variabilidades negativa e positiva. Por exemplo, a <strong>in</strong>clusão da variante<br />

de busca avançada requer a substituição do componente de busca simples por um outro<br />

que implementa um algoritmo avançado; e<br />

• Plataforma/ambiente: quando a <strong>in</strong>clusão da variante requer modificações na plataforma<br />

ou ambiente de execução. Por exemplo, no domínio web, a <strong>in</strong>clusão da feature de busca<br />

pode requerer a <strong>in</strong>clusão de uma biblioteca específica, uma versão diferente do banco de<br />

dados, ou mesmo uma máqu<strong>in</strong>a virtual diferente.<br />

Esta atividade cuida da identificação exata destas alterações. Essencialmente, esta é uma<br />

atividade semelhante ao processo de comparação entre duas versões de um software que<br />

acontece em sistemas de controle de versões como CVS ou SVN. Compara-se cada exemplo que<br />

<strong>in</strong>troduz uma variação com o exemplo orig<strong>in</strong>al, registrando-se todas as alterações, obtendo-se<br />

um delta que representa a <strong>in</strong>clusão da variante.<br />

Na prática, porém, a busca por tais alterações exige um conhecimento aprofundado<br />

do código e do domínio. A melhor maneira de encontrá-las é manter o registro das<br />

mudanças (ROBBES; LANZA, 2008) à medida que são feitas nos exemplos construídos durante<br />

o desenvolvimento da implementação de referência, por meio de um documento separado, ou<br />

mesmo com comentários e anotações no próprio código.<br />

Cada trecho modificado do código precisa ser mapeado em pelo menos uma variante<br />

descrita em uma DSL ou modelo de features. Se existir uma modificação, mas não existirem<br />

elementos em uma DSL que a descrevam, então a DSL provavelmente precisa ser ref<strong>in</strong>ada<br />

(sub-atividade ID.3.3).<br />

Em alguns casos, uma modificação pode aparentemente ser mapeada para diferentes<br />

elementos de uma ou mais DSLs, o que significa que esta modificação pode ser causada por<br />

diferentes variantes simultaneamente. Se for este o caso, deve-se tomar cuidado especial na<br />

implementação do suporte a estes pontos de variação quando ambos forem selecionados ao<br />

mesmo tempo.<br />

F<strong>in</strong>almente, pode acontecer de muitas modificações, em várias partes da implementação de

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!