A partir de 10/02/2022 o blog foi descontinuado em favor ao meu canal no youtube, ou seja, não haverá novas publicações.
Irei dedicar e focar exclusivamente no meu canal para criação e compartilhamento de conteúdo, se você tem interesse em continuar me acompanhando peço por favor que se inscreva no canal.
Características de uma Arquitetura de Software
Quando falamos sobre desenvolvimento de software (sistemas) acabamos focando muito em funcionalidades (features), ou seja:
- O sistema faz o que deveria fazer?
- O sistema está resolvendo os problemas do(a)s clientes?
- O sistema está atendendo as necessidades do(a)s clientes?
- etc…
O(a) cliente ser o foco é muito comum, afinal, sem cliente, sem sistema para manter.
Mas, além de funcionalidades, para que um projeto seja bem sucedido o mesmo precisa ser bem construído, atendendo algumas peculiaridades técnicas que muitas vezes são imperceptíveis para quem usa o mesmo.
Precisamos dar foco nas características da arquitetura (as famosas -ilities) do sistema, ou seja, para cada sistema haverá X caraterísticas (não existe certas ou erradas) e para que o mesma tenha sucesso é muito importante garantir que tais características são levadas em consideração e atendidas durante o planejamento e construção do sistema.
Abaixo uma lista (parcial) de possíveis características para dar atenção:
Características operacionais
- Disponibilidade: Quanto o sistema precisará ficar disponível para uso?
- Continuidade: Capacidade para recuperar de disastres.
- Performance: Análise da frequência de funções usadas, capacidade computacional utilizada e tempos de resposta.
- Recuperabilidade: Requisitos de continuidade de negócios (no caso de um desastre, quão rapidamente é obrigatório o sistema estar no ar novamente?).
- Confiabilidade: Avaliar se o sistema precisa ser seguro à falhas.
- Robustez: Habilidade para lidar com erro enquanto o funcionamento perde conexão de internet ou há uma interrupção de energia ou falha de hardware.
- Escalabilidade: Habilidade para o sistema performar e operar quando o numério de usuário(a)s ou requisições aumentam.
Características estruturais
- Configurabilidade: Habilidade para usuário(a)s finais mudar aspectos da configuração do sistema.
- Extensibilidade: Quanto importante é plugar novas funcionalidades.
- Instalabilidade: Facilidade de instalação em todas as plataformas necessárias.
- Aproveitabilidade/Reuso: Habilidade para aproveitar componentes comuns através de múltiplos produtos.
- Localização: Suporte para multi idiomas.
- Manutenabilidade: Quanto fácil é para aplicar mudanças e melhorias no sistema.
- Portabilidade: O sistema precisa rodar em mais de uma plataforma?
- Atualizabilidade: Habilidade para facilmente e rapidamente atualizar da versão anterior para a mais novas em servidores e clientes.
Características cross-cuttting
- Acessibilidade: Acesso para todo(a)s o(a)s usuário(a)s, incluindo aquele(a)s que possuem algumas limitações.
- Arquivabilidade: Informações precisam ser arquivadas ou deletadas depois de um período?.
- Autenticação: Requisitos para garantir que usuário(a)s são quem ele(a)s dizem ser.
- Autorização: Requisitos para garantir que usuário(a)s podem acessar ou performar o que estão acessando ou performando.
- Jurídico: Quais são as restrições legislativas no qual o sistema esta operando?
- Privacidade: Habilidade para esconder transações de pessoas internas da empresa.
- Segurança: As informações precisam ser encriptadas no banco de dados ou durante a comunicação entre sistemas?
- Suportabilidade: Qual o nível técnico necessário para o suporte do sistema? Qual o nível de logging e outras funcionalidades necessárias para debugar erros do sistema?
- Usabilidade: Níveis de treinamento necessários para usuário(a)s atingir seus objetivos com o uso do sistema.
Essas são algumas ideias (das N possíveis) para você ficar atento durante a etapa de planejamento de um novo sistema. Muitas vezes você não vai e nem deve focar em garantir e atendar todas essas caraterísticas, no caso, dado o seu sistema você precisa priorizar o que é mais importante para o sucesso do mesmo.
Mas como saber quais características sua arquitetura deve atender? Aqui vem o famoso “depende”, para cada problema vai haver seus pontos de atenção e cuidados, nesse momento vale analisar e pensar quais fazem sentido.
Muitas vezes tais características não estarão explicitas, isso porque existem dois tipos delas: Implicitas e explicitas, ou seja, algumas você conhece e estará claro a necessidade, porém, outras dado um contexto você vai lembrar dela de forma implicita.
Conclusão
Nesse post vimos possíveis sugestões e ideias de características arquiteturas para ficar atento durante o planejamento e construção de sistemas.
Abraços, até a próxima.