{"id":7220,"date":"2022-12-05T10:00:00","date_gmt":"2022-12-05T13:00:00","guid":{"rendered":"https:\/\/uds.com.br\/blog\/?p=7220"},"modified":"2024-12-09T14:50:50","modified_gmt":"2024-12-09T17:50:50","slug":"boas-praticas-em-arquitetura-de-software","status":"publish","type":"post","link":"https:\/\/uds.com.br\/blog\/boas-praticas-em-arquitetura-de-software\/","title":{"rendered":"Boas pr\u00e1ticas em arquitetura de software"},"content":{"rendered":"\n<p>As boas pr\u00e1ticas em arquitetura de software envolvem um conjunto de m\u00e9todos, habilidades e conhecimentos para que o processo de desenvolvimento seja eficiente, organizado, sustent\u00e1vel no longo prazo e de <strong><a href=\"https:\/\/uds.com.br\/blog\/qualidade-de-software\/\" target=\"_blank\" rel=\"noreferrer noopener\">qualidade<\/a><\/strong>, reduzindo riscos de fracasso. Neste artigo, voc\u00ea vai saber o que \u00e9 arquitetura de software, os modelos de arquitetura mais comuns e como escolher a<strong> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">arquitetura de software adequada <\/mark><\/strong>ao seu projeto.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>O que \u00e9 arquitetura de software?<\/strong><\/h2>\n\n\n\n<p><a href=\"https:\/\/uds.com.br\/blog\/arquitetura-de-software-o-que-e\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Arquitetura de software<\/strong><\/a> \u00e9 a estrutura que define os componentes computacionais de um sistema e os relacionamentos entre eles; os padr\u00f5es e restri\u00e7\u00f5es que guiam a sua composi\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>A arquitetura envolve todas as decis\u00f5es sobre as estruturas do sistema, controle, protocolos de comunica\u00e7\u00e3o, sincroniza\u00e7\u00e3o e acesso a dados, atribui\u00e7\u00e3o de funcionalidades e determina os elementos vis\u00edveis, escalabilidade, desempenho e outros atributos de qualidade.<\/p>\n\n\n\n<p>A arquitetura de software adequada ajuda tamb\u00e9m a evitar diversos problemas ao longo das etapas do processo de desenvolvimento.<\/p>\n\n\n\n<p>Por exemplo, a arquitetura de um edif\u00edcio <em>depende de sua finalidade<\/em> (tal como um pr\u00e9dio residencial e uma f\u00e1brica t\u00eam estruturas e apar\u00eancias diferentes). De forma similar, a escolha da arquitetura de software tamb\u00e9m \u00e9 determinada pela <em>finalidade do seu projeto<\/em>.<\/p>\n\n\n\n<p>Mas projetar a arquitetura de softwares \u00e9 mais vari\u00e1vel do que esta met\u00e1fora sobre arquitetura de edif\u00edcios. Pr\u00e9dios s\u00e3o est\u00e1ticos e o trabalho dos arquitetos \u00e9 feito apenas uma vez. O software, por sua natureza, \u00e9 mut\u00e1vel e din\u00e2mico.<\/p>\n\n\n\n<p>Isso quer dizer que <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">a arquitetura de software deve ser definida, planejada e projetada<\/mark><\/em> <em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">antes do in\u00edcio do desenvolvimento<\/mark><\/em><\/strong>. Assim como um pr\u00e9dio n\u00e3o \u00e9 constru\u00eddo sem plantas arquitet\u00f4nicas, voc\u00ea n\u00e3o deve desenvolver um software sem mapear claramente as caracter\u00edsticas de sua arquitetura.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted has-background\" style=\"background-color:#eeeeee;font-size:14px\">Leia tamb\u00e9m:\n<a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/arquitetura-de-software-o-que-e\/\" target=\"_blank\"><em>- A Import\u00e2ncia da Arquitetura de Software<\/em><\/a><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Porque devemos aplicar as boas pr\u00e1ticas?<\/strong><\/h2>\n\n\n\n<p>Para que todo o complexo fluxo de trabalho visto at\u00e9 aqui resulte em um software consistente e de qualidade, \u00e9 importante que a empresa desenvolvedora de software adote boas pr\u00e1ticas recomendadas, independente do modelo de desenvolvimento \u2013 em <a href=\"https:\/\/uds.com.br\/blog\/waterfall\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>cascata<\/strong><\/a> ou \u00e1gil.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-style-large\" style=\"font-size:14px;font-style:normal;font-weight:300\">\n<p>\u201cA arquitetura de software precisa ser voltada para o neg\u00f3cio, com foco nas necessidades do cliente. N\u00e3o h\u00e1 modelos prontos. Por exemplo, o cliente precisa de um sistema com respostas r\u00e1pidas. O foco aqui deve ser no desempenho, o quanto esse software vai exigir de recurso. Nesse caso, o ideal \u00e9 desenvolver um software customizado.\u201d<\/p>\n<cite><em>explica Arthur Teixeira, COO da <\/em><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">UDS Tecnologia<\/mark><\/strong><em>.<\/em><\/cite><\/blockquote>\n\n\n\n<p>H\u00e1 uma s\u00e9rie de processos e infraestruturas que caracterizam uma arquitetura de software bem feita, tais como <a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/microsservicos-desenvolvimento-de-apps\/\" target=\"_blank\"><strong>microsservi\u00e7os<\/strong><\/a>, <a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/arquitetura-serverless-o-que-e-como-usar\/\" target=\"_blank\"><strong>serverless<\/strong><\/a>, codeless, IaaS, <a href=\"https:\/\/blog.testlodge.com\/tdd-vs-bdd\/\" data-type=\"URL\" data-id=\"https:\/\/blog.testlodge.com\/tdd-vs-bdd\/\" target=\"_blank\" rel=\"noreferrer noopener\">TDD <\/a>(Test-Driven Development, Desenvolvimento Orientado a Testes), <a href=\"https:\/\/blog.testlodge.com\/tdd-vs-bdd\/\" data-type=\"URL\" data-id=\"https:\/\/blog.testlodge.com\/tdd-vs-bdd\/\" target=\"_blank\" rel=\"noreferrer noopener\">BDD <\/a>(Behavior Driven Development, Desenvolvimento Orientado a Comportamento), Integration Patterns, Arquitetura Evolutiva, Design System e outras pr\u00e1ticas.<\/p>\n\n\n\n<p>Tudo isso depende das caracter\u00edsticas, dos objetivos e do <strong><a href=\"https:\/\/uds.com.br\/blog\/escopo-de-projeto-de-software-o-que-e-e-como-definir\/\" target=\"_blank\" rel=\"noreferrer noopener\">escopo do projeto<\/a><\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-style-large\" style=\"font-size:14px;font-style:normal;font-weight:300\">\n<p>\u201cVoc\u00ea pode fazer um livro de mil p\u00e1ginas, com uma longa hist\u00f3ria e v\u00e1rios personagens (modelo monol\u00edtico &#8211; <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/waterfall\/\" target=\"_blank\">Waterfall<\/a><\/strong>), um livro de cr\u00f4nicas ou ainda fazer um livro curtinho, com um personagem (modelo Agile). O modelo depende muito da proposta do projeto. A arquitetura poder\u00e1 ou n\u00e3o utilizar microsservi\u00e7os, por exemplo. A decis\u00e3o depende do que o cliente precisa e do or\u00e7amento de que ele disp\u00f5e.\u201d<\/p>\n<cite><em>compara Arthur Teixeira<\/em><\/cite><\/blockquote>\n\n\n\n<p>Por exemplo, um projeto de aplicativo para e-commerce pode n\u00e3o 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.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Quais s\u00e3o as boas pr\u00e1ticas em Arquitetura de Software?<\/strong><\/h2>\n\n\n\n<p>O impacto da escolha do modelo arquitetural influencia aspectos do software como por exemplo:<\/p>\n\n\n\n<ul>\n<li>Performance,&nbsp;<\/li>\n\n\n\n<li>Qualidade,&nbsp;<\/li>\n\n\n\n<li>Facilidade de manuten\u00e7\u00e3o,&nbsp;<\/li>\n\n\n\n<li>Portabilidade,&nbsp;<\/li>\n\n\n\n<li>Flexibilidade&nbsp;<\/li>\n\n\n\n<li>Escalabilidade&nbsp;<\/li>\n\n\n\n<li>Observabilidade<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>Dentre todos esses, os que merecem destaque s\u00e3o a <a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/o-que-e-escalabilidade-de-software\/\" target=\"_blank\"><strong>Escalabilidade<\/strong><\/a> e <a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/o-que-e-escalabilidade-de-software\/\" target=\"_blank\"><strong>Observabilidade<\/strong><\/a>.<\/p>\n\n\n\n<p><strong>A escalabilidade <\/strong>\u00e9 a medida de flexibilidade para aumentar ou diminuir as capacidades do software de lidar com o aumento ou diminui\u00e7\u00e3o de cargas de trabalho, adicionar ou remover usu\u00e1rios com o m\u00ednimo impacto de custo.<\/p>\n\n\n\n<p>Para ser escal\u00e1vel, \u00e9 necess\u00e1rio que o sistema possa<strong> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">sofrer altera\u00e7\u00f5es de forma localizada<\/mark> <\/strong>sem afetar outras partes.&nbsp;<\/p>\n\n\n\n<p><strong>Observabilidade<\/strong> \u00e9 uma caracter\u00edstica de um software cujo comportamento pode ser observado e analisado por indicadores e m\u00e9tricas enquanto ele funciona. Essas informa\u00e7\u00f5es estrat\u00e9gicas e bem detalhadas ajudam a resolver os problemas observados. Ningu\u00e9m deseja ter uma aplica\u00e7\u00e3o com bugs, respostas lentas e outros comportamentos indesejados.<\/p>\n\n\n\n<p>Com a observabilidade, \u00e9 poss\u00edvel avan\u00e7ar para um alto grau de detalhamento sobre o comportamento de um software e entender tudo o que est\u00e1 acontecendo no desenvolvimento ou uso deles. A partir disso, fica mais f\u00e1cil antever falhas e propor melhorias.<\/p>\n\n\n\n<p>Mas para colher resultados de boas pr\u00e1ticas como escalabilidade e observabilidade \u00e9 fundamental definir esses crit\u00e9rios desde o in\u00edcio do projeto.<br><br>Esse foi o caso da plataforma de educa\u00e7\u00e3o financeira <a href=\"https:\/\/uds.com.br\/blog\/o-primo-rico-finclass-desenvolvimento-de-streaming\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Finclass<\/strong><\/a> do <strong>Grupo Primo<\/strong>, que re\u00fane todas as boas pr\u00e1ticas de arquitetura de software aqui elencadas. O aplicativo conta com uma estrutura pr\u00f3pria de streaming (inclusive em 4K), com qualidade cinematogr\u00e1fica de conte\u00fado e sem indisponibilidades, j\u00e1 que o objetivo \u00e9 alcan\u00e7ar mais de 1 milh\u00e3o de assinantes. A plataforma foi criada a partir dos recursos <strong><a href=\"https:\/\/uds.com.br\/blog\/desenvolvimento-de-streaming-com-tecnologia-aws\/\" target=\"_blank\" rel=\"noreferrer noopener\">Amazon Web Services (AWS)<\/a><\/strong>, com alta velocidade de entrega dos conte\u00fados, em ambiente sempre dispon\u00edvel e altamente seguro.<\/p>\n\n\n\n<p>Confira a<strong> <a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/o-primo-rico-finclass-desenvolvimento-de-streaming\/\" target=\"_blank\">\u00edntegra<\/a> <\/strong>do case<strong> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">Primo Rico<\/mark><\/strong> no blog.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>O Processo de Arquitetura de Software<\/strong><\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"740\" height=\"349\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/11\/Boas-praticas-em-arquitetura-de-software-fig1.jpg\" alt=\"\" class=\"wp-image-7249\" srcset=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/11\/Boas-praticas-em-arquitetura-de-software-fig1.jpg 740w, https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/11\/Boas-praticas-em-arquitetura-de-software-fig1-550x259.jpg 550w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><figcaption class=\"wp-element-caption\"><em>Etapas do processo de arquitetura de software.<\/em><\/figcaption><\/figure><\/div>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Padr\u00f5es de Arquitetura de Software<\/strong><\/h2>\n\n\n\n<p>Os padr\u00f5es de arquitetura de software s\u00e3o modelos que podem ser reutilizados, contribuindo para uma estrutura escal\u00e1vel, extens\u00edvel e otimizada.&nbsp;<\/p>\n\n\n\n<p>Cada modelo \u00e9 uma solu\u00e7\u00e3o<strong> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">testada e documentada<\/mark> <\/strong>de um problema recorrente e ajuda na tomada de decis\u00f5es do projeto, como sua utilidade, fun\u00e7\u00f5es e relacionamento com cada subsistema.<br><br><em>Existem diversos padr\u00f5es de arquitetura de software.*<\/em><\/p>\n\n\n\n<p><strong>Arquitetura em camadas (Layered pattern): <\/strong>Os componentes s\u00e3o organizados em camadas horizontais e cada uma delas desempenha um papel espec\u00edfico na aplica\u00e7\u00e3o. Estes componentes s\u00e3o interconectados, por\u00e9m independentes entre si.<\/p>\n\n\n\n<p>O n\u00famero de camadas depende da dimens\u00e3o das aplica\u00e7\u00f5es: as pequenas possuem por volta de 3 camadas; as mais complexas t\u00eam em torno de 5 ou mais.<\/p>\n\n\n\n<p><strong>MVC (Model-view-controller): <\/strong>\u00c9 focado no reuso de c\u00f3digo e tem 3 camadas separadas, mas interconectadas: modelo (manipula\u00e7\u00e3o da l\u00f3gica de dados), a vis\u00e3o (a interface do usu\u00e1rio) e o controlador (fluxo de aplica\u00e7\u00e3o).<\/p>\n\n\n\n<p><strong>Arquitetura de microsservi\u00e7os (Microservices pattern): <\/strong>Consiste em uma cole\u00e7\u00e3o de pequenos servi\u00e7os independentes, sendo que cada servi\u00e7o \u00e9 uma base de c\u00f3digo separado e deve implementar uma \u00fanica funcionalidade em um contexto limitado.<\/p>\n\n\n\n<p><strong>Service-Oriented Architecture (SOA),<\/strong> ou Arquitetura Orientada a Servi\u00e7os: \u00c9 um padr\u00e3o de arquitetura de software em que os componentes s\u00e3o reutiliz\u00e1veis e tamb\u00e9m disponibilizados na forma de servi\u00e7os (unidade ou conjunto de funcionalidades do software).<\/p>\n\n\n\n<p><strong>Publish-Subscribe (Pub\/Sub): <\/strong>Este modelo \u00e9 baseado no envio de mensagens dos Publishers (Publicadores) para Subscribers (Assinantes) em um processo feito de forma ass\u00edncrona. Os assinantes tendem a receber os tipos de mensagens dentro de interesses expressos. Redes sociais como o Instagram e Spotify s\u00e3o arquitetadas neste modelo e v\u00e1rios fornecedores de cloud a oferecem (Google Cloud, Amazon AWS e Microsoft Azure).<\/p>\n\n\n\n<p>* <em>Dependendo dos objetivos do software, os padr\u00f5es podem ser combinados.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Como escolher a arquitetura de software adequada?<\/strong><\/h2>\n\n\n\n<p>A influ\u00eancia da arquitetura se estende por todo o <strong><a href=\"https:\/\/uds.com.br\/blog\/software-web-ciclo-de-vida\" target=\"_blank\" rel=\"noreferrer noopener\">ciclo de vida do software<\/a><\/strong>. Ela define um conjunto de fatores considerando velocidade e o custo de implementa\u00e7\u00e3o, a necessidade de poss\u00edveis mudan\u00e7as no futuro, metas de uso e escala do software, al\u00e9m de recursos para dimensionar equipes.<\/p>\n\n\n\n<p>Aqui est\u00e3o alguns pontos fundamentais que servem como par\u00e2metros da arquitetura mais adequada e sustent\u00e1vel para o seu projeto.<\/p>\n\n\n\n<ul>\n<li>Conhecer os requisitos de alto n\u00edvel e riscos potenciais. Os requisitos de alto n\u00edvel respondem \u00e0 pergunta: \u201cPrecisamos de um software para\u2026\u201d e em geral s\u00e3o levantados junto ao cliente ou usu\u00e1rios.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li>Identificar as necessidades de escala (quantidade de opera\u00e7\u00f5es, volume de dados a serem transacionados, quantidade de usu\u00e1rios, volume de acessos, etc) que o software precisa ou precisar\u00e1 ter futuramente.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li>Identificar as necessidades de seguran\u00e7a e performance que o software precisa ter, visto que o planejamento arquitetural correto influencia totalmente nesses dois quesitos.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li>Definir limites para o or\u00e7amento e os prazos do projeto.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li>Planejar o ciclo de vida do projeto e mant\u00ea-lo. Isso inclui adotar um processo de <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/sdlc-desenvolvimento-seguro\/\" target=\"_blank\">SDLC (Secure Development Lifecycle)<\/a><\/strong> que integra atividades como teste de penetra\u00e7\u00e3o, revis\u00e3o de c\u00f3digo e an\u00e1lise de arquitetura em todas as etapas do processo de desenvolvimento. \u00c9 um processo que ajuda a detectar falhas no in\u00edcio do desenvolvimento, reduzindo os riscos e custos.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2 princ\u00edpios b\u00e1sicos para projetar arquiteturas de software<\/strong><\/h2>\n\n\n\n<p>Complicar \u00e9 f\u00e1cil, simplificar \u00e9 dif\u00edcil.<\/p>\n\n\n\n<p>Em arquitetura de software, complicar \u00e9 introduzir elementos e abstra\u00e7\u00f5es que tornam o desenvolvimento mais propenso a erros \u2013 pode ser uma nova camada, a cria\u00e7\u00e3o de muitas classes, interfaces, etc.&nbsp;<\/p>\n\n\n\n<p>Como simplificar?<\/p>\n\n\n\n<p>H\u00e1 diversos princ\u00edpios que podem ajudar quando consideramos acrescentar uma caracter\u00edstica, copiar trechos de c\u00f3digo desnecess\u00e1rios ou tomar uma decis\u00e3o espec\u00edfica durante a etapa de desenho da arquitetura do software.<\/p>\n\n\n\n<p>Os 2 <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">principais princ\u00edpios<\/mark> <\/strong>que a UDS utiliza para guiar suas decis\u00f5es de arquitetura de software s\u00e3o:<\/p>\n\n\n\n<p><strong>DRY: Don&#8217;t Repeat Yourself<\/strong><\/p>\n\n\n\n<p>Repeti\u00e7\u00e3o \u00e9 desperd\u00edcio. Cada funcionalidade em um projeto deve ser representada apenas uma vez. Adicionar c\u00f3digo desnecess\u00e1rio diminui a sua qualidade, porque aumenta o trabalho para manter o software no futuro. A repeti\u00e7\u00e3o no processo de desenvolvimento de software deve ser eliminada pela automa\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>Suponha que o esfor\u00e7o para se corrigir um bug \u00e9 X. Para um desenvolvedor que copia e cola o mesmo c\u00f3digo em v\u00e1rias partes diferentes do programa, o esfor\u00e7o \u00e9 X vezes a quantidade de c\u00f3pias do mesmo trecho.<\/p>\n\n\n\n<p><strong>KISS: Keep It Simple, Stupid!<\/strong><\/p>\n\n\n\n<p>Significa manter o seu c\u00f3digo o mais simples poss\u00edvel e usar o dinheiro do cliente com sabedoria. Simples assim. \ud83d\ude09<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Requisitos: Como projetar a arquitetura de software?<\/strong><\/h3>\n\n\n\n<p>Cada projeto de software tem requisitos funcionais e n\u00e3o funcionais que orientam sua arquitetura e permitem entregar um produto final com o qual os clientes e outras partes interessadas ficam satisfeitos.<\/p>\n\n\n\n<p>Sem uma compreens\u00e3o clara desses requisitos desde o in\u00edcio, 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.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Identificar e quantificar requisitos n\u00e3o funcionais<\/strong><\/h3>\n\n\n\n<p>Os requisitos funcionais e n\u00e3o funcionais s\u00e3o essenciais para o projeto, porque definem as caracter\u00edsticas do sistema. Os requisitos n\u00e3o funcionais se relacionam a desempenho, usabilidade, seguran\u00e7a, disponibilidade e manuten\u00e7\u00e3o do software.<\/p>\n\n\n\n<p>Mas em arquitetura de software \u00e9 preciso especificar e limitar (ou quantificar) o que \u00e9 \u201cdesempenho\u201d e outras caracter\u00edsticas, como escalabilidade.<\/p>\n\n\n\n<p>Os requisitos devem ser claros e usados \u200b\u200bpara moldar o <strong>escopo do projeto<\/strong>. \u00c9 importante ter em mente que o planejamento de arquitetura provavelmente mudar\u00e1 ao longo do processo de desenvolvimento; assim, o primeiro rascunho \u00e9 diferente do resultado final.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>A import\u00e2ncia do controle de vers\u00e3o<\/strong><\/h2>\n\n\n\n<p>Altera\u00e7\u00f5es e vers\u00f5es diferentes atrapalham. Para guiar o desenvolvimento, organizar o fluxo de trabalho, controlar altera\u00e7\u00f5es e evitar confus\u00f5es no projeto, equipes \u00e1geis costumam adotar um sistema de controle de vers\u00f5es distribu\u00eddo.&nbsp;<\/p>\n\n\n\n<p>Assim, \u00e9 poss\u00edvel acompanhar o n\u00famero de bugs, funcionalidades inseridas durante cada sprint, qual o tempo m\u00e9dio trabalhado em determinadas funcionalidades, al\u00e9m de tornar f\u00e1cil a execu\u00e7\u00e3o do CI\/CD (Continuous Integration\/Continuous delivery), um m\u00e9todo de integra\u00e7\u00e3o e entrega de aplica\u00e7\u00f5es com frequ\u00eancia aos clientes.<\/p>\n\n\n\n<p>O sistema de controle de vers\u00e3o \u00e9 um mapa de refer\u00eancia do hist\u00f3rico das vers\u00f5es anteriores e fonte de verdade que deve acompanhar todo o desenvolvimento do software at\u00e9 o seu lan\u00e7amento. A UDS, por exemplo, utiliza o GitFlow.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclus\u00e3o<\/strong><\/h2>\n\n\n\n<p>A boa arquitetura de software ajuda a minimizar problemas, principalmente em rela\u00e7\u00e3o ao funcionamento, desempenho, prazos e custos. Com boas pr\u00e1ticas de design, clareza e consist\u00eancia, o produto vai estar mais pr\u00f3ximo de atender as necessidades para as quais foi especificado.<\/p>\n\n\n\n<p>Cada projeto \u00e9 \u00fanico e pode combinar diferentes tipos de arquitetura de software, dependendo do objetivo do sistema e do problema que precisa ser solucionado.<\/p>\n\n\n\n<p>Afinal, um software \u00e9 um programa ou aplica\u00e7\u00e3o que visa resolver determinado problema e sua qualidade \u00e9 definida pela capacidade em satisfazer as necessidades de clientes e usu\u00e1rios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A escolha da arquitetura de software ideal depende dos objetivos, escopo e requisitos do projeto. Ela deve priorizar aspectos como escalabilidade, desempenho e observabilidade, garantindo flexibilidade e qualidade. Modelos como microsservi\u00e7os, MVC e Pub\/Sub podem ser combinados para atender \u00e0s necessidades do cliente e do neg\u00f3cio.<\/p>\n","protected":false},"author":8,"featured_media":7250,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[864],"tags":[],"yst_prominent_words":[],"_links":{"self":[{"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/posts\/7220"}],"collection":[{"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/comments?post=7220"}],"version-history":[{"count":0,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/posts\/7220\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/media\/7250"}],"wp:attachment":[{"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/media?parent=7220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/categories?post=7220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/tags?post=7220"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/yst_prominent_words?post=7220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}