A Model-driven approach to formal refactoring - Lima Massoni, Tiago (2008)
Como qualquer outra tarefa evolucionária, a aplicação de refatoramentos em software orientado a objetos normalmente afeta código-fonte e seus modelos relacionados, aumentando a dificuldade de manutenção de artefatos corretos e consistentes. Devido à distância de representação entre artefatos de modelagem e programação, o esforço ligado a refatoramentos logo torna-se duplicado e custoso. Neste contexto, suporte de ferramentas utilizado atualmente, em especial ferramentas de Round-Trip Engineering (RTE), falha em automatizar tarefas de evolução. Consequentemente, a maioria dos projetos de software descarta artefatos de modelagem precocemente, adotando abordagens centradas unicamente em código-fonte. Esta tese propõe uma abordagem formal para consistentemente refatorar modelos de objeto e programas orientados a objetos, baseando o refatoramento apenas em modelos de objetos. Refatoramento de modelos é fundamentado com transformações formais primitivas { leis de modelagem { que são garantidamente preservadoras de semântica. Cada refatoramento aplicado a um modelo de objetos é associado a uma sequência semi-automática de aplicações de leis de programação preservadoras de comportamento, chamadas estrategias. Estrategias são aplicadas na dependência de um relacionamento especifico de conformidade entre modelos de objetos e programas, que devem satisfazer também um dado grau de confinamento. Este trabalho formaliza 14 estratregias, duas para cada lei de modelagem que afeta estruturas do programa. Estas estratregias são formalizadas como táticas de refinamento. Desta forma, refatoramento correto de programas pode ser realizado com reduzida intervenção manual do desenvolvedor, baseado apenas nas transformações que o mesmo aplicou ao modelo. Neste cenario, refatoramentos complexos que afetam as principais estruturas do programa podem ser aplicados a um artefato de mais alto nível de abstra ção, deixando a atualização semi-automática dos detalhes de implementação para as estratregias. Além disso, invariantes do modelo podem ser usados para aprimorar ferramentas especializadas em refatoramento, já que modelos de objetos oferecem informação semântica que permite refatoramentos automáticos mais poderosos. Esta tese considera Alloy como linguagem de modelagem formal, além de uma linguagem de programação similar a Java que chamamos BN. Para esta linguagem, introduzimos quatro novos refatoramentos e leis de programação orientada a objetos, com suas provas e derivações correspondentes. Adicionalmente, as leis de programação foram aplicadas em uma semântica de referências, mais próxima de linguages de programação utilizadas na prática. Com o intuito de delimitar a aplicabilidade desta abordagem, formalizamos uma noção de conformidade entre modelos de objetos e programas, a partir de um framework formal para definição de relacionamentos de conformidade; as definições formais relacionadas foram especificadas e checadas quanto ao tipo na ferramenta PVS. Além disso, estabelecemos e provamos manualmente um teorema para a corretude das estratregias, definindo que elas preservam comportamento e conformidade dos programas refatorados. Mesmo sendo uma abordagem formal, temos a preocupação de discutir sua utilização prática, além de aplica-la em três estudos de caso. Os problemas apresentados nesta tese certamente serão enfrentados em qualquer abordagem de desenvolvimento dirigida por modelos, no momento em que se lida com evolução