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”
.png)
.png)
.png)
.png)