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.
192<br />
primeira explicação é a de que geradores produzem bastante código redundante, e por isso o<br />
número de l<strong>in</strong>has é naturalmente maior. Esta afirmação está próxima da realidade deste estudo,<br />
já que um dos itens importantes na identificação de candidatos a subdomínio é a existência de<br />
trechos repetidos de código, como ressaltado por Knodel et al. (2005) e discutido na atividade<br />
AD.3 desta abordagem (Capítulo 5). Neste estudo de caso, observa-se a existência de diversos<br />
arquivos e trechos de código parecidos sendo produzidos por geradores.<br />
Vale ressaltar que esta repetição não poderia ser facilmente resolvida através de<br />
componentes ou outras estruturas de código, uma vez que apesar de serem basicamente<br />
repetidos, os trechos diferem em muitos pontos, e são resultados de <strong>in</strong>úmeros parâmetros e<br />
<strong>in</strong>formações sobre o domínio. Como resultado, a tentativa de se implementar componentes<br />
genéricos que realizam estas variabilidades iria resultar em software mais complexo e difícil<br />
de ser mantido. A única opção, portanto, seria copiar os trechos parecidos e modificá-los<br />
manualmente, abordagem seguida no desenvolvimento tradicional. Em alguns casos, pode-se<br />
tentar aplicar técnicas de refatoração de código (FOWLER et al., 1999), mas estas são limitadas a<br />
somente alguns tipos de modificações no código.<br />
Analisando os artefatos produzidos, nota-se que, na maioria deles, é exatamente esta tarefa<br />
de cópia e modificação manual que está sendo automatizada neste caso. A diferença entre os<br />
níveis de reutilização com e sem a abordagem (cerca de 50%) corresponde aproximadamente à<br />
porcentagem de reutilização obtida por geração (47,03%). Ou seja, o que está sendo gerado é o<br />
código que implementa a variabilidade que não pode ser automatizada em componentes, e foi<br />
construído manualmente sem a abordagem.<br />
Outro dado que reforça este <strong>in</strong>dício é o aumento da complexidade e a redução da<br />
manutenibilidade observados quando a abordagem é utilizada. Estas diferenças podem ser<br />
vistas de forma geral (Figura 29), mas são particularmente nítidas quando se avalia os diferentes<br />
tipos de artefatos do MDD <strong>in</strong>dividualmente (Figuras 30, 31 e 32). Os artefatos de geração<br />
de código e modelos de domínio são consideravelmente mais complexos e difíceis de manter<br />
do que o restante do código. Observando-se os artefatos, nota-se que isto se deve ao grande<br />
número de <strong>in</strong>struções condicionais, laços, e a existência de repetidas consultas aos modelos<br />
que são feitas nas transformações e geradores. Ou seja, o grande número de parâmetros<br />
citados anteriormente como necessários para realizar a variabilidade em um componente foram<br />
migrados para os artefatos do MDD, tornando-os complexos e difíceis de manter. No entanto,<br />
estes artefatos são modificados muito raramente, pois uma vez testados e validados, somente<br />
precisam ser alterados para efetuar correções de erros ou evolução no domínio.<br />
Além disso, e esta é a pr<strong>in</strong>cipal diferença entre um gerador e um componente, um gerador