Understanding and recovering architecture rules - Zapalowski, Vanius (2021)
A arquitetura de software é fundamental para documentar as estruturas, papéis e regras mais importantes de um software, que são usadas no projeto e na implementação. Assim, ter uma arquitetura documentada que reflete o que está implementado é importante para o desenvolvimento e evolução de forma controlada. Apesar da importância de ter a arquitetura documentada corretamente, é comum que os sistemas não tenham uma documentação arquitetural, ou que que ela esteja desatualizada. Para minimizar esse problema, muitos estudos avaliam como manter a conformidade entre a documentação arquitetural e o código-fonte. No entanto, a maioria desses estudos tem uma baixa precisão necessitando uma verificação dos seus resultados, que é uma tarefa demorada e que pode conter erros, para fornecer uma documentação útil. Para dar suporte à documentação da arquitetura, nós propomos o métodoWeighted-graph-based (baseado em grafos com pesos) para recuperar regras arquiteturais. Nosso método é baseado na ideia de que regras arquiteturais de alto nível podem ser derivadas através da análise das dependências do código-fonte. Isso reduz o esforço de documentar as regras arquiteturais por diminuir a necessidade de verificação de um especialista. Para atingir nossos objetivos, nós analisamos as dependências do código-fonte e as diferenças arquiteturais. Com base nessa análise, nós desenvolvemos o método Weighted-graph-based que se baseia na métrica de força de dependência entre módulos, também proposta nesta trabalho, e em um resolvedor de equações lineares para obter regras arquiteturais mais relevantes. Nosso método também é independente de domínio e específico para cada software visto que não depende de parâmetros e documentações. Nós avaliamos nosso método usando um estudo de caso para apresentar como o nosso método funciona, um estudo offline detalhando a aplicação de nosso método em seis sistemas e um estudo com usuários realizado para analisar o uso prático das regras extraídas usando nosso método em dois sistemas comerciais. Os resultados mostram que nosso método extrai regras arquiteturais que são úteis, eficientes e apropriadas. Além disso, os resultados apresentam a preferência dos desenvolvedores por regras extraídas usando nosso método quando comparadas com as regras recuperadas manualmente.