A Model-Driven Software Reuse Approach (in portuguese)
A Model-Driven Software Reuse Approach (in portuguese)
A Model-Driven Software Reuse Approach (in portuguese)
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