Conhecendo um pouco de Arquitetura de Software

Olá pessoal…

Você já se perguntou o que é Arquitetura de Software? Nessa postagem do Ti, iremos responder algumas perguntas, e dar uma base de estudo sobre o tema.

Afinal, o que é Arquitetura de Software?
A Arquitetura de Software tem um conceito que pode parecer fácil, mas, ao mesmo tempo, é difícil defini-lo com precisão.

A Arquitetura abrange tanto a parte de design, quanto a parte estrutural e de algoritmos de um sistema, visando definir um fluxo com um controle total dos elementos do sistema, tais como elementos de design, composição dos elementos, escalonamento do sistema, desempenho, etc.

Assim sendo, ela serve então para definir os componentes, elementos e propriedades do sistema, além dos relacionamentos internos e com outros softwares otimizando o fluxo.

E quais são os motivos que a torna necessária?
Sem a Arquitetura de Software, coisas simples que usamos no dia a dia, talvez não existissem, ou simplesmente não seriam nada práticas em sua utilização.

Um bom exemplo é o padrão MVC que foi arquitetado para separar os códigos em 3 partes distintas, o Modelo (lógica do negócio), a Visão (componentes visuais) e o Controlador (controla o fluxo entre o modelo e visão, fazendo outras coisas como persistência). Sem o MVC, os sistemas antigos dependiam de funções para persistir, para mostrar os dados, para gravar, etc. Com o MVC, você se preocupa com a cada elemento de forma separada, e assim otimiza o tempo de desenvolvimento e evita retrabalhos.

Ou seja, com Arquitetura de Software nós podemos conseguir:

  • Otimização de tempo no desenvolvimento;
  • Integridade no fluxo de informações;
  • Encapsulamento das informações;
  • Abstrações de modularizações do Sistema;
  • Suporte ao reúso e reaproveitamento de componentes;
  • Aumento da qualidade, desempenho e confiabilidade do sistema;

Em que momento, esse conceito começou a ser consolidado?
O conceito começou a ser consolidado quando surgiu as primeiras técnicas para o particionamento de programas, como por exemplo, a modularização e decomposição funcional, que introduzem conceitos de funções, procedimentos, módulos e classes que permitem particionar um programa em unidades menores.

Olhando para Sistemas, qual é a diferença entre Arquitetura e Projeto?
Projeto é fazer todo o mapeamento de estruturas e funcionalidades, transformando em um documento que será usado na construção do software.

Já a arquitetura, é “separar” as camadas de um software para deixá-lo otimizável.

Quais são os benefícios de particionar o software em componentes?
Podemos citar a otimização no tempo de desenvolvimento, já que com a separação em pequenos módulos fica mais fácil a manutenção.

Além disso, a integridade das informações, pois com uma manutenção em poucos módulos, é possível garantir a integridade levada ao banco.

Outro benefício, seria a segurança da informação, pois com a abstração e encapsulamento, os dados ficam mais protegidos do que em várias partes do sistema.

Quais são as visões da Arquitetura de Software?

  • Visão de Projeto (ou Lógica): É a visão ligada ao problema do negócio, independente das decisões do projeto, nela que ficam as coleções de pacotes, classes e relacionamentos, os responsáveis geralmente são Analistas e Desenvolvedores.
  • Visão de Processo (ou Concorrência): Divide o sistema em processos e processadores onde o sistema é dividido em linhas de execução com processos concorrentes (threads), essa visão mostra como é a comunicação e concorrência entre as threads, é essa visão que cuida do Desempenho, Confiabilidade, Tolerância e Falhas.
  • Visão de Caso de Uso (+1): Descreve o sistema como um conjunto de transações (funcionalidades) sendo vistas por atores externos. O +1 é usado pois é no Caso de Uso que é mapeado as demais visões, mostrando como os elementos interagem entre si.
  • Visão de Implementação: Descreve a implementação dos módulos e suas dependências, é utilizada para saber como distribuir o trabalho de implementação e manutenção entre os membros da equipe, geralmente os responsáveis são Desenvolvedores.
  • Visão de Implantação: Contém a parte física do sistema e a conexão entre as subpartes, nela que é mostrado as partes físicas do sistema, computadores, periféricos e como eles se conectam entre si, ela é executada pelos desenvolvedores, integradores, testadores, sendo geralmente representada por um diagrama de implantação que considera o ambiente de desenvolvimento, teste e produção.

Quais são os princípios de design da Arquitetura de Software?

  • Abstração: É a habilidade de concentrar nos aspectos essenciais.
  • Modularização: É a divisão do sistema em partes distintas.
  • Encapsulamento: Juntar o programa em partes (o mais isoladas possível)
  • Reutilização: Reutilizar trechos de códigos já criados, com o objetivo de maximizar o sistema.
  • Generalização: Construção do software para ser o mais genérico possível, oferecendo serviços de propósito geral.

O que são Padrões?
Um padrão é uma descrição do problema e a essência da sua solução, ele documenta boas soluções para problemas recorrentes, e deve ser abstrato para ser reutilizado em aplicações diferentes.

O que é contexto, problema e solução conforme a Proposta de Padrões segundo Christopher Alexander?

  • Contexto: Composição de dados, axiomas e constantes presentes no enunciado de um problema, ou seja, questões ambientais, legais, culturais, sociais, etc pertinente ao projeto.
  • Problema: Um problema pode ser dividido em uma infinidade de subproblemas, que podem ser divididos em dois conceitos, Contexto e Forma (parte variável e manipulável pelos arquitetos). A partir disso é analisado e criado listas de requisitos e tabelas entre o Contexto e a Forma.
  • Solução: Assim como o nome sugere, é a Solução prevista para um problema, sendo que essa solução pode ser usada diversas vezes, sem que isso acarrete em resultados incoerentes.

No contexto de desenvolvimento de software, o que é “padrões”?
Padrão pode se referir a diferentes níveis de abstração no desenvolvimento de sistemas orientados a objetos, assim existem padrões arquiteturais, padrões de análise, padrões de projeto, padrões de código, etc.

Qual a diferença entre padrões e métodos?
Os padrões diferem dos métodos, pois eles que complementam os métodos, como o de análise, projeto gerais e independentes de problemas.

O que são padrões arquiteturais?
Padrões arquiteturais expressam formas de organizar a estrutura fundamental do sistema, permitindo a construção de uma arquitetura aderente a propriedades, assim ajudando na definição da arquitetura do sistema.
Um exemplo de padrão arquitetural é o MVC, onde o código é separado em Modelo, Visão e Controlador.

Referências:
funpar.ufpr.br
devmedia.com.br
dimap.ufrn.br
inf.ufpr.br
homepages.dcc.ufmg.br
homepages.dcc.ufmg.br
vitruvius.com.br
conteudo.icmc.usp.br

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação