Criar e manter arquiteturas de software que permaneçam sustentáveis ​​ao longo do tempo é um desafio para arquitetos e engenheiros de software. Eles podem tentar atender a todos os requisitos, fornecer todos os recursos e planejar todos os componentes do sistema de uma só vez com grandes projetos iniciais, o que envolve concluir e aperfeiçoar projetos arquitetônicos antes que as implementações sejam iniciadas. Alternativamente, eles podem permitir que o processo Agile conduza o projeto arquitetônico para produzir arquiteturas emergentes, onde as equipes de desenvolvimento começam a fornecer funcionalidade e deixam os projetos arquitetônicos emergirem, com pouco ou nenhum planejamento inicial. Infelizmente, nenhuma dessas abordagens é consistentemente bem-sucedida na entrega de arquitetura sustentável.

 

A abordagem de Arquitetura Contínua (CA) oferece um compromisso significativo entre grandes projetos iniciais e arquiteturas emergentes, bem como um caminho comprovado para alcançar a sustentabilidade da arquitetura de software na era do Agile, DevOps e nuvem.

 

O que é Arquitetura Contínua?

 

A arquitetura contínua é uma abordagem, não uma metodologia formal, que pode ser facilmente adaptada ao seu contexto específico.

 

Ele é baseado nos seis princípios simples a seguir que descrevem como podemos elaborar continuamente arquiteturas de software no mundo atual de Agile, DevOps e nuvem:

 

“Produtos de arquiteto; evoluir de projetos para produtos . Arquitetar produtos é mais eficiente do que apenas desenhar soluções pontuais para projetos e foca a equipe em seus clientes.

 

Concentre-se nos atributos de qualidade, não nos requisitos funcionais . Os requisitos de atributos de qualidade orientam a arquitetura.

 

Adie as decisões de projeto até que sejam absolutamente necessárias . Projete arquiteturas com base em fatos, não em suposições. Não faz sentido projetar e implementar recursos que nunca poderão ser usados ​​- é uma perda de tempo e recursos.

 

Arquiteto para a mudança – aproveite o “poder do pequeno”. Componentes grandes, monolíticos e fortemente acoplados são difíceis de mudar. Em vez disso, aproveite elementos de software pequenos e pouco acoplados.

 

Arquiteto para construir, testar, implantar e operar . A maioria das metodologias de arquitetura se concentra exclusivamente nas atividades de construção de software, mas arquitetos e engenheiros também devem se preocupar com testes, implantação e operação para dar suporte à entrega contínua.

 

Modele a organização de suas equipes após o design do sistema em que você está trabalhando . A maneira como as equipes são organizadas impulsiona a arquitetura e o design dos sistemas em que estão trabalhando.”

 

Esses princípios fornecem um modelo útil, mas não são prescritivos. Eles são complementados pelas seguintes quatro atividades essenciais:

 

“Foco nos atributos de qualidade , que são os principais requisitos transversais que uma boa arquitetura deve atender.

 

Conduza as decisões arquitetônicas , que são a unidade primária de trabalho das atividades arquitetônicas.

 

Conheça a sua dívida técnica , cujo entendimento e gestão é fundamental para uma arquitetura sustentável.

 

Implemente loops de feedback , que nos permitem iterar pelo ciclo de vida de desenvolvimento de software e entender o impacto das decisões de arquitetura. A automação é um aspecto fundamental de loops de feedback eficazes.”

 

Além disso, a arquitetura contínua inclui uma “caixa de ferramentas” arquitetônica que incorpora um conjunto de ferramentas comprovadas, como logs de decisão, árvores de utilitários e táticas arquitetônicas. Arquitetos e engenheiros de software podem estender essa caixa de ferramentas conforme necessário, adicionando ferramentas relevantes para seus contextos.

 

Os requisitos de atributos de qualidade são fundamentais para a sustentabilidade

 

O que entendemos por sustentabilidade no contexto da arquitetura de software? As arquiteturas de software sustentáveis ​​se concentram em atender aos requisitos conhecidos e atuais sem comprometer sua capacidade de atender aos requisitos futuros e desconhecidos. Como os requisitos de atributos de qualidade impulsionam os esforços de design de arquitetura ( Princípio 2 da CA) , focar em atender aos requisitos de atributos de qualidade é uma maneira eficaz de criar arquiteturas sustentáveis.

 

Infelizmente, esses requisitos geralmente não são tão bem documentados e examinados cuidadosamente quanto os requisitos funcionais. Eles podem ser registrados como uma simples lista com marcadores: por exemplo, especificando que “o sistema deve ser rápido” ou “o sistema deve ser escalável”, sem dizer aos arquitetos e engenheiros de software como projetar um sistema que atenda a esses requisitos.

 

Uma maneira melhor de descrever os requisitos de atributos de qualidade é usar ATAM Scenarios and Utility Trees , conforme ilustrado no exemplo a seguir:

 

Essa abordagem depende da compreensão de três propriedades principais para cada cenário:

 

“Estímulo” descreve o que qualquer estímulo externo do sistema, como um usuário ou mesmo uma falha, faria para iniciar o cenário.

“Resposta” representa a resposta esperada do sistema ao estímulo.

“Medição” define ainda mais a resposta ao estímulo, fornecendo um alvo mensurável, que pode ser um intervalo.

Vários atributos de qualidade se tornaram mais importantes para a elaboração de arquiteturas de software sustentáveis ​​na era digital: segurança, escalabilidade, desempenho e resiliência. Eles nem sempre são bem compreendidos ou priorizados por arquitetos e engenheiros de software. No entanto, atender aos requisitos associados a esses atributos de qualidade é um componente-chave do processo de projeto arquitetônico.

 

Decisões arquitetônicas e dívida técnica

 

A condução de decisões arquitetônicas é uma atividade essencial na Arquitetura Contínua, e as decisões arquitetônicas são a unidade primária de trabalho de um profissional. Quase todas as decisões arquitetônicas envolvem compensações. Por exemplo, uma decisão tomada para otimizar a implementação de um requisito de atributo de qualidade, como desempenho, pode impactar negativamente a implementação de outros atributos de qualidade, como usabilidade ou manutenibilidade. Uma decisão arquitetural feita para acelerar a entrega de um sistema de software pode aumentar a dívida técnica, que precisa ser “reembolsada”