Buscar

Arquitetura de Sistemas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 323 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 323 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 323 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Introdução à arquitetura de sistemas
APRESENTAÇÃO
Você já ouviu falar em arquitetura de sistemas? Assim como na construção civil, a arquitetura 
de um sistema tem a finalidade de criar uma estrutura conceitual que mostre ao cliente e à 
equipe de desenvolvimento uma visão geral do sistema antes que a sua construção se inicie. 
Trata-se de um elemento importante no processo de desenvolvimento de software, consistindo 
em um modelo a ser seguido no qual são definidos os componentes do sistema e como esses 
componentes vão funcionar e se interligar.
O uso de princípios de arquitetura está diretamente relacionado ao tipo de sistema que será 
desenvolvido. Por exemplo, uma arquitetura em camadas pode ser ideal para um tipo de sistema, 
enquanto uma arquitetura orientada a objetos pode ser uma solução melhor para outro tipo de 
sistema.
Nesta Unidade de Aprendizagem, você vai conhecer o conceito de arquitetura de sistemas e a 
sua importância, identificando os tipos de arquitetura e relacionando estes no desenvolvimento 
de sistemas.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Reconhecer a arquitetura de software e sua importância.•
Identificar os tipos de arquiteturas.•
Relacionar a escolha do tipo de arquitetura para o desenvolvimento de sistemas.•
DESAFIO
Escolher a arquitetura de um sistema é um dos passos decisivos para a implementação deste. 
Apesar da existência de diversos gêneros de sistemas, as arquiteturas disponíveis são restritas 
em número. Além disso, vale destacar que um sistema pode ter, inclusive, mais de um tipo de 
arquitetura.
Nesse contexto, para este Desafio, imagine que você foi convidado para integrar a equipe de 
desenvolvimento de um sistema para um software de gestão escolar. Esse sistema precisa conter 
todas as funções básicas disponíveis em um sistema deste gênero, sendo elas: 
 
Cadastrar Aluno;•
Cadastrar Coordenador;•
Cadastrar Curso;•
Cadastrar Responsável;•
Cadastrar Professor;•
Gerar Diário;•
Emitir Relatórios;•
Inserir Notas;•
Emitir Boletos;•
Calcular Salários.•
Entre outras requisitadas pelos clientes.
Assim, perante as funções apresentadas, indique ao menos duas arquiteturas que poderão ser 
funcionais para este caso e justifique a sua resposta.
INFOGRÁFICO
A arquitetura de software consiste em uma área da Engenharia de Software que se preocupa com 
a escolha dos elementos do sistema, suas funcionalidades e a maneira como eles se integram 
para formar o sistema. Assim, durante o projeto de arquitetura, diversos elementos devem ser 
considerados, desde os requisitos levantados pelo usuário até os sistemas que irão interagir com 
o sistema que será desenvolvido.
Pensando nisso, neste Infográfico, você vai conhecer o diagrama de contexto arquitetural, uma 
representação gráfica que exibe todos os elementos externos ao sistema-alvo. 
CONTEÚDO DO LIVRO
Elemento importante da Engenharia de Software, a arquitetura de sistemas objetiva facilitar a 
comunicação entre todas as partes envolvidas no desenvolvimento de um sistema 
computacional. Dessa forma, envolve decisões durante a fase inicial que podem impactar toda a 
construção do projeto e o produto final, e que, quando bem conduzidas, levam o projeto a 
alcançar a satisfação do cliente.
No capítulo Introdução à arquitetura de sistemas, da obra Arquitetura de sistemas, você vai 
estudar a importância dessa arquitetura, além de conhecer seus tipos, relacionando-os, por 
fim, com o desenvolvimento de softwares.
Boa leitura.
ARQUITETURA DE 
SISTEMAS
Paulo Antonio Pasqual Júnior
Introdução à arquitetura 
de sistemas
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
  Reconhecer a arquitetura de software e sua importância.
  Identificar os tipos de arquiteturas.
  Relacionar a escolha do tipo de arquitetura para o desenvolvimento 
de sistemas.
Introdução
A arquitetura de sistemas é um elemento importante da engenharia de 
software, em que são definidos quais componentes farão parte de um 
sistema e como eles se comunicarão. Definir a arquitetura é importante 
principalmente para que a equipe de desenvolvimento tenha uma visão 
geral do que será o produto do software. 
Existem diversos tipos de arquitetura de sistemas. Escolher uma ar-
quitetura é fundamental para garantir um template, que será o nortea-
dor do desenvolvimento do sistema. Neste capítulo, você vai estudar a 
arquitetura de um software, verificando sua importância e identificando 
os tipos de arquitetura existentes. Por fim, você vai analisar a escolha do 
tipo de arquitetura no desenvolvimento de sistemas. 
Conceitos fundamentais
Quando pensamos em arquitetura de sistemas, é comum fazermos analogias 
com a construção civil, assim como é comum comparar a engenharia de sof-
tware com as outras engenharias. A arquitetura de sistemas é uma subárea da 
engenharia de software. Enquanto a primeira se preocupa com as características 
do sistema, dos elementos necessários e das suas interrelações, a segunda se 
preocupa com todos os processos que envolvem o desenvolvimento de um 
produto de software, abrangendo a concepção, o gerenciamento do projeto e 
o desenvolvimento do produto.
Apesar de as analogias com a construção civil serem úteis para que en-
tendamos esses conceitos, é importante ressaltar que arquitetura de software 
não é uma área independente, como é o caso da arquitetura no âmbito da 
construção civil. Pressman e Maxim (2016, p. 253) definem arquitetura de 
software da seguinte forma: “A arquitetura de software de um programa ou 
sistema computacional é a estrutura ou as estruturas do sistema que abrange 
os componentes de software, as propriedades externamente visíveis desses 
componentes e as relações entre eles”.
Pressman e Maxim (2016) ainda acrescentam que a arquitetura do sistema 
consiste em um modelo relativamente pequeno e compreensível acerca de como 
o sistema será estruturado e como os seus componentes vão se comunicar. 
Gallotti (2016) complementa essa definição ao dizer que, quando falamos da 
arquitetura de um software, estamos nos referindo à estrutura interna do seu 
sistema. Basicamente, ela explica como um software se organiza, funciona, 
além da forma como é implementado. 
As analogias entre a arquitetura e a engenharia no âmbito da construção civil são 
comuns para que entendamos os processos no campo do desenvolvimento de sistemas. 
Contudo, é importante ressaltar que a arquitetura de sistemas não é uma área distinta 
da engenharia de software; na verdade, a arquitetura de sistemas é uma subárea da 
engenharia de software. 
Ao fazermos uma analogia, mais uma vez, com a construção civil, o projeto 
arquitetônico se preocupa basicamente em satisfazer os requisitos do cliente 
e apresentar para ele uma ideia concreta do projeto. Por exemplo, imagine o 
projeto de uma casa; o arquiteto, após levantar os requisitos com o cliente, vai 
elaborar uma planta e uma visualização em 3D do que ele apreendeu a partir 
do que foi estabelecido pelo cliente. O arquiteto vai escolher os elementos que 
Introdução à arquitetura de sistemas2
ele julga ideais, incluindo formas e acabamentos, para que o projeto esteja 
mais próximo do que foi solicitado. 
Nesse sentido, Sommerville (2007) explica que o projeto de arquitetura 
é o primeiro passo no processo do desenvolvimento de software, sendo o 
elo entre o projeto e a engenharia de requisitos, já que identifica os prin-
cipais componentes estruturais do software. O autor ainda ressalta que a 
importância do projeto de arquitetura de sistemas está relacionada ao 
desempenho e à robustez, além da capacidade de manutenção e distribuição 
do sistema. 
Normalmente, em uma empresa de desenvolvimento de software, os pro-
cessos envolvendo o projeto de arquitetura e o desenvolvimento do sistema 
ocorrem paralelamente, e as funções são compartilhadas entre arquitetos 
de sistema e desenvolvedores de software. Dificilmenteuma equipe será 
responsável apenas pela programação, enquanto outra fica responsável pela 
modelagem. Isso porque essa distinção de responsabilidades não faz sentido, 
já que, geralmente, o processo de desenvolvimento de software ocorre em 
ciclos iterativos, que podem modificar o projeto original. 
Ao se considerar a arquitetura de um sistema, são analisados principalmente os requi-
sitos apontados pela equipe responsável pelo levantamento de requisitos. Analisar 
detalhadamente os requisitos contribui para que a escolha da arquitetura esteja de 
acordo com os objetivos do desenvolvimento do sistema. 
Pressman (2011) explica que a arquitetura de sistemas é importante por 
três motivos. Em primeiro lugar, as diversas representações da arquitetura 
de software permitem a comunicação entre todas as partes envolvidas no 
desenvolvimento de um sistema computacional. Em segundo lugar, porque a 
arquitetura implica em decisões durante a fase inicial que impactam todo o 
desenvolvimento do projeto e o produto final de software. Por fim, a arquitetura 
se constitui como um modelo mental de como o sistema será estruturado e 
como os seus componentes trabalharão em conjunto. 
3Introdução à arquitetura de sistemas
Nesse contexto, Sommervile (2007), baseado em outros autores, amplia 
a reflexão sobre a importância da arquitetura do sistema, apontando as três 
vantagens do projeto de arquitetura de software listadas a seguir.
  Comunicação de stakehoders: refere-se à capacidade de a arquitetura 
representar, em alto nível, o sistema, garantindo assim uma comunicação 
entre as partes interessadas. 
  Análise do sistema: a análise do sistema permite que a arquitetura 
torne explícitos alguns elementos do sistema ainda na fase inicial, o 
que permite à equipe analisar detalhes do sistema que não poderiam 
ser considerados sem um projeto arquitetural. 
  Reúso de componentes: como a arquitetura do sistema mapeia os 
componentes e suas relações, o projeto de arquitetura viabiliza a reu-
sabilidade de software para sistemas com requisitos semelhantes. 
Sommerville (2007) ainda aponta que o uso de um projeto de arquitetura 
contribui para viabilizar discussões acerca do sistema, já que possibilita uma 
visão de alto nível do sistema. Além disso, o autor argumenta que o projeto 
de arquitetura possibilita uma forma de documentação do sistema, em que 
são explicitados os componentes, suas propriedades e suas interpelações.
A escolha da arquitetura pode contribuir para que o projeto nasça ali-
nhado aos requisitos para os quais ele será desenvolvido. Definir um tipo de 
arquitetura de sistemas corrobora para que sejam detalhados e desenvolvidos 
componentes que poderão ser reutilizados mais tarde, além de garantir a ma-
nutenibilidade de cada um desses componentes de forma mais simples. Dessa 
forma, o arquiteto de software terá, dentre outras funções, a responsabilidade 
de mapear quais são esses componentes e como eles vão interagir com os outros 
elementos do sistema. Além disso, o arquiteto precisa ser capaz de identificar 
os componentes e saber quais deles podem ser reutilizados, melhorando o 
tempo de desenvolvimento. 
Tipos de arquitetura de sistemas
As decisões que devem ser tomadas em relação às arquiteturas de sistemas 
podem ser classifi cadas utilizando diversos fatores. Uma visão dessa classi-
fi cação pode ser observada na Figura 1.
Introdução à arquitetura de sistemas4
Figura 1. Estruturas das arquiteturas fundamentais.
No âmbito da arquitetura de sistemas, podemos elencar três elementos 
fundamentais para qualquer projeto.
1. Componentes: unidades principais do sistema; podem ser caracte-
rizados por módulos de software com responsabilidades específicas 
dentro do sistema.
2. Propriedades: elementos que se referem às particularidades de cada 
componente. 
5Introdução à arquitetura de sistemas
3. Conectores: caracterizados por todas as formas de conexão entre os 
componentes de um sistema. Eles podem ser caracterizados por cha-
madas de métodos, envio e requisição de mensagens e outras formas 
que garantem a interação entre os componentes do sistema. 
Entre os componentes, as propriedades e os conectores que podem ser 
usados no âmbito da arquitetura de sistemas, Pressman (2011) aponta as prin-
cipais como “estruturas de arquitetura canônicas”, as quais se encontram 
listadas a seguir. 
  Estrutura funcional: os componentes se referem a entidades que 
refletem funcionalidade. Os conectores se referem à capacidade das 
interfaces em transmitir dados para um componente e, desse modo, 
fornecer a capacidade de uso. Já as propriedades se referem à descrição 
dos componentes e à organização das interfaces. 
  Estrutura de implementação: nessa estrutura, os componentes se 
referem a elementos para “empacotar” funcionalidades em vários níveis 
de abstração, como classes, funções, métodos, objetos, etc. Os conectores 
se referem a como esses elementos vão se comunicar dentro do sistema, 
transmitindo dados de controle e instâncias de objetos e compartilhando 
dados. As propriedades se referem a elementos de qualidades como 
manutenibilidade e reusabilidade. 
  Estrutura de concorrência: nessa estrutura, os componentes são res-
ponsáveis por representar estruturas para tarefas paralelas ou threads. 
Os conectores “[...] incluem as relações sincronizações-com, é-de-maior 
prioridade-que, envia-dados-a, não-é-possível-executar-sem e não-é-
-possível-executar-com” (BASS, 2003 apud PRESSMAN, 2010, p. 235).
  Estrutura física: os conectores consistem nas interfaces entre os com-
ponentes de hardware, já as propriedades se referem a desempenho, 
largura da banda, entre outros aspectos. 
  Estrutura de desenvolvimento: refere-se aos componentes, artefatos 
e outras fontes que são necessárias durante o desenvolvimento dos 
processos da engenharia de software. Os conectores têm a função de 
representar o relacionamento entre os artefatos e as propriedades, iden-
tificando as características de cada item. Já as propriedades identificam 
as características de cada item. 
Introdução à arquitetura de sistemas6
Outro elemento fundamental no processo de escolha da arquitetura é a 
definição do gênero arquitetural do sistema. Pressman (2011) entende gê-
nero como uma categoria particular de sistemas; nesse sentido, inclui toda a 
variedade de produtos de software, como aplicativos, sistemas comerciais, de 
escritório e tantos outros. Cada um desses gêneros de arquitetura demandam 
a existência de estruturas específicas a serem modeladas e desenvolvidas. A 
seguir, estão listados alguns exemplos de gêneros de arquitetura de sistemas, 
com base em Pressman (2011). 
  Inteligência artificial
  Comercial
  Comunicações
  Autoria de conteúdo
  Dispositivos
  Esportes e entretenimento
  Financeiros
  Jogos
  Governo
  Industriais
  Legais
  Médicos
  Sistemas operacionais
  Plataformas
  Científicos
  Ferramentas
  Transportes
  Serviços públicos
A partir da definição do gênero arquitetural, também devem ser definidos os 
estilos de arquitetura que poderão nortear o projeto. Existem diversos estilos 
de arquitetura de sistemas; Pressman (2011), ao exemplificar esses estilos, 
faz a analogia com os estilos arquitetônicos presentes nas casas americanas. 
Segundo o autor, quando se fala em estilo colonial americano com hall central, 
muitas pessoas familiarizadas com esse estilo arquitetônico já imaginarão do 
que se trata (PRESSMAN, 2011). Do mesmo modo, os estilos arquitetônicos 
no âmbito de sistemas consistem, segundo Pressman (2011, p. 234), em um “[...] 
um template para a construção”.
Ou seja, é por meio da definição de estilos que se podem considerar as 
características personalizadas a serem acrescentadas ao produto que será 
desenvolvido. Nesse sentido, o estilo arquitetônico de um sistema define o 
conjunto de componentes, as conexões entre eles, as restrições e os modelos 
semânticos que permitem que o projetista compreenda as propriedades gerais 
de um sistema.De acordo com Pressman e Maxim (2016), embora muitos 
sistemas tenham sido desenvolvidos nos últimos anos, a maior parte deles 
pode ser classificada em pequenos estilos de arquitetura. 
7Introdução à arquitetura de sistemas
  Arquitetura centralizada em dados: consiste em sistemas que 
compartilham o banco de dados ou um sistema de arquivos como 
elemento central do sistema. Todos os componentes do sistema se 
comunicam individualmente, tendo como elo apenas o banco de dados. 
A troca de informação é feita entre os componentes do sistema e o 
banco de dados. 
  Arquitetura de fluxo de dados: é um tipo de arquitetura que é aplicada 
quando dados de entrada devem ser transformados passando por várias 
etapas, em um fluxo dentro do próprio sistema, até as etapas de saída. 
Geralmente, um componente se comunica com outro de forma restrita 
e interdependente. 
  Arquitetura de chamadas e retornos: consiste em uma arquitetura em 
que o programa é desenvolvido de forma hierárquica, por meio de um 
programa principal, que pode acessar outros subprogramas e, assim, 
sucessivamente. Esse tipo de arquitetura é útil, pois essa estrutura 
é relativamente fácil de aumentar e modificar, segundo Pressman e 
Maxim (2016). 
  Arquiteturas orientadas a objetos: são sistemas baseados em classes 
e objetos com certo grau de encapsulamento, em que a comunicação e 
a coordenação ocorrem entre os objetos por meio de mensagens. 
  Arquitetura em camadas: praticamente todo sistema, independente-
mente da sua função, é baseado em camadas. Essa arquitetura consiste 
em níveis que vão da interface (camada mais externa) até a camada 
central (mais próxima da linguagem de máquina).
De maneira geral, a partir da escolha da arquitetura do sistema, ficarão 
evidenciadas as camadas que o sistema terá. Se a arquitetura for de um sistema 
operacional, obviamente as camadas serão diferentes de um software de gestão 
empresarial. Entre as camadas comuns em um software, temos: 
  interface;
  camada de negócios;
  camada central.
Uma vez definida a arquitetura do sistema e as camadas que serão utiliza-
das, cada uma dessas camadas será desenvolvida com as suas especificidades. 
Introdução à arquitetura de sistemas8
Definir a arquitetura e as camadas de um sistema pode contribuir também 
para que os próximos projetos de software sejam desenvolvidos de forma 
mais rápida e com menor número de erros. Isso ocorre porque essas camadas 
podem ser reaproveitadas para outros sistemas similares. 
Um exemplo bastante simples é o uso da interface. Imagine um sistema de cadastro 
e gerenciamento de clientes que foi desenvolvido para uma empresa X. Quando 
a equipe de desenvolvimento de software precisar desenvolver um outro software 
do mesmo gênero, a interface será muito próxima da que já está desenvolvida, 
assim como o banco de dados. Assim, bastará integrar o novo sistema às camadas 
já existentes. Como essas camadas já foram utilizadas outras vezes e testadas, a 
probabilidade da incidência de erros será muito menor do que se o sistema fosse 
desenvolvido desde o início.
No âmbito dos estilos de arquitetura, Sommerville (2007) ainda acres-
centa a arquitetura cliente-servidor, que consiste em uma arquitetura 
baseada em serviços, ou seja, cada cliente acessa o servidor para ter acesso 
aos dados e funcionalidades específicas. Muitos sistemas possuem esse 
tipo de arquitetura; em especial, esse tipo de arquitetura privilegia sistemas 
distribuídos. 
Arquitetura de sistemas e desenvolvimento 
de software
Quando você pensa em tipos de arquitetura, o que vem à sua mente? É pos-
sível que você imagine diferentes tipos de construções, sejam elas casas ou 
prédios. Enfi m, podemos pensar em diversos tipos de arquitetura — clássica, 
colonial, moderna, entre outras. Mais uma vez pensando na analogia com 
a construção civil, quando um arquiteto começa a desenvolver um projeto, 
certamente ele já terá em mente a arquitetura em que ele se baseará. O mesmo 
acontece quando falamos em arquitetura de sistemas. Antes que o processo 
9Introdução à arquitetura de sistemas
de desenvolvimento seja iniciado, é provável que o arquiteto de sistemas, a 
partir dos requisitos apontados pela equipe, seja capaz de indicar um tipo de 
arquitetura a ser seguida. 
Suponha que um cliente tenha solicitado um game para computador. Assim, o arquiteto 
de software deverá determinar quais componentes desse sistema serão necessários 
para que a aplicação funcione, bem como quais serão as formas de conectar cada 
um desses componentes. Da mesma forma que um software comercial, um game 
possui uma interface e um banco de dados, além das especificidades de um game, 
que são diferentes daquelas de outras arquiteturas. Por exemplo, o game poderá 
ser controlado por teclado, controle ou mouse? Poderá se comunicar com algum 
sensor de movimento? Quais outras questões são distintas de um software de gestão? 
Todas essas questões deverão ser consideradas para que a escolha, a modelagem e 
o desenvolvimento do sistema esteja de acordo com os requisitos necessários para 
viabilizar o projeto. Ao definir a arquitetura, deve-se mapear não só esses elementos, 
mas também as interpelações entre eles. 
Para construir uma arquitetura, é importante considerar a utilização 
de diagramas de contexto arquitetural e de arquétipos; enfim, deve ocor-
rer o refinamento da arquitetura. O diagrama de contexto arquitetural 
(Figura 2) é utilizado para mapear e modelar a maneira como o software vai 
interagir com entidades externas, conforme aponta Pressman (2011). Nesse 
contexto, o sistema que está sendo desenvolvido é representado como o 
centro do processo, e são expressas no diagrama as relações com os sistemas 
apresentados a seguir.
  Sistemas superiores: consistem em sistemas que usam o sistema-alvo. 
  Sistemas subordinados: sistemas que são utilizados pelo sistema-alvo. 
  Sistemas de mesmo nível: consistem em sistemas que compartilham 
informação com o sistema-alvo.
  Atores: consistem em entidades, pessoas ou dispositivos que utilização 
o sistema, como se pode observar na Figura 2.
Introdução à arquitetura de sistemas10
Figura 2. Diagrama de contexto arquitetural.
Fonte: adaptada de Pressman (2016).
Os arquétipos são utilizados para representar conceitos e conhecimentos 
de um domínio específico. São descritos como modelos formais e reutilizáveis 
do conceito do domínio, que são aplicados nos vários cenários em que esses 
conceitos são utilizados. Por exemplo, a pressão sanguínea pode ser repre-
sentada pelos valores da pressão sistólica e diastólica, pela data e horário em 
que a pressão foi aferida e pelo local onde a pressão foi aferida. Sempre que 
a pressão sanguínea precisar ser utilizada, o modelo conceitual da pressão 
será utilizado. Os arquétipos formam a base da arquitetura, mas devem ser 
refinados à medida que a arquitetura é detalhada. 
Na sequência, os componentes da arquitetura devem ser definidos com 
base no domínio da aplicação, na infraestrutura e no diagrama de contexto 
arquitetural. Os componentes da arquitetura devem, portanto, ser modelados. 
Por fim, uma das etapas finais do projeto de arquitetura consiste em desenvolver 
uma instância real do problema, mostrando que a estrutura e os componentes 
projetados são adequadas à necessidade do software. 
11Introdução à arquitetura de sistemas
Ao fim do processo de projeto de arquitetura, é comum que outro processo 
se inicie: o processo de avaliação do projeto. Nessa fase, são analisados os 
projetos de arquitetura e, a partir de uma série de princípios, são analisados 
os pontos fortes e fracos da arquitetura escolhida para o desenvolvimento do 
sistema. Esse processo pode ocorrer imediatamente após o projeto de arqui-
tetura, ou poderá ocorrer durante a implementação do sistema. 
Pressman (2011) aponta três modelos para a avaliação de um projeto de 
arquitetura. O primeiro corresponde a analisar o projeto desde os casos de 
uso, passando por fases de elicitação de requisitose descrição de estilos, 
pela análise de atributos de qualidade, entre outras fases, até chegar ao ponto 
em que são analisados os pontos fortes das arquiteturas candidatas. Uma 
segunda forma, ainda segundo o autor, consiste em avaliar a complexidade da 
arquitetura a partir da análise dos componentes e de suas interdependências. 
Como última forma de avaliação, Pressman (2011) aponta a utilização de uma 
linguagem formal para o mapeamento da arquitetura, que pode contribuir para 
um processo de avaliação mais formal. Tendo esses processos finalizados, 
o sistema então poderá ser implementado, levando em consideração todos 
os aspectos elencados pela equipe de projeto e a avaliação da arquitetura 
de sistemas. 
No âmbito do desenvolvimento do sistema, da escolha e do projeto de arqui-
tetura, Sommerville (2007) ressalta a necessidade de se focar nos requisitos 
não funcionais, uma vez que eles estão diretamente vinculados à arquitetura 
do sistema. Nesse sentido, o autor lista alguns exemplos de requisitos não 
funcionais que podem ser influenciados pela arquitetura do sistema, são eles: 
desempenho, proteção, segurança, disponibilidade e manutenção. 
Por exemplo, se o desempenho for um requisito não funcional, o sistema não poderá 
estar organizado em uma série de pequenos componentes, que levam tempo para 
serem acessados e geram um feedback tardio para o usuário. Do mesmo modo, se um 
requisito não funcional for a segurança, um módulo de segurança deve estar restrito 
ao menor número de componentes possível, o que possibilita maior segurança em 
relação aos dados desse sistema. 
Introdução à arquitetura de sistemas12
Sommerville (2007) ainda aponta que, muitas vezes, dependendo dos 
requisitos não funcionais, pode haver conflitos; por exemplo: o uso de grandes 
componentes melhora o desempenho, mas o uso de pequenos componentes 
melhora a manutenibilidade. Se desempenho e manutenibilidade forem requi-
sitos não funcionais, é preciso avaliar uma arquitetura que possa contemplar, 
ao menos em partes, ambos os requisitos não funcionais. 
O autor aponta que, muitas vezes, o projeto de arquitetura pode ser desneces-
sário, quando o sistema é relativamente pequeno e simples de desenvolver, ao 
passo que, no caso de sistemas críticos, o projeto de arquitetura contribui para 
a redução de possíveis falhas do sistema. Em síntese, o projeto de arquitetura 
se relaciona com o desenvolvimento do sistema, na medida em que fornece um 
modelo conceitual, que, ainda no início da fase de desenvolvimento, possibilita 
uma visão geral do sistema, com base não apenas nos requisitos funcionais, 
mas também nos requisitos não funcionais. 
GALLOTTI, G. M. A. (org.). Arquitetura de Software. São Paulo: Pearson Education do 
Brasil, 2016.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 7. ed. Porto 
Alegre: McGraw-Hill, 2011.
PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem profissional. 8. 
ed. Porto Alegre: AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 8. ed. São Paulo: Pearson Addison Wesley, 2007.
Leitura recomendada
BARBOSA. G. M. G. Um livro-texto para o ensino de projeto de arquitetura de software. 
2009. Dissertação (Mestrado em Ciência da Computação) — Centro de Engenharia 
Elétrica e Informática, Universidade Federal de Campina Grande, Campina Grande, 
SP, 2009.
13Introdução à arquitetura de sistemas
DICA DO PROFESSOR
Analisar a melhor arquitetura para um projeto pode parecer uma tarefa difícil. No entanto, 
existem diversas formas para realizar essa escolha, seja baseada nos requisitos ou no 
desenvolvimento de protótipos. O Software Engineering Instituite (SEI) desenvolveu um 
método que analisa os pontos fortes e fracos de possíveis arquiteturas para um projeto de 
sistema. 
Acompanhe, nesta Dica do Professor, mais detalhes sobre esse método e conheça as seis 
atividades de análise propostas pelo instituto. 
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) A arquitetura de um sistema é uma área importante da Engenharia de Software, 
responsável por definir um modelo para o sistema que será projetado. Entre as ações 
relacionadas com o projeto de arquitetura de sistemas, é possível citar:
A) definir o processo de inspeção do sistema.
B) determinar o processo de desenvolvimento de um componente.
C) determinar como a interface do sistema se comunicará com as outras camadas do sistema.
D) elencar e testar os componentes de um sistema.
E) definir as métricas de qualidade no âmbito do desenvolvimento do sistema.
2) A escolha de uma arquitetura de sistemas pode minimizar a quantidade de erros e 
aumentar o sucesso de um sistema. Dentro desse contexto, está correto inferir que:
A) definir a arquitetura do sistema contribui para o reúso e para a manutenção do sistema.
B) é tarefa da arquitetura de sistemas elicitar requisitos.
C) uma vez definida a arquitetura do sistema, não é possível alterá-la.
D) a arquitetura do sistema diz respeito aos processos de desenvolvimento do software.
E) a arquitetura do sistema é responsável por estabelecer o fluxo de desenvolvimento do 
software.
3) Existem diversos estilos de arquitetura de sistemas. A figura a seguir representa o 
modelo conceitual de um desses estilos. 
Analisando a imagem, qual sistema pode se adequar nesse modelo? E qual é esse estilo 
de arquitetura?
A) Um sistema de bibliotecas com diversos componentes que se comunicam com um 
repositório de dados. Arquitetura centralizada em dados.
B) Um sistema de faturas em que informações avançam por um fluxo. Arquitetura de fluxo de 
dados.
C) Um sistema bancário em que os componentes são representados por classes que se 
comunicam com um diretório central de dados. Arquitetura orientada a objetos.
D) Um sistema de análises clínicas desenvolvido em várias camadas que se comunicam entre 
si. Arquitetura em camadas.
E) Um sistema de gerenciamento de rede em que vários componentes se comunicam com um 
servidor central. Arquitetura cliente-servidor.
4) Um determinado cliente elaborou a seguinte lista de requisitos para um sistema de 
atendimento ao público em um hospital:
a. A interface do sistema deve ser baseada em um avatar.
b. O sistema deve ser capaz de interagir com o usuário como se fosse um ser humano.
c. O sistema deve aprender e se ajustar a cada novo atendimento.
Baseando-se nessas informações, que gênero de arquitetura de sistemas poderá ser 
utilizado para o desenvolvimento desse sistema?
A) Negócios.
B) Inteligência Artificial.
C) Plataformas.
D) Jogos.
E) Sistemas de saúde.
5) Certa empresa de desenvolvimento de software necessita desenvolver um sistema 
para um banco com algumas funcionalidades, tais como: sacar, depositar, criar 
conta, investir, realizar pagamentos, entre outras. Um requisito não funcional 
prioritário é que esse sistema possua alta manutenibilidade e que partes dele possam 
ser aproveitadas para os próximos módulos que serão desenvolvidos para esse banco. 
Sendo assim, qual é o melhor estilo de arquitetura para este sistema?
A) Arquitetura centralizada em dados.
B) Arquitetura cliente-servidor.
C) Arquitetura de chamadas e retornos e arquitetura orientada a objetos.
D) Arquitetura em camadas e arquitetura de duto e filtro.
E) Arquitetura orientada a objetos e arquitetura em camadas.
NA PRÁTICA
Geralmente, definir a arquitetura do sistema é um passo importante para o desenvolvimento de 
um projeto de software. Em muitos casos, pode ser necessário desenvolver sistemas ou módulos 
para sistemas que já estão implementados. 
Neste Na Prática, acompanhe um caso hipotético no qual uma arquitetura é proposta a partir das 
características do sistema.
SAIBA +
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Arquitetura em camadas com uso do paradigma MVC e processo unificado na 
programação de software orientado a objetos
O seguinte artigo apresenta uma aplicação do paradigma arquiteturalde camadas como subsídio 
para a qualidade de software. Confira.
Conteúdo interativo disponível na plataforma de ensino!
Um modelo de arquitetura para sistemas gerenciadores de dados na Web
No artigo a seguir, atente-se para o Capítulo 6 - Prova de conceito do modelo de arquitetura 
para um SGDW, em que é apresentada a aplicação de um sistema com arquitetura cliente-
servidor.
Conteúdo interativo disponível na plataforma de ensino!
Engenharia de software: uma abordagem profissional 
A fim de conhecer uma série de elementos importantes para compreender e aplicar princípios de 
arquitetura de sistemas, leia o Capítulo 13 - Projeto de arquitetura desta obra.
Reúso de software
APRESENTAÇÃO
Desenvolver um software não é uma tarefa simples. Trata-se de um processo caro e lento, 
acompanhado pela pressão por: busca de redução de custos, alcance de ganhos em qualidade do 
produto e diminuição de tempo no desenvolvimento. Sendo assim, através do reúso de software 
é possível evitar retrabalho no desenvolvimento de um novo projeto, levando em consideração 
trabalhos anteriores e fazendo com que soluções previamente desenvolvidas sejam aproveitadas 
e implementadas em novos contextos, aumentando, dessa forma, a qualidade e a produtividade 
dos projetos.
Nesta Unidade de Aprendizagem, você vai identificar os benefícios e também os problemas do 
reúso do software, analisando a construção de softwares utilizando componentes e reconhecendo 
o conceito de frameworks.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Contrastar os benefícios e os problemas do reúso do software.•
Explicar o conceito de frameworks.•
Analisar a construção de softwares utilizando componentes.•
DESAFIO
O desenvolvimento de um software é um processo que requer atividades organizadas, análise de 
requisitos, além de implementação e teste para manter e implantar o sistema. Sua construção 
pode ser do "zero" ou contar com reúso de software, utilizando, assim, da experiência de outros 
desenvolvedores através de padrões estabelecidos e testados.
Para este Desafio, imagine que você é desenvolvedor de softwares e trabalha na Empresa 
Refactor Code, a qual precisa da implementação de uma nova aplicação.
Acompanhe o caso:
 
Avaliando os quesitos apresentados e prezando por um sistema que satisfaça o cliente e seja 
implementado de maneira inteligente e com o intuito de pular tarefas repetitivas, resolva 
a seguinte questão:
Sabendo que a linguagem de programação utilizada no projeto é o Java, qual framework, 
componente ou API seria mais adequado para implementação do banco de dados dessa 
aplicação? Cite algumas vantagens que comprovem sua escolha.
 
INFOGRÁFICO
O termo reúso compreende uma série de técnicas que podem ser utilizadas, as quais vão desde a 
etapa de modelagem de um projeto até a implementação. Nesse sentido, uma boa técnica de 
reúso de software deve assegurar de forma assertiva a adaptação ao novo contexto.
Tendo isso em vista, acesse o Infográfico a seguir para conhecer as diferentes técnicas de reúso, 
possibilitando comparações, e para entender melhor o que é reúso, suas vantagens e 
desvantagens.
CONTEÚDO DO LIVRO
O reúso de software não é uma atividade nova; ganhou força na década de 1980, quando os 
projetos se tornaram mais complexos e as empresas se obrigaram a procurar formas de facilitar o 
desenvolvimento. A reutilização de software traz conceitos, produtos e soluções já 
implementados, testados e aprovados para a criação de um software. 
No capítulo Reúso de software, da obra Arquitetura de sistemas II, base teórica desta Unidade 
de Aprendizagem, você verá conceitos associados à reutilização de softwares, às vantagens e 
desvantagens do reúso, além de conhecer tipos de reúso e de facilidades em utilizar frameworks 
e softwares baseados em componentes. 
Boa leitura.
ARQUITETURA DE 
SISTEMAS II
Aline Maciel Zenker
Reúso de software
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
  Contrastar os benefícios e os problemas do reúso do software.
  Explicar o conceito de frameworks.
  Analisar a construção de softwares utilizando componentes.
Introdução
Reúso vem do termo reutilizar e consiste em reaproveitar algo que já 
foi desenvolvido, testado e aprovado. O ato de reutilizar é próprio do 
processo de solução de problemas. Uma vez que se encontre a solução 
de um problema específico, essa solução poderá ser aplicada em outras 
situações em que o problema seja semelhante. O termo reúso, quando 
aplicado ao desenvolvimento de software, está atrelado a uma série de 
análises da engenharia de desenvolvimento de software.
O reúso de software é baseado em conceitos, produtos ou soluções 
elaboradas ou adquiridas na criação de um software novo. Antes de criar 
o software do zero, verifica-se a existência de um projeto semelhante que 
resolva o problema. Reutilizar um software não é apenas uma técnica; 
trata-se de um processo contínuo que a empresa precisa adotar na cria-
ção de projetos e que traz diversas vantagens ao desenvolvimento — e 
algumas dificuldades. A motivação maior em fazer reúso de software é o 
aumento dos níveis de qualidade e produtividade no desenvolvimento. 
Neste capítulo, você vai entender como funciona o reúso de software 
e quais são as vantagens e desvantagens em fazê-lo. Você também vai 
estudar os tipos de reúso, especialmente o reúso com utilização de fra-
meworks, e vai analisar a construção de softwares utilizando componentes.
Origem do reúso de software
Reutilizar especifi cações da engenharia, módulos de um projeto, arquitetura 
e código-fonte de um software não é uma atividade nova. Ao contrário do 
âmbito social, em que o ato de reutilizar normalmente é associado à imitação 
e à falta de criatividade, no desenvolvimento de software, a utilização de 
componentes que já foram aplicados, testados e validados traz aumento de 
produtividade, qualidade e segurança ao software.
Segundo Devmedia (2011), o reúso de software foi introduzido no início 
na década de 1960, quando Doug McIlroy, matemático e informático norte-
-americano, demonstrou interesse em softwares que funcionassem como 
circuitos integrados (CIs) e que pudessem ser fabricados em massa. McIlroy 
examinou os tipos de variabilidade necessários aos CIs e os possíveis tipos 
de CIs que poderiam ser padronizados. Sua visão era baseada na indústria 
de componentes eletrônicos, que podiam ser selecionados em catálogos de 
diferentes fabricantes, apresentando propriedades configuráveis e diferentes 
níveis de confiabilidade.
Mesmo tendo sido conceituado em 1968, o reúso de software ganhou ênfase 
somente na década de 1980, quando os projetos se tornaram mais complexos, 
e as empresas se obrigaram a procurar formas de facilitar o desenvolvimento. 
Foi em 1980 que o primeiro projeto de pesquisa universitário teve o tema de 
reutilização, coordenado por Peter Freeman, na Universidade da Califórnia.
A partir disso, o reúso de software passou a ser considerado uma maneira 
promissora para desenvolver sistemas, ajudando a organização a aumentar a 
produtividade e a qualidade dos projetos. O reúso pode ser aplicado a qualquer 
ciclo de vida de produtos, não apenas ao código-fonte.
Atualmente, existe uma conferência sobre reúso de software, a Conferência Internacional 
sobre Software e Reutilização de Sistemas (ICSR, do inglês International Conference 
on Software Reuse). Trata-se de um evento mundial que ocorre anualmente. A ICSR 
é o principal evento no campo da pesquisa, tecnologia e prática de reutilização de 
software e sistemas. O principal objetivo da ICSR é apresentar os mais recentes avanços 
na área de reutilização de software e sistemas e promover uma troca de ideias intensa 
e contínua entre pesquisadores e profissionais.
Reúso de software2
Vantagens e desvantagens em reutilizar softwares
A principal motivação para o reúso está relacionada àqualidade e à produ-
tividade no desenvolvimento de software. Porém, o reúso apresenta muitas 
outras vantagens quando aplicado de forma efetiva e sistemática, conforme 
descrito a seguir.
1. Melhorias na qualidade de software:
 ■ qualidade do código;
 ■ produtividade;
 ■ confiabilidade.
2. Melhorias na produção:
 ■ entregas mais rápidas;
 ■ menores custos.
3. Melhorias na manutenção do software:
 ■ redução de riscos nos processos;
 ■ reúso de componentes;
 ■ conformidade com padrões;
 ■ validação e testes.
Porém, o reúso de software pode trazer problemas ou obstáculos em sua 
aplicação, conforme elencado a seguir.
  falta de apoio de ferramenta — os ambientes de desenvolvimento podem 
não estar preparados para reutilização;
  dificuldade em encontrar um componente reutilizável para o projeto 
em questão;
  custo maior — muitos componentes não são livres de licença;
  falta de manutenção da biblioteca de componentes escolhida;
  falta de conhecimento/maturidade da equipe para poder aplicar com-
ponentes de reúso;
  falta de padrão no projeto.
Mesmo com algumas dificuldades, as vantagens oferecidas no reúso de 
um projeto se sobressaem, desde que o mesmo seja aplicado de forma correta 
e com responsabilidade.
3Reúso de software
Os autores Kotonya e Sommerville (1998 apud DEVMEDIA, 2011, documento on-line) 
afirmam que “50% dos requisitos normalmente são os mesmos para sistemas e domínios 
semelhantes. O fato de os sistemas serem diferentes conceitualmente e terem diferentes 
stakeholders não significa que eles não possuem requisitos comuns”.
Tipos e técnicas de reúso
Decidir por fazer reúso de software é uma escolha da empresa, que deve estar 
ciente das inúmeras vantagens e dos desafi os ou difi culdades que poderão 
surgir. O reúso pode ser aplicado em qualquer ciclo do projeto, desde a cria-
ção até a implantação do mesmo. É possível fazer a reutilização de ideias, 
especifi cações do projeto, artefatos, códigos-fonte e áreas de testes.
Quando mencionamos o ciclo de vida de um projeto, abordamos uma área 
muito importante a qualquer projeto: a engenharia de software. A engenharia 
de software é responsável pelo estabelecimento de técnicas e práticas para 
o desenvolvimento de software, cobrindo uma ampla área de aplicações e 
diferentes tipos de dispositivos.
O reúso de software pode ser aplicado por meio de técnicas distintas, 
conforme apresentado no Quadro 1. A escolha pela técnica mais apropriada 
vai depender dos requisitos do sistema, da tecnologia disponível, dos dispo-
sitivos de ativos reusáveis e do conhecimento e da experiência da equipe de 
desenvolvimento do projeto.
Tipo de reúso 
de software Abordagem
Padrão de arquitetura Padrões de arquitetura de software que oferecem 
suporte a tipos comuns de sistemas de aplicação; 
são usados como base para outras aplicações.
Padrões de projeto Abstrações genéricas que ocorrem em 
todas as aplicações; são representadas como 
padrão de projetos, podendo ser utilizadas 
em diversos projetos orientados a objetos.
Quadro 1. Tipos e técnicas de reúso
(Continua)
Reúso de software4
Fonte: Adaptado de Sommerville (2011).
Tipo de reúso 
de software Abordagem
Desenvolvimento 
baseado em 
componentes
Subsistemas que são integrados 
para criação da aplicação.
Frameworks de aplicações Coleção de classes abstratas e concretas; 
são adaptadas e estendidas para 
criar sistemas de aplicações.
Empacotamento de 
sistemas legados
Sistemas legados; são empacotados pela 
definição de interfaces de acessos.
Sistemas orientados 
a serviços
Sistemas desenvolvidos pela criação 
de serviços compartilhados.
Linhas de produto 
de software
Família de aplicações desenvolvidas em 
torno de uma arquitetura comum.
Reúso de produtos COTS 
(commercial off-the-shelf )
Sistemas desenvolvidos pela configuração e 
interação de sistemas de aplicação existentes.
Sistemas de ERP (enterprise 
resource planning) 
Sistemas de grande porte que sintetizam a 
funcionalidade e as regras de negócios genéricos.
Aplicações verticais 
configuráveis
Sistemas genéricos; são projetados para 
poderem ser configurados para as necessidades 
dos clientes de sistemas específicos.
Bibliotecas de programas Classes e funções que implementam 
abstrações comumente usadas.
Engenharia dirigida 
a modelos
O código é gerado a partir de modelos de 
domínio e modelos de implementação.
Geradores de programas Um sistema gerador incorpora o 
conhecimento de um tipo de aplicação.
Desenvolvimento de 
software orientado 
a aspectos
Técnica avançada de modularização de 
código para apoiar a reutilização.
Quadro 1. Tipos e técnicas de reúso
(Continuação)
5Reúso de software
Reúso por frameworks
Frameworks são projetos de subsistemas constituídos por uma estrutura 
genérica para criar uma aplicação. Possuem um conjunto de classes, objetos 
e componentes, que favorecem o desenvolvimento por meio do reúso desses 
componentes. Sua implementação no paradigma orientado a objetos é com o 
uso de coleção de classes concretas e abstratas. 
São características básicas de um framework orientado a objetos:
  estrutura reutilizável, bem-documentada e de fácil entendimento;
  estrutura extensível, isto é, suas funcionalidades são abstratas (sem 
implementação), para facilitar o uso e possibilitar que sejam completadas 
com as ações e os parâmetros que o sistema precisar;
  possui uma linguagem segura, evitando que sua estrutura seja destruída 
ao ser utilizado.
Como exemplos de frameworks populares, podemos citar os seguintes frameworks 
em Java:
  Hibernate: framework de persistência — site: https://hibernate.org/
  Java Bean Validator: framework para validação — site: https://beanvalidation.org/
  Spring MVC: framework Web — site: https://spring.io/
Vantagens e desvantagens do uso de frameworks
Muitas equipes de desenvolvimento utilizam frameworks nas suas aplicações, 
trabalhando de forma mais efi caz e criando facilidades na construção de 
sistemas. Mas essa é apenas uma das vantagens da utilização de frameworks. 
Existem outras vantagens no uso de frameworks, bem como desafi os e difi -
culdades. São vantagens do uso de frameworks:
  Eficiência: o desenvolvimento é facilitado, por não ter a necessidade 
de implementar tantas linhas de código, uma vez que diversas rotinas 
comuns estão prontas no framework.
Reúso de software6
  Custo: existem muitos frameworks disponíveis de forma gratuita e no 
modelo open source.
  Apoio técnico: a maioria dos frameworks possui documentação rica 
em detalhes e com explicação de sua aplicação.
  Segurança: códigos são altamente testados e utilizados. Assim, o 
nível de segurança é mais alto, e qualquer falha é avisada e corrigida 
rapidamente.
  Padrões de codificação: para utilizar o framework, é preciso utilizar o 
padrão de escrita determinado por ele. Isso aprimora o código e melhora 
a legibilidade, facilitando o entendimento e a manutenção.
Agora, você pode observar as desvantagens do uso de frameworks:
  Dependência: ao utilizar o framework, sua aplicação fica amarrada a 
ele; caso o mesmo seja descontinuado ou seja atualizado com quebra 
de compatibilidade, o projeto deve ser reestruturado.
  O framework não é uma linguagem: isso significa que o desenvolvedor 
terá que aprender como o mesmo funciona, como é implementado; 
ou seja, deverá aprender as peculiaridades do framework, e não da 
linguagem.
  Sua modificação central não é tão simples: o código-base do fra-
mework normalmente é complexo; o desenvolvedor deve ter conhe-
cimento pleno para que possa modificar sua estrutura, a fim de não 
danificar o uso do framework e prejudicar a aplicação.
  Códigos desnecessários: ao escolher o framework, é importante atentar 
para as funcionalidades e evitar escolher um framework complexo para 
aplicações simples.
Em resumo, um framework é como um kit de ferramentas com inúmeras 
funcionalidades implementadas, testadas, prontas e devidamente adaptadas 
para o reúso em outros projetos, facilitando odesenvolvimento de códigos 
como acesso a banco de dados, sistemas de templates, mapeamento de rotas 
e validação de dados.
Engenharia de software baseada em componentes
A engenharia de software baseada em componentes (CBSE, do inglês compo-
nent based software engineering) é uma abordagem ao desenvolvimento de 
software baseada em reúso de software a partir de componentes. Componente 
7Reúso de software
é um bloco construído para defi nir uma parte da aplicação, uma representação 
de algo a ser implantado, conforme as especifi cações construídas no ciclo de 
vida de um projeto.
Os componentes são abstratos e podem ser considerados prestadores de 
serviços autônomos. Um componente é considerado uma unidade de composi-
ção com interfaces contratualmente especificadas e dependências de contexto 
explícitas. É uma unidade executável independente, como uma interface, e 
os seus serviços são disponibilizados por meio desta. Como objetivos de um 
componente, podemos citar:
  descrever ou realizar uma função específica;
  estar em conformidade e prover um conjunto de interfaces bem-definidas;
  disponibilizar uma documentação adequada;
  estar inserido no contexto de um modelo, que guia a composição desse 
componente junto com outros componentes (arquitetura de software).
Destacam-se as seguintes características dos componentes:
  são implantáveis — para tanto, o componente deve ser autoeficiente, 
o que significa que ele é binário e não precisa ser compilado antes de 
ser implantado;
  precisam ser documentados, para ser possível avaliar se atendem às 
necessidades da aplicação (a sintaxe e a semântica das interfaces devem 
ser especificadas);
  devem ser independentes, possibilitando seu uso e sua implantação 
sem requerer outros componentes específicos (caso haja necessidade de 
outros componentes ou serviços, os mesmos devem ser especificados 
em require — interface que requer algo para funcionar corretamente);
  são representados por uma caixa com o seu nome.
Existem dois tipos de interfaces na linguagem de modelagem unificada 
(UML, do inglês unified modeling language): interfaces provedoras e inter-
faces requeridas (Figura 1). As interfaces provedoras definem os serviços 
prestados pelo componente e são representadas por círculos. Já as interfaces 
requeridas definem quais serviços devem ser fornecidos ao componente e 
são representadas por semicírculos.
Reúso de software8
Figura 1. Interface requerida e interface provedora.
Fonte: Adaptada de Sommerville (2011).
Componentes podem ser simples, como uma função matemática, ou um 
sistema maior, como um componente de planilha de cálculo, um coletor de 
dados ou uma biblioteca de fotos.
A Figura 2 traz um exemplo de modelagem de um componente de serviço para 
impressão UML. Esse componente possui como interfaces requeridas um arquivo 
para impressão e entradas de impressão, como quantidade de páginas, cor, etc. Como 
interface provedora, ou serviços oferecidos, ele apresenta: impressão, remoção da 
impressão, transferência, registro de impressão e saída de registro. O modelo padroniza 
o componente e define suas reais funções no projeto que será implementado.
Figura 2. Exemplo UML de componente de serviço de impressão.
9Reúso de software
O desenvolvimento de software pode fazer uso de diferentes componentes, 
como modelos de componentes para análise do software, modelos para projeto 
e modelos para implementações, como ActiveX, Enterprise Java Beans e 
CORBA. O Enterprise JavaBeans (EJB) é um dos principais componentes da 
plataforma Java Enterprise Edition (Java EE) para desenvolvimento de sistemas 
corporativos. É utilizado para o desenvolvimento e a implantação de aplicações 
distribuídas baseadas em componentes que são escaláveis, transacionais e 
seguros. Um EJB normalmente contém a lógica de negócio, que atua sobre os 
dados de negócio. O mesmo oferece serviços de persistência de dados, controle 
de concorrência, envio de mensagens, serviço de agendamento, chamadas a 
métodos remotos e Web services.
Acesse o link a seguir e saiba mais sobre o EJB, que traz como principal vantagem a 
rapidez em gerar soluções no desenvolvimento de aplicações Java. 
https://qrgo.page.link/kd13Y
Reúso de software10
DEVMEDIA. Reutilização de software. Revista Engenharia de Software Magazine, v. 39, 
2011. Disponível em: https://www.devmedia.com.br/reutilizacao-de-software-revista-
-engenharia-de-software-magazine-39/21956. Acesso em: 12 jul. 2019.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Prentice Hall, 2011.
Leituras recomendadas
HORSTMANN, C. Padrões e projetos orientados a objetos. 2. ed. Porto Alegre: Bookman, 
2007.
LARMAN, C. Utilizando UML e padrões: uma introdução à análise e ao projeto orientado 
a objetos e ao desenvolvimento iterativo. 3. ed. Porto Alegre: Bookman, 2007.
NARAYANAN, V. Dicas para reúso efetivo de software. InfoQ Brasil, 2009. Disponível 
em: https://www.infoq.com/br/articles/vijay-narayanan-software-reuse. Acesso em: 
12 jul. 2019.
PRESSMAN, R.; MAXIM, B. Engenharia de software: uma abordagem profissional. 8. ed. 
Porto Alegre: AMGH, 2016.
SAMETINGER, J. Software engineering with reusable components. Berlin: Springer-Verlag, 
1997
SHALLOWY, A. Explicando padrões de projeto: uma nova perspectiva em projeto orien-
tado a objetos. Porto Alegre: Bookman, 2004.
11Reúso de software
DICA DO PROFESSOR
Framework é um projeto de subsistema constituído por uma estrutura genérica para criar uma 
aplicação; possui um conjunto de classes, objetos e componentes que favorecem o 
desenvolvimento do software através do reúso desses componentes.
Para compreender melhor o conceito de framework, bem como suas classificações e alguns 
frameworks de mercado, assista à Dica do Professor a seguir.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) O objetivo do reúso de software é o aumento da produtividade e a redução no esforço 
de desenvolvimento de novos sistemas por parte dos analistas e desenvolvedores. 
Porém, a falta de conhecimento de técnicas de reúso, a falta de ferramentas ou a 
infraestrutura do software podem trazer problemas na implementação.
Nesse contexto, analise as seguintes afirmativas:
I. O uso de padrão de projeto é uma forma de fazer reúso. Os padrões de projetos ou 
Design Patterns, comumente conhecidos, são modelos, referências aplicadas ao 
projeto, trazendo soluções para problemas específicos do desenvolvimento do projeto 
de software orientado a objetos.
II. O sistema ERP é uma estrutura de códigos e é gerado a partir de modelos de 
domínio e modelos de implementação de sistemas legados.
III. Frameworks de aplicações é um tipo de reúso através de abstração, que une 
códigos comuns entre vários projetos de software, incorporando funcionalidades 
genéricas ao sistema.
Verifica-se que é(são) verdadeira(s):
A) somente a I.
B) somente a II.
C) somente a I e a III.
D) somente a I e a II.
E) somente a II e a III.
2) Com a ascensão do desenvolvimento de sistemas, é comum que muitos projetos 
possuam funções ou partes do código semelhantes, isso beneficia os processos de 
criação de software com foco no reúso. Acerca desse assunto, é correto afirmar que:
A) reutilizar softwares existentes não é uma ideia inovadora, ela surgiu em 1968 quando o 
matemático e informático Doug McIlroy demonstrou interesse em integrar circuitos para 
produção em massa; porém, o reúso só ganhou ênfase em 1980, com o surgimento da 
primeira pesquisa sobre o assunto.
B) o reúso de software é considerado uma forma de desenvolvimento com apoio de 
ferramentas, frameworks e exemplos de códigos que ajudam a organização a aumentar a 
produtividade e a qualidade dos projetos. Teve ênfase na década de 1960, com a ideia do 
matemático e informático estadunidense Doug McIlroy, que se mostrou motivado por 
softwares que funcionassem como circuitos integrados.
C) a motivação maior em fazer reúso de software está no aumento dos níveis de qualidadee 
produtividade no desenvolvimento deste. Seu conceito inicial surgiu na década de 1960. 
Através do reúso, é possível implementar grandes sistemas, sem a preocupação com o 
ciclo de vida do projeto, podendo adaptar e pular etapas do desenvolvimento.
D) a reutilização não é uma ideia nova, seu conceito surgiu em 1968 e ganhou foco na década 
de 1980. Tal processo pode ser utilizado em sistemas com contextos diferentes, sendo 
incorporado exclusivamente na implementação do projeto, com uso de código e ações 
prontas.
E) reutilizar especificações da engenharia, módulos de um projeto, arquitetura e código fonte 
de um software não é uma atividade nova, visto que as primeiras ideias sobre reutilização 
de software são do ano de 1968, quando Doug McIlroy mostrou a sua motivação por 
softwares com circuitos integrados. Seu uso é exclusivo à definição de requisitos e testes.
3) Os frameworks são como caixas de ferramentas que possibilitam à equipe de 
desenvolvimento trabalhar com uma coleção de classes concretas e abstratas 
aplicadas a uma linguagem orientada a objetos. São basicamente um template com 
diversas funções que podem ser usadas pelo desenvolvedor.
Sabendo disso, leia as afirmativas a seguir.
I. Entre as características de um framework estão: a linguagem padronizada e 
documentada, a estrutura fixa para facilitar o uso e impedir que a linguagem seja 
corrompida ou danificada, além de ser de fácil entendimento.
II. Uma das desvantagens em utilizar o framework é a dependência da ferramenta 
para seguimento do projeto. Caso a ferramenta não receba atualizações ou seja 
descontinuada, prejudicará a manutenção do sistema desenvolvido com o apoio dela.
III. Para que o desenvolvedor trabalhe com um framework é necessário obter 
conhecimento técnico acerca da ferramenta, aplicando a cada fase do projeto a 
estrutura disponibilizada pelo mesmo. A maioria dos frameworks não disponibiliza 
documentação e apoio técnico, sendo esta uma das desvantagens em seu uso.
Qual(is) está(ão) correta(s)?
A) Apenas a I e a II.
B) Apenas a II e a III.
C) Apenas a I e a III.
D) Apenas a II.
E) Apenas a I.
4) A engenharia de software baseada em componentes é uma abordagem ao 
desenvolvimento de software baseado no reúso, através de um bloco construído para 
definir uma parte da aplicação, uma representação de algo a ser implantado, 
conforme as especificações construídas no ciclo de vida de um projeto.
Sobre as características do software baseado em componentes, assinale a alternativa 
correta.
A) Os componentes precisam ser documentados para avaliar se atendem às necessidades da 
aplicação. Eles são testados, executados e utilizados. Assim, o nível de segurança é mais 
alto, e qualquer falha já é avisada e corrigida.
B) O componente é uma entidade executável e dependente, portanto, o código-fonte não está 
disponível. Além disso, ele não tem que ser compilado antes de ser usado com os outros 
componentes do sistema.
C) O componente é uma estrutura reutilizável para projetos orientados a objetos ou projetos 
web. Ele é como um kit de ferramentas com inúmeras funcionalidades implementadas.
D) Os componentes devem ser dependentes de classes abstratas, e seu uso e implantação 
requererem outros componentes específicos.
E) Os componentes não precisam ser documentados. A sintaxe e a semântica das interfaces já 
são especificadas.
5) Tratando-se da construção de sistemas desenvolvedores experientes, é comum se 
pensar em reúso de software, ou seja, reaproveitar algo que já foi desenvolvido, 
testado e aprovado, o que oferece inúmeras vantagens. No entanto, tal processo 
também pode trazer problemas ou obstáculos. Que problemas são esses?
A) O ambiente de desenvolvimento normalmente não é padronizado e preparado para o reúso, 
não possui conformidade com padrões de escrita e muitas vezes falta conhecimento 
técnico para aplicar o reúso da forma correta.
B) O ambiente de desenvolvimento normalmente não é padronizado e preparado para reúso; 
além disso, o custo do reúso é alto e não compensa o investimento.
C) O custo do reúso é caro e não compensa investimento; além disso, os códigos 
normalmente não possuem padronização, dificultando a aplicação de ferramentas de reúso.
D) Nem todas as ferramentas de reúso são testadas antes de serem disponibilizadas.
E) O reúso de software aumenta os riscos no processo de desenvolvimento de software.
NA PRÁTICA
O reúso de software ajuda a encontrar soluções para problemas semelhantes, ou seja, problemas 
já ocorridos no desenvolvimento de sistemas, que já foram documentados e elaborados padrões 
para serem reutilizados. Escolher um modelo ou técnica apropriada depende de diversos fatores.
Neste Na Prática, acompanhe um estudo de caso envolvendo teste de software em que foi 
utilizado um framework Java.
SAIBA +
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Frameworks
Framework é um template com diversas funções que podem ser usadas pelo desenvolvedor. 
Saiba mais no vídeo indicado e conheça as vantagens em utilizá-lo.
Conteúdo interativo disponível na plataforma de ensino!
Listagem de frameworks Java
O desenvolvedor ou arquiteto de software de uma corporação deve conhecer o máximo possível 
das opções de componentes e frameworks existentes no mercado para não cair no velho e já 
conhecido buraco de tentar “reinventar a roda” a sua maneira. Diante disso, acesse o link a 
seguir e conheça a listagem de frameworks e componentes Java.
Conteúdo interativo disponível na plataforma de ensino!
Reúso de software: suas vantagens, técnicas e práticas
Este artigo busca mostrar uma visão geral do conceito de reúso de software, retratando sua 
história, bem como suas principais técnicas e abordagens. Aproveite a leitura.
Conteúdo interativo disponível na plataforma de ensino!
Serviços de desenvolvimento de software: uma abordagem para reutilização de modelos 
conceituais
A fim de aprofundar ainda mais o seu conhecimento sobre o reúso de software, efetue a leitura 
do estudo apresentado a seguir.
Conteúdo interativo disponível na plataforma de ensino!
Descrição de arquiteturas de sistemas
APRESENTAÇÃO
O processo de desenvolvimento de um software tem início com o projeto da arquitetura 
desse sistema. Essa é a fase em que são identificados quais serão os principais componentes do 
sistema a ser desenvolvido. Portanto, é essencial que seja realizada com cautela, já que, dentre 
outros aspectos, a arquitetura impactará no desempenho do sistema. Vale destacar ainda 
que uma arquitetura clara e bem definida ajuda a aumentar a qualidade do projeto e do produto 
de software, influenciando diretamente a satisfação dos usuários.
Nesta Unidade de Aprendizagem, você vai estudar as arquiteturas de sistemas, entender como é 
o processo para o seu desenvolvimento e identificar os seus principais componentes.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Descrever as características de um diagrama de contexto arquitetural e arquétipos.•
Distinguir componentes e instâncias da arquitetura.•
Identificar as linguagens utilizadas para descrição da arquitetura.•
DESAFIO
A automação residencial tem se tornado uma realidade cada vez mais presente na sociedade. 
Facilidades como controlar a intensidade da luz, ligar ou desligar aparelhos sem mesmo estar 
em casa e ter eletrodomésticos com conexão à Internet são modernidades que facilitam muito a 
vida de todos. Além disso, para pessoas idosas ou com deficiência, automatizar as tarefas mais 
simples pode ajudar a reduzir riscos, assim como melhorar a qualidade de vida.
Imagine, por exemplo, uma pessoa idosa que more sozinha. É noite, ela já está deitada no 
segundo andar de sua residência e não lembra se trancou as portas ou se desligou as luzes 
do andar inferior. Colocar o controle dessas operações em seu telefone celular facilitaria sua 
vidae evitaria acidentes ao fazê-la andar à noite, com sono e sozinha pela casa.
Sob essa perspectiva, considere o seguinte cenário:
Mediante o exposto, seu Desafio é construir o diagrama de contexto arquitetural para 
transformar essa casa de repouso em uma smart home. Não é necessário usar o padrão UML, 
faça apenas um desenho de alto nível da arquitetura e responda as seguintes perguntas:
a) Quais seriam os sistemas superiores, subordinados e de mesmo nível?
b) Quem seriam os atores?
Dica: para criar o diagrama, use algum dos modelos hierárquicos do SmartArt do Microsoft 
Power Point ou outro a sua escolha.
INFOGRÁFICO
Existem diversas linguagens para descrição de arquiteturas, conhecidas por ADL (do inglês, 
Architecture Description Language), que são muito usadas para facilitar a padronização na 
descrição de arquiteturas de sistemas.
Acesse o Infográfico para conhecer uma taxonomia de ADLs, determinada por objetivos e pelo 
tipo de conteúdo que possibilitam criar.
CONTEÚDO DO LIVRO
Em termos gerais, a arquitetura de sistemas é uma maneira de criar sistemas eficientes e 
eficazes, fornecendo base para o entendimento efetivo das necessidades do cliente e oferecendo 
uma visão genérica do sistema, em tempo que ainda haja possibilidade de mudanças a baixo 
custo.
No capítulo Descrição de arquiteturas de sistemas, da obra de Arquiteturas de sistemas, você 
verá quais são as características de um diagrama de contexto arquitetural e o que são arquétipos. 
Você se tornará capaz de distinguir componentes de instâncias de arquitetura e identificar as 
linguagens utilizadas para a descrição de uma arquitetura de sistemas.
Boa leitura.
ARQUITETURA 
DE SISTEMAS
Júlia Mara Colleoni Couto
Descrição de arquitetura 
de sistemas
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
  Descrever as características de um diagrama de contexto arquitetural 
e arquétipos.
  Distinguir componentes e instâncias da arquitetura.
  Identificar as linguagens utilizadas para descrição da arquitetura.
Introdução
Quando um projeto de arquitetura é criado, ele deve ser baseado em um 
contexto, que leva em consideração as entidades externas ao sistema-
-alvo; isto é, o sistema para o qual um projeto de arquitetura deve ser 
desenvolvido. As entidades externas são consideradas outros sistemas, 
dispositivos, pessoas, etc., que interagem com o sistema-alvo. 
Para estabelecer esse contexto, normalmente são utilizadas as in-
formações que constam no modelo de requisitos elaborado para o 
sistema-alvo. Para a modelagem do contexto, é utilizado um diagrama 
de contexto arquitetural, que apresenta de maneira visual como as 
entidades externas interagem com as fronteiras do sistema-alvo. Com 
esse contexto modelado, o próximo passo é identificar o conjunto de 
arquétipos arquiteturais.
Levando em consideração o modelo de requisitos, os requisitos de 
sistema podem ser divididos em dois tipos: funcionais e não funcionais. 
Os requisitos funcionais especificam o que um sistema faz, enquanto 
os requisitos não funcionais descrevem o quão bem essas funções são 
realizadas. Segundo Blaine e Clevand-Huang (2008), os requisitos não 
funcionais são geralmente mais difíceis de medir e rastrear do que os 
seus equivalentes funcionais. Os requisitos não funcionais tendem a 
ser alcançados em vários níveis ao longo do desenvolvimento de um 
sistema, o que gera desafios em relação às suas especificações, ao 
rastreamento e à implementação.
Neste capítulo, você vai estudar as características de um diagrama 
de contexto arquitetural e o que são arquétipos. Esse conhecimento 
será fundamental para que você consiga distinguir os componentes e 
as instâncias de uma arquitetura e compreender, de maneira objetiva, 
as linguagens utilizadas para a descrição das arquiteturas de sistemas.
Sistema no contexto arquitetural e sua 
representação
Um arquiteto de software, ao modelar um sistema, pode utilizar o diagrama 
de contexto arquitetural para apresentar como um sistema-alvo interage 
com as suas entidades externas. Para a representação do sistema por meio do 
diagrama de contexto arquitetural, é preciso entender quais são os tipos de 
entidades necessários para a elaboração da sua estrutura, abordados a seguir 
com base em Pressman e Maxim (2016).
  Sistemas superiores: utilizam o sistema-alvo como parte de algum 
processamento de nível mais alto.
  Sistemas subordinados: são utilizados pelo sistema-alvo e fornecem 
dados e informações de processamento necessários para complementar 
a função do sistema-alvo.
  Sistemas de mesmo nível (pares): interagem no mesmo nível com 
o sistema-alvo, produzindo ou consumindo as mesmas informações.
  Atores: interagem com o sistema-alvo, produzindo ou consumindo 
informações para o processamento.
Na Figura 1, é apresentado um exemplo de diagrama de contexto arquitetural, 
com as entidades externas que interagem com o sistema-alvo.
Descrição de arquitetura de sistemas2
Figura 1. Diagrama de contexto arquitetural do sistema operacional smartwatch (relógio 
inteligente).
Fonte: Adaptada de Pressman e Maxim (2016).
Com a modelagem do contexto e as entidades externas definidas, um conjunto 
de arquétipos arquiteturais pode ser identificado e especificado. Pressman e 
Maxim (2016) definem arquétipo como uma abstração que apresenta um ele-
mento do comportamento do sistema, semelhante a uma classe, representando 
uma abstração da arquitetura que seja crítica para o projeto do sistema-alvo. 
Ou seja, arquétipos são blocos básicos abstratos de um projeto de arquitetura. 
Os arquétipos representam elementos estáveis da arquitetura, podendo ser 
instanciados de diversas formas, mas se baseiam no comportamento do sistema, 
podendo ser representados usando a linguagem de modelagem unificada 
(UML, do inglês unified modeling language). Por mais que os arquétipos não 
tenham o objetivo de detalhar questões relacionadas à implementação, com um 
conjunto de arquétipos é possível modelar arquiteturalmente como o sistema 
deve ser construído, utilizando uma coleção de abstrações.
Lembre-se de que os arquétipos são a base para a arquitetura. No entanto, são as 
abstrações que devem ser detalhadas à medida que o projeto de arquitetura evolui. 
3Descrição de arquitetura de sistemas
Os pequenos retângulos sombreados no diagrama consistem nas interfaces 
pelas quais cada entidade externa se comunica com o sistema-alvo. É por 
meio delas que os dados devem fluir tanto para dentro quanto para fora do 
sistema-alvo. Faz parte do projeto de arquitetura especificar os detalhes de 
cada interface.
Componentes e instâncias da arquitetura
O domínio da aplicação é a base para o refi namento e a derivação dos com-
ponentes do sistema. Por isso, as classes que são descritas no documento de 
requisitos devem representar as entidades do domínio. Cada comportamento 
defi nido para uma função do sistema, que tenha sido modelado de forma con-
ceitual no documento de requisitos, deve ser descrito em termos de estrutura de 
dados, classes, funções, etc., defi nindo-se, assim, os componentes de sistema.
Os componentes preenchem a arquitetura de software, sendo definidos por 
Pressman e Maxim (2016) como um bloco modular de software de computador. 
Um componente pode ser um módulo que encapsula uma implementação e 
que pode ser implementado ou substituído em um sistema.
Exemplificando componentes e instâncias
Basicamente, a diferença entre componente e instância é que o componente 
defi ne um comportamento do sistema, enquanto a instância é a representação 
real desse comportamento.
Continuando com o exemplo do relógio inteligente, podemos definir um 
conjunto de componentes de alto nível que trata das seguintes funcionalidades.
  Gerenciamento de comunicação externa: responsável por controlar 
a comunicação da função de corrida com entidades externas.
  Processamento da tela de controle: coordena toda a funcionalidade 
da tela de controle. Gerenciamento de sensores: gerencia o acesso a todos os sensores 
conectados ao sistema.
  Processamento de notificações: verifica e atua sobre todas as notifi-
cações geradas por outras aplicações conectadas.
A Figura 2 apresenta o exemplo da estrutura global da arquitetura em 
formato de diagrama UML de componentes. Nela, é apresentada uma 
Descrição de arquitetura de sistemas4
arquitetura de quatro camadas, sendo a camada superior a camada de 
aplicativo, que possui os serviços específicos da aplicação. A camada logo 
abaixo é a camada de negócios, que possui os componentes específicos de 
negócios, que podem ser utilizados em vários aplicativos. A camada de 
middleware possui diferentes componentes, como interfaces para compo-
nentes OLE (object linking and embedding) — como planilhas e editores 
de diagrama —, para serviços do sistema operacional independentes da 
plataforma e para sistemas de gerenciamento de banco de dados. Já a 
camada inferior, a camada de software do sistema, contém componentes 
como interfaces para hardware específico, sistemas operacionais, bancos 
de dados, entre outros.
Figura 2. Estrutura arquitetural global para o sistema relógio inteligente com componentes 
de alto nível.
Fonte: Adaptada de Pressman e Maxim (2016).
Para cada um dos componentes do exemplo da Figura 2, na prática, deveriam ser 
definidas classes de projetos com seus respectivos atributos e métodos pertinentes.
Na Figura 3 é ilustrada uma instância da arquitetura do relógio inteligente 
para a funcionalidade de corrida.
5Descrição de arquitetura de sistemas
Figura 3. Uma instância da função corrida com elaboração de componentes.
Fonte: Adaptada de Pressman e Maxim (2016).
Assim, fica mais fácil compreender que as instâncias são representações 
reais, utilizadas em um problema específico para demonstrar que a estrutura e 
os componentes definidos estão apropriados. Elas são desenvolvidas para “pro-
var” o funcionamento de um componente em um contexto real de utilização.
Linguagens para descrição da arquitetura (ADLs)
Na engenharia de software, utilizam-se linguagens de descrição de arqui-
teturas, mais conhecidas como ADLs (architectural description language), 
para descrever e representar arquiteturas de software. Essa forma de repre-
sentação de arquiteturas auxilia a comunicação mútua e a criação de uma 
abstração transferível de um sistema. No lugar de representar arquiteturas 
por meio de desenhos e ligações, as ADLs trazem uma abordagem lin-
guística (sintaxe e semântica) para a representação formal das arquiteturas 
de software.
Conforme leciona Sommerville (2012), as ADLs possuem elementos bá-
sicos, que são os componentes e os conectores. É neles que são incluídas as 
regras e diretrizes para a criação de arquiteturas bem-formadas. Inicialmente, 
as ADLs eram utilizadas para projetar arquiteturas de software e hardware. As 
arquiteturas de software são usadas para representar e analisar arquiteturas 
Descrição de arquitetura de sistemas6
de sistema, capturando o comportamento das especificações e interações dos 
componentes. Já as arquiteturas de hardware representam os componentes de 
hardware e a sua conectividade, bem como o comportamento das arquiteturas 
dos processadores. 
ADLs, linguagens de programação, modelagem e afins
Como as ADLs diferem das linguagens de modelagem, de programação e 
afi ns? Para Mishra e Dutt (2008), inicialmente, as ADLs diferem das lingua-
gens de programação porque as linguagens de programação vinculam as 
abstrações de arquitetura a implementações pontuais específi cas, enquanto 
as ADLs eliminam ou alteram essa vinculação, de maneira intencional. Na 
prática, a arquitetura é incorporada e recuperável do código por métodos de 
engenharia reversa. 
Em relação às linguagens de modelagem (UML, por exemplo), a di-
ferença é que as linguagens de modelagem estão mais interessadas nos 
comportamentos como um todo, mais do que apenas em partes. Nesse caso, 
as ADLs acabam se concentrando nos componentes. Na prática, linguagens 
de modelagem acabam representando componentes de alto nível e auxiliam 
muito bem no momento da representação das arquiteturas. O que dificulta 
é a falta de uma abstração da descrição do conjunto de instruções de uma 
arquitetura.
As linguagens de descrição de hardware (HDL, do inglês hardware 
description language) podem ser consideradas como qualquer representação 
de linguagem de programação, de especificação ou de modelagem. No entanto, 
elas servem para criar o design e uma descrição formal de circuitos lógicos 
ou de lógica digital. 
Linguagens de programação, linguagens de modelagem e linguagens de 
descrição de hardware têm aspectos em comum com as ADLs e com as HDLs, 
como pode ser observado na Figura 4. A linguagem formal pode ser definida 
como o estudo da especificação de uma linguagem, identificando propriedades, 
características, estruturas, classificação e inter-relacionamentos. A linguagem 
de modelagem serve para expressar alguma informação ou conhecimento por 
meio da criação de regras, que definem como deve ser interpretado o signi-
ficado de cada componente da sua estrutura, como a linguagem UML. Já as 
linguagens de programação são um conjunto de regras sintáticas e semânticas 
utilizadas para definir um programa de computador, que realiza a interface 
de comunicação com um computador por meio de instruções.
7Descrição de arquitetura de sistemas
Figura 4. Relação entre as linguagens de descrição de 
hardware e as linguagens de descrição de arquiteturas.
Fonte: Adaptada de Mishra e Dutt (2008).
O ponto diferencial entre essas linguagens pode ser estipulado de acordo 
com a quantidade de informação arquitetônica que as linguagens podem 
capturar e analisar. Há linguagens que inicialmente são construídas para 
outros propósitos e, mais adiante, acabam sendo utilizadas para representar 
arquiteturas. No entanto, essas linguagens, que não nasceram como ADLs, 
tendem a perder vantagem em relação às que se originaram como ADLs.
BLAINE, J. D.; CLELAND-HUANG, J. Software quality requirements: how to balance 
competing priorities. IEEE Software, [s. l.], v. 25, n. 2, p. 22–24, 2008.
MISHRA, P.; DUTT, N. Introduction to architecture description languages. In: MISHRA, 
P.; DUTT, N. Processor description languages. San Francisco: Morgan Kaufmann, 2008.
PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem profissional. 8. 
ed. Porto Alegre: AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 9. ed. Boston: Addison Wesley, 2012.
Descrição de arquitetura de sistemas8
Leituras recomendadas
O QUE é arquitetura de software? Microsoft, [s. l.], [2019?]. Disponível em: https://msdn.
microsoft.com/pt-br/hh144976.aspx. Acesso em: 17 jun. 2019.
O QUE é um arquiteto de software? Infobase, [s. l.], [2019?]. Disponível em: http://infobase.
com.br/atividades-arquiteto-de-software/. Acesso em: 17 jun. 2019.
9Descrição de arquitetura de sistemas
DICA DO PROFESSOR
Requisitos não funcionais impactam diretamente nas decisões relacionadas à descrição da 
arquitetura dos sistemas, devendo ser levados em consideração e priorizados para que a 
arquitetura atenda de forma satisfatória aos requisitos mais críticos.
Tendo isso em vista, assista a esta Dica do Professor para conhecer esses requisitos e 
verificar como você pode projetar sua arquitetura de sistemas para melhor atendê-los.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) O arquiteto, ao desenvolver um projeto, considera um conjunto de requisitos que 
motivam e justificam suas decisões. Para que o sistema seja desenvolvido, há também 
metas de qualidade a serem levadas em conta, bem como cenários de uso, padrões de 
projeto e estilos arquiteturais existentes. Nesse contexto, ao criar um projeto de 
arquitetura, deve-se considerar as entidades externas relacionadas ao sistema-alvo.
O que define essas entidades externas?
A) As entidades externas são representações gráficas de uma arquitetura de

Continue navegando