arquitetura de software é a estrutura fundamental de um sistema, servindo como um mapa em que a construção do sistema se baseia e se mantém. ela descreve decisões estratégicas que afetam a organização, o comportamento e a qualidade do sistema num geral, incluindo:

  • divisão em componentes
  • ferramentas de comunicação e integração entre os componentes
  • padrões e restrições de design
  • decisões de alto nível de tecnologia e frameworks

a arquitetura de software é essencial para garantir que o sistema seja robusto, sustentável e alinhado aos objetivos do negócio. ao equilibrar decisões técnicas com requisitos funcionais e não-funcionais, ela assegura que o software possa evoluir com qualidade e eficiência ao longo do tempo.

importância

  • base para tomadas de decisões estratégicas: ajuda a definir as tecnologias que serão usadas e como os componentes irão interagir;
  • reusabilidade e manutenção: facilita a evolução e manutenção do sistema ao longo do tempo;
  • comunicação entre stakeholders: serve como uma linguagem em comum entre desenvolvedores, gerentes e clientes;
  • redução de riscos: identifica possíveis gargalos e desafios técnicos com antecedência
  • alinhamento com requisitos não-funcionais: desempenho, segurança e escalabilidade, por exemplo.

os “ities” da arquitetura

os “ilities” são características cruciais para avaliar a qualidade da arquitetura. são qualidades que influenciam diretamente o sucesso do sistema em ambientes reais, e guiam as escolhas arquiteturais desde o início do projeto.

  • availability: capacidade de estar disponível quando necessário;
  • reliability: nível de funcionamento correto sem falhas inesperadas;
  • testability: facilidade com que o sistema pode ser testado (incluindo testes automatizados)
  • scalability: capacidade do sistema de lidar com aumentos de carga sem perda de desempenho;
  • security: proteção contra acessos não autorizados, ataques, vazamentos e falhas maliciosas;
  • agility: facilidade de adaptação do sistema a mudanças nos requisitos e no negócio;
  • fault tolerance: capacidade do sistema de continuar funcionando mesmo quando uma parte dele estiver falhando;
  • elasticity: capacidade de aumentar ou reduzir automaticamente os recursos computacionais, conforme a demanda;
  • recoverability: tempo e facilidade com quem um sistema se recupera de falhas e incidentes, restaurando os níveis de serviço normais;
  • performance: tempo de resposta e uso eficiente de recursos;
  • deployability: velocidade com que novas versões podem ser implantadas em produção com o mínimo de impacto;
  • learnability: facilidade de aprendizagem para construção e manutenção do sistema;
  • maintainability: facilidade na manutenção e evolução do sistema, com eficiência de custos;
  • observability: capacidade do sistema de fornecer métricas e logs que facilitem o monitoramento e diagnóstico de problemas;
  • interoperability: facilidade de integração com outros sistemas internos e externos;
  • extensibility: facilidade de adicionar novas funcionalidades sem grandes impactos;
  • portability: facilidade de rodar em diferentes ambientes.