Buscar

Arquitetura de Software

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 24 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 24 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 24 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

Arquiteturas e 
Padrões de Software 
Responsável pelo Conteúdo:
 Prof. Me. Wilson Vendramel 
Revisão Textual:
Prof.ª M.ª Sandra Regina Fonseca Moreira
Contexto e Visões de Arquitetura
Contexto e Visões de Arquitetura 
 
 
• Entender a importância da arquitetura no desenvolvimento de sistemas de software.
OBJETIVO DE APRENDIZADO 
• Importância da Arquitetura de Software;
• Contexto da Arquitetura de Software;
• Arquitetura no Processo de Desenvolvimento;
• Modelo de Visões Arquiteturais 4+1;
• Processo Unificado.
UNIDADE Contexto e Visões de Arquitetura
Importância da Arquitetura de Software
Desde que o primeiro programa foi dividido em partes menores, isto é, em módulos, 
os sistemas de software passaram a ter arquiteturas e os desenvolvedores se tornaram 
responsáveis pelas interações entre esses módulos, além das características globais do 
software. Historicamente, os desenvolvedores adotavam um ou mais padrões arquite-
turais como estratégia de organização do software, porém esses padrões muitas vezes 
eram usados de maneira informal, fazendo com que as arquiteturas ficassem implíci-
tas no sistema de software construído (SHAW; GARLAN, 1996 apud PRESSMAN, 
 MAXIM, 2016, p. 253). Nos dias atuais, o cenário é diferente, pois uma arquitetura de 
software que vise eficiência precisa estar representada explicitamente nas aplicações de 
software, tornando-se um tema de muito interesse por parte da comunidade de enge-
nharia de software (PRESSMAN; MAXIM, 2016).
Como exercício de reflexão, imagine a arquitetura de um prédio. Quais seriam as proprieda-
des dessa arquitetura? O que você imaginou?
Ao imaginar a arquitetura de um prédio, é possível abstrair várias propriedades (atri-
butos). De forma mais ampla, é bastante provável que você pense em sua estrutura 
física, porém essa arquitetura vai além disso. A arquitetura é a maneira pela qual os di-
versos componentes do prédio são integrados para formar um todo consistente; é como 
a edificação se ajusta ao seu ambiente e se integra a outros edifícios vizinhos; é o prédio 
atingindo seu objetivo e atendendo às necessidades dos proprietários; é o lado estético 
da estrutura que causa um impacto visual e a combinação de cores, texturas e materiais 
para se criar a fachada e o ambiente interno; são detalhes como iluminação, piso e 
posição dos painéis. Em síntese, a arquitetura é arte, mas também algo mais, pois ela 
contempla muitas decisões, desde as menores até as maiores; algumas decisões tomadas 
no começo do projeto e que podem resultar em um impacto profundo sobre todas as 
ações seguintes; outras decisões adiadas até onde for possível, eliminando assim restri-
ções que poderiam levar a uma implementação inadequada de um estilo arquitetural 
(PRESSMAN; MAXIM, 2016).
Uma vez que você refletiu sobre a arquitetura de um prédio surge uma pergunta ele-
mentar: afinal, o que é a arquitetura de software?
Em uma visão mais simples, arquitetura de software é a organização de um sistema 
de software em componentes, também chamados de subsistemas ou módulos, estabe-
lecendo as interações entre esses componentes e as estruturas de dados utilizadas por 
eles. Por outro lado, sob uma ótica mais ampla, os componentes são generalizados para 
representar os principais elementos de um sistema de software e seus relacionamentos. 
A arquitetura não é o software em si, mas uma representação abstrata que permite 
avaliar a efetividade do projeto em relação ao cumprimento dos requisitos, considerando 
alternativas arquiteturais em um estágio em que realizar mudanças de projeto ainda é 
algo relativamente simples e que reduz os riscos relacionados à construção do produto 
8
9
de software. Vale ressaltar que em qualquer representação arquitetural os componentes 
são os elementos fundamentais a serem exibidos (PRESSMAN; MAXIM, 2016).
Certo. Se os componentes representam uma arquitetura de software, o que vem a ser 
um componente?
De acordo com Bezerra (2015), um componente de software pode ser visto como 
uma unidade existente em tempo de execução (runtime), podendo ser usado na constru-
ção de vários sistemas de software e, conforme a necessidade, ser substituído por outro 
componente que possua a mesma funcionalidade. Um componente fornece acesso aos 
seus serviços por meio de uma interface. 
Visando um entendimento mais concreto, o componente, no contexto do paradigma 
orientado a objetos, é um conjunto de diversos objetos, sendo que sua interface é cons-
tituída por um ou mais serviços que as classes desses objetos devem implementar. 
Para Sommerville (2019), um componente é um prestador de serviços reutilizável, visto 
como uma entidade executável independente e definida por suas interfaces, não havendo 
assim a necessidade de conhecer o código-fonte para utilizá-lo. O componente pode ser 
referenciado tanto como um serviço externo quanto inserido diretamente em um pro-
grama. Os serviços oferecidos pelos componentes são apresentados por sua interface, 
propiciando assim as interações entre eles. A interface do componente é definida por 
meio de operações parametrizadas e o seu estado interno não deve ser revelado.
A Figura 1 mostra uma representação abstrata de um componente de software e 
suas interfaces. Em um primeiro momento, os componentes têm duas interfaces relacio-
nadas, as interfaces que refletem os serviços que o componente fornece e as interfaces 
que retratam os serviços que o componente requer para funcionar corretamente. A 
interface “fornece” (provides) estabelece os serviços providos pelo componente, sendo 
que essa interface é a Application Programming Interface (API) do componente, pois 
ela define os serviços que podem ser acessados por um componente consumidor desses 
serviços. A interface “requer” (requires) define os serviços que outros componentes de-
vem prover para que o componente funcione de maneira correta, não comprometendo 
a independência desse componente, já que a interface “requer” não determina como os 
serviços devem ser fornecidos (SOMMERVILLE, 2019).
Interface ‘fornece’Interface ‘requer’
De�ne os serviços
necessários que
devem ser fornecidos
por outros componentes
De�ne os serviços
que são fornecidos 
pelo componente para 
outros componentes
Componente
Figura 1 – Interfaces de componentes
Fonte: Adaptado de SOMMERVILLE, 2019, p. 440
Para ficar mais claro a visualização das interações entre os componentes de software
por meio das interfaces “fornece” e “requer”, a Figura 2 exibe uma representação abstrata 
de uma composição de componentes de software que visam implementar o download
de imagens de uma câmera e o armazenamento dessas imagens em uma biblioteca de 
fotos. Vale ressaltar que o usuário também poderia interagir com esse exemplo de siste-
ma de software para descrever e catalogar a foto.
9
UNIDADE Contexto e Visões de Arquitetura
BibliotecaDeFotos
Adaptador
InterfaceComUsuario
GerenciadorDeImagens
getImagemadicionarItem
recuperar
entradaDoCatalogo
getEntradaDoCatalogo
Figura 2 – Composição da biblioteca de fotos
Fonte: Adaptado de SOMMERVILLE, 2019, p. 455
Por fim, mas não menos importante, há três fatores essenciais que enfatizam a im-
portância da arquitetura de software:
• A arquitetura de software fornece uma representação que simplifica a comunicação 
entre os stakeholders;
• A arquitetura de software evidencia logo no começo do projeto as decisões que podem 
causar um impacto profundo nas atividades seguintes de engenharia de  software;
• A arquitetura de software define um modelo arquitetural relativamente reduzido e 
passível de compreensão de como é a estrutura do software e como seus componen-
tes vão interagir entre si (BASS; CLEMENTS; KAZMAN, 2003 apud PRESSMAN; 
MAXIM, 2016, p. 254-255).
Outras informações a respeito da importância da arquitetura de software. 
Disponível em: https://bit.ly/3lH4yKr
Contexto da Arquitetura de Software
O projeto de arquitetura é um processo engenhoso que busca projetar a organização 
do software para atenderaos requisitos funcionais e não funcionais de um sistema de 
software. Não existe um processo de projeto padronizado; tudo depende do tipo de 
aplicação de software a ser desenvolvida, da experiência do arquiteto de software e da 
especificidade dos requisitos do sistema de software. 
Diante disso, é melhor considerar o projeto de arquitetura como um conjunto de 
decisões que devem ser tomadas, ao invés de entender o projeto arquitetural como uma 
 sequência de tarefas. Ao longo do projeto arquitetural, os arquitetos precisam tomar uma 
série de decisões estruturais que influenciam diretamente o desenvolvimento do produto 
de software. De acordo com o conhecimento e experiência, os arquitetos devem buscar 
responder questões fundamentais relacionadas às decisões arquiteturais, conforme mos-
tra a Figura 3 (SOMMERVILLE, 2019).
10
11
1. Existe uma arquitetura de
aplicação genérica que possa agir 
como um template para o sistema
que está sendo projetado?
4. Qual será a abordagem
fundamental utilizada para
estruturar o sistema?
2. Como o sistema será
distribuido entre os núcleos
ou processadores do hardware?
3. Quais padrões ou estilos
de arquitetura poderiam
ser utilizados?
5. Qual estratégia será utilizada 
para controlar a operação dos 
componentes no sistema?
6. Como os componentes
estruturais no sistema serão
decompostos em
subcomponentes?
7. Qual é a melhor organização
da arquitetura para entregar
os requisitos não funcionais
do sistema?
8. Como a arquitetura
do sistema deve ser
documentada?
?
Figura 3 – Decisões de projeto de arquitetura
Fonte: Adaptado de SOMMERVILLE, 2019, p. 150
A arquitetura de um sistema de software pode ser definida a partir de um deter-
minado padrão ou estilo arquitetural. Os padrões arquiteturais retratam a essência de 
uma arquitetura geralmente utilizada em diferentes aplicações de software. Ao tomar 
decisões relacionadas com a arquitetura de software, é importante saber da existência 
dos padrões mais conhecidos, em qual parte da arquitetura eles podem ser aplicados, 
além das vantagens e desvantagens de utilização de cada um deles. Por conta da relação 
entre os atributos de qualidade do sistema de software e sua arquitetura, a escolha do 
estilo arquitetural vai depender dos requisitos não funcionais exigidos pelo produto de
software, tais como desempenho, segurança, segurança da informação, disponibilidade 
e manutenibilidade (SOMMERVILLE, 2019).
Diante de tantas decisões arquiteturais a serem tomadas, qual profissional do time de 
desenvolvimento tem condições de desempenhar esse papel de tanta responsabilidade 
em um projeto de sistema de software?
Um profissional geralmente encontrado em grandes times de desenvolvimento de 
produtos de software complexos é o arquiteto de software. Esse profissional tem o papel 
de projetar a arquitetura do sistema como um todo, já que ele é o responsável por tomar 
decisões sobre quais subsistemas (componentes ou módulos) devem compor o software
e quais devem ser as interfaces entre esses subsistemas. Além de decisões globais, o 
arquiteto também deve ter a capacidade de tomar decisões técnicas detalhadas, que 
tendem a influenciar os requisitos não funcionais exigidos para o sistema de software
(BEZERRA, 2015).
Importante!
Não confunda as responsabilidades de um arquiteto de software com as um gerente de 
projeto. Ambos trabalham em conjunto na execução do plano de projeto de software, 
mas enquanto o arquiteto tem uma responsabilidade de cunho mais técnico, o gerente 
de projeto tem uma responsabilidade de ordem mais gerencial.
11
UNIDADE Contexto e Visões de Arquitetura
Informações sobre o papel do arquiteto de software, disponível em: https://bit.ly/3f6MTsW
Além da importância das competências técnicas (hard skills), é crucial que um 
 arquiteto de software também tenha outras qualidades como liderança, comunicação e 
empatia, isto é, competências comportamentais (soft skills). O conjunto de habilidades 
técnicas e comportamentais descreve de forma mais completa e consistente o verdadeiro 
papel do arquiteto de software na prática.
Informações importantes sobre as qualidades de um arquiteto de software. 
Disponível em: https://bit.ly/35EvS6t
Arquitetura no Processo 
de Desenvolvimento
Antes de entender a influência da arquitetura no desenvolvimento de software, vamos 
recordar brevemente o que é um processo de software.
O processo de software é um conjunto de atividades, ações e tarefas realizadas com 
o objetivo de se criar um produto de software. Uma atividade tem um objetivo mais 
amplo, sendo utilizada de forma independente do campo de aplicação, do tamanho e 
complexidade do projeto ou do nível de rigor com que a engenharia de software será 
aplicada; um exemplo de atividade é a de se comunicar com os envolvidos (stakeholders) 
do projeto. Uma ação, por sua vez, abrange um conjunto de tarefas que resultam em 
um artefato de software; um exemplo de ação é o próprio projeto arquitetural que pode 
gerar um artefato de software essencial, que é o modelo arquitetural. Por fim, uma ta-
refa tem um propósito mais limitado, mas muito bem definido e com resultado tangível, 
como um teste de unidade, por exemplo. 
Vale ressaltar que no contexto da engenharia de software, um processo não é uma 
prescrição rígida de desenvolvimento de software. Na realidade, o processo de desen-
volvimento pode ser adaptável, permitindo que a equipe de software escolha o conjunto 
de ações e tarefas necessárias. O importante é entregar o sistema de software dentro 
do prazo e com qualidade suficiente para atender às necessidades dos clientes e usuários 
(PRESSMAN; MAXIM, 2016).
Uma metodologia define a base para um processo de engenharia de software com-
pleto, contanto que haja determinadas atividades metodológicas genéricas aplicáveis a 
todos os projetos de software, desde o desenvolvimento de produtos de software de 
 pequeno porte e complexidade simples até a construção de sistemas de software gran-
des e complexos. Apesar dos detalhes do processo serem distintos para cada situação, as 
atividades metodológicas basicamente são as mesmas, compreendendo cinco atividades:
12
13
• Comunicação: o objetivo dessa atividade é compreender os objetivos desejados 
pelos stakeholders para o projeto e agrupar requisitos que ajudem a definir os re-
cursos e as funções do software;
• Planejamento: a intenção dessa atividade é simplificar o projeto de software, es-
tabelecendo um plano de projeto que guie a equipe no que tange ao trabalho a ser 
realizado, descrevendo as tarefas técnicas, os riscos possíveis, os recursos necessá-
rios, os artefatos gerados e o cronograma de trabalho;
• Modelagem: o propósito dessa atividade é elaborar modelos para se ter uma ideia 
global do software a ser desenvolvido, entendendo melhor os requisitos exigidos e o 
projeto de software, para assim atendê-los. Os modelos elaborados também ajudam 
na compreensão arquitetural (componentes e seus relacionamentos), além de outras 
características relevantes;
• Construção: o objetivo dessa atividade é construir o que foi projetado, combinando 
geração de código e testes que visem revelar erros de implementação;
• Entrega: o propósito dessa atividade é entregar o software ao cliente, seja como 
uma entidade completa ou como um incremento (uma parte do software já conclu-
ída) para operação e avaliação (PRESSMAN; MAXIM, 2016).
Importante!
Não existe processo de software certo ou errado; um processo de desenvolvimento pode 
ser adequado ou inadequado de acordo com o cenário de cada projeto.
A intenção deste material não é entrar em detalhes quanto a um processo de software, 
mas entender em qual momento deve haver a preocupação com o projeto da arquitetura 
no processo de desenvolvimento.
O projeto arquitetural pode ser abordado em diversos estágios do processo de desen-
volvimento, porém, sua importância aumenta consideravelmente durante a atividade de 
projeto (design) de software. Para Pressman e Maxim (2016), o projeto de softwarereali-
zado durante a atividade de modelagem contempla um conjunto de princípios, conceitos 
e práticas que permitem o desenvolvimento de um produto de software de alta qualidade.
Enquanto os princípios de projeto definem uma filosofia que conduz o trabalho a ser 
desempenhado, os conceitos de projeto devem ser compreendidos antes da aplicação das 
práticas de projeto, que por sua vez, orientam a elaboração de diversas representações do
software com o intuito de guiar a atividade de construção do sistema de software.
Importante!
Apesar do termo em inglês project ser bastante adotado para se referir a palavra projeto, o 
termo design é mais apropriado no contexto apresentado. Apenas para deixar mais claro: 
ao se fazer referência à gestão de um projeto de desenvolvimento de produto de software, 
ao projeto como um todo, a adoção do termo project é mais apropriada; contudo, ao se 
referir ao projeto da estrutura do software (projeto de arquitetura, projeto de interface, 
13
UNIDADE Contexto e Visões de Arquitetura
projeto de componentes, projeto de banco de dados), a palavra design é mais pertinente. 
Resumindo, a atividade de projeto (design) define como os requisitos exigidos para o pro-
jeto (project) de um sistema de software devem ser estruturados e implementados.
E qual a diferença entre as atividades de projeto (design) e implementação de software?
Segundo Sommerville (2019), as atividades de projeto e implementação de software 
convertem a especificação dos requisitos em um sistema de software executável. 
 Enquanto o projeto se preocupa com o design de estrutura do software que concretiza 
a especificação, a implementação transforma essa estrutura em um sistema executável.
 A Figura 4 mostra um modelo abstrato do processo de projeto (design) com suas en-
tradas, atividades e saídas. As entradas do projeto (determinados artefatos) alimentam as 
atividades de projeto. Cada atividade de projeto resulta em uma saída (novos artefatos). 
O projeto de arquitetura gera o artefato de arquitetura de sistema; o projeto de interface 
resulta no artefato de especificação de interface; a seleção e projeto de componentes 
gera o artefato de descrição dos componentes e o projeto de banco de dados resulta no 
artefato de especificação de banco de dados. As saídas são os resultados das atividades 
de projeto.
Arquitetura
do sistema
Projeto de
banco de dados
Especi�cação 
da interface
Descrição dos
componentes
Informações sobre
a plataforma
Requisitos
do software
Descrição 
dos dados
Projeto de
arquitetura
Projeto de
interface
Projeto de
banco de dados
Seleção e
projeto de
componentes
Atividades de projeto
Entradas para o projeto
Saídas do projeto
Figura 4 – Um modelo geral do processo de projeto
Fonte: Adaptado de SOMMERVILLE, 2019, p. 41
Ainda sobre a Figura 4, o que é feito em cada uma das atividades de projeto? Vale 
destacar que essas atividades são intercaladas e interdependentes.
• Projeto de arquitetura: a estrutura geral do software e os componentes (módulos 
ou subsistemas) principais são identificados, inclusive seus relacionamentos e a for-
ma como eles serão distribuídos;
14
15
• Projeto de interface: as interfaces entre os componentes do sistema são definidas, 
sendo que a especificação dessas interfaces deve ser explícita;
• Seleção e projeto de componentes: buscas por componentes reutilizáveis são 
realizadas e, não havendo componentes apropriados, novos componentes de sof-
tware são projetados;
• Projeto de banco de dados: as estruturas de dados do software são definidas, além da 
forma de representação dessas estruturas em um banco de dados (SOMMERVILLE, 2019). 
No caso do projeto de arquitetura, é importante lembrar que o propósito dessa ativi-
dade é a de possibilitar uma visão global do software, gerando um artefato que corres-
ponde ao modelo arquitetural do sistema de software, obtido basicamente de três fontes:
• Das informações a respeito do domínio de aplicação do software a ser desenvolvido;
• De determinados elementos do modelo de requisitos, como casos de uso ou classes 
de análise, seus relacionamentos e colaborações que visem solucionar o problema 
em questão;
• Da disponibilidade de padrões e estilos arquiteturais (PRESSMAN; MAXIM, 2016).
Modelo de Visões Arquiteturais 4+1
Além dos modelos arquiteturais de software serem adotados para apoiar as ativida-
des de requisitos e/ou de projeto (design) de software, eles também podem ser utilizados 
para documentar o projeto de desenvolvimento, tornando-se assim uma base para o 
projeto detalhado e a implementação do software. 
É bastante complicado representar em um único diagrama todas as informações 
relevantes da arquitetura de um software, já que um único modelo visual só consegue 
exibir uma visão ou perspectiva do sistema; um diagrama pode exibir como um software
é decomposto em módulos, enquanto outro representa como os processos interagem 
em tempo de execução; um terceiro diagrama pode mostrar como os componentes de 
software estão distribuídos em uma rede. Como tudo isso tem seu valor em estágios 
distintos de desenvolvimento, tanto no projeto quanto na documentação, geralmente é 
necessário apresentar várias visões de arquitetura de software. 
No que diz respeito às essas visões, uma recomendação bastante conhecida é a de 
que deve haver quatro visões fundamentais de arquitetura, todas ligadas por meio de 
casos de uso e de cenários comuns. Esse modelo de visões arquiteturais é denominado 
modelo 4+1, idealizado por Philippe Kruchten. As visões sugeridas são:
• Visão lógica: exibe as abstrações elementares do software como objetos e classes. 
Nessa visão, deve ser factível relacionar os requisitos com as suas entidades;
• Visão de processo: mostra como o software é composto por uma interação de 
processos, no caso, em tempo de execução. Essa visão é utilizada para avaliar os 
requisitos não funcionais, como desempenho e disponibilidade;
15
UNIDADE Contexto e Visões de Arquitetura
• Visão de desenvolvimento: exibe a decomposição do software para ser desenvol-
vido, especificamente a divisão do software em componentes a serem implementa-
dos, sendo assim uma visão útil para gerentes e desenvolvedores;
• Visão física: mostra a estrutura física, isto é, como os componentes serão distribu-
ídos fisicamente pelos processadores disponíveis na rede, sendo assim uma visão 
útil para os engenheiros de sistema que são os responsáveis pela implantação do 
software (SOMMERVILLE, 2019).
A Figura 5 mostra as visões arquiteturais do modelo 4+1 para um sistema de software. 
E quanto à visão “+1” desse modelo?
No que diz respeito à visão “+1” do referido modelo, esta corresponde à visão de 
caso de uso, isto é, um resumo dos casos de uso mais significativos sob o ponto de vista 
arquitetural; uma síntese das realizações de casos de uso. A visão de caso de uso retrata 
uma história comum que agrupa o entendimento das outras quatro visões e a forma 
como elas se inter-relacionam (LARMAN, 2007).
Informações sobre diversas contribuições de Philippe Kruchten, inclusive trabalhos relacio-
nados com arquitetura, disponível em: https://bit.ly/2H8rLGa
Arquitetura
de sistema
Visão
lógica
Visão
física
Visão de 
desenvolvimento
Visão de
processo
Figura 5 – Visões de Arquitetura
Fonte: Adaptado de SOMMERVILLE, 2019, p. 153
16
17
Todas essas visões arquiteturais são obrigatórias para projetar e documentar uma 
arquitetura de uma aplicação de software?
Não necessariamente. De acordo com Sommerville (2019), as visões arquiteturais 
geralmente são construídas ao longo do projeto (design) do software. Essas visões são 
utilizadas para explicar a arquitetura do software aos stakeholders e informar as deci-
sões arquiteturais tomadas. Durante o processo de design, outras visões podem ser do-
cumentadas para contemplar os diferentes aspectos do sistema de software, porém rara-
mente é preciso documentar de forma completa as descrições de todas as perspectivas. 
Vale ressaltar que padrões arquiteturaistambém podem ser associados às distintas 
visões de um sistema de software. Segundo Bezerra (2015), o desenvolvimento de um 
produto de software complexo exige de seus desenvolvedores o estudo desse sistema 
a partir de diversas visões, mas de acordo com as características e complexidade do 
software, nem todas as perspectivas arquiteturais precisam ser consideradas. Por exem-
plo, se o software tiver que ser implantado em uma estrutura física de processador 
único, não há necessidade da visão de implantação; outro exemplo é se o sistema for 
constituído de um único processo, nesse caso, a visão de processo é irrelevante. De forma 
geral, a depender do sistema de software, as visões podem ser classificadas pelo grau de 
importância (BEZERRA, 2015).
Processo Unificado
O Processo Unificado (PU), do inglês Unified Process (UP), e ́ um modelo de proces-
so de desenvolvimento de software idealizado por Ivar Jacobson, Grady Booch e James 
Rumbaugh e tem como princípio três características fundamentais: a) é dirigido a casos 
de uso; b) é centrado na arquitetura; c) é iterativo e incremental. 
O PU enfatiza a importância da comunicação com o cliente, e de ações que justifi-
cam a visão do cliente sobre o produto de software, especificamente a visão dos casos 
de uso. O PU também destaca a importância da arquitetura de software, ajudando o 
arquiteto a manter o foco em determinadas metas, como assegurar compreensibilidade, 
confiança em modificações futuras e reutilização. Além disso, o PU recomenda um fluxo 
de processo iterativo e incremental, proporcionando uma evolução essencial no desen-
volvimento de aplicações de software modernas (PRESSMAN; MAXIM, 2016).
No tópico 3 desta unidade foram descritas brevemente cinco atividades metodológi-
cas genéricas aplicáveis em qualquer modelo de processo de software. Visando mostrar 
que o Processo Unificado não é uma exceção, a figura 6 mostra as fases do PU sendo 
relacionadas com as atividades genéricas descritas no referido tópico. No que tange ao 
seu propósito, as fases do PU são similares às atividades metodológicas genéricas apre-
sentadas anteriormente na unidade.
17
UNIDADE Contexto e Visões de Arquitetura
Concepção
Elaboração
Construção
TransiçãoVersão
Produção
planejame
nto
modelage
m
construção
entrega
comunicaç
ão
incremento de software
Figura 6 – O Processo Unificado
Fonte: Adaptado de PRESSMAN; MAXIM, 2016, p. 57
Um processo de desenvolvimento de software iterativo e incremental, dirigido a casos 
de uso e centrado na arquitetura oferece um conjunto de fluxos de trabalho, atividades e 
artefatos bastante favoráveis ao estudo e aplicação de arquiteturas e padrões de software. 
Vamos observar as três características destacadas na descrição de cada fase do Pro-
cesso Unificado:
• A fase de concepção do PU contempla a atividade de comunicação com o cliente e 
a de planejamento. Mediante a colaboração entre os stakeholders, as necessidades 
de negócio são identificadas, uma arquitetura primária para a aplicação de software 
é proposta e as iterações e incrementos do software a ser desenvolvido são planeja-
das. No que tange à arquitetura, nessa fase ela é somente uma estrutura provisória 
dos principais componentes (subsistemas ou módulos) e suas funções e recursos. 
Mais  adiante, a arquitetura é refinada para um conjunto de modelos que visam 
representar diferentes visões do software. O planejamento, por sua vez, identifica 
recursos, avalia os principais riscos, estabelece um cronograma e define uma base 
para as fases seguintes, de acordo com o incremento do software a ser desenvolvido;
• A fase de elaboração abrange as atividades de planejamento e modelagem, refinan-
do e expandindo os casos de uso identificados inicialmente na fase de concepção, 
além de ampliar a representação da arquitetura, incluindo cinco visões diferentes 
do software: modelo de caso de uso, modelo de análise, modelo de projeto, modelo 
de implementação e modelo de implantação. Em algumas situações, já é possível 
haver uma base arquitetural executável na fase de elaboração, significando que já 
existe uma primeira versão do sistema de software executável; essa base gerada 
demonstra a viabilidade da arquitetura, porém ainda não oferece todos os recursos 
e funções necessárias para o software ser utilizado. Ainda nessa fase, o plano é 
revisado para garantir que o escopo, riscos e prazos continuem adequados;
18
19
• A fase de construção desenvolve ou adquire componentes de software com base 
no modelo arquitetural preliminar, operacionalizando os casos de uso para os usu-
ários. Para isso ser possível, os modelos de análise e de projeto, iniciados na fase 
de elaboração são finalizados para representar a versão final do incremento do 
software, e, portanto, os componentes exigidos para o incremento (versão) são 
implementados, realizando em paralelo os testes de unidade para cada componente 
de software. A composição dos componentes e os testes de integração também são 
realizados. Os casos de uso são usados para se realizar os testes de aceitação ainda 
nessa fase; 
• A fase de transição engloba as atividades de construção e entrega. Nessa fase, o 
software é entregue ao usuário para realizar testes beta e fornecer feedback quanto 
aos defeitos identificados e às modificações necessárias; materiais de apoio aos usu-
ários também são elaborados para efetivar o lançamento da versão. Ao final da fase 
de transição, o incremento do software torna-se uma versão funcional do produto 
de software, ou seja, pronto para ser utilizado;
• A fase de produção realiza o monitoramento contínuo da operação da aplicação 
de software pela comunidade usuária, disponibilizando suporte para a infraes-
trutura disponível e avaliando relatórios de defeitos e solicitações de mudanças 
(PRESSMAN; MAXIM, 2016).
O PU é um processo iterativo e incremental, e provavelmente, o próximo incremento 
do software tende a ser iniciado na próxima iteração, ou seja, ao mesmo tempo em 
que o incremento em questão esteja nas fases finais de sua iteração, significando que 
as cinco fases não ocorrem sequencialmente, mas de forma simultânea e escalonada. 
Um fluxo de trabalho (conjunto de tarefas) de engenharia de software é distribuído no 
decorrer de todas as fases do processo (PRESSMAN; MAXIM, 2016).
Por um lado, o Processo Unificado (PU) é também chamado de Rational Unified 
Process (RUP) por causa da Rational Software Corporation, mais tarde adquirida pela 
empresa IBM. A Rational Software foi uma das primeiras companhias que colaboraram 
com o desenvolvimento e refinamento do PU, além de ser ter sido uma empresa desen-
volvedora de ferramentas e tecnologias que suportam o referido processo (PRESSMAN; 
MAXIM, 2016). Por outro lado, o RUP é referido como UP, denominação bastante co-
mum nas empresas de software que desejam adotar a estrutura do processo RUP, mas 
sem ter a obrigação de usar os produtos licenciados da Rational Software, sendo assim, 
é possível considerar o RUP como um produto da Rational Software baseado no UP, 
como também pode-se entender os dois processos como semelhantes (FOWLER, 2005).
Informações adicionais sobre o IBM Rational Unified Process (RUP).
Disponível em: https://bit.ly/3lHjcB8
Geralmente, o Processo Unificado é compreendido como um processo prescritivo, 
mas também é possível adequá-lo como uma metodologia ágil, implicando assim na 
geração de poucos artefatos de software. Uma implementação ágil conhecida do PU é o 
AUP (AMBLER; JEFFRIES, 2002 apud WAZLAWICK, 2015, p. 6). Visando agilidade, 
19
UNIDADE Contexto e Visões de Arquitetura
toda documentação deve estar voltada à implementação do software. Cada atividade 
 realizada deve ter um objetivo explícito e um uso preciso, tendo como meta a produção 
de código que deve cumprir com os requisitos da melhor forma possível e no menor 
tempo razoavelmente possível. O sistema de software é projetado para atender a basica-
mente dois objetivos: entender as necessidades do cliente e construiruma solução viável 
que atenda a essas necessidades. Para ajudar a comunicação entre os stakeholders, 
artefatos como diagramas podem ser elaborados, ainda mais quando esses diagramas 
permitem a geração automática de código a partir deles (WAZLAWICK, 2015).
Informações sobre The Agile Unified Process (AUP), disponível em: https://bit.ly/2Hb5PKL
20
21
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
 Sites
Ambysoft
https://bit.ly/2Hb5PKL
 Leitura
O que é arquitetura de software?
https://bit.ly/3lH4yKr
Qual O Real Papel do Arquiteto de Software?
https://bit.ly/3f6MTsW
As qualidades de um arquiteto de software
https://bit.ly/35EvS6t
Apêndice a 2 de junho de 2020, palestra sobre arquitetura de software
https://bit.ly/2H8rLGa
IBM Rational Unified Process
https://bit.ly/3lHjcB8
21
UNIDADE Contexto e Visões de Arquitetura
Referências
BEZERRA, E. Princípios de Análise e Projeto de Sistemas com UML. 3. Ed. São 
Paulo: Elsevier, 2015.
FOWLER. M. UML Essencial: um breve guia para a linguagem-padrão de modelagem 
de objetos. 3. Ed. Porto Alegre: Bookman, 2005.
LARMAN, C. Utilizando UML e padrões: uma introdução à análise e ao projeto orien-
tados a objetos e ao desenvolvimento iterativo. 3. Ed. Porto Alegre: Bookman, 2007.
PRESSMAN, R. S.; MAXIM. B. R. Engenharia de software. 8. Ed. Porto Alegre: 
AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 10. Ed. São Paulo: Pearson, 2019. 
WAZLAWICK, R. S. Análise e design orientados a objetos para sistemas de informa-
ção: modelagem com UML, OCL e IFML. 3. Ed. Rio de Janeiro: Campus Elsevier, 2015.
22

Outros materiais