preloader
  • Inicio
  • O que entende-se sobre Arquitetura de Software?

blog-thumb

Quando falamos sobre Arquitetura de Software, sempre surgem algumas perguntas, tais como:

Existe software sem arquitetura? A arquitetura de um projeto de software precisa/deve ser complexa? Uma companhia precisa mesmo do papel de um Arquiteto de Software? O que significa Arquitetura de Software? Qual é o papel de um Arquiteto de Software dentro de uma companhia e/ou projeto? O que esse profissional deveria conhecer? Essas são, dentre tantas outras, perguntas recorrentes quando tocamos nesse assunto e o artigo de hoje vai esclarecer essas perguntas e outros pontos importantes sobre o tema.

Trabalhar dentro da Indústria de Software, apesar de ser prazerosa para a maioria das pessoas que atuam com TI, é uma área que demanda constantes mudanças e adaptações tanto de software quanto de escopo, aperfeiçoamento profissional para estarmos atualizados com as novidades do mercado e tendências tecnológicas. Ao mesmo tempo que é prazerosa, a indústria da tecnologia não é uma área fácil de atuar e demanda uma série de complexidades e padrões que nos exige passar por diversas situações e dificuldades em projetos, através das quais adquirimos experiências e passamos a entender melhor os cenários, situações e culturas empresariais, além de termos que lidar, constantemente, com conflitos de interesses/objetivos. Tudo isso nos faz chegar ao nirvana da computação que é ver o software que ajudamos a construir funcionando em produção e atendendo com excelência as expectativas da companhia e dos usuários finais.

O primeiro entendimento que um Profissional que tenha assumido esse papel ou deseja chegar ao papel de Arquiteto de Software é que: Stakeholders e Integrantes das equipes, serão as pessoas que sofrerão o primeiro impacto, positivo ou negativo, sobre a arquitetura de software de um sistema. Logo a seguir vem o impacto sobre os negócios da companhia.

O que é Arquitetura de Software?

A

definição de arquitetura de software pode variar bastante com base em suas experiências, conversas com seus colegas de trabalho e, claro, suas próprias idéias que vão se formando ao logo da sua carreira. Caso você tenha interesse em perguntar para algum colega de trabalho ou já tenha feito essa pergunta, ou tenha feito alguma pesquisa no Google, você vai perceber várias respostas vindas de pessoas diferentes. A verdade é que o conceito é subjetivo o suficiente para dar margem para a interpretações baseado em pontos de vistas diferentes, moldada por percepções distintas. Apesar de existir inúmeras definições, percepções e pontos de vistas diferentes, há conceitos fundamentais que constroem a base essencial, a qual nos fornece um melhor entendimento sobre o que é: Arquitetura de Software.

Durante algum tempo, os processos de desenvolvimento e Arquitetura tem sido comparados aos processos da construção civil. Em um desenho (design) de software modernos, a comparação que existia com a construção civil, não faz mais sentido. As metodologias de software tem tido foco que criar sistemas que sejam adaptáveis, podendo sofrer mudanças de forma fácil, e que resultem em um desenho de software menos rígido e escaláveis.

Há uma definição padrão sobre Arquitetura de Softwre que tem base na junção da International Organization for Standardization (ISO) e o Institute of Electrical and Eletronics Engineers (IEEE), resultando na ISO/IEC/IEEE 42010:2011 o que traz uma consolidação sobre o que é Arquitetura de Software.

Quem são os consumidores de uma Arquitetura de Software?

No início do artigo, mencionamos de uma forma bem generalista, quem seriam os potenciais consumidores de uma arquitetura de software. há uma variedade muito grande de Stakeholders em um projeto de software, tais como: Usuários finais, Analistas de Negócio, Especialistas de Domínio, QAs (Quality Assurance), Gerentes, pessoas/empresas que se integram com o sistema que estamos desenvolvendo, equipe operacional, desenvolvedores. Todas as pessoas que trabalham nessas áreas citadas, são impactadas por uma arquitetura de software, de alguma forma.

Existe pessoas as quais são consideradas consumidores indiretos de uma arquitetura de software e isso se dá devido a Arquitetura de Software ser a fundação de um sistema computacional. Como um Arquiteto de Software, você precisa ter um mantra que, tudo o que você pensa, desenha, projeta e executa, e entrega está servindo a todos esses tipos de consumidores, ou seja, o impacto sobre qualquer descuido quando se cria e/ou para muda/evolui/corrigi, é grande o suficiente para que você tenha bastante atenção ao projetar uma arquitura de um software em qualquer tipo de projeto. Temos que destacar os desenvolvedores, os quais são consumidores DIRETOS da arquitetura que é projetada em todo projeto e, trabalharão diariamente com esse artefato (arquitetura). Logo, como um arquiteto, temos que começar a desenvolver uma visão holística e entender os impactos de todas as mudanças ou inovações que estamos projetando.

O que compõe uma Arquitetura de Software ?

Uma Arquitetura de Software é composta por vários componentes e estruturas sistêmicas, as quais, quando conectadas, compreendem elementos essenciais para a projeção de um software, tais como:

  • CPU & Memória
  • Protocolos de Rede
  • Sistemas de Arquivos
  • Base de Dados
  • Consumo de APIs
  • Plataformas de Mensageria
  • Segurança
  • Resiliência & Tolerância a Falha
  • Teorema CAP
  • Transações (Transações Distribuidas, 2 Phase-Commit)
  • Logs & Monitoramento
  • Serviços de Nuvem (Cloud)

Ufa! a lista só cresce. Tudo o que foi apresentado nos mostra que grandes plataformas de software pode m(e vão) ter múltiplos times trabalhando tanto no desenho quanto na manutenção do sistema/plataforma e arquitetura, onde cada time tem uma responsabilidade sobre cada uma dessas estruturas, tais como:

  • Infraestrutura
  • Segurança
  • DBAs
  • (SRE —Site Reliability Engineering)
  • Desenvolvimento Backend
  • Desenvolvimento Frontend

Arquitetura de Software e Abstração

O mundo digital da computação, é composto de muitas abstrações com as quais temos que lidar no nosso dia a dia e a Arquitetura de Software também lida com muitas abstrações. Quando estamos pensando em um sistema de software, já estamos trabalhando abstração em diversos ângulos, olhares e aspectos.

Arquitetura de Software tem uma preocupação muito peculiar que é a de definição e detalhamento sobre estruturas, elementos e componentes de sistemas e, principalmente, COMO todos eles estão conectados, como eles se relacionam e interagem uns com os outros: Ou seja, O ponto principal sobre a abstração de uma arquitetura não é apresentar o detalhamento minucioso do ponto de vista da implementação em si, mas sim garantir que todos os elementos, componentes, e comportamento e interações dentro do sistema estejam coerente com o que foi projetado, documentado.

Acredito que toda Arquitetura de Software, quando pensada, ponderada e projetada, tomando o cuidado sobre todos os pontos que citamos até aqui, está focada em resolver um problema com base no direcionamento estratégico de uma empresa, ajudando a companhia a atingir seus objetivos. Do contrário, ainda que o projeto vá para produção e seja “funcional”, há grandes changes de fracasso — devido decisões técnicas que possam ter sido negligenciadas, quando se pensar em manutenabilidade, escalabilidade, evolução adaptativa e flexibilidade.

Conclusão

Nesse artigo, o objetivo foi trazer questionamentos que nos ajude a refletir um pouco mais sobre: Importância, Impacto, Consumidores e Responsabilides que Arquitetura de Software tem sobre todo o processo de desenvolvimento de qualquer software, independentemente da área de negócio. Todos os pontos citados, nos leva a entender que todo software tem uma arquitetura, isso é um fato! No entanto, há arquiteturas que são mais adaptáveis as mudanças, flexíveis e de fácil evolução, resultando em baixo impacto e melhor oportunidades de manutenção.

A arquitetura de software consiste na busca em antecipar a tomada de algumas decisões para um projeto de software, as quais devem sempre ter foco principal atender as necessidades de negócio de uma companhia, escalando a operações da empresa, encontrando alternativas para aumentar a produtividade dos desenvolvedores e usando os recursos tecnológicos adequados. Essas responsabilidades aumenta, ainda mais, a responsabilidade desse papel e o faz ter que fazer escolhas, muitas vezes, difíceis; tendo em que esse profissional precisa ter uma visão Holística dos cenários e situações a sua volta.

Por fim, a arquitetura de software consiste em importantes decisões de design que moldam todo o processo de execução, operação e manutenção de um projeto de software, o qual é constituído de estruturas e componentes que são significativos para a qualidade, longevidade e utilidade do sistema.