UFG - Instituto de Informática
Curso: Engenharia de Software
Arquitetura de Software
Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 2 – Introdução à Arquitetura de SoftwareDefinição de Arquitetura de
Software
“Architecture is defined by the recommended practice as the fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.”
[ANSI/IEEE Std 1471-2000, Recommended Practice for Architectural Description of Software-Intensive Systems]
Arquitetura é definida pela prática recomendada como a organização fundamental de um sistema, consubstanciado em seus componentes, suas relações uns aos outros e ao meio ambiente e os princípios que regem sua concepção e evolução.
Definição de Arquitetura de
Software
Isto estabelece as bases para a compreensão
da disciplina.
Arquitetura capta a estrutura do sistema em
termos de componentes e como eles interagem.
Também define as regras de concepção de
todo o sistema e considera como um sistema pode mudar.
Definição de Arquitetura de
Software
“The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them.”
[L.Bass, P.Clements, R.Kazman, Software Architecture in Practice (2nd edition), Addison-Wesley 2003]
A arquitetura de software de um programa ou sistema computacional é a estrutura ou estruturas do sistema, que incluem elementos de software, propriedades externamente visíveis a estes elementos e os relacionamentos entre eles.
Definição de Arquitetura de
Software
Isso cria um pouco sobre a definição
ANSI/IEEE, especialmente no que que faz o papel de abstração (ou seja, as propriedades externamente visíveis) em uma arquitetura arquitectura e vistas múltiplas (estruturas do sistema) explícita.
Definição de Arquitetura de
Software
“[Software architecture goes] beyond the algorithms and
data structures of the computation; designing and specifying the overall system structure emerges as a new kind of problem. Structural issues include gross organization and global control structure; protocols for communication, synchronization, and data access; assignment of functionality to design elements; physical distribution; composition of design elements; scaling and performance; and selection among design alternatives.”
[D. Garlan, M. Shaw, An Introduction to Software Architecture, Advances in
Software Engineering and Knowledge Engineering, Volume I, World Scientific, 1993]
Definição de Arquitetura de
Software
A arquitetura de software vai além de algoritmos e
estruturas de dados da computação, a concepção e especificação da estrutura geral do sistema emerge como um novo tipo de problema.
Questões estruturais incluem:
a organização e estrutura de controle global;
protocolos de comunicação, sincronização e acesso a
dados;
atribuição de funcionalidade a elementos de design,
distribuição física, composição de elementos de design, escala e desempenho e seleção entre alternativas de
Definição de Arquitetura de
Software
Nesta terceira definição está mais explícito sobre
determinadas questões, tais como escalabilidade e distribuição, que estão implícitos nas duas primeiras.
Independentemente disso, a analisando um pouco
torna possível extrair algumas das características fundamentais de arquiteturas de software.
Arquitetura define estrutura
Muito do tempo de um arquiteto está preocupado em
como particionar sensatamente uma aplicação em um conjunto de componentes inter-relacionados, módulos, objetos ou qualquer unidade de particionamento software funciona para você.
Diferentes requisitos de aplicativo e restrições irão
definir o significado preciso de "sensatez" na frase anterior.
Uma arquitetura deve ser projetada para atender as
exigências e restrições específicas da aplicação a que se destina.
Exemplos
Um requisito para um sistema de gerenciamento de
informações pode ser um aplicativo deve ser distribuído em vários sites, e uma restrição é que algumas funcionalidades e os dados devem residir em cada local.
Outro requisito é a funcionalidade de um aplicativo
Exemplo
Ambos impõem algumas restrições estruturais (site
específico, servidor web) e, simultaneamente, abrir caminhos para a criatividade design considerável em termos de funcionalidade de particionamento através de uma coleção de componentes relacionados.
Arquitetura define estrutura
No particionamento de uma aplicação, o
arquiteto atribui responsabilidades para cada componente constituinte.
Estas responsabilidades definem as funções de
um componente pode ser invocada para executar dentro do aplicativo.
Desta forma, cada elemento desempenha um
papel específico na aplicação, e o conjunto de componentes em geral, que compreende a arquitetura colabora para fornecer a funcionalidade necessária.
Arquitetura define estrutura
Design baseado em responsabilidade é uma técnica
de orientação a objetos que podem ser utilizados de forma eficaz para ajudar a definir os principais componentes de uma arquitetura.
Ele fornece um método baseado em ferramentas
informais e técnicas que enfatizem a modelagem comportamental por meio de objetos, responsabilidades e colaborações.
Arquitetura define estrutura
Uma questão-chave estrutural para quase todos os
aplicativos é minimizar as dependências entre os componentes, criando uma arquitetura de baixo acoplamento de um conjunto de componentes altamente coesivo.
A dependência existe entre os componentes, quando
a mudança em um força potencialmente a mudança em outro.
Ao eliminar dependências desnecessárias, as
mudanças são localizadas e não se propagam ao longo de uma arquitetura
Arquitetura define estrutura
Dependências excessivas são simplesmente
uma coisa ruim.
Eles fazem com que seja difícil de fazer
alterações em sistemas, mais caro para testar as alterações, eles aumentam o tempo de construção, e eles fazem o desenvolvimento, concomitante com base em equipas mais difícil.
Arquitetura define comunicação
de componente
Quando um aplicativo é dividido em um
conjunto de componentes, torna-se necessário pensar sobre como esses componentes se comunicam dados e informações de controle.
Arquitetura define comunicação
de componente
Os componentes em uma aplicação podem:
Existir no mesmo espaço de endereço, e se
comunicar através de chamadas de método direto.
Eles podem executar em diferentes segmentos ou
processos, e comunicam através de mecanismos de sincronização.
Ou vários componentes podem precisar de ser
simultaneamente informados quando um evento ocorre no ambiente da aplicação.
Arquitetura define comunicação
de componente
Existem diversas formas de codificar que ficaram
conhecidas coletivamente como padrões ou estilos arquitetônicos. Estes padrões catalogaram um número de estruturas usadas com sucesso para facilitar certos tipos de comunicação entre componentes.
Cada padrão tem características bem conhecidas que
o tornam adequado a ser usado para satisfazer a determinados tipos de exigências.
Exemplo
O padrão Cliente-Servidor tem várias características úteis:
Comunicação síncrona de Solicitação-Resposta do cliente para
o servidor
Servidores de apoio a um ou mais clientes através de uma
interface publicada.
Opcionalmente, os clientes podem estabelecer sessões com os servidores, que podem manter o estado sobre seus clientes conectados.
Arquiteturas Cliente-Servidor também deve fornecer um mecanismo para os clientes para localizar servidores, lidar com erros e, opcionalmente, oferecer segurança no acesso ao servidor. Todas estas questões são abordadas no padrão de arquitetura Cliente-Servidor.
Arquitetura define comunicação
de componente
O poder dos padrões de arquitetura decorre da
sua utilidade e capacidade de transmitir informações do projeto.
Os padrões são provados para trabalhar.
Se for usado adequadamente em uma
arquitetura, você aproveita os conhecimentos existentes de design usando padrões.
Arquitetura define comunicação
de componente
Grandes sistemas tendem a utilizar padrões múltiplos,
combinados de forma que satisfaçam os requisitos de arquitetura.
Quando uma arquitetura é baseada em padrões, ele
também se torna fácil para os membros da equipe para entender um projeto, como infere o padrão da estrutura dos componentes, comunicações e mecanismos abstratos que devem ser fornecidas.
Arquitetura define comunicação
de componente
Quando alguém me diz que seu sistema é
baseado em uma arquitetura cliente-servidor de três camadas, sabe-se imediatamente uma quantidade considerável sobre seu projeto.
Este é um mecanismo de comunicação muito
Arquitetura atende recursos
não-funcionais
Os requisitos não funcionais são aqueles que
não aparecem nos casos de uso.
Ao invés de definir o que o aplicativo faz, eles
estão preocupados com a forma como o aplicativo fornece a funcionalidade necessária.
Arquitetura atende recursos
não-funcionais
Há três áreas distintas de requisitos
não-funcionais:
Restrições Técnicas Restrições de Negócio Atributos de Qualidade
Restrições Técnicas
Estes serão familiares a todos. Eles limitam as opções
de projeto, especificando certas tecnologias que o aplicativo deve usar.
“Nós temos apenas os desenvolvedores Java, por isso temos de desenvolver em Java.”
“O banco de dados existente é executado no Windows XP.”
Restrições de Negócio
Esta também é uma restrição de opções de design,
mas para o negócio, não por razões técnicas.
Por exemplo: “A fim de alargar a nossa base de clientes em potencial, temos de interface com ferramentas XYZ.” “O fornecedor de nosso middleware elevou os preços proibitivos, por isso estamos nos movendo para uma versão de código aberto.”
Atributos de Qualidade
Estes definem os requisitos de uma aplicação em termos de: Disponibilidade;
Escalabilidade;
Facilidade de mudança; Portabilidade;
Usabilidade;
Desempenho e assim por diante.
Atributos de qualidade atendem questões de interesse para
usuários do aplicativo, bem como outras partes interessadas como a própria equipe do projeto ou o patrocinador do projeto.
Arquitetura atende recursos
não-funcionais
Uma arquitetura de aplicação deve abordar
explicitamente os aspectos do projeto.
Arquitetos precisam entender os requisitos
funcionais, e criar uma plataforma que suporta esses e simultaneamente satisfaz os requisitos não-funcionais.
Arquitetura é uma abstração
Uma das mais úteis, mas muitas vezes
inexistentes, as descrições de uma perspectiva arquitetônica é algo que é conhecido coloquialmente como Marketecture.
Marketecture é um excelente veículo para
facilitar a discussão pelas partes interessadas durante o projeto, construção, revisão e, claro:
Arquitetura é uma abstração
Uma Marketecture cuidadosamente trabalhada
é particularmente útil porque é uma descrição abstrata do pedido.
Na realidade, qualquer descrição arquitetônica
deve empregar abstração para serem compreendidos pelos membros da equipe e os interesses do projeto.
Arquitetura é uma abstração
Geralmente descreve-se os componentes da
arquitetura como caixas pretas, precisando apenas de suas propriedades visíveis exteriormente.
É claro que, descrevendo a estrutura do
sistema e do comportamento como coleções de abstrações de comunicação de caixa preta é normal para os profissionais que utilizam técnicas de design orientado a objeto.
Arquitetura é uma abstração
Um dos mecanismos mais poderosos para
descrever uma arquitetura é a decomposição hierárquica.
Os componentes que aparecem em um nível
de descrição são decompostos em mais detalhes na documentação do projeto de acompanhamento.
Arquitetura é uma abstração
Diferentes níveis de descrição na hierarquia
tendem a ser de interesse de desenvolvedores diferentes em um projeto.
A arquitetura claramente particiona as
responsabilidades de cada equipe, definindo as dependências entre eles.