Pular para o conteúdo principal

O que é Arquitetura de Software?

A arquitetura de software é descrição abstrata, na forma de modelos, de diferentes visões do sistema em termos de unidade (partes) que interagem entre si.

Arquitetura não é uma fase do desenvolvimento, mas o resultado das decisões de design sobre a estrutura e o comportamento do software. Mesmo que esta atividades não tenha sido deliberadamente realizada, vale ressaltar que:


  • Todo software tem uma arquitetura
  • A arquitetura pode ser analisada por diferentes pontos de vista  (visões arquiteturais)


A arquitetura deve dar suporte à funcionalidade do sistema (requisitos funcionais) e deve estar em conformidade com a qualidade (requisitos não-funcionais).

O design arquitetural é o processo de tomar as decisões que visa definir estrutura e comportamento para atender aos requisitos funcionais e não-funcionais. Um bom arquiteto deve conhecer diferentes modelos e estilos de arquitetura e saber aplica-los de forma a atender aos requisitos.

Um dos princípios básicos para organização da estrutura e comportamento é manter uma alta coesão e um baixo acoplamento entre as unidades, como ilustrado na figura abaixo. Uma unidade com alta coesão mantém unidades dependentes entre si agrupadas em uma unidade maior. Isto implica que unidades dependentes e com alto grau de comunicação e dependência entre si estejam localizadas numa mesma unidade mais abstrata. Os benefícios deste princípio são:

  • Facilitar a manutenção e modificação de uma determinada unidade.
  • Permitir a substituição de unidade por outra.
  • Diminuir a comunicação entre as unidades mais abstratas, o que pode significar um baixo tráfego na rede.


As unidades (ou partes) que formam podem variar dependendo da visão utilizada. Por exemplo, numa visão de execução, as partes podem ser vistas como componentes e conectores. Os componentes podem ser partes que estão em execução como processos ou threads e os conectores os mecanismos de comunicação entre estes processos. Exemplos de conectores são memória compartilhada ou pipes entre processos do Unix/Linux.

Numa visão de implementação ou de código, as unidades podem ser módulos que oferecem serviços a outros módulos. Estes módulos devem estar ligados entre si através de interfaces bem definidas (API) e organizados de acordo com os serviços. É muito comum termos APIs organizadas em camadas, como nas interfaces de usuário gráficas (GUI).

Existem na literatura várias propostas de visões arquiteturais, como em :

  • Hofmeister, Nord e Soni, - Applied Software Architecture, Addison Wesley, 2000;
  • Bass, L.; Clements, P. and Kazman, R. - Software Architecture in Practice - Second Edition, Addison-Wesley 2003.


Comentários

Postagens mais visitadas deste blog

O Modelo Espiral

O objetivo do modelo espiral é prover um metamodelo que pode acomodar diversos processos específicos. Isto significa que podemos encaixar nele as principais características dos modelos vistos anteriormente, adaptando-os a necessidades específicas de desenvolvedores ou às particularidades do software a ser desenvolvido. Este modelo prevê prototipação, desenvolvimento evolutivo e cíclico, e as principais atividades do modelo cascata. Sua principal inovação é guiar o processo de desenvolvimento gerado a partir deste metamodelo com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento. Riscos são circunstâncias adversas que podem surgir durante o desenvolvimento de software impedindo o processo ou diminuindo a qualidade do produto. São exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc.

O Modelo Evolutivo

O modelo evolutivo descreve um processo na qual o software deve ser desenvolvido de forma a evoluir a partir de protótipos iniciais. Para entender melhor este modelo é importante entender o que é prototipação (ou prototipagem). Prototipação é uma abordagem baseada numa visão evolutiva do desenvolvimento de software, afetando o processo como um todo. Esta abordagem envolve a produção de versões iniciais - "protótipos" - de um sistema futuro com o qual pode-se realizar verificações e experimentações para se avaliar algumas de suas qualidades antes que o sistema venha realmente a ser construído. Objetivos da Prototipação Num projeto de software várias questões podem ser respondida com a construcão de protótipos. Nas situações típicas de desenvolvimento podemos distinguir entre diferentes objetivos na prototipação: Exploratória - é quando o protótipo é usado para ajudar a esclarecer requisitos dos usuários com respeito ao sistema futuro. Uma prototipação também é exploratória

Sistemas Computacionais

Um sistema computacional (ou baseado em computador) é aquele que automatiza ou apóia a realização de atividades humanas através do processamento de informações. Um sistema baseado em computador é caracterizado por alguns elementos fundamentais. Hardware Software Informações Usuários Procedimentos ou Tarefas Documentação O hardware corresponde às partes eletrônicas e mecânicas (rígidas) que possibilitam a existência do software, o armazenamento de informações e a interação com o usuário. A CPU, as memórias primária e secundária, os periféricos, os componentes de redes de computadores, são exemplos de elementos de hardware. Um único computador pode possibilitar a existência de diversos sistemas e um sistema pode requisitar diversos computadores. O software é a parte abstrata do sistema computacional que funciona num hardware a partir de instruções codificadas numa linguagem de programação. Estas instruções permitem o processamento e armazenamento de informações na for