Boas práticas em arquitetura de software

Desenvolvimento de Software, Plataformas e Sistemas Web

As boas práticas em arquitetura de software envolvem um conjunto de métodos, habilidades e conhecimentos para que o processo de desenvolvimento seja eficiente, organizado, sustentável no longo prazo e de qualidade, reduzindo riscos de fracasso. Neste artigo, você vai saber o que é arquitetura de software, os modelos de arquitetura mais comuns e como escolher a arquitetura de software adequada ao seu projeto.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

O que é arquitetura de software?

Arquitetura de software é a estrutura que define os componentes computacionais de um sistema e os relacionamentos entre eles; os padrões e restrições que guiam a sua composição. 

A arquitetura envolve todas as decisões sobre as estruturas do sistema, controle, protocolos de comunicação, sincronização e acesso a dados, atribuição de funcionalidades e determina os elementos visíveis, escalabilidade, desempenho e outros atributos de qualidade.

A arquitetura de software adequada ajuda também a evitar diversos problemas ao longo das etapas do processo de desenvolvimento.

Por exemplo, a arquitetura de um edifício depende de sua finalidade (tal como um prédio residencial e uma fábrica têm estruturas e aparências diferentes). De forma similar, a escolha da arquitetura de software também é determinada pela finalidade do seu projeto.

Mas projetar a arquitetura de softwares é mais variável do que esta metáfora sobre arquitetura de edifícios. Prédios são estáticos e o trabalho dos arquitetos é feito apenas uma vez. O software, por sua natureza, é mutável e dinâmico.

Isso quer dizer que a arquitetura de software deve ser definida, planejada e projetada antes do início do desenvolvimento. Assim como um prédio não é construído sem plantas arquitetônicas, você não deve desenvolver um software sem mapear claramente as características de sua arquitetura.

Leia também:
- A Importância da Arquitetura de Software
O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Porque devemos aplicar as boas práticas?

Para que todo o complexo fluxo de trabalho visto até aqui resulte em um software consistente e de qualidade, é importante que a empresa desenvolvedora de software adote boas práticas recomendadas, independente do modelo de desenvolvimento – em cascata ou ágil.

“A arquitetura de software precisa ser voltada para o negócio, com foco nas necessidades do cliente. Não há modelos prontos. Por exemplo, o cliente precisa de um sistema com respostas rápidas. O foco aqui deve ser no desempenho, o quanto esse software vai exigir de recurso. Nesse caso, o ideal é desenvolver um software customizado.”

explica Arthur Teixeira, COO da UDS Tecnologia.

Há uma série de processos e infraestruturas que caracterizam uma arquitetura de software bem feita, tais como microsserviços, serverless, codeless, IaaS, TDD (Test-Driven Development, Desenvolvimento Orientado a Testes), BDD (Behavior Driven Development, Desenvolvimento Orientado a Comportamento), Integration Patterns, Arquitetura Evolutiva, Design System e outras práticas.

Tudo isso depende das características, dos objetivos e do escopo do projeto.

“Você pode fazer um livro de mil páginas, com uma longa história e vários personagens (modelo monolítico – Waterfall), um livro de crônicas ou ainda fazer um livro curtinho, com um personagem (modelo Agile). O modelo depende muito da proposta do projeto. A arquitetura poderá ou não utilizar microsserviços, por exemplo. A decisão depende do que o cliente precisa e do orçamento de que ele dispõe.”

compara Arthur Teixeira

Por exemplo, um projeto de aplicativo para e-commerce pode não ser funcional se ficar lento durante a Black Friday. Se o foco for no alto desempenho mesmo sob uma tempestade de acessos, isso precisa ser contemplado nos requisitos.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Quais são as boas práticas em Arquitetura de Software?

O impacto da escolha do modelo arquitetural influencia aspectos do software como por exemplo:

  • Performance, 
  • Qualidade, 
  • Facilidade de manutenção, 
  • Portabilidade, 
  • Flexibilidade 
  • Escalabilidade 
  • Observabilidade

Dentre todos esses, os que merecem destaque são a Escalabilidade e Observabilidade.

A escalabilidade é a medida de flexibilidade para aumentar ou diminuir as capacidades do software de lidar com o aumento ou diminuição de cargas de trabalho, adicionar ou remover usuários com o mínimo impacto de custo.

Para ser escalável, é necessário que o sistema possa sofrer alterações de forma localizada sem afetar outras partes. 

Observabilidade é uma característica de um software cujo comportamento pode ser observado e analisado por indicadores e métricas enquanto ele funciona. Essas informações estratégicas e bem detalhadas ajudam a resolver os problemas observados. Ninguém deseja ter uma aplicação com bugs, respostas lentas e outros comportamentos indesejados.

Com a observabilidade, é possível avançar para um alto grau de detalhamento sobre o comportamento de um software e entender tudo o que está acontecendo no desenvolvimento ou uso deles. A partir disso, fica mais fácil antever falhas e propor melhorias.

Mas para colher resultados de boas práticas como escalabilidade e observabilidade é fundamental definir esses critérios desde o início do projeto.

Esse foi o caso da plataforma de educação financeira Finclass do Grupo Primo, que reúne todas as boas práticas de arquitetura de software aqui elencadas. O aplicativo conta com uma estrutura própria de streaming (inclusive em 4K), com qualidade cinematográfica de conteúdo e sem indisponibilidades, já que o objetivo é alcançar mais de 1 milhão de assinantes. A plataforma foi criada a partir dos recursos Amazon Web Services (AWS), com alta velocidade de entrega dos conteúdos, em ambiente sempre disponível e altamente seguro.

Confira a íntegra do case Primo Rico no blog.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

O Processo de Arquitetura de Software

Etapas do processo de arquitetura de software.
O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Padrões de Arquitetura de Software

Os padrões de arquitetura de software são modelos que podem ser reutilizados, contribuindo para uma estrutura escalável, extensível e otimizada. 

Cada modelo é uma solução testada e documentada de um problema recorrente e ajuda na tomada de decisões do projeto, como sua utilidade, funções e relacionamento com cada subsistema.

Existem diversos padrões de arquitetura de software.*

Arquitetura em camadas (Layered pattern): Os componentes são organizados em camadas horizontais e cada uma delas desempenha um papel específico na aplicação. Estes componentes são interconectados, porém independentes entre si.

O número de camadas depende da dimensão das aplicações: as pequenas possuem por volta de 3 camadas; as mais complexas têm em torno de 5 ou mais.

MVC (Model-view-controller): É focado no reuso de código e tem 3 camadas separadas, mas interconectadas: modelo (manipulação da lógica de dados), a visão (a interface do usuário) e o controlador (fluxo de aplicação).

Arquitetura de microsserviços (Microservices pattern): Consiste em uma coleção de pequenos serviços independentes, sendo que cada serviço é uma base de código separado e deve implementar uma única funcionalidade em um contexto limitado.

Service-Oriented Architecture (SOA), ou Arquitetura Orientada a Serviços: É um padrão de arquitetura de software em que os componentes são reutilizáveis e também disponibilizados na forma de serviços (unidade ou conjunto de funcionalidades do software).

Publish-Subscribe (Pub/Sub): Este modelo é baseado no envio de mensagens dos Publishers (Publicadores) para Subscribers (Assinantes) em um processo feito de forma assíncrona. Os assinantes tendem a receber os tipos de mensagens dentro de interesses expressos. Redes sociais como o Instagram e Spotify são arquitetadas neste modelo e vários fornecedores de cloud a oferecem (Google Cloud, Amazon AWS e Microsoft Azure).

* Dependendo dos objetivos do software, os padrões podem ser combinados.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Como escolher a arquitetura de software adequada?

A influência da arquitetura se estende por todo o ciclo de vida do software. Ela define um conjunto de fatores considerando velocidade e o custo de implementação, a necessidade de possíveis mudanças no futuro, metas de uso e escala do software, além de recursos para dimensionar equipes.

Aqui estão alguns pontos fundamentais que servem como parâmetros da arquitetura mais adequada e sustentável para o seu projeto.

  • Conhecer os requisitos de alto nível e riscos potenciais. Os requisitos de alto nível respondem à pergunta: “Precisamos de um software para…” e em geral são levantados junto ao cliente ou usuários.
  • Identificar as necessidades de escala (quantidade de operações, volume de dados a serem transacionados, quantidade de usuários, volume de acessos, etc) que o software precisa ou precisará ter futuramente.
  • Identificar as necessidades de segurança e performance que o software precisa ter, visto que o planejamento arquitetural correto influencia totalmente nesses dois quesitos.
  • Definir limites para o orçamento e os prazos do projeto.
  • Planejar o ciclo de vida do projeto e mantê-lo. Isso inclui adotar um processo de SDLC (Secure Development Lifecycle) que integra atividades como teste de penetração, revisão de código e análise de arquitetura em todas as etapas do processo de desenvolvimento. É um processo que ajuda a detectar falhas no início do desenvolvimento, reduzindo os riscos e custos.
O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

2 princípios básicos para projetar arquiteturas de software

Complicar é fácil, simplificar é difícil.

Em arquitetura de software, complicar é introduzir elementos e abstrações que tornam o desenvolvimento mais propenso a erros – pode ser uma nova camada, a criação de muitas classes, interfaces, etc. 

Como simplificar?

Há diversos princípios que podem ajudar quando consideramos acrescentar uma característica, copiar trechos de código desnecessários ou tomar uma decisão específica durante a etapa de desenho da arquitetura do software.

Os 2 principais princípios que a UDS utiliza para guiar suas decisões de arquitetura de software são:

DRY: Don’t Repeat Yourself

Repetição é desperdício. Cada funcionalidade em um projeto deve ser representada apenas uma vez. Adicionar código desnecessário diminui a sua qualidade, porque aumenta o trabalho para manter o software no futuro. A repetição no processo de desenvolvimento de software deve ser eliminada pela automação. 

Suponha que o esforço para se corrigir um bug é X. Para um desenvolvedor que copia e cola o mesmo código em várias partes diferentes do programa, o esforço é X vezes a quantidade de cópias do mesmo trecho.

KISS: Keep It Simple, Stupid!

Significa manter o seu código o mais simples possível e usar o dinheiro do cliente com sabedoria. Simples assim. 😉

Requisitos: Como projetar a arquitetura de software?

Cada projeto de software tem requisitos funcionais e não funcionais que orientam sua arquitetura e permitem entregar um produto final com o qual os clientes e outras partes interessadas ficam satisfeitos.

Sem uma compreensão clara desses requisitos desde o início, a equipe de desenvolvimento corre o risco de se perder, enfatizando necessidades erradas em detrimento de outras ou usando uma quantidade ineficiente de recursos internos.

Identificar e quantificar requisitos não funcionais

Os requisitos funcionais e não funcionais são essenciais para o projeto, porque definem as características do sistema. Os requisitos não funcionais se relacionam a desempenho, usabilidade, segurança, disponibilidade e manutenção do software.

Mas em arquitetura de software é preciso especificar e limitar (ou quantificar) o que é “desempenho” e outras características, como escalabilidade.

Os requisitos devem ser claros e usados ​​para moldar o escopo do projeto. É importante ter em mente que o planejamento de arquitetura provavelmente mudará ao longo do processo de desenvolvimento; assim, o primeiro rascunho é diferente do resultado final.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

A importância do controle de versão

Alterações e versões diferentes atrapalham. Para guiar o desenvolvimento, organizar o fluxo de trabalho, controlar alterações e evitar confusões no projeto, equipes ágeis costumam adotar um sistema de controle de versões distribuído. 

Assim, é possível acompanhar o número de bugs, funcionalidades inseridas durante cada sprint, qual o tempo médio trabalhado em determinadas funcionalidades, além de tornar fácil a execução do CI/CD (Continuous Integration/Continuous delivery), um método de integração e entrega de aplicações com frequência aos clientes.

O sistema de controle de versão é um mapa de referência do histórico das versões anteriores e fonte de verdade que deve acompanhar todo o desenvolvimento do software até o seu lançamento. A UDS, por exemplo, utiliza o GitFlow.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Conclusão

A boa arquitetura de software ajuda a minimizar problemas, principalmente em relação ao funcionamento, desempenho, prazos e custos. Com boas práticas de design, clareza e consistência, o produto vai estar mais próximo de atender as necessidades para as quais foi especificado.

Cada projeto é único e pode combinar diferentes tipos de arquitetura de software, dependendo do objetivo do sistema e do problema que precisa ser solucionado.

Afinal, um software é um programa ou aplicação que visa resolver determinado problema e sua qualidade é definida pela capacidade em satisfazer as necessidades de clientes e usuários.

Autor

Simone Marques

Jornalista, especialista em mídias digitais e estrategista de conteúdos de tecnologia na UDS.

COMPARTILHE

Fique por dentro

Fale com a UDS

Autor

Simone Marques

Jornalista, especialista em mídias digitais e estrategista de conteúdos de tecnologia na UDS.