Pular para o conteúdo principal

O que é Arquitetura de Software?

Neste post eu procuro explicar um pouco sobre o que é arquitetura de software e qual a necessidade de um arquiteto, procurando um pouco de ordem no meio do aparente "caos" das diversas definições e classificações existentes.

Arquitetura de software é um daqueles termos que todo mundo sabe (ou acha que sabe) o que é, mas não consegue definir. Outros exemplos desses termos são requisitos e qualidade. Quando perguntamos a alguém o que é isso a resposta clássica é: eu sei o que é mas não sei explicar! E parece que não há um consenso entre as associações e organizações que criam as definições "oficiais" utilizadas pela indústria do software! Não é que elas briguem entre si, mas não existe uma definição única. Cada nova organização que se mete no assunto acha que falta alguma coisa na definição presente e resolve acrescentar algo ou mudar a forma de descrever.

Isso ocorre porque esses termos são abstratos e englobam muitos conceitos em uma coisa só. Por isso existem tantas definições! Cada uma foca em alguns aspectos que considera mais importantes e elas acabam se complementando. É por isso também que os termos acabam ainda tendo várias classificações, para tentar restringir os conceitos englobados pela definição mais genérica. No caso específico de arquitetura acaba gerando tipos como: arquitetura corporativa, arquitetura de informações, arquitetura de dados, arquitetura de sistemas, arquitetura de software, arquitetura de soluções, etc.

Quando entramos na classificação mais detalhada é que começam a ocorrer inconsistências entre as diversas definições. E o pior é que na maioria das empresas as pessoas acabam se referindo aos tipos de arquitetura como se fossem definições totalmente claras e bem consolidadas. Ok, e como é que nós profissionais de arquitetura e desenvolvimento de software podemos lidar com isso?

Minha sugestão é focar nos conceitos fundamentais, que acabam sendo sempre os mesmos. Para cada definição específica de arquitetura varia a que se aplicam esses conceitos. No caso de arquitetura, uma definição concisa que eu gosto é: "Arquitetura é a definição dos elementos que compõem uma estrutura e como eles se relacionam". Quando entramos em algo mais específico como "Arquitetura de Software" o que muda é a definição de quem são os elementos utilizados, qual a estrutura e possibilidades de relacionamento entre eles. E quem seriam os elementos e a estrutura para arquitetura de software? A estrutura é o próprio software e os elementos são os constituintes do software como:

  • classes
  • componentes
  • serviços

A arquitetura define como são organizados esses elementos para montar o software e o arquiteto é o responsável pela sua criação. Mas o mais importante é saber quais as possíveis escolhas e que fatores influenciam na sua seleção. Aí entra a caixa de ferramentas do arquiteto (conjunto de possíveis escolhas/soluções) e os requisitos que o software deve atender (permitem selecionar quais as soluções viáveis/interessantes)

Esse é um tema muito interessante e extenso e pretendo escrever mais sobre o papel de um arquiteto em futuros posts, pois este post já está ficando maior do que eu pretendia! De qualquer forma esse tipo de discussão é algo que procuro trazer aos cursos mais avançados de arquitetura da Globalcode, como a Academia do Arquiteto e o curso oficial Oracle Arquiteto de Aplicações Enterprise Java EE. Nas últimas turmas tivemos discussões bem interessantes com uma grande troca de experiências entre os alunos!

Até o próximo post onde vou falar um pouco mais sobre os fatores que devem ser considerados na escolha de uma arquitetura e o papel do arquiteto

[]s
Kleber Xavier

Comentários

amanda silva disse…
gostaria de saber qual a arquitetura do linux e windows
Unknown disse…
Este comentário foi removido pelo autor.
Carolina disse…
Ótimo texto, obrigada!

Postagens mais visitadas deste blog

Saiba como programar para Arduino sem ter nenhum hardware disponível

O Arduino já é uma tecnologia muito difundida entre os amantes de tecnologia. É difícil encontrar um profissional da computação que não brincou um pouco com esta ferramenta de prototipagem ou, que gostaria de fazer isso. Porém, em alguns casos, o programador quer conhecer o arduino mas não dispõe de nenhum hardware, nem mesmo da placa. Como isso poderia ser resolvido? A primeira resposta seria aquela mais simples e direta: ir as compras. Isso pode ser feito em uma loja física ou pela internet. No meu caso, por exemplo, tive a felicidade de encontrar em um site (não me lembro qual) um kit arduino, com um conjunto de sensores e um DVD com 41 vídeo aulas. Mas digamos que o profissional não esteja passando por um bom momento financeiro, ou ainda, simplesmente não queira comprar o Arduino sem antes conhecê-lo um pouco melhor. Para a última situação também já existe uma resposta, e diga-se de passagem, uma excelente resposta. Trata-se do site 123D Circuits.io . Depois de criar seu u

Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados

Nesse post, diferente dos últimos que foram mais enfáticos nas experiências com tecnologias, vou focar um pouco mais nos profissionais que estão começando, ou pretendem ingressar na área de desenvolvimento de software, falando sobre conceitos fundamentais relacionados a programação em geral . Mercado de trabalho para programação Conforme já sabemos, o mercado de desenvolvimento de software, especialmente no Brasil, continua em franca expansão, sendo que cada vez mais as empresas buscam desenvolver seus próprios sistemas usando as mais diferentes e novas tecnologias. Algumas matérias interessantes: As seis profissões mais valorizadas em 2010 no IDG Now! Muitas vagas e sensação de reaquecimento da economia Por isso, a área de desenvolvimento de software tem despertado interesse em muitos profissionais de outras áreas que desejam mudar de profissão, já que as oportunidades de trabalho tendem a ser maiores. Esse é um perfil presente em muitos dos clientes da Globalcode que acabou m

JSON fácil em Java com GSon !

Ola pessoal ! O formato JSON ( J ava S cript O bject N otation) vem se consagrando cada vez mais na comunicação de dados, principalmente nos dispositivos móveis devido a esse formato ser mais leve que o XML e também mais legível. Uma prova disso são as inúmeras bibliotecas que existem para manipular esse formato, e no caso do Android, o suporte ao JSON é nativo. Mas apesar de ter esse suporte nativo, algumas operações devem ser feitas manualmente e o código acaba ficando um pouco verboso e repetitivo, já que para cada objeto que se deseja transmitir é necessário fazer um método que lê as propriedades do JSON e faz as devidas atribuições no seu objeto Java. Vamos supor o seguinte objeto sendo transmitido em JSON: {   user: {     id: 123456,     name: "Neto Marin",     username: "netomarin",     email: "netomarin@globalcode.com.br"   } } Se você fosse tratar um Webservice que envia esse JSON para o seu aplicativo Android, além de criar a o