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.

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

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

Saved successfully!

Ooh no, something went wrong!