Conformação arquitetural: sincronizando o código e a arquitetura do projeto

Conheça as ferramentas e técnicas para manter o código conforme o projeto arquitetural.

Fique por dentro
Ao longo do tempo a arquitetura planejada para um software tende a se distanciar do que foi inicialmente projetado.

A representação do projeto por meio de diagramas UML em documentos de arquitetura de software perdem total conexão com o código fonte e, quando se torna necessária alguma alteração mais complexa, que exija o entendimento arquitetural da solução e a consistência do código real com o código planejado, percebe-se os problemas causados pela disparidade arquitetural.

O cenário ideal seria um em que, durante todo o ciclo de vida do software, o código fonte estivesse sempre refletindo o que foi projetado para a sua arquitetura. Com base nisso, esse artigo apresenta a importância da arquitetura de software, técnicas e ferramentas que auxiliam a manter o código fonte conforme a arquitetura planejada e técnicas para melhorar a conformação arquitetural em um código já deteriorado.

Arquitetura de software é uma disciplina de desenvolvimento de software que engloba inúmeras preocupações técnicas. Conceituando arquitetura de software, pode-se dizer que é um nível de design além dos algoritmos e estrutura de dados, cuja preocupação gira em torno de como o sistema está organizado e estruturado.

Em An Introduction to Software Architecture, David Garlan e Mary Shaw, incluem como questões de organização e estruturação de um sistema, elementos como protocolos de comunicação, sincronização e acesso a dados, atribuição de funcionalidades a elementos de design, distribuição física de módulos entre diferentes nós computacionais, composição de elementos de design, escalonamento e desempenho, e escolha entre diferentes alternativas de arquitetura.

Todas as questões envolvidas na organização e estruturação de um sistema, comentadas anteriormente, fazem parte do escopo dos requisitos não funcionais. Por isso que uma das explicações mais singelas e, muitas vezes a frase mais aceita como resumo geral sobre arquitetura de software, citam que: as preocupações da disciplina de arquitetura de software englobam os requisitos não funcionais.

Traçando um paralelo desses conceitos abstratos de arquitetura de software com a plataforma Java, pode-se pensar a arquitetura de software como a disciplina que vai organizar e estruturar os componentes do sistema (pacotes, classes e subsistemas) e ditar as regras de como esses componentes podem ou devem se comunicar e relacionar, levando-se em consideração requisitos não funcionais de performance, manutenibilidade, confiabilidade, entre outros.

Durante a concepção e elaboração de um software, um dos principais documentos produzidos é o documento de arquitetura de software.

Esse documento serve para guiar o desenvolvimento do software e deve fornecer uma visão geral da arquitetura abrangente do sistema, usando diversas visões de arquitetura para descrever diferentes aspectos do software, tais como dependências entre pacotes, organização do sistema em camadas, descrição de casos de uso, etc.

Entretanto, ao longo do tempo as decisões de projeto propostas e determinadas no documento de arquitetura de software acabam sendo esquecidas e o projeto do sistema começa a deteriorar-se. O cenário de deterioração da arquitetura de software é caracterizado pela não conformidade do código atual com o projeto descrito no documento de arquitetura.

Esse cenário é menos comum em projetos novos, onde as diretrizes de desenvolvimento para o projeto ainda estão sendo seguidas à risca. Contudo, durante a manutenção do sistema, especialmente quando há uma mudança considerável na equipe e muitas requisições de alterações, o novo código tende a ser desenvolvido fora das diretrizes determinadas no início do projeto, tanto pelo esquecimento do documento de arquitetura de software quanto por desenvolvedores preferirem outras abordagens em relação às originalmente propostas no início do projeto.

Dessa forma, o código acaba se transformando em um grande e confuso emaranhado de padrões ou anti-padrões, causando muitos inconvenientes, tais como dificuldades de manutenção e evolução do sistema, duplicação de código, entre outros.

A solução para esse problema é prever disparidades entre a arquitetura e o código a fim de evitar que elas se concretizem ou verificar constantemente o código em busca de problemas em relação à arquitetura e corrigi-los. As abordagens para a resolução desses problemas geralmente consistem na adição de um processo ou subprocesso de commit ou verificação de código juntamente com a adoção de ferramentas para este fim. " [...] continue lendo...

Artigos relacionados