A Model-Driven Software Reuse Approach (in portuguese)
A Model-Driven Software Reuse Approach (in portuguese)
A Model-Driven Software Reuse Approach (in portuguese)
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
maior em determ<strong>in</strong>ada parte do processo, procurando solucionar parte do problema. Em<br />
termos gerais, um processo de reutilização de software deve def<strong>in</strong>ir ao menos duas atividades<br />
essenciais: o desenvolvimento para reutilização, que consiste no desenvolvimento dos artefatos<br />
de software que serão posteriormente reutilizados, e o desenvolvimento com reutilização,<br />
que consiste no desenvolvimento de aplicações que reutilizam os artefatos previamente<br />
desenvolvidos.<br />
Esta dist<strong>in</strong>ção entre desenvolvimento para/com reutilização é o ponto fundamental da<br />
abordagem de engenharia de software conhecida como L<strong>in</strong>ha de Produtos de <strong>Software</strong><br />
(CLEMENTS; NORTHROP, 2002; LINDEN; SCHMID; ROMMES, 2007), descrita a seguir.<br />
2.1.2.1 L<strong>in</strong>has de produtos de software<br />
A origem desta abordagem pode ser rastreada até um trabalho da década de 1970, de<br />
Parnas (1976), o mesmo autor que def<strong>in</strong>iu os conceitos de encapsulamento da <strong>in</strong>formação, um<br />
dos fundamentos da orientação a objetos. Neste trabalho é descrito o conceito de famílias de<br />
programas, e apesar de <strong>in</strong>icialmente ter focado na variabilidade em termos das características<br />
não funcionais, Parnas estabelece a base para as l<strong>in</strong>has de produto de software (LINDEN;<br />
SCHMID; ROMMES, 2007).<br />
O pr<strong>in</strong>cípio def<strong>in</strong>ido era o de estudar primeiro o que os programas de uma mesma<br />
família t<strong>in</strong>ham em comum, para depois tentar entender o que os diferenciava. Em seguida,<br />
duas alternativas de método produziam programas <strong>in</strong>completos que implementavam as partes<br />
comum da família, e deixavam as partes variáveis para serem <strong>in</strong>stanciadas posteriormente: o<br />
método de ref<strong>in</strong>amento por etapas (stepwise ref<strong>in</strong>ement), que produzia um programa no qual<br />
alguns tipos de operandos e operadores eram deixados sem implementação; e o método de<br />
especificação dos módulos, que baseava-se na especificação em alto nível de unidades de<br />
comportamento de programas e no encapsulamento da <strong>in</strong>formação para que o restante do código<br />
pudesse ser idealizado e construído. Para construir um novo programa, um desenvolvedor<br />
reutilizava este programa <strong>in</strong>completo e o completava de acordo com as variabilidades desejadas,<br />
seja providenciando os operadores e operandos, ou efetivamente implementando os módulos<br />
especificados.<br />
Ou seja, há uma mudança de foco. Ao <strong>in</strong>vés de desenvolver software considerando os<br />
requisitos de um único sistema, tenta-se desenvolver software que consiga atender aos requisitos<br />
de um conjunto de sistemas similares, de forma que é possível reaproveitar as partes comuns e<br />
apenas desenvolver o que é completamente novo. Na nomenclatura típica da área de l<strong>in</strong>has de<br />
produtos de software, este conjunto de sistemas similares é chamado de família de produtos, ou<br />
33