Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Engenharia
de Software
Wagner Sanchez
W
agner Sanchez
Engenharia de Softw
are
Fundação Biblioteca Nacional
ISBN 978-65-5821-067-2
9 786558 210672
Código Logístico
I000358
Engenharia de 
Software
Wagner Sanchez
IESDE BRASIL
2021
© 2021 – IESDE BRASIL S/A. 
É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do 
detentor dos direitos autorais.
Projeto de capa: IESDE BRASIL S/A. Imagem da capa: garagestock/shutterstock
Todos os direitos reservados.
IESDE BRASIL S/A. 
Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200 
Batel – Curitiba – PR 
0800 708 88 88 – www.iesde.com.br
CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO 
SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
S195e
Sanchez, Wagner
Engenharia de software / Wagner Sanchez. - 1. ed. - Curitiba [PR] : 
Iesde, 2021. 
106 p. : il.
Inclui bibliografia
ISBN 978-65-5821-067-2
1. Engenharia de software. 2. Software - Desenvolvimento. 3. Progra-
mação orientada a objetos (Computação). 4. UML (Computação). I. Título.
21-74615 CDD: 005.1
CDU: 004.41
Wagner Sanchez Doutor e mestre em Engenharia Biomédica pela 
Universidade Mogi das Cruzes (UMC), especialista 
em Inteligência Artificial pela Pontifícia Universidade 
Católica de Campinas (PUC-Campinas), psicopedagogo 
pela Pontifícia Universidade Católica de São Paulo (PUC-
SP), pós-graduado em Engenharia de Software pela 
Universidade São Judas Tadeu (USJT) e bacharel em 
Análise de Sistemas pela Universidade Paulista (UNIP). 
Possui formação em Leadership & Innovation pelo 
Massachusetts Institute of Technology (MIT) e, também, 
no Entrepreneurship Program, na Babson College. 
Tem mais de 25 anos de experiência em docência 
e consultoria nas áreas de tecnologia, inovação e 
educação. É autor da primeira coleção digital cognitiva 
voltada à educação maker e ao desenvolvimento do 
pensamento computacional para alunos do Ensino 
Fundamental, além de mais de oito livros publicados 
nas áreas de inovação, gestão, tecnologia e educação. 
Atua como pró-reitor acadêmico, professor, escritor e 
pesquisador. 
Agora é possível acessar os vídeos do livro por 
meio de QR codes (códigos de barras) presentes 
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando 
a câmera fotográ�ca de seu smartphone ou tablet 
para o QR code.
Em alguns dispositivos é necessário ter instalado 
um leitor de QR code, que pode ser adquirido 
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
SUMÁRIO
1 A importância da engenharia de software 9
1.1 O que é um software? 10
1.2 A evolução do hardware e software 12
1.3 A engenharia de software 22
1.4 A importância do design de software 25
2 Ciclo de vida do software 30
2.1 Ciclo de vida do software 31
2.2 Levantamento de requisitos 33
2.3 Análise e projeto 37
2.4 Implementação e testes 39
2.5 Implantação e manutenção 44
3 Orientação a objetos 51
3.1 Orientação a objetos 53
3.2 Classes e objetos 53
3.3 Abstração 56
3.4 Encapsulamento 57
3.5 Polimorfismo 60
3.6 Herança 61
4 UML – Unified Modeling Language 66
4.1 UML 66
4.2 Os diagramas da UML 68
4.3 Diagrama de atividades 68
4.4 Diagrama de classe 70
4.5 Diagrama de objetos 73
4.6 Diagrama de sequência 75
5 Diagrama de caso de uso 81
5.1 Diagrama de caso de uso 82
5.2 Cenário 83
5.3 Ator 84
5.4 Relacionamentos 85
5.5 Caso prático 87
 Resolução das atividades 101
Agora é possível acessar os vídeos do livro por 
meio de QR codes (códigos de barras) presentes 
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando 
a câmera fotográ�ca de seu smartphone ou tablet 
para o QR code.
Em alguns dispositivos é necessário ter instalado 
um leitor de QR code, que pode ser adquirido 
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
Com as transformações digitais que estão ocorrendo 
nas organizações, a necessidade por desenvolvimento de 
software segue um crescente sem precedentes e sem sinais de 
desaceleração. 
As evoluções exponenciais das tecnologias estão destravando 
outras tecnologias e, por consequência, oportunidades de 
soluções computacionais corporativas nunca pensadas, sempre 
buscando alavancar diferenciais competitivos. 
A engenharia de software dá suporte para que profissionais 
de TI, usuários e gestores possam empregar seus esforços 
de maneira eficiente na construção de soluções, com mais 
assertividade e, ao mesmo tempo, com menos recursos. 
Esta obra entregará todos os recursos para os envolvidos 
no desenvolvimento de softwares, durante todas as fases de 
construção das soluções, combinando métodos, melhores 
ferramentas e técnicas, para que a garantia da qualidade seja 
alcançada com excelência. 
APRESENTAÇÃOVídeo
A importância da engenharia de software 9
1
A importância da 
engenharia de software
Com o estudo deste capítulo, você será capaz de:
• 	compreender	a	definição	de	software;	
• entender	as	características	de	sistemas	computacionais;	
• conhecer	a	evolução	do	hardware	e	do	software	ao	longo	dos	
anos	e	sua	relação	com	o	momento	atual;
• compreender	a	origem	da	engenharia	de	software;	
• reconhecer	a	importância	do	design	de	softwares.
Objetivos de aprendizagem
A	engenharia	de	software	começa	quando	há	uma	demanda	por	de-
terminado	resultado	ou	solução	para	problemas	corporativos.	De	algum	
lugar	da	equipe	de	TI,	normalmente	do	CIO,	vem	uma	solicitação	feita	ao	
desenvolvedor	para	criar	algum	tipo	de	software.
Mas	como	os	desenvolvedores	sabem	o	que	colocar	em	seu	software?		
Eles	dividem	em	necessidades	específicas	após	conduzir	entrevistas,	cole-
tar	informações,	examinar	o	portfólio	de	aplicativos	existente	e	conversar	
com	líderes	de	TI.	Em	seguida,	constroem	um	roteiro	de	como	elaborar	o	
software.	Essa	é	uma	das	partes	mais	essenciais,	pois	muito	do	“trabalho”	
é	concluído	durante	esse	estágio,	o	que	também	significa	que	quaisquer	
problemas	normalmente	ocorreram	aqui.
O	verdadeiro	ponto	de	partida	é	quando	os	desenvolvedores	come-
çam	a	escrever	código	para	o	software.	Em	muitos	casos,	essa	é	a	etapa	
mais	 longa	 do	 processo,	 pois	 o	 código	 precisa	 ser	 congruente	 com	os	
sistemas	atuais	e	a	linguagem	usada.	Infelizmente,	esses	problemas	nor-
malmente	não	são	percebidos	até	muito	mais	 tarde	no	projeto,	 logo,	o	
retrabalho	precisa	ser	concluído.
10 Engenharia de Software
Para	evitar	retrabalhos	e	desperdícios	existem	os	conceitos	de	en-
genharia	de	software,	que	busca	entregar	um	produto	de	acordo	com	
as	necessidades	do	usuário,	sendo	altamente	confiável,	eficiente	e	efi-
caz	na	sua	proposta.	Embora	a	engenharia	de	software	possa	levar	a	
produtos	que	não	cumprem	isso,	eles	quase	sempre	voltam	ao	estágio	
de	produção	(SOMMERVILLE,	2011).
Neste	capítulo	exploraremos	como	essa	engenharia	pode	otimizar	a	
produção	de	softwares,	trazendo	um	maior	valor	agregado	com	um	me-
nor	custo	de	desenvolvimento.
1.1 O que é um software? 
Vídeo Software é uma sequência de instruções escrita por um programador 
em linguagem de programação, informando a um computador como se 
comportar ou executar uma tarefa específica (ENGHOLM, 2010).
O software geralmente vem na forma de programas comerciais, 
como Microsoft Word, Excel, PowerPoint e Adobe Photoshop, jogos, sis-
temas operacionais de computador, celulares ou até mesmo malware, 
como vírus e ransomware.
Qualquer programa ou código executado em um computador é um 
exemplo de software, e qualquer coisa que façamos com um computa-
dor requer um software. Este é criado por programadores de computa-
dor, comumente chamados de desenvolvedores de softwares.
Os três principais tipos de software são: de sistema operacional, 
de aplicação e de desenvolvimento. O sistema operacional controla 
o funcionamento interno do computador e os periféricos, como mo-
nitores, impressoras e equipamentos de armazenamento de dados 
(PFLEEGER, 2007).
Sem um sistema operacional como o Windows ou o MacOS, um 
computador é apenasum conjunto de componentes de hardware inca-
pazes de executar qualquer função. 
A importância da engenharia de software 11
O sistema operacional permite que o computador execute funções 
básicas, fornecendo uma interface para que os usuários interajam com 
ele e uma plataforma na qual os aplicativos sejam executados. O sistema 
“abstrai” muitas tarefas comuns para aplicativos a fim de minimizar a re-
dundância. Por exemplo, oferece impressão como um serviço para aplica-
tivos, de modo que cada programa não precisa ter sua própria maneira de 
enviar arquivos para a impressora. 
Nesse grupo temos o firmware, um tipo de software semipermanen-
te, apresentado por muitos dispositivos e componentes, que informa 
ao dispositivo como se comportar e interagir com outros dispositivos. 
Frequentemente, pode ser atualizado, mas persiste quando não há ali-
mentação aplicada ao dispositivo. 
Os drivers de dispositivo também pertencem ao grupo dos softwares 
de sistemas operacionais. São pequenos programas que permitem a 
comunicação entre o sistema operacional e os componentes do com-
putador. Cada componente precisa de um driver para que o sistema 
saiba como usar o dispositivo. Praticamente todos os componentes de 
um computador, incluindo placa de vídeo, chip de som, teclado e mou-
se, têm seus próprios drivers. 
Para finalizar, vale ressaltar os utilitários, programas que geralmen-
te vêm com o sistema operacional ou integram-se totalmente a ele – 
como software antivírus, de limpeza de disco rígido e ferramentas de 
compactação de arquivo – para executar tarefas específicas.
Já o software de aplicação indica ao computador quais tarefes 
devem ser executadas para atender às demandas do usuário para 
determinada necessidade. Nesse grupo estão processadores de texto, 
planilhas, gerenciamento de banco de dados, inventário e programas 
de contas a pagar, folha de pagamento, controle de estoque e muitas 
outras aplicações corporativas e pessoais.
Os jogos e o software de multimídia são aplicativos populares (a câ-
mera do telefone é um aplicativo, assim como o Adobe Photoshop, usa-
do para editar gráficos e fotos). Os navegadores da web também estão 
entre os aplicativos de software mais comuns.
Por fim, o terceiro grupo são os softwares de programação. Não 
deve ser surpresa que um software seja criado com outro software. 
Os codificadores contam com várias ferramentas diferentes para criar 
programas (HIRAMA, 2011). 
12 Engenharia de Software
A seguir estão alguns exemplos de programas usados por codifica-
dores durante o desenvolvimento de software. 
Compiladores: programas que convertem o código 
escrito por humanos em forma de código de máquina 
de nível inferior que pode ser interpretado diretamen-
te pelo hardware do computador. A existência de 
compiladores torna prático criar um software extre-
mamente sofisticado. 
bs
d/
sh
ut
te
rs
to
ck
Linkers: programas que pegam a saída de um compi-
lador, geralmente muitos arquivos individuais, e com-
binam em um único arquivo executável, que pode ser 
executado por um usuário sem a necessidade de um 
ambiente de programação.
bs
d/
sh
ut
te
rs
to
ck
Depuradores: programas de computador usados para 
testar e “depurar” (localizar e remover erros) o código 
do computador.bsd
/s
hu
tte
rs
to
ck
A seguir exploraremos a evolução dos hardwares e softwares ao 
longo dos anos para compreender a importância da engenharia de 
software e as transformações que impactam atualmente as nossas vi-
das e a das empresas.
1.2 A evolução do hardware e software 
Vídeo Um engenheiro de softwares deve estar apto a trabalhar com todos 
os segmentos envolvendo a tecnologia da informação (TI), ou seja, ser 
capaz de atuar em todos os vértices da pirâmide que define um sistema 
de informação: pessoas, hardware e software.
Isso significa que esse profissional precisa entender de hardwares, ser 
capaz de especificá-los e implementá-los e fazer a sua manutenção. Tam-
bém deve desenvolver e instalar softwares e fazer a manutenção deles.
Começaremos nosso caminho rumo ao entendimento das máquinas, 
dos softwares e do comportamento humano que têm moldado e defini-
do o presente e que, certamente, continuarão a fazê-lo no futuro.
A importância da engenharia de software 13
O computador surgiu essencialmente como uma ferramenta de 
trabalho. Era utilizado por bancos, instituições financeiras, governos, 
exércitos e cientistas para a execução, em tempo hábil, de cálculos en-
volvendo uma grande quantidade de valores ou operações. Porém, na 
década de 1970, como veremos mais adiante, essas máquinas passa-
ram a ser adquiridas por pessoas não ligadas a essas áreas para, além 
do trabalho, serem usadas para diversão, aprendizagem, comunicação 
e muitas outras coisas (VELLOSO, 2014).
Há algum tempo, os computadores são muito mais do que máqui-
nas presentes em algum cômodo específico das casas ou dos escritó-
rios; eles nos acompanham na forma de um celular, monitoram nossa 
vida na forma de uma geladeira inteligente, nos levam para lugares na 
forma de um carro autônomo, nos divertem na forma de um console 
de videogame, entre muitas outras coisas.
Um bom engenheiro de software pode, entre outras atribuições, 
ser destacado para a função de programador de computadores ou 
gerenciador do parque de computadores de uma empresa. Assim, 
como podemos observar, para um profissional de TI, o computador, 
mais do que uma ferramenta de trabalho, confunde-se com a própria 
razão de sua existência.
Em função disso, começaremos com um histórico da evolução dos 
computadores. Perceberemos que determinados elementos presentes 
nas primeiras máquinas ainda fazem parte das mais atuais e, provavel-
mente, estarão presentes nas do futuro.
Embora às vezes tenhamos uma impressão contrária a isso, na 
atualidade, quase todas as pessoas, desde a infância, são capazes de 
executar operações aritméticas básicas, mas nem sempre foi assim.
Houve uma época na história que pouquíssimas pessoas tinham 
essa formação, a ponto de ela confundir-se com uma habilidade. As 
pessoas que dominavam aritmética eram aproveitadas pelo comércio, 
pelos bancos e pelas empresas. 
Com o aumento exponencial das atividades que exigiam forma-
ção matemática e o crescimento em escala inferior das pessoas que 
a tinham, inventores debruçaram-se na solução desse problema, isto 
é, desenvolver uma máquina capaz de permitir que pessoas sem for-
mação ou conhecimento executassem operações matemáticas. Assim, 
14 Engenharia de Software
surgiram as máquinas mecânicas de calcular, as quais podemos dizer 
que foram as primeiras máquinas computacionais (VELLOSO, 2014).
A primeira máquina de calcular foi desenvolvida por Blaise 
Pascal (1623-1662) – aquele mesmo do triângulo. Ele foi físico, mate-
mático e filósofo e sua máquina fazia apenas somas e subtrações. 
Ba
bi
ch
 A
le
xa
nd
er
/S
hu
tte
rs
to
ck
A Pascaline, como foi apelidada, consistia em seis engrenagens, 
cada uma com a gravação dos algarismos de 0 a 9, sendo possí-
vel somar até três parcelas por vez considerando que o total não 
ultrapassasse 999.999. Por exemplo, uma multiplicação de 30 por 10 
era feita somando 10 vezes o número 30 (VELLOSO, 2014).
Pascal recebeu do rei da França uma patente para que pudesse ven-
der a sua máquina no comércio. Ela teve uma vida útil de aproximada-
mente 200 anos (sem muitas “atualizações”); hoje um computador é 
considerado “atual” por apenas seis meses!
Com uma Pascaline, qualquer pessoa poderia executar uma soma, 
uma subtração ou mesmo uma multiplicação entre dois valores. Essa 
máquina, como não poderia deixar de ser, mostrou-se muito útil, e ou-
tros inventores dedicaram-se ao aprimoramento de seu projeto.
Depois surgiram as máquinas registradoras, mais sofisticadas que 
aquela de Pascal, pois possuíam memória para contabilizar a entrada 
de dinheiro no caixa, um grande avanço para o momento. Já imaginou 
como elas eram úteis em um comércio? 
Entre outras coisas, elas evitavam ou, pelo menos,minimizavam 
os erros no cálculo de trocos. Também contavam com uma alavan-
ca que devia ser girada para se chegar ao resultado. Na prática, o 
acionamento dessa alavanca era o equivalente ao relógio (clock) dos 
computadores atuais (PRESSMAN; MAXIM, 2016).
https://www.shutterstock.com/pt/g/suricoma
A importância da engenharia de software 15
As máquinas registradoras tornaram as operações matemáticas mui-
to mais seguras, porém ainda tinham vários pontos fracos, como a en-
trada de valores que, além de lenta, estava sujeita a erros de digitação.
Imagine, por exemplo, o caixa de um banco, ao longo do dia, ano-
tando os valores envolvidos nas transações em uma caderneta e, no 
final do dia, ao fechar o caixa, encaminhando-os para o setor de fecha-
mento geral das operações da agência. Nesse setor, novas contas são 
executadas e, mais uma vez, a entrada de valores, além de representar 
um risco, exige muito trabalho manual. Com o fechamento da agência, 
novas anotações são produzidas e, ao final de uma semana, por exem-
plo, um malote com os fechamentos da agência é encaminhado, via 
carroça, para a sede do banco, na qual, novamente, é processado, com 
todos os riscos já conhecidos.
Percebendo problemas como esse, inventores criaram os cartões 
perfurados, que podiam ser gerados pela própria máquina, ao final de 
uma operação, ou pelo caixa e que traziam informações dos valores 
envolvidos e das operações matemáticas realizadas. O caixa não preci-
sava mais anotar em uma caderneta as operações realizadas, embora, 
por algum tempo, mesmo com o cartão, isso tenha continuado.
Ao final do dia, os cartões eram colocados em outra máquina, que 
processava todas as operações da agência naquele dia, o que gerava 
novos cartões com balancetes diários da agência. Ao final de uma se-
mana, um malote com esses balancetes, na forma de cartões, era enca-
minhado, via carroça, para a sede do banco e lá era colocado em outras 
máquinas para ser processado.
Os riscos foram minimizados, pois apenas o caixa entrava com os 
valores e, depois dele, estes eram propagados diretamente nos cartões.
Devemos observar que, até esse momento da história, as má-
quinas eram destinadas apenas à realização de contas. Embora 
fundamentais, em quase todas as situações as contas eram apenas 
elementos isolados que, com muitos outros elementos, orientavam 
a tomada de decisão.
Imagine o gerenciamento de uma carteira de investimentos em 
que, a todo instante, contas são efetuadas para permitir a escolha 
da alocação dos recursos. Porém, SE determinada condição OU de-
terminado fator tornar-se relevante E determinada escolha for feita, 
16 Engenharia de Software
todas as contas devem ser refeitas para definir a parcela dos recur-
sos a serem alocados. 
Nessa situação, a análise das condições OU, E e SE depende ape-
nas de pessoas, e mais uma vez as máquinas podem nos ajudar! Foi 
para resolver situações como essa que as máquinas registradoras 
evoluíram e tornaram-se programáveis, ou seja, computadores.
Foi com o desenvolvimento da máquina analítica do matemáti-
co inglês Charles Babbage (1792-1871), a máquina de Babbage, que 
os conceitos do computador moderno começaram a ser definidos 
(VELLOSO, 2014).
Ch
ar
le
s 
Ba
bb
ag
e/
W
ik
im
ed
ia
 C
om
m
on
s
O equipamento, que somente foi construído para efeitos de-
monstrativos, possuía todas as funcionalidades do computador mo-
derno, como:
 • inserção de dados com o uso dos cartões perfurados;
 • unidade de memória para que os números pudessem ser arma-
zenados e reutilizados quando necessário;
 • desenvolvimento sequencial de instruções ao hardware, proce-
dimento que atualmente conhecemos como sistema operacional.
Máquina analítica de Charles Babbage.
A importância da engenharia de software 17
Tudo isso foi descrito originalmente em 1837, mais de um século 
antes que qualquer outro equipamento do gênero tivesse sido cons-
truído com sucesso.
Finalmente chegou a eletricidade! Primeiro, ela foi introduzida nos 
computadores completamente mecânicos, aqueles com base em engre-
nagens, na forma de motores que automatizaram a alavanca de relógio.
O Z1 foi desenvolvido em 1938, na Alemanha, e foi o primeiro com-
putador binário com base em componentes mecânicos acionados por 
um motor elétrico para gerar o sinal de clock, operando com números 
em ponto flutuante e um bit de sinal. 
O programa era lido de uma fita perfurada, os dados eram introduzi-
dos por meio de um teclado numérico e os resultados eram apresentados 
por lâmpadas elétricas que ficavam acesas ou apagadas, representando 
0 e 1. Esse feito notável foi desenvolvido por Konrad Zuse (1910-1995).
Em 1939, o Z2 substituiu a unidade aritmética mecânica do Z1 
por relês eletromecânicos. O Z3, feito em 1941, possuía uma me-
mória que utilizava cerca de 1.400 relês (podendo armazenar até 
64 números), sendo 1.200 relês utilizados nas unidades de controle 
e aritmética. Somente em 1950 o Z4 foi concluído e a memória me-
cânica voltou a ser utilizada, por ser mais compacta que a memória 
eletromecânica (VELLOSO, 2014).
Em 1936, o matemático inglês Alan Turing (1912-1954) – sim, o Turing 
do filme O jogo da imitação – desenvolveu uma teoria conhecida como 
máquina universal ou máquina de Turing, que, de maneira abstrata, mo-
delava qualquer computador digital (PRESSMAN; MAXIM, 2016).
Essa teoria serviu como premissa para o desenvolvimento posterior 
da máquina capaz de quebrar os dados criptografados pela máquina 
alemã Enigma durante a Segunda Guerra Mundial.
Mais à frente, em 1943, foi desenvolvido pela Universidade da 
Pensilvânia o conhecido Eniac (electronic numerical integrator and 
computer), que tinha capacidade de 5.000 somas por segundo, um 
marco para a sua época, pois utilizava aritmética decimal. Contava 
com uma memória de 20 acumuladores com até 10 dígitos, cada um 
utilizando 10 bits para o seu armazenamento. 
18 Engenharia de Software
Eniac
Avanços científicos na área dos semicondutores e todos aqueles 
problemas dos computadores valvulados levaram ao surgimento 
dos computadores transistorizados, os quais utilizavam transis-
tores no lugar das válvulas. Isso marcou a segunda geração dos 
computadores.
Como não deveria deixar de ser, os transistores também eram 
utilizados como válvulas, cujo entendimento, em nível superficial, 
era mais fácil do que daqueles construídos com válvulas. 
Um transistor possui apenas e exatamente três pinos: a base, o 
coletor e o emissor. Quando a base não é acionada por um sinal, ou 
seja, aplicamos o nível lógico 0 (0 V), não há passagem de corrente 
do coletor para o emissor e a chave coletor-emissor está aberta. 
Quando a base é estimulada por um sinal de nível lógico 1 (5 V), 
temos a passagem de corrente e a chave está fechada.
A importância da engenharia de software 19
Os computadores dessa geração eram muito menores que os 
valvulados, não exigiam preaquecimento, consumiam menos ener-
gia, esquentavam menos, duravam mais e eram mais rápidos e 
mais confiáveis.
Foi na terceira geração de computadores que os circuitos in-
tegrados, feitos de silício, começaram a ser utilizados. Os circui-
tos integrados ficaram conhecidos como chips e eram construídos 
integrando-se muitos transistores e outros componentes. Essa 
técnica ficou conhecida como LSI (large scale integration ou inte-
gração em larga escala).
Isso possibilitou a construção de computadores menores, pois 
um único chip podia substituir várias placas; mais baratos, pois 
além do argumento anterior, os chips eram feitos em escala; e mais 
rápidos, pois dentro de um chip os componentes ficavam mais pró-
ximos e protegidos e os sinais elétricos propagam-se mais rapida-
mente entre dois componentes e ficavam mais estáveis. 
A primeira geração de circuitos integrados apenas mostrou o 
caminho. Como os chips eram novidade, as máquinas, mesmo as 
mais simples, ainda eram bastante caras, e os desenvolvedores 
não entendiam para que serviria um computador de uso pessoal e 
como essamáquina deveria parecer para ser desejada em larga es-
cala pelas pessoas. Além disso, não existiam empresas de software 
destinadas à sua produção para uso pessoal, como editores de tex-
to, jogos, agendas etc. Contudo, a quarta geração mudou isso.
Melhorias nas técnicas de integração afetaram não somente os 
processadores, mas todos os componentes presentes em um com-
putador, principalmente memórias. Desse modo, nessa época, as 
memórias dinâmicas também deram um salto em sua capacidade: 
64 kbits em 1981, 256 kbits em 1984, 1 mbit em 1984 e 4 mbits e 16 
mbits em 1987 (VELLOSO, 2014).
Um exemplo dessa geração foi o Apple I, que teve uma vida mui-
to curta, tendo sido apresentado em 1976 e substituído em 1977 
pelo Apple II.
Uma	visão	mais	lúdica	e	
profunda	dessa	geração	
de computadores e o 
surgimento	da	Microsoft	
e da Apple – empresas 
ícones	do	segmento	de	
computadores	pessoais	
–	podem	ser	vistos	pela	
ótica	do	filme	Piratas 
do Vale do Silício.	Vale	a	
pena	conferir.
Direção: Martyn Burke. EUA: 
TNT, 1999.
Filme
20 Engenharia de Software
Placa do circuito 
integrado do 
Apple I
Ac
hi
m
 B
aq
ué
/W
ik
im
ed
ia
 C
om
m
on
s
O computador apresentado pela Apple tinha como grande dife-
rencial a presença de um monitor, o que fez toda a diferença, pois 
o usuário podia editar textos, programas de gerenciamento de es-
toques e clientes, entre outras funções. Essa máquina, sim, tinha 
utilidade para muitas pessoas.
Rama & Musée Bolo/Wikimedia Commons
Percebendo o rápido crescimento da Apple com o Apple II, a IBM – 
na época a maior empresa do setor de computadores – resolveu en-
trar no segmento de computadores de uso pessoal e criou o padrão 
IBM PC, apresentado em 1981.
Apple II
https://commons.wikimedia.org/wiki/User:Rama
A importância da engenharia de software 21
IBM 5150
Bo
ffy
 b
/W
ik
im
ed
ia
 C
om
m
on
s
Para competir com a Apple, a IBM adotou a estratégia de permitir 
que outros fabricantes usassem seu padrão, fazendo com que rapida-
mente esses computadores se tornassem padrão de mercado. Além 
disso, o desenvolvimento de software e hardware para essas máquinas 
era livre de qualquer restrição, o que barateou e diversificou a oferta.
Porém, a IBM ainda usava no sistema operacional uma interfa-
ce com base em linha de comando e tinha poucos recursos de áu-
dio, um monitor de fósforo e um processador inferior. Mesmo assim, 
a empresa ganhou o mercado! Devido ao seu preço muito menor (o 
do Macintosh era exorbitante) e à sua maior penetração, o padrão 
IBM PC-AT consagrou-se mundialmente.
Enquanto isso, a Apple amargou prejuízos com o Macintosh, 
tornando-o restrito às pessoas e às empresas que se disponibilizassem 
a pagar pelo seu alto preço – quanto às pessoas, pelos motivos que já 
conhecemos, e quanto às empresas, pelos seus fantásticos atributos 
quando o assunto é imagem, é aqui que a Apple ganha a fama de ter os 
computadores preferidos de estúdios de publicidade.
Novamente, como aconteceu na quarta geração dos computado-
res, a quinta geração foi marcada por um aprimoramento nas técnicas 
de integração, fazendo com que os processadores se tornassem mais 
complexos, rápidos e baratos, porém o dispositivo chaveador conti-
nuou o mesmo, o transistor.
Como percebemos, o computador pode ser entendido como algo sem 
um inventor definido. Ele é um constante aprimoramento de ideias ante-
riores proporcionado pelo avanço científico e pelas técnicas de fabricação, 
porém que mantém, desde sua origem, a presença de uma ideia funda-
22 Engenharia de Software
mental, aquela que faz uso de chaves eletrônicas organizadas logicamen-
te, de modo a permitir a solução de problemas lógicos e aritméticos.
1.3 A engenharia de software 
Vídeo
Diante da crescente demanda por desenvolvimento de software e, 
por conseguinte, do surgimento de novos softwares e hardwares, as 
indústrias de softwares precisam engajar-se nessa onda de competi-
tividade, melhorando de maneira eficaz sua produtividade para poder 
enfrentar adequadamente essa realidade em constante evolução.
Uma particularidade inerente aos sistemas de software é a dificul-
dade de seu desenvolvimento, que evolui à medida que surgem novas 
tecnologias e cresce o tamanho do sistema.
Durante as fases de desenvolvimento do software, ao combinar 
os métodos, as melhores ferramentas para automatizar isso, as técni-
cas para a garantia da qualidade do software e os procedimentos de 
controle e gestão, é possível aplicar as boas práticas sugeridas pela 
engenharia de software.
A engenharia representa uma metodologia unida ao esforço para 
empreender resultados, os quais são provenientes de trabalhos foca-
dos em diversas áreas, nas quais há um amplo conhecimento a fim de 
propor soluções às necessidades (SOMMERVILLE, 2011).
No desenvolvimento de software, em geral, encontramos os seguin-
tes tipos de problema:
 • Os recursos destinados aos projetos tornam-se insuficientes.
 • Os custos de serviços, produtos e mão de obra são altos.
 • As soluções propostas não agradam às partes interessadas.
 • Os custos dos softwares são maiores que o custo do hardware.
 • O custo de manter um software às vezes é maior do que o desen-
volvimento de um novo.
Consequentemente, de acordo com Hirama (2011), a engenharia de 
software foca a missão de executar os desafios de:
 • reduzir o custo;
 • seguir o cronograma de acordo com as expectativas;
 • incrementar a qualidade nos softwares;
A importância da engenharia de software 23
 • documentar de modo que qualquer parte interessada possa en-
tender (todos os detalhes devem ser escritos);
 • adaptar as alterações sugeridas e/ou necessárias no tempo e no 
custo adequados;
 • atender às necessidades do cliente;
 • dar suporte ao desenvolvimento de softwares de acordo com as 
mudanças tecnológicas.
A concepção e criação de um software é uma empreitada de extre-
ma complexidade, sendo essencial o conhecimento de todas as etapas 
que compõem essa missão. No desenvolvimento de um software é im-
portante que o roteiro da engenharia de software seja seguido elimi-
nando o desperdício de tempo e o custo e maximizando os resultados 
benéficos com qualidade.
Conforme Pressman e Maxim (2016), todo software deve ser desen-
volvido com base em um modelo de procedimentos predeterminado, de-
nominado de ciclo de vida de desenvolvimento de software. Este possui um 
conjunto de etapas que abrange métodos, procedimentos e ferramentas 
para que o produto final atenda às especificações do usuário.
Os problemas acontecem no desenvolvimento de softwares quan-
do os procedimentos ultrapassam prazos e custos, impactando negati-
vamente a qualidade percebida pelo cliente.
A demanda por uma engenharia de software originou-se do objeti-
vo de atender às necessidades dos usuários em um ambiente corpora-
tivo altamente volátil e competitivo.
Um software pode ser considerado de qualidade quando atinge 
ou supera as expectativas dos usuários, resolvendo os problemas cor-
porativos e alavancando os negócios. Um software de qualidade deve 
atender às seguintes áreas (TSUI; KARAM, 2013): 
 • Operacional: refere-se à funcionalidade em operações, como 
usabilidade, eficiência, correção de problemas, funcionalidade, 
proteção, confiabilidade e segurança.
 • Transição: significa a portabilidade entre as plataformas que o 
aplicativo precisa apresentar, ou seja, reutilização e adaptação 
são de extrema importância para um aplicativo de qualidade.
 • Manutenção: estabelece uma qualidade percebida no que se 
refere ao seu funcionamento em um ambiente de constantes 
24 Engenharia de Software
mudanças. Trata da modularidade, facilidade de manutenção, 
flexibilidade, adaptação e escalabilidade. 
O ciclo de vida de desenvolvimento é uma série de etapas na enge-
nharia de software para a elaboração do aplicativo proposto. Trata-se 
de uma sequência de procedimentos dentro do âmbito da engenharia 
de software, que possui as seguintes etapas (PRESSMAN; MAXIM, 2016):
1
Coleta de 
requisitos2
Análise	de	 
sistema
3
Codificação
4
Teste
5
Implantação
A engenharia de software tem seu início na primeira fase quando 
se observa uma solicitação do usuário para a solução de determina-
do problema. 
O requerimento é submetido a uma organização prestadora de ser-
viços e o próximo passo é feito pelos desenvolvedores, que fazem a 
diferenciação entre requisitos do usuário, do sistema e funcionais. 
O requisito é coletado por meio de entrevistas com um usuário, 
referência a um banco de dados, estudo do sistema existente etc. 
Após a coleta, a equipe analisa se o software pode ser feito para 
atender a todos os requisitos. 
A importância da engenharia de software 25
O desenvolvedor, então, decide um roteiro de seu plano, que in-
clui o estabelecimento das limitações e abrangências do software. De 
acordo com o requisito e a análise, é feito um projeto de software. A 
implementação do design de software começa com a escrita do código 
do programa em uma linguagem de programação adequada.
1.4 A importância do design de software 
Vídeo
O design de software é o processo de transformar os requisitos do 
usuário de alguma forma adequada, o que ajuda o programador na 
codificação e implementação do software. 
Durante a fase de design do software, o documento de design é pro-
duzido com base nos requisitos do cliente, portanto o objetivo dessa 
fase é transformar o documento de levantamento de requisitos no do-
cumento de design. 
Os seguintes artefatos são projetados, desenvolvidos e documenta-
dos durante a fase de design (SOMMERVILLE, 2011): 
 • Módulos diferentes necessários.
 • Controle das relações entre módulos.
 • Interface entre diferentes módulos.
 • Estrutura de dados entre diferentes módulos.
 • Algoritmos necessários para implementação entre módulos 
individuais.
Alguns objetivos são perseguidos no processo de elaboração de 
um bom design de software, tais como: 
 • Correção: ser correto, ou seja, implementar corretamente todas 
as funcionalidades do sistema.
 • Eficiência: abordar os problemas de otimização de recursos, 
tempo e custo.
 • Compreensibilidade: ser facilmente compreensível, modular e 
com todos os módulos dispostos em camadas.
 • Completude: ter todos os componentes, como estruturas de 
dados, módulos, interfaces externas etc.
 • Capacidade de manutenção: ser facilmente passível de altera-
ção sempre que uma solicitação for feita pelo cliente.
26 Engenharia de Software
O conceito de design de software significa simplesmente a ideia ou 
o princípio por trás do design. Ele descreve como deve ser planejada a 
resolução de problemas relacionados ao projeto do software, ou seja, a 
lógica ou o raciocínio que norteará o seu desenvolvimento.
O design de software permite que o engenheiro crie o modelo do 
sistema, ou o software ou o produto a ser desenvolvido ou construído. 
O conceito de design de software fornece uma estrutura ou modelo de 
suporte essencial para o desenvolvimento do software certo.
Para Engholm (2010), os seguintes pontos devem ser considerados 
no design: 
 • Abstração: ocultar dados irrelevantes, ou seja, simplesmente 
ocultar os detalhes para reduzir a complexidade e aumentar a 
eficiência ou a qualidade. Diferentes níveis de abstração são ne-
cessários e devem ser aplicados em cada etapa do processo de 
design para que qualquer erro presente possa ser removido, de 
modo a aumentar a eficiência da solução de software e refiná-la.
A solução deve ser descrita de maneira ampla, cobrindo uma 
gama de coisas diferentes em um nível superior de abstração, e 
uma descrição mais detalhada de solução de software deve ser 
fornecida no nível inferior de abstração.
 • Modularidade: subdividir o sistema. Significa simplesmente divi-
dir o sistema ou o projeto em partes menores para reduzir a sua 
complexidade. Da mesma forma, significa subdividir um sistema 
em partes menores para que elas possam ser criadas indepen-
dentemente e, em seguida, usadas em sistemas diferentes para 
executar funções distintas.
A modularidade no design tornou-se uma tendência, sendo im-
portante. Se o sistema contiver um menor número de compo-
nentes, significa que é complexo, exigindo muito esforço (custo). 
Porém, se formos capazes de dividi-lo em componentes, então, 
o custo será pequeno.
 • Arquitetura: trata-se de uma técnica para projetar a estrutura nor-
teadora de algo. A arquitetura no projeto de software é um concei-
to que envolve vários elementos e os dados da estrutura. Esses 
componentes interagem entre si e usam os dados na arquitetura.
A importância da engenharia de software 27
 • Refinamento: remove as impurezas, ou seja, refina algo para re-
mover quaisquer impurezas presentes e aumentar a qualidade. 
O conceito de refinamento de projeto de software é, na verdade, 
um processo de desenvolver ou apresentar o software ou o siste-
ma de modo detalhado. O refinamento é muito necessário para 
descobrir qualquer erro, se houver, e reduzi-lo.
 • Padrão: reaproveitamento de códigos. É uma forma ou um dese-
nho repetido várias vezes para formar um padrão. Este refere-se 
à repetição de uma solução para um problema recorrente e co-
mum dentro de certo contexto.
 • Ocultar informações: dados desnecessários não precisam 
aparecer, isto é, significa ocultar as informações para que não 
possam ser acessadas por uma parte indesejada. No projeto de 
software, a ocultação de informações é obtida projetando-se os 
módulos de modo que as informações coletadas ou contidas 
neles sejam ocultadas e não possam ser acessadas por quais-
quer outros módulos.
 • Refatorar: é reconstruir algo de tal forma que não afete o com-
portamento ou quaisquer outras características. Significa re-
construir o design para reduzir a complexidade sem afetar o 
comportamento ou as funções. 
O design de software possui três diferentes níveis que devem ser 
observados nos projetos de desenvolvimento. São eles: 
1. Projeto arquitetônico: a arquitetura de um sistema pode 
ser vista como a estrutura geral do sistema e a maneira como 
esta fornece integridade conceitual. O projeto arquitetônico 
identifica o software como um sistema com muitos componentes 
interagindo entre si. Nesse nível, os designers têm a ideia do 
domínio da solução proposta. 
2. Projeto preliminar ou de alto nível: aqui o problema é 
decomposto em um conjunto de módulos e a relação de controle 
entre os vários módulos e as interfaces entre os vários módulos 
são identificadas. O resultado desse estágio é chamado de 
arquitetura do programa. 
As técnicas de representação de design usadas nesse estágio são 
gráficas de estruturas de softwares que veremos mais à frente. 
Com	oito	edições	e	mais	de	
30	anos	no	topo	dos	livros	
mais	vendidos	e	recomen-
dados	da	engenharia	de	
software,	a	obra	Engenharia 
de software: uma aborda-
gem profissional	precisa	
estar	na	cabeceira	de	
todos os desenvolvedores, 
engenheiros,	programa-
dores	e	profissionais	de	
tecnologia.
O	livro	traz	um	leque	ri-
quíssimo	de	procedimen-
to,	roteiros,	cuidados	e	
atalhos	da	engenharia	de	
software.	Também	aborda	
aspectos	essenciais,	como	
o	trabalho	com	os	usuá-
rios	para	determinar	suas	
necessidades	de	software;	
o	roteiro	para	desenho	
de	diagramas	e	modelos	
que	ajudem	os	desenvol-
vedores	a	criar	o	código	
apropriado	para	o	sistema	
ou	aplicativo;	indicações	
de como documentar o 
sistema	ou	aplicativo	em	
detalhes	para	ajudar	os	
responsáveis	pela	manu-
tenção	futura;	os	proce-
dimentos	para	manter	o	
sistema	ou	aplicativo	com	
atualizações	e	correções	
conforme	necessário	etc.
Enfim,	por	muitos	é	
considerado	a	bíblia	da	
engenharia	de	softwares.
PRESSMAN, R. S. 8. ed. Porto Alegre: 
AMGH, 2016.
Livro
28 Engenharia de Software
3. Projeto detalhado: uma vez que o projeto de alto nível esteja 
completo, o projeto detalhado é realizado. Aqui, cada módulo é 
examinado cuidadosamente para projetar a estrutura de dados e 
algoritmos. O resultado do estágio é documentado na forma de 
um documento de especificação do módulo.CONCLUSÃO
Neste	capítulo	entendemos	a	definição	de	software	e	sistemas	compu-
tacionais	e	vimos	a	evolução	do	hardware	e	software	ao	longo	dos	anos,	
bem	como	os	principais	tipos	de	software.
Compreendemos	a	origem	da	engenharia	de	software	e	a	importân-
cia	do	design	de	softwares	atualmente	no	ecossistema	do	desenvolvi-
mento	de	aplicações.
Este	capítulo	foi	uma	ótima	introdução	aos	engenheiros	de	softwares	
que	desejam	ser	competentes	em	suas	 funções,	solucionando	proble-
mas	e	combinando	habilidades	de	pensamento	abstrato	com	uma	men-
talidade	prática.
A	partir	daqui,	estaremos	aptos	a	nos	aprofundar	em	todos	os	proce-
dimentos	da	engenharia	de	software,	que	busca	garantir	padronização,	
aumentar	qualidade	e	diminuir	prejuízos	nos	projetos	de	softwares.
ATIVIDADES
Atividade 1
Você	assumiu	a	missão	de	um	museu	altamente	relevante	nos	
Estados	Unidos	de	criar	uma	experiência	histórica	aos	visitantes:	
elaborar	uma	linha	do	tempo	com	os	principais	avanços	tecnoló-
gicos	ao	longo	da	história.	
Para	tanto,	utilize	os	marcos	trazidos	neste	capítulo,	bem	como	
outras	pesquisas,	para	criar	o	que	conhecemos	como	timeline 
da	tecnologia.	Use	a	criatividade	para	surpreender	a	todos	com	
gráficos,	imagens	e	até	animação	gráfica.	
Atividade 2
Escolha	um	aplicativo	que	você	utiliza	no	seu	dia	a	dia	e	de-
senvolva	um	documento	com	os	itens	do	design	de	software	
tratados	neste	capítulo.	Fale	como	a	abstração,	a	modularidade,	
a	arquitetura,	o	refinamento,	o	padrão,	a	ocultação	de	informa-
ções	e	a	refatoração	podem	ser	encontrados	no	aplicativo.	
A importância da engenharia de software 29
REFERÊNCIAS
ENGHOLM JR., H. Engenharia de software na prática. São Paulo: Novatec, 2010.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de 
Janeiro: Elsevier, 2011.
PFLEEGER, S. L. Engenharia de software: teoria e prática. São Paulo: Pearson Prentice 
Hall, 2007.
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. São Paulo: Pearson Education, 2011.
TSUI, F.; KARAM, O. Fundamentos de engenharia de software. São Paulo: LTC, 2013.
VELLOSO, F. de. C. Informática: conceitos básicos. 9. ed. Rio de Janeiro: Elsevier, 2014.
30 Engenharia de Software
2
Ciclo de vida do software
Com o estudo deste capítulo, você será capaz de:
• entender, analisar e implementar o ciclo de vida completo de 
um software;
• compreender análise, projeto, implementação, testes, implan-
tação e manutenção de sistemas;
• reconhecer a importância do levantamento de requisitos efi-
ciente para o sucesso da engenharia de software.
Objetivos de aprendizagem
Neste capítulo exploraremos o conhecido ciclo de vida de desen-
volvimento de sistemas que define as principais etapas do desenvolvi-
mento de software dentro da engenharia de software.
Existem muitas abordagens diferentes para essa atividade, e a 
maioria das equipes de desenvolvimento possuem uma metodologia 
iterativa, na qual os estágios são combinados e revisitados ao longo do 
projeto. O termo a que chamamos de ciclo de vida é usado para ilustrar 
que, eventualmente, mudanças na tecnologia ou nos requisitos de ne-
gócios tornarão um sistema obsoleto e o ciclo começará novamente – 
daí a importância de trazermos os conceitos ágeis para o nosso estudo.
O ciclo de vida de desenvolvimento de software é um processo de-
finido de desenvolvimento de softwares que, quando seguido, ajuda a 
criá-los de maneira rápida e eficiente.
Podemos comparar isso à receita que você segue para assar seu 
bolo favorito. Se o primeiro passo for combinar farinha com cacau em 
pó, você terá que seguir o processo para garantir um bolo bem assado. 
No entanto, se você misturar os ingredientes mencionados de uma vez, 
talvez não valha a pena saborear o bolo.
O mesmo se aplica para as etapas do ciclo de vida de desenvolvimen-
to de software: há um processo passo a passo definido para a criação 
Ciclo de vida do software 31
de software de qualidade. Se você perder alguma das etapas ou segui-
-las sem precisão, os esforços desse processo serão desperdiçados.
2.1 Ciclo de vida do software 
Vídeo O ciclo de vida do software (ou, em inglês, Software Development 
Life Cycle) é um processo sistemático de desenvolvimento de software 
que assegura a qualidade e as manutenções do software construído. 
O ciclo de vida na construção de softwares tem o objetivo de im-
plementar alta qualidade ao produto final, preferencialmente sur-
preendendo as expectativas do cliente. O desenvolvimento do sistema 
deve ser entregue no prazo e no custo orçados, sendo basicamente 
um plano detalhado que explora como planejar, construir e manter um 
software específico (PRESSMAN, 2016).
Cada fase do ciclo de vida do software tem seu próprio processo e 
resultados que deliberam a próxima etapa de modo cíclico com retroa-
limentação, mas sempre em parceria com os usuários para as devidas 
validações.
Apresentamos, a seguir, os motivos que impulsionam a implantação 
eficiente do ciclo de vida do desenvolvimento de softwares eficientes nas 
organizações que buscam diferenciais competitivos (PFLEEGER, 2007).
 • Fornecer subsídios para o planejamento, a codificação e a esti-
mativa de custo e tempo do projeto.
 • Entregar uma modelagem estruturada para as atividades que 
irão compor o desenvolvimento dos softwares.
 • Ser um dispositivo que propicia o acompanhamento e o monito-
ramento do projeto.
 • Dar ênfase à visibilidade de todo o planejamento estrutural do pro-
jeto para todos os envolvidos no processo de desenvolvimento.
 • Aumentar e melhorar a velocidade de desenvolvimento dos 
softwares.
 • Aprimorar as relações com o cliente.
 • Contribuir para a diminuição dos riscos relacionados ao projeto.
 • Eliminar sobrecargas no gerenciamento prático do projeto de 
software.
32 Engenharia de Software
O ciclo de vida também reduz o custo de desenvolvimento de 
software e, ao mesmo tempo, melhora a qualidade e reduz o tempo 
de produção, atingindo essas metas que aparentemente divergem, 
mas que na verdade são essenciais no desenvolvimento de softwares 
(PFLEEGER, 2007).
O ciclo segue um plano que remove as armadilhas típicas de proje-
tos de desenvolvimento de software. Esse plano começa avaliando os 
sistemas existentes, em busca de deficiências. Posteriormente, parte 
para a definição dos requisitos do novo sistema e, em seguida, ruma-se 
à criação do software por meio dos estágios de análise, planejamento, 
design, desenvolvimento, teste e implantação.
Ao prever erros com alto custo, como deixar de pedir feedback ao 
usuário final ou cliente, o ciclo de desenvolvimento eficaz pode eliminar 
retrabalho redundante e correções posteriores.
É importante, ainda, saber que há um grande foco na fase de tes-
te – com uma metodologia repetitiva, é possível garantir a qualidade 
do código a cada ciclo. Muitas organizações tendem a investir poucos 
esforços em testes, o que é um erro, pois um foco mais eficiente em 
testes pode economizar muito retrabalho, tempo e dinheiro.
O ciclo de vida tradicional e mais utilizado nas organizações é apre-
sentado na figura a seguir (IAN, 2011).
Sistema 
proposto
Figura 1
Ciclo de vida de software
Implementação e 
testes
Análise e projeto
Levantamento de 
requisitos
Implantação e 
manutenção
Fonte: Elaborada pelo autor com base em Ian, 2011.
Ciclo de vida do software 33
Em seguida, vamos explorar cada uma das etapas: levantamento 
de requisitos; análise e projeto; implementação e testes; implantação 
e manutenção.
2.2 Levantamento de requisitos 
Vídeo O levantamento de requisito é estágio inicial e essencial para um 
bem-sucedido processo de desenvolvimento de software. Esse proces-
so deve ser liderado por profissionais experientes e conhecedores do 
negócio. É a fase que dará uma visão mais clara e ampla sobre o escopo 
de todo o projeto e sobre as questões, oportunidades e diretrizes pre-
vistas que o desencadearam.
Aetapa de coleta de requisitos necessita de uma equipe capacitada 
em obter condições, dados, informações o mais detalhadas e confiá-
veis possível, contribuindo para no cumprimento do cronograma esta-
belecido (IAN, 2011).
Esta etapa se refere especificamente à prática de definir requisitos 
de software, mas na verdade todo projeto tem requisitos, desde uma 
nova plataforma de suporte ao cliente até uma cozinha remodelada. 
Em sua essência, trata-se do processo de compreensão para que o de-
senvolvedor saiba o que ele deve estar construindo e por que o está 
fazendo.
O processo geralmente envolve um conjunto de atividades, incluin-
do (SOMMERVILLE, 2011):
 • Levantamento de requisitos: obter os requisitos de negócios 
das partes interessadas e que são relevantes para compreender 
as necessidades do usuário.
 • Documentação de requisitos: codificação dessas informações 
em formato legível aos usuários para que eles possam confirmar 
o entendimento das necessidades.
 • Entendimento dos requisitos: etapa para que todos tenham 
certeza do entendimento dos requisitos que formarão o software.
É sempre fundamental lembrar que tudo depende do usuário! Ele 
é o personagem mais importante nesse processo. Descubra como os 
usuários desempenham suas tarefas e como desejam realizá-las de-
pois do software.
34 Engenharia de Software
1. O que os usuários precisam fazer?
2. Quais problemas precisam ser sanados?
3. Como os usuários querem resolver os problemas?
4. Quais tipos de recursos os usuários terão disponíveis?
5. Com que eficiência podemos fazer isso acontecer? 
6. Que tipo de flexibilidade pode ser necessária?
Essas são algumas perguntas que precisam ser respondidas nessa 
etapa.
A coleta de requisitos bem-sucedida é uma arte em entrevistar pes-
soas e conseguir informações. A seguir apresentamos algumas dicas 
que podem ajudar.
Estabeleça metas e objetivos do projeto desde o início
Isso pode parecer redundante: é claro que sabemos por que esta-
mos fazendo este projeto...Não é? 
Mesmo tendo-se a impressão de saber tudo, anotar e pedir aos 
stakeholders que assinem é o mais indicado.
Sem metas e objetivos claramente definidos, faltará uma estrutura 
para orientar as futuras tomadas de decisões. 
Documentar todas as atividades de obtenção de requisitos
Quando está no meio de entrevistas com as partes interessadas e 
na análise de documentação, muitas vezes o desenvolvedor pode sen-
tir que tem um grande domínio sobre as coisas. Mas, então, uma se-
mana se passa e alguns detalhes começam a ficar um pouco confusos, 
e o desenvolvedor percebe que não tem uma compreensão completa 
sobre os requisitos do seu negócio.
Parece óbvio, mas certificar-se de estar fazendo anotações detalha-
das durante as entrevistas com as partes interessadas é um passo po-
deroso para uma coleta de requisitos bem-sucedida. 
Seja transparente com a documentação de requisitos
Claro que você entende os requisitos e seus stakeholders também. 
Porém, todas as demais partes envolvidas entendem sua compreensão 
sobre os requisitos?
Após cada reunião, analise suas anotações, refine-as e, em segui-
da, compartilhe-as com a equipe do projeto, incluindo todas as partes 
interessadas. 
Ciclo de vida do software 35
Essa transparência não apenas ajuda a garantir que todos estejam 
na mesma página, mas também promove um senso de aceitação do 
projeto em todo o seu planejamento, começando com os requisitos do 
negócio. 
Fale com as partes interessadas e usuários certos
Um projeto geralmente pode ter partes interessadas “ocultas”. Faça 
perguntas de sondagem em suas reuniões iniciais para tentar desco-
brir quem são os usuários reais.
Frequentemente, essas pessoas não serão os principais tomadores 
de decisão, mas sua adesão é essencial para um projeto bem-sucedido. 
Usuários insatisfeitos que são forçados a usar um sistema que foi pro-
jetado sem as suas contribuições são um ingrediente-chave para um 
projeto fracassado.
Não faça suposições sobre os requisitos
Não presuma que compreendeu tudo, mesmo que tudo pareça 
óbvio. Um requisito aparentemente simples como “queremos um blog” 
pode mascarar todos os tipos de suposições, requisitos etc. 
1. Quais são os campos de uma postagem de blog? 
2. Como os autores são gerenciados? 
3. E quanto à marcação? 
4. Quais são as categorias? 
5. Como as postagens são exibidas? 
6. Eles estão agregados em um arquivo? 
7. Existe um feed? 
8. Quem são os autores e qual é seu nível de proficiência técnica? 
O ponto-chave está realmente nos detalhes que o desenvolvedor 
pode conseguir se fizer as perguntas certas e não acelerar o processo 
de coleta de dados. 
Confirmar, confirmar, confirmar
Isso significa “ser transparente”? No entanto, não é totalmente a 
mesma coisa. 
É ótimo apenas compartilhar suas anotações com uma parte inte-
ressada, mas muito mais valioso é fazer uma revisão rápida junto a ela 
e obter sua aprovação oficial. 
36 Engenharia de Software
O silêncio das pessoas não é um indicador de sucesso. Obtenha a con-
firmação formal das partes interessadas para só depois seguir em frente.
Pratique a escuta ativa
Conseguir que alguém se sinta ouvido é uma das melhores coisas 
que o desenvolvedor pode fazer pelo usuário. Entretanto, isso vai além 
de apenas ouvir o que eles dizem: o desenvolvedor também precisa 
ouvir o que os usuários não dizem e como eles dizem as coisas, bem 
como tentar ler sua linguagem corporal e outros indicativos de que ain-
da existem informações para serem passadas por parte dos usuários.
Isso é chamado de escuta ativa e trata-se de um componente-chave 
para o sucesso levantamento de requisitos. Não presuma que está sem-
pre entendendo a história, preste atenção às pequenas pistas que revelam 
pontos problemáticos, desejos, objetivos não declarados e suposições.
Foco nos requisitos de negócios, não nas ferramentas
Tenha cuidado ao reunir requisitos nos quais está realmente se con-
centrando e ao ouvir as necessidades dos stakeholders em vez de se pren-
der à ferramenta que está usando. Qualquer metodologia ou software 
pode ser utilizado desde que não atrapalhe a coleta de requisitos.
Lembre-se: você pode não ter entendido tudo 
Mesmo o melhor coletor de requisitos vai perder coisas, e sabe por 
quê? Porque o desenvolvedor e seus stakeholders são seres humanos, 
e seres humanos cometem erros. Mais tarde, o desenvolvedor vai pen-
sar em coisas que se esqueceu de perguntar. O stakeholder pensará 
em coisas que se esqueceu de mencionar (SOMMERVILLE, 2011).
As coisas podem mudar, as prioridades podem mudar. A boa notí-
cia é que o planejamento com antecedência poderá proporcionar uma 
construção de software interativa e eficiente durante o ciclo de vida do 
projeto; com isso, o gerenciamento contínuo de requisitos será garantido. 
Esse tempo é essencial porque os requisitos (orientados e criados 
por humanos) simplesmente não são estáticos. Dar a si mesmo tempo 
para gerenciar ativamente os requisitos ao longo de todo o projeto pode 
ajudá-lo a interromper o aumento do escopo antes de iniciá-lo e garan-
tir que sua equipe esteja sempre se concentrando no conjunto certo de 
prioridades que correspondem aos requisitos reais (IAN, 2011).
Ciclo de vida do software 37
Obviamente, há muito mais que pode ser dito sobre a arte e a ciência 
da coleta de requisitos, mas espero que esta lista tenha fornecido algumas 
ferramentas úteis para gerenciar esse processo com sucesso. Agora que já 
se sabe como definir o que está construindo vamos seguir para a próxima 
etapa do ciclo de vida do processo de desenvolvimento de software. 
2.3 Análise e projeto 
Vídeo O estágio de análise e projeto é uma etapa do desenvolvimento em 
que precisamos identificar quais são os principais aspectos do proble-
ma que se pretende resolver com o software.
Existem quatro pontos que precisamos identificar quando analisa-
mos um problema. São eles (HIRAMA, 2011):
1. Finalidade do software: muitas vezes se consegue isso com 
um texto que detalha o motivopelo qual o software está sendo 
desenvolvido.
2. Entregas: lista do que deve ser entregue ao longo do projeto. 
Esses elementos serão entregues ao cliente ou usuário final. 
3. Limites: limites definidos aos quais o software atenderá, suas 
fronteiras entre o que deve ou não ser atendido.
4. Requisitos funcionais: especifica as entradas, os processos e as 
saídas.
Esses quatro aspectos podem ser detalhados quando definimos 
entradas, processamentos e saídas esperadas. Para ficar mais claro, 
vamos a um exemplo bastante simples.
Exemplo 1
Objetivo: o software deve ser criado para permitir que um usuário 
insira dez números. Cada número deve ser validado para garantir que 
não seja inferior a 0 e nem superior a 100.
O programa deve manter um total contínuo dos números inseridos 
e produzir o total final.
Entregas: o escopo deste exemplo seria o projeto entregue, incluin-
do os aspectos: design, programa concluído, plano de teste, resultados 
de teste e relatório de avaliação. Um curto limite de tempo também 
seria definido no projeto, provavelmente menos de 30 minutos.
38 Engenharia de Software
Requisitos funcionais:
 • entradas: dez números;
 • processos: “validar dez números” e “calcular total”;
 • saídas: total digitado até o momento;
 • limites: cada número deve ser validado para garantir que não 
seja inferior a 0 e nem superior a 100. Portanto, os limites seriam 
0 e 100.
Exemplo 2
Objetivo: os proprietários de um parque temático pediram que fos-
se desenvolvido um programa para registrar o número médio de visi-
tantes em uma semana.
Para tanto, o usuário digitará o número total de visitantes para cada 
dia da semana. O programa deve, então, gerar o número médio de 
visitantes durante a semana.
Entregas: o escopo deste exemplo seria o projeto entregue, incluin-
do os aspectos: design, programa concluído, plano de teste, resultados 
de teste e relatório de avaliação. O limite de tempo desse programa 
seria relativamente curto, possivelmente algo entre 1 e 2 horas.
Requisitos funcionais:
 • entradas: total diário de pessoas;
 • processos: calcular média diária;
 • saídas: média de pessoas;
 • limites: pode ser difícil encontrar alguns limites neste exemplo. 
Nele, estamos usando dias da semana, portanto não usaríamos 
mais do que sete dias da semana. Outro limite seria que o total 
de visitantes deve ser maior que zero, pois não pode haver visi-
tantes negativos.
Na fase de análise e projeto também é necessário, geralmente, 
delinear claramente quaisquer recursos que serão necessários, por 
exemplo:
 • hardware necessário para executar o software;
 • compatibilidade de software;
 • necessidade de uma conexão com a internet durante o uso;
 • competência de TI e do grupo de usuários para a implementação 
da solução.
Ciclo de vida do software 39
A fase de análise e projeto de software é o momento em que os ar-
quitetos e desenvolvedores elaboram especificações técnicas avança-
das de que precisam para criar o software de acordo com os requisitos. 
As partes interessadas discutirão fatores como níveis de risco, com-
posição da equipe, tecnologias aplicáveis, tempo, orçamento, limita-
ções do projeto, método e projeto arquitetônico.
Com base nas definições, desenvolve-se um documento chamado 
Documento de Especificação de Projeto que irá balizar o projeto arqui-
tetônico, os componentes, a comunicação, a representação de telas e 
os fluxos de usuário do produto. Essa etapa fornece um modelo para 
desenvolvedores e testadores e reduz as chances de falhas e atrasos 
no produto final (ENGHOLM, 2010).
Agora vamos à próxima fase!
2.4 Implementação e testes 
Vídeo A implementação ou codificação do software é o momento em que 
os desenvolvedores, de posse dos requisitos e da documentação da 
fase de análise e projeto, debruçam-se sobre a programação.
Uma linguagem é escolhida e o processo se inicia, levando em consi-
deração um padrão de programação dentro da equipe. Os padrões de 
codificação são uma série de procedimentos que podem ser definidos 
para uma linguagem de programação específica, determinando um es-
tilo de programação, os métodos e os procedimentos diferentes. 
Esses procedimentos podem ser realizados para vários aspectos do 
programa escrito nessa linguagem e podem ser considerados atributos 
essenciais do desenvolvimento de software.
Um padrão de codificação garante que todos os desenvolvedores 
que trabalham no projeto sigam certas diretrizes especificadas. O có-
digo pode ser facilmente compreendido e a consistência adequada é 
mantida (TSUI; KARAM, 2013).
A consistência tem um impacto positivo na qualidade do programa 
e deve-se mantê-la durante a codificação. Além disso, é importante cui-
dar para que as diretrizes sejam seguidas de maneira homogênea nos 
diferentes níveis do sistema e não se contradigam.
40 Engenharia de Software
A codificação deve seguir algumas premissas para que apresente 
uma fácil leitura por parte das equipes técnica e não técnica, tais como:
 • Tentar definir diferentes seções do código segmentando blocos 
de código em um parágrafo. Para tanto, é aconselhável usar 
indentação para indicar o início e o fim das estruturas de con-
trole, juntamente a uma especificação clara do local entre elas no 
qual o código está.
 • Atribuir consistência na convenção de nomenclatura das variá-
veis em todo o código. Além disso, devem ser descritos os dados 
que estão no código.
 • Nomear as funções de acordo com o que executam.
 • O código deve ser entendível mesmo depois de se retornar a ele 
após algum intervalo de tempo, sem que o programador tenha 
que olhar para cada linha do código-fonte.
 • Seguir um método específico para comentar o trabalho.
 • As funções da linguagem que são complexas ou a estrutura que é 
difícil de ser compreendida devem ser evitadas.
Com simples atitudes dos programadores, é possível evitar que os 
desenvolvedores de software gastem uma parte maior do seu tempo 
resolvendo os problemas que poderiam ter sido evitados. Implementar 
padrões de codificação ajuda a equipe a detectar os problemas anteci-
padamente ou até mesmo evitá-los completamente, o que aumenta a 
eficiência em todo o processo de software.
Após uma codificação eficiente e padronizada, parte-se para os testes. 
A implementação dos testes em software é o processo de desenvolver e 
priorizar procedimentos de teste, criando dados e, opcionalmente, prepa-
rando e escrevendo scripts de teste automatizados (TSUI; KARAM, 2013).
É de grande importância escolher os testes certos e executá-los na 
ordem certa. A importância disso cresce exponencialmente nas estra-
tégias baseadas em risco quando criamos prioridades com base na 
probabilidade de risco e problemas.
O procedimento teste é considerado uma atividade básica destinada 
a detectar e resolver problemas técnicos no código-fonte do software e 
avaliar a usabilidade geral do produto – desempenho, segurança e compa-
tibilidade. Não apenas é a parte principal da garantia de qualidade como 
também é parte integrante do processo de desenvolvimento de software.
Ciclo de vida do software 41
Um ponto importante no processo de teste é que a empresa esta-
beleça uma política de testes. Trata-se de um documento que contenha 
os princípios dos testes adotados pela empresa e os principais objeti-
vos de teste dela. Também explica como serão realizados e como uma 
empresa mede a eficácia e o sucesso dos testes (PRESSMAN, 2016).
A seguir listamos os itens essenciais de uma política de testes de 
softwares eficaz:
 • Definição do que o teste significa para a empresa.
 • Objetivos dos testes para a organização.
 • Padrões e critérios gerais para teste de software em projetos.
 • Lista de ferramentas para apoiar o processo de teste.
 • Métodos e métricas para avaliar a eficiência dos testes.
 • Maneiras de como melhorar os processos de teste.
Apoiando a política de testes se faz necessário um plano de gestão 
de qualidade, documento que define um nível aceitável de qualidade 
do produtoe descreve como o projeto alcançará esse nível. 
Não se trata de um documento obrigatório, mas ele ajudará a agen-
dar todas as tarefas necessárias para garantir que o projeto atenda às 
necessidades e expectativas do cliente. 
O principal objetivo desse plano é apoiar os gerentes de projeto e 
ajudar a organizar o processo, definindo funções, responsabilidades e 
padrões de qualidade a serem alcançados. Consequentemente, deve 
incluir os requisitos de qualidade do software e descrever como eles 
devem ser avaliados (PRESSMAN, 2016).
A seguir temos alguns tópicos essenciais para o desenvolvimento 
do plano: 
 • Objetivos de qualidade perseguida.
 • Principais entregas do projeto e processos a serem revisados 
para um nível de qualidade satisfatório.
 • Padrões de qualidade adotados.
 • Atividades de controle e garantia de qualidade.
 • Funções e responsabilidades de qualidade.
 • Ferramentas de qualidade.
 • Plano para relatar problemas de controle e garantia de qualidade.
42 Engenharia de Software
Depois do plano de qualidade, o gestor deve se debruçar sobre o 
desenvolvimento da estratégia de teste, documento de nível de pro-
duto mais específico que deriva dos requisitos de sistema, levantados 
junto aos usuários.
A estratégia de teste deve ser desenvolvida para definir as abor-
dagens de teste de software usadas para atingir os objetivos de teste. 
Uma estratégia de teste é orientada pelos requisitos de negócios do 
projeto, razão pela qual ela se confunde com as responsabilidades de 
um gerente de projeto.
Os principais componentes de uma estratégia de teste são:
 • escopo do teste;
 • objetivos de teste;
 • limitações de orçamento;
 • comunicação e relatório de status;
 • padrões industriais;
 • teste de medição e métricas;
 • relatórios e rastreamento de defeitos;
 • gerenciamento de configurações;
 • prazos;
 • cronograma de execução de teste;
 • identificação de risco.
Em um projeto pequeno, a estratégia de teste faz parte de um plano 
de teste. Porém, para um projeto maior, o gestor de projetos precisa 
criar uma estratégia de teste como um documento estático separado e 
a partir do qual cada plano de teste pode ser desenvolvido.
Um bom documento de estratégia de teste responde às seguintes 
perguntas:
 • Qual é o produto?
 • Qual(is) parte(s) deve(m) ser testada(s)?
 • Como eles devem ser testados?
 • Quando o teste deve começar?
 • Quais são os critérios de início/fim?
Por fim, é recomendado o desenvolvimento do plano de teste, docu-
mento que descreve o que testar, quando testar, como testar e quem 
Ciclo de vida do software 43
fará os testes. Ele também descreve o escopo e as atividades do teste. O 
plano de teste inclui os objetivos dos testes a serem executados e ajuda 
a controlar os riscos. É uma boa prática ter um plano de teste escrito 
por uma pessoa experiente, como um líder ou gerente de qualidade.
Um bom plano de teste deve incluir a programação de todas as ativi-
dades necessárias para controlar o tempo de teste de sua equipe. Deve 
também definir as funções de cada membro da equipe para que todos 
saibam o que é necessário. 
Não existe uma maneira universal de se criar um plano de teste por-
que ele depende dos processos, dos padrões e das ferramentas de ge-
renciamento de teste implementados na empresa. Mas aqui seguem as 
principais informações que um plano de testes de softwares deve conter. 
 • Introdução.
 • Itens de teste (o produto e suas versões).
 • Problemas de risco de software.
 • Recursos a serem testados.
 • Recursos a não serem testados.
 • Abordagem (estratégia).
 • Critérios de aprovação ou reprovação do item.
 • Critérios de suspensão.
 • Produtos (documento de plano de teste, casos de teste, ferra-
mentas, registros de erros, relatórios de problemas etc.).
 • Ambiente de teste (hardware, software, ferramentas).
 • Cronograma.
 • Necessidades de pessoal e treinamento.
 • Responsabilidades.
 • Riscos.
 • Aprovações.
Todos esses itens são necessários para que se possa estabelecer 
um plano de testes que seja objetivo, evitar repetições e desperdícios 
e, principalmente, aprovar o software de acordo com as necessidades 
dos usuários e sem anomalias operacionais 
Por último, é importante que o plano de testes seja compartilhado 
com todas as partes interessadas, pois ele fornecerá informações so-
bre os processos de teste e, consequentemente, de qualidade.
2.5 Implantação e manutenção 
Vídeo Após meses ou anos de trabalho, você finalmente desenvolveu o 
software ou parte dele pode ser implementado. Que alívio!
Infelizmente, no entanto, normalmente não temos a “casa livre”, ou 
seja, existem softwares antigos rodando, usuários acostumados com o 
padrão antigo – enfim, uma série de desafios a serem superados.
A implementação de qualquer tipo de nova tecnologia no local de 
trabalho, incluindo esse novo software, pode ser uma mudança que 
ocorre com muito estresse.
As pessoas geralmente resistem a qualquer mudança que afete seu 
status quo, ou seja, o estado atual das coisas. E pedir para que as pes-
soas aprendam uma nova ferramenta certamente parecerá uma inter-
rupção indesejável.
O importante é passar a confiança de que a implementação trará 
benefícios para a empresa, para todos individualmente, bem como de 
que ninguém será desligado, se for possível afirmar isso.
Todos os impactados precisam estar de “braços abertos” para o 
novo software!
Apresentamos cinco dicas essenciais para essa missão 
(SOMMERVILLE, 2011):
1. Encontre seus campeões
Se você puder aproveitar o entusiasmo dos colaboradores empol-
gados com o novo para dar impulso em torno desse novo software, 
essa empolgação pode ajudar a convencer o restante dos funcionários 
a utilizá-lo.
Encontre pessoas que se sintam naturalmente à vontade com 
os conceitos do novo software e incentive-as a defendê-
-lo. Você pode considerar as pessoas da equipe pi-
loto que ajudaram a avaliar a ferramenta ou as 
pessoas que usarão o software com maior 
frequência. Ver o entusiasmo 
desses campeões ajudará a con-
verter as pessoas mais céticas 
ou hesitantes.
Pu
re
So
lu
tio
n/
Sh
ut
te
rs
to
ck
4444 Engenharia de softwareEngenharia de software
2. Crie um entendimento compartilhado
Se os funcionários não encontrarem um motivo convincente para 
usar o novo software, é possível que a empresa receba taxas de adoção 
baixas. Portanto, ajude os colaboradores campeões a entender exata-
mente o que é a ferramenta, o que ela faz e por que foi desenvolvida. 
Envolva as pessoas desde o início do processo de implementação e in-
centive as perguntas apresentando transparência nas respostas.
3. Realizar eventos de treinamento
Os eventos de treinamento podem ser uma forma eficaz de treinar 
os funcionários em um novo software. Use esses eventos para estimu-
lar o diálogo e responder a perguntas, reforçar os benefícios da ferra-
menta e demonstrar sua aplicação prática diária no fluxo de trabalho 
da equipe.
É importante encontrar maneiras criativas de incorporar o novo 
software à rotina off-line ou à rotina com o software antigo com a 
maior frequência possível.
4. Mova conteúdos importantes para o novo software
Uma maneira de aumentar a adoção é tornar as informações im-
portantes de que os funcionários precisam acessíveis apenas por meio 
da nova ferramenta. Na verdade, definir um prazo rígido de migração 
para o novo software pode ser a única maneira de fazer com que os 
retardatários se convertam.
Mas tome cuidado! Essa é uma etapa ousada que corre o risco de 
frustrar os funcionários, especialmente se implementada muito cedo. 
Para ajudar nesse processo, comunique e enfatize as razões para a 
adoção do novo software de maneira eficaz, ressaltando como a nova 
ferramenta beneficiará a todos.
Pu
re
So
lu
tio
n/
Sh
ut
te
rs
to
ck
Ciclo de vida do softwareCiclo de vida do software 4545
46 Engenharia de Software
5. Considere a opção do uso de recompensas
Recompensas podem ser uma forma eficaz de incentivar um deter-
minadocomportamento, mas isso depende da cultura e da filosofia da 
organização. É importante notar que as “cenouras” e os “por-
retes” tendem a falhar quando aplicamos essas metodolo-
gias em pessoas pensadoras e criativas, podendo até ser 
prejudiciais.
A verdadeira motivação é impulsionada por um senso 
de propósito e busca de domínio, razão pela qual transmitir 
o valor do software é tão importante. Dito isso, pequenas 
recompensas voltadas a incentivar a participação podem 
ser bastante eficazes quando relacionadas a tarefas menos 
criativas, como controle de tempo.
Finalmente chegamos à última etapa do ciclo de desenvolvi-
mento de software: a manutenção. Para essa etapa, é essencial que o 
gestor desenvolva um plano de manutenção.
Um plano de manutenção é um documento que define o trabalho 
realizado para manter ativos operacionais. O conteúdo do documento 
ajuda a facilitar o uso contínuo de um ativo com desempenho ideal. 
Sua instalação pode evitar avarias significativas ou renovações impre-
vistas se você seguir as diretrizes fornecidas aqui.
A ideia por trás do planejamento de manutenção é garantir que se 
possa manter as condições de funcionamento adequadas dos equipa-
mentos. Embora um plano comum faça esse trabalho, qualquer ins-
talação requer um programa eficaz para que se aproveitem todos os 
benefícios da política de manutenção.
O principal objetivo da manutenção de software é modificar e atua-
lizar o seu aplicativo após a entrega para corrigir falhas e melhorar o 
desempenho dele.
As principais necessidades de manutenção em softwares são exigi-
das para: 
 • corrigir as falhas;
 • melhorar o design;
 • implementar melhorias;
 • incluir interface com outros sistemas.
Pu
re
So
lu
tio
n/
Sh
ut
te
rs
to
ck
Ciclo de vida do software 47
Dentro dessas necessidades, vale ressaltar os tipos de manutenção 
que precisam ser contemplados no plano de manutenção (HIRAMA, 
2011):
Manutenção corretiva
A manutenção corretiva de um software pode ser essencial para 
corrigir alguns erros observados enquanto o sistema está em uso ou 
para aprimorar o desempenho do sistema.
Para exemplificar, suponha que você acabou de lançar o software 
na noite passada, mas recebe a informação de que os usuários não 
conseguem fazer o login com suas credenciais do Facebook. Você con-
tata seu desenvolvedor e descobre que o código de autenticação que 
se comunica com o Facebook tem um pequeno defeito e precisa ser 
atualizado para restaurar a funcionalidade de login.
A manutenção corretiva, também conhecida como manutenção rea-
tiva, emprega esforços na correção de problemas encontrados após a 
entrega do software.
Manutenção adaptativa
Abrange alterações, atualizações e incrementos em função das ne-
cessidades dos usuários que estão em locais em que o produto seja 
executado em novas plataformas, sistemas operacionais e hardwares.
Para exemplificar esse tipo de manutenção, vamos supor que os 
usuários têm feito login com sucesso no sistema há vários dias e as 
coisas estão indo muito bem, mas você descobre que o problema está 
de volta e os usuários não podem mais acessar suas contas. 
Após várias horas de investigação por seu desenvolvedor, você des-
cobre que o Facebook mudou a maneira como você autentica com sua 
API, portanto seu site precisa ser atualizado para oferecer suporte ao 
novo método. 
Seu desenvolvedor passa mais algumas horas atualizando o site 
para suportar o novo método de autenticação do Facebook e tudo vol-
ta ao normal.
Esse problema requer manutenção adaptativa, que é a modificação 
de um produto de software realizada após sua entrega para manter um 
produto de software utilizável em um ambiente alterado ou em mutação.
48 Engenharia de Software
Manutenção para aumento de qualidade
Um software necessita de manutenção de qualidade para entregar 
aos usuários novas experiências, para que ele possa levar encantamen-
to e uma aproximação ainda maior com seu público-alvo.
Seguindo exemplo anterior, o Facebook encerrou suas alterações e 
parou de comprometer o seu site, mas você começa a receber alguns 
comentários de seus usuários depois de mais alguns dias. 
Acontece que, em vez de o usuário ser enviado para o perfil após 
o login, faz mais sentido ver o painel de atividades recentes. Um pedi-
do razoável; você trabalha com seu desenvolvedor e, após uma rápida 
atualização do sistema, os usuários agora são recebidos com as últimas 
ações do produto para que possam estar sempre atualizados.
A manutenção do software em busca de qualidade, que normal-
mente resulta do feedback do usuário, é de extrema importância, pois 
busca atender especificamente às solicitações de quem o utiliza.
O objetivo é garantir que seus usuários fiquem satisfeitos com a 
experiência e continuem usando seu produto como resultado do valor 
agregado com que a manutenção perfectiva contribui. 
Novos recursos e aprimoramentos para recursos existentes não são 
considerados manutenção perfeita. Se o painel de atividades recentes 
não existisse, ele seria um novo recurso em vez de uma manutenção 
perfeita.
Manutenção preventiva
A manutenção preventiva atua para evitar futuros problemas e insa-
tisfações dos usuários. Seu grande objetivo é antecipar o acontecimen-
to de anomalias futuras que trarão prejuízos ao software.
Continuando com o nosso exemplo, temos que, com as mudanças 
em seu sistema (estamos falando muito hipoteticamente aqui), você 
atrai um grande interesse de sua base de usuários e precisa se prepa-
rar para um evento de alto tráfego nos próximos dias. 
Você não tem certeza se o seu servidor pode suportar esse tipo de 
carga, mas sabe que, se o site cair com tanta atenção, você terá muitos 
usuários irritados que podem abandonar o seu produto. 
Assim, você incumbe seu desenvolvedor de proteção contra esse 
desastre, e ele passa um tempo considerável atualizando o ambiente 
de hospedagem para que este seja mais escalonável. 
Ciclo de vida do software 49
Quando muito tráfego atinge um servidor, suas atualizações garan-
tem que novos servidores fiquem on-line automaticamente para lidar 
com o tráfego extra. Não fazia sentido configurar essa infraestrutura 
de escalonamento automático durante o desenvolvimento, mas, agora 
que você precisa dela, é fundamental para o sucesso do seu produto.
Esse esforço é classificado como manutenção preventiva ou modifi-
cação de um produto de software após a entrega para detectar e corrigir 
possíveis falhas no produto de software antes que elas entrem em vigor.
Quanto mais complexo for o software, provavelmente mais manu-
tenção será necessário para garantir o uso contínuo. As perguntas ób-
vias são “por quê” e “quanto”. Isso varia e é um pouco complicado, pois 
cada produto de software é diferente. 
É possível minimizar os custos de manutenção por meio de planeja-
mento e execução inteligentes, mas também pode-se acabar pagando 
mais para manter o produto do que para desenvolvê-lo se o gestor não 
tomar cuidado.
Existem muitos fatores de custo de manutenção de software: ela 
não se trata apenas de consertar bugs; envolve qualquer esforço para 
manter as coisas funcionando da maneira que seus usuários esperam 
que funcione – e, na maioria das vezes, isso significa outra coisa do que 
simplesmente corrigir defeitos em seu código.
Com esta etapa, concluímos o ciclo de desenvolvimento de softwa-
re, processo altamente importante dentro da engenharia de softwa-
re que busca trazer práticas, ferramentas e metodologias eficazes na 
construção, entrega e manutenção dos softwares.
O livro Não me faça 
pensar, de Steve Krug, 
explica que os humanos 
que usam software ou 
sites tendem a aceitar 
a primeira solução que 
lhes é apresentada. Esse 
ponto essencial deve ser 
aproveitado por enge-
nheiros de softwares que 
querem se diferenciar no 
mercado.
O livro se concentra na 
simplicidade, na objeti-
vidade e no bom senso, 
sendo considerado por 
muitos essencial para 
qualquer engenheiro de 
software. A obra ajuda 
os desenvolvedores aentender a experiência 
do usuário e a mudar sua 
maneira de pensar para 
que o design de interface 
seja sempre a força mo-
triz por trás das decisões 
dos desenvolvedores.
KRUG, S. São Paulo: Alta Books, 
2014.
Livro
CONSIDERAÇÕES FINAIS 
Neste capítulo percorremos todas as etapas que compõem um ciclo 
de desenvolvimento de software e foi possível entender que o desenvol-
vimento de software está em seu ponto de inflexão, considerando a alta 
frequência de interrupções tecnológicas. 
Quase todos os setores estão aproveitando o software para resolver 
os problemas do usuário. A tendência do software está crescendo em um 
ritmo que as empresas precisam acompanhar vigorosamente e seguir em 
frente com o ciclo de vida de desenvolvimento de software para garantir 
uma entrega rápida e de qualidade.
50 Engenharia de Software
Conseguimos compreender que o ciclo de vida do desenvolvimento de 
software é fundamental para criar um software que se encaixe no produto 
e no mercado. A construção de software é uma jornada com vários mar-
cos ao longo de um percurso de A para B.
As organizações vencedoras enfrentam os desafios do processo de 
desenvolvimento de produtos de software e abraçam a mudança em um 
nível holístico. O processo começa com a análise de requisitos, design, 
codificação, teste, implantação e manutenção. Porém, a forma como uma 
equipe aborda as etapas mencionadas depende da respectiva metodolo-
gia de desenvolvimento de software.
Concluímos que o objetivo do ciclo de desenvolvimento de software 
é apresentar um caminho padrão a ser seguido pela equipe que realiza 
essa atividade. Sem um caminho traçado e um senso de direção, os esfor-
ços de desenvolvimento provavelmente fracassarão.
ATIVIDADES
Atividade 1
Neste momento você é o engenheiro de software chefe de uma 
grande empresa de cosmético e precisa convencer todo o seu 
time de desenvolvedores de que o ciclo de vida de desenvolvi-
mento de software eficiente é importante. Ressalte os principais 
benefícios conseguidos com a implantação de um ciclo de vida. 
Se preferir, use um ou mais slides ou, ainda, apresente esses 
benefícios em um texto de no máximo uma página.
Atividade 2
Ainda como engenheiro de software chefe de uma grande 
empresa de cosmético, você precisa, agora, apresentar as etapas 
que compõem o ciclo de desenvolvimento de software e explicar 
rapidamente cada uma dessas fases.
REFERÊNCIAS
ENGHOLM JR., H. Engenharia de software na prática. São Paulo: Novatec, 2010.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de 
Janeiro: Elsevier, 2011.
IAN, S. Engenharia de software. 9. ed. São Paulo: Pearson, 2011.
PFLEEGER, S. L. Engenharia de software: teoria e prática. São Paulo: Pearson Prentice Hall, 
2007.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: 
AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Education, 2011.
TSUI, F.; KARAM, O. Fundamentos de engenharia de software. São Paulo: LTC, 2013.
Orientação a objetos 51
3
Orientação a objetos
Ao final do estudo deste capítulo, você será capaz de: 
• entender, desenvolver e implementar o conceito de orientação 
a objetos; 
• compreender conceitos de classe e mensagem;
• reconhecer métodos e operações; 
• explorar a abstração da orientação a objetos em soluções 
computacionais;
• modelar softwares utilizando os conceitos de UML.
Objetivos de aprendizagem
O desenvolvimento de software é uma atividade complexa e, como 
tal, quando não há um padrão comum de comunicação e interpretação 
da equipe envolvida, surgem problemas. Para que um software seja de-
senvolvido sem retrabalho e seja fácil mantê-lo no futuro, os envolvidos 
devem interpretar a mesma linguagem. 
Assim como vimos que, para documentar processos, temos o BPMN 
como linguagem universal, para a tarefa de documentar sistemas, temos 
a Linguagem de Modelagem Unificada (UML, do inglês Unified Modeling 
Language). Essa linguagem propõe a construção de diagramas para o de-
senvolvimento de sistemas orientados a objetos, facilitando o desenvolvi-
mento do software (WAZLAWICK, 2019).
Esta obra apresenta um breve histórico sobre a visão da análise de 
sistema até o surgimento da UML como melhor proposta para a repre-
sentação na orientação a objetos. Mostraremos também alguns exemplos 
de diagramas da UML e seus propósitos de maneira geral, pois aprofun-
daremos alguns deles quando for necessário.
A UML é um formato visual muito empregado atualmente para ilustrar 
softwares com base nos conceitos da orientação a objetos. Esse formato 
de modelagem de sistemas fundamentados em objetos pode ser utilizado 
52 Engenharia de Software
em todas as etapas do desenvolvimento das soluções e já é a forma mais 
utilizada no mundo (HASSAN, 2011).
Nas décadas de 1950 e 1960, o desenvolvimento de sistema era 
tecnicista, ou seja, o usuário solicitava ao programador um sistema 
que ele programava sem metodologia ou padrão, somente com a visão 
da necessidade estabelecida, tudo era feito ad hoc, sob demanda. De 
acordo com Hassan (2011), talvez o uso desse termo denote a abor-
dagem da primeira fase de desenvolvimento de sistema, na qual não 
havia planejamento inicial.
A falta desse estudo prévio causava grandes problemas no desen-
volvimento de sistemas: os projetos extrapolavam os prazos, e nós sa-
bemos que controlar o orçamento de um projeto é fundamental. Isso 
acontecia principalmente pela falta de entendimento da real necessi-
dade do usuário. 
Não havia padrões, ferramentas, técnicas e, muito menos, métodos 
para o desenvolvimento de sistemas. Essa situação começou a mudar na 
década de 1970, quando surgiram os primeiros modelos e padrões estru-
turados para facilitar o entendimento da necessidade do usuário. 
Hassan (2011) explica que o rápido crescimento da capacidade com-
putacional das máquinas resultou na demanda por sistemas cada vez 
mais complexos. Por isso, as formas de desenvolvimento dos sistemas 
precisaram ser reavaliadas, o que fez surgirem metodologias, práticas, 
técnicas e padrões para sua modelagem.
Na década de 1980, com o surgimento dos computadores pessoais 
(PCs), aumentou ainda mais a necessidade de desenvolvimento de siste-
mas mais complexos, e a análise estruturada se consolidou na primeira 
metade da década.
Em 1980, Edward Yourdon lançou o livro clássico Análise estrutu-
rada moderna, considerado referência nesse assunto. A análise es-
truturada foi utilizada para modelagem de sistemas estruturados 
por meio da representação gráfica de diagramas de fluxos de dados 
(PRESSMAN, 2016).
Embora já existisse há décadas, foi na década de 1980 que o para-
digma para a modelagem de sistemas orientados a objetos ganho força, 
exigindo uma análise que fosse além do paradigma estruturado. 
Orientação a objetos 53
3.1 Orientação a objetos 
Vídeo
A orientação a objetos (OO) é um paradigma alcançado pelos pro-
gramadores de softwares que emprega na modelagem objetos, ao 
passo que a programação tradicional utiliza em sua modelagem fun-
ções e procedures. Um objeto pode ser entendido como um agente 
abstrato que pertencerá ao sistema com atributos e métodos específi-
cos (WAZLAWICK, 2019).
A OO foca os objetos que os engenheiros de softwares precisam 
operar dentro do sistema ao contrário da lógica necessária para 
manipulá-los. Esse tipo de procedimento na programação é indicado 
para qualquer tipo de software que desejamos desenvolver, pois otimi-
za recursos e incrementa qualidade.
Os benefícios da OO incluem (PRESSMAN, 2016):
 • Modularidade: os sistemas se tornam modulares como se esti-
vem em caixas, com isso, a manutenção e a reutilização são mui-
to mais fáceis.
 • Reutilização: com os objetos, a reutilização se torna ágil, basta o 
programador entender que uma classe de determinado sistema 
funcionará em outro sistema para reutilizá-lo.
 • Produtividade: a produção de software se torna acelerada com a 
reutilização de classes em vários sistemas.• Facilmente atualizável e escalável.
 • Segurança: como as caixinhas de softwares já foram implemen-
tadas e testadas, a segurança do programador em usar aumenta.
A seguir exploraremos os principais conceitos da orientação a 
objetos: classes, objetos, abstração, encapsulamento, polimorfismo 
e herança.
3.2 Classes e objetos 
Vídeo Objetos são pessoas, lugares ou coisas que são relevantes para os 
sistemas que serão desenvolvidos. Estes quando orientados a obje-
tos descrevem entidades como objetos. Os objetos típicos podem ser 
clientes, itens, pedidos e assim por diante (PRESSMAN, 2016).
54 Engenharia de Software
Eles normalmente fazem parte de um grupo de itens semelhantes 
chamados classes. O desejo de colocar itens em classes não é novo. 
Descrever o mundo como sendo feito de animais, vegetais e minerais é 
um exemplo de classificação.
A ideia por trás das classes é ter um ponto de referência e descrever 
um objeto específico em termos de suas semelhanças ou diferenças 
em relação aos membros de sua própria classe. 
Ao fazer isso, é mais eficiente para alguém dizer: “o urso coala é um 
marsupial (ou animal com bolsa) com uma grande cabeça redonda e 
orelhas peludas”, do que descrever um urso coala com todas suas ca-
racterísticas como um mamífero. 
É mais eficiente descrever características, aparências e até mesmo 
comportamentos dessa maneira. Quando ouvimos a palavra reutili-
zável no mundo orientado a objetos, significa que podemos ser mais 
eficientes, porque não precisamos começar do início para descrever 
um objeto sempre que ele for necessário para o desenvolvimento de 
software (WAZLAWICK, 2019).
Uma classe é um dispositivo abstrato, utilizado para demonstrar 
objetos relevantes aos sistemas de maneira concreta. As classes de 
objetos são formas de categorizar instâncias dentro do sistema que 
será desenvolvido, tais como: Produtos, Alunos, Professores, Nota Fis-
cal, Contas a Pagar, Contas a receber, entre outros. 
Dentro das classes temos os atributos que irão especificar os 
objetos, por exemplo: CPF do cliente, E-mail, Endereço, Preço, Nota 
(HIRAMA, 2011).
Além dos atributos, as classes possuem métodos, que são as ope-
rações que os objetos podem desempenhar dentro do sistema, como: 
Incluir cliente, Vender produto, Excluir aluno etc.
Um método é um pedaço de código-fonte escrito dentro de uma 
classe que foi nomeada e tem a capacidade de ser chamada. Ele sem-
pre faz parte de alguma classe e é frequentemente usado para modifi-
car o estado interno de um objeto instanciado de uma classe.
Cada classe deve ter um nome que a diferencie de todas as outras 
classes, geralmente são substantivos ou frases curtas e começam com 
uma letra maiúscula. 
Na Figura 1, a classe é chamada Rental_Car, representada por um 
retângulo. Ele contém dois outros recursos importantes: uma lista de 
Orientação a objetos 55
atributos e uma série de métodos. Esses itens descrevem uma classe, 
a unidade de análise que é uma grande parte do que chamamos de 
análise e design orientado a objetos.
rental_car
- placa do automóvel
- modelo
- cor
- ano
- tamanho
Figura 1
Classe
Fonte: Elaborada pelo autor.
Um atributo descreve alguma propriedade que todos os objetos da 
classe possuem. Observe que a classe Rental_Car possui os atributos 
de tamanho, cor, ano, placa e modelo. Todos os carros apresentam 
esses atributos, mas cada carro terá valores diferentes para eles. 
Por exemplo, um carro pode ser azul, branco ou de alguma outra cor. 
Mais adiante, demonstraremos que você pode ser mais específico sobre 
o intervalo de valores dessas propriedades. Ao especificar atributos, a 
primeira letra geralmente é minúscula.
Além dos atributos, a classe possui métodos. Um método é uma 
ação que pode ser solicitada de qualquer objeto da classe. Métodos são 
os processos que uma classe pode realizar.
Os métodos também são chamados de operações. Para a classe de 
Rental_Car, inclusão(), exclusão() e saída() são exemplos de métodos. 
Ao especificá-los, a primeira letra geralmente é minúscula.
A seguir, segue a classe Rental_Car com os métodos.
rental_car
- placa do automóvel
- modelo
- cor
- ano
- tamanho
inclusão()
exclusão() 
saída()
Figura 2
Classe com métodos
Fonte: Elaborada pelo autor.
56 Engenharia de Software
Para ficar mais claro, vamos hipoteticamente definir os métodos do 
Rental_Car:
 • inclusão(): será responsável por incluir carros no cadastro;
 • exclusão(): executará a exclusão de carros do cadastro;
 • saída(): controlará as saídas de carros para locação.
Dessa forma, podemos concluir que as classes precisam ter 
nome, atributos e métodos. A seguir, seguem mais dois exemplos 
de classes de objetos.
 
produtos
- código
- descrição
- quantidade em estoque
- preço
- peso 
inclusão()
consulta() 
venda()
fornecedores
- cnpj
- razão social
- endereço
- cidade
- estado
alteração()
relatório() 
Figura 3
Classes de objetos – produtos e fornecedores
Fonte: Elaborada pelo autor.
3.3 Abstração 
Vídeo
Este é um processo de selecionar o método e os atributos necessários 
para especificar o objeto. A abstração se concentra nas características es-
senciais de um objeto em relação à perspectiva do usuário (HIRAMA, 2011).
Abstração significa a arte de representar as características essenciais 
sem se preocupar com os detalhes das classes, com ela temos os se-
guintes benefícios: 
 • reduzir a complexidade de ver as coisas;
 • evitar a duplicação de classes e aumentar a capacidade de 
reutilização;
 • ajudar a aumentar a segurança de um aplicativo ou programa, 
pois apenas detalhes importantes são fornecidos ao usuário;
 • esconder a complexidade subjacente dos dados;
 • ajudar a evitar códigos repetitivos;
 • dar flexibilidade aos programadores para alterarem a implemen-
tação do comportamento abstrato.
Orientação a objetos 57
Abstrair significa mostrar apenas dados relevantes e esconder deta-
lhes desnecessários de um objeto do usuário. Por exemplo, quando você 
faz login em sua conta Amazon on-line, você insere seu user_id e senha e 
clica em login. Nesse momento, o processo acessa seu banco de dados e 
retorna com o acesso ou uma mensagem de senha incorreta.
O processo de validação de senha junto ao banco de dados é abs-
traído do usuário, ele não precisa conhecer o processo, só precisa rece-
ber o acesso ou uma mensagem de erro.
Outro exemplo de abstração, um automóvel é um objeto que é com-
posto de vários outros objetos menores, como um sistema de engrena-
gens, mecanismo de direção, motor, suspensão, tanque de combustível, 
e inúmeros outros componentes. Mas para o motorista comum, o carro 
é um único objeto que irá levá-lo de um lugar para outro.
A abstração permite que os engenheiros de software tenham uma 
visão panorâmica do sistema. Ao contrário do encapsulamento (que 
veremos mais à frente), ela tende a generalizar as coisas, ocultando 
dados indesejados e revelando os dados necessários, com isso, os de-
senvolvedores conseguem escrever códigos limpos, economizando es-
paços e mantendo programas facilmente (SOMMERVILLE, 2011).
Vamos imaginar mais um exemplo para ficar mais claro, pense 
na interface do seu celular. Quer você use um sistema operacional 
Android ou iOS, você não interage diretamente com o código que per-
mite que seu telefone se conecte à internet, envie uma mensagem de 
texto ou jogue um videogame. 
Em vez disso, você interage com o código por meio de uma interface 
de usuário projetada para otimizar sua experiência e facilitar o acesso 
às funções e aos métodos necessários para concluir uma tarefa. Nesse 
caso, a interface é abstraída da implementação real do código.
A abstração pode ser impactada pelo perfil do usuário e pelos direi-
tos de acesso, por exemplo: o presidente da empresa poderá ter uma 
visão de muito mais.
3.4 Encapsulamento 
Vídeo
Encapsular, na orientação a objetos, significa agrupar atributos e 
métodos com um funcionamento único. Esse conceito também é fre-
quentemente usado para ocultar a representação interna,ou estado, 
58 Engenharia de Software
de um objeto de fora. Isso é chamado de ocultação de informações 
(SOMMERVILLE, 2011).
Getter e Setter são os métodos mais presentes nas linguagens de 
programação, assim, quando for encapsular objetos, procure por essas 
duas palavras. No encapsulamento, é possível fazer com que um mé-
todo ou atributo seja excluído, omitido ou deixado apenas para leitura.
Vamos dar uma olhada em um exemplo que mostra o conceito de 
encapsulamento e como você pode usá-lo para implementar a oculta-
ção de informações e aplicar a validação adicional antes de alterar os 
valores de seus atributos de objeto.
Para ficar mais claro, vamos imaginar uma classe de objetos cha-
mada Maquina de Café, sendo que seus atributos poderiam ser: vol-
tagem da Máquina de café, capacidade de cafés por dia, método de 
moagem de café, cor, tamanho, entre outros. Para o conceito do en-
capsulamento, podemos ter um método, por exemplo, “fazer café”, 
que engloba vários outros métodos, ficando invisível para o usuário 
os métodos mais simples.
Olhe outro exemplo elucidador, imagine uma calculadora, enten-
demos sua interface à primeira vista e não precisamos saber como 
funciona por dentro. Somente precisamos ter a ciência de que ao 
pressionarmos “2 + 2” e, em seguida, “=”, teremos o resultado 4 no vi-
sor. Ou seja, a calculadora é um encapsulamento de todas as opera-
ções matemáticas que acontecem internamente nela.
O objeto gerencia seu próprio estado por meio dessas funções, e 
nenhuma outra classe pode alterá-lo, a menos que seja explicitamente 
permitido. Para se comunicar com o objeto, o programador precisará 
utilizar os métodos fornecidos.
Vamos utilizar mais um exemplo para o conceito ficar mais explícito, 
falaremos de uma classe de objetos chamada Conta Bancária. Pressu-
pomos que nessa classe inserimos somente os atributos nome e saldo, 
com o objetivo de simplificar a visualização dos usuários.
Nela iremos inserir o método “depositar”, que, como o próprio nome 
diz, será responsável por receber o crédito na conta corrente.
O cálculo interno será simples, ou seja, soma-se o valor atual com o 
valor a ser depositado, com isso, o atributo saldo é atualizado, sendo 
que o atributo nome não deverá ser alterado.
Orientação a objetos 59
Se houve a possibilidade dos atributos serem acessados diretamen-
te em qualquer parte do código-fonte, o programador estará correndo o 
risco do saldo ser atualizado sem que o método de depositar tenha sido 
executado. Para evitar esse problema, é indicado que o engenheiro use os 
métodos específicos para esse fim, por exemplo: “atualiza saldo”.
Com o encapsulamento, não percebemos que temos um método cha-
mado “atualiza saldo” que está encapsulado dentro do método “depositar”.
Com esse exemplo, podemos perceber que o encapsulamento evita 
o acesso indevido a alguns dados sensíveis, além de outras vantagens 
importantes no desenvolvimento orientado a objetos. A seguir mostra-
remos alguns benefícios essenciais. 
Manutenção de código
É possível afirmar que todo código vai precisar de manutenção 
depois de algum tempo, tudo muda muito rapidamente, e os códigos 
precisam se adaptar às novas necessidades. Imagine códigos muito ex-
tensos, como o Facebook, estima-se que ele tenha mais de 60 milhões 
de linhas de códigos.
A manutenção em um software desse tamanho parece impossível, 
não é? O encapsulamento facilita muito as operações de manutenção, 
pois o programador encontrará mais rapidamente o ponto exato da 
alteração do código, é como procurar caixinhas identificadas dentro de 
um armário. Sem o encapsulamento, seria procurar um par de meia 
dentro de um grande armário totalmente desorganizado.
Reuso de código
O encapsulamento propicia que o desenvolvedor reutilize seus códi-
gos já testados e funcionando. Suponha que um programador precise 
criar uma tela de login e senha e ele já tenha uma operação dessa funcio-
nando em sua empresa, basta ele pegar a rotina encapsulada, alterar tal-
vez cor e fonte, ou nem isso, e colocar para funcionar em outro sistema.
Com isso, ele ganha tempo de programação e evita disponibilizar 
rotinas não testadas ou com problemas, o ganho é muito alto quando 
pensamos em escala.
Desenvolvimento acelerado e simplificado
Com o reuso de código, é óbvio que aceleramos e simplificamos o 
desenvolvimento de sistemas. Os encapsulamentos já estão testados e 
funcionando, então, por que não os reutilizar para ganharmos agilidade?
60 Engenharia de Software
O pilar do encapsulamento auxilia de maneira incrível o desen-
volvimento orientado a objetos, trazendo também proteção aos da-
dos sensíveis ou sigilosos. 
3.5 Polimorfismo 
Vídeo Polimorfismo é originalmente uma palavra grega que significa a ca-
pacidade de assumir várias formas. No paradigma orientado a objetos, 
ele implica o uso de operações de maneiras diferentes, dependendo da 
instância na qual estão operando. 
O polimorfismo permite que objetos com diferentes estruturas in-
ternas tenham uma interface externa comum. É particularmente eficaz 
ao implementar a herança que veremos a seguir.
Vamos começar com um exemplo simples para o conceito ficar mais 
claro. Imaginem duas classes, Circulo e Quadrado, cada uma com um 
método Calcula_Area(). Embora o nome e a finalidade dos métodos nas 
classes sejam os mesmos, a implementação interna, ou seja, o procedi-
mento de cálculo da área, é diferente para cada classe. 
Cada figura tem sua fórmula para calcular a área. Quando um objeto 
da classe Circulo invoca seu método Calcula_Area (), a operação encontra 
a área do círculo sem nenhum conflito com o método Calcula_Area() da 
classe Quadrado, eles entendem que devem usar fórmulas diferentes.
O polimorfismo é considerado uma das características importantes 
da Programação Orientada a Objetos e nos permite realizar uma única 
ação de modos diferentes. Em outras palavras, o polimorfismo permite 
definir uma interface e ter várias implementações. 
A palavra poli significa muitos, e morfos significa formas, então, a 
palavra polimorfismo significa ter muitas formas, em outras palavras, 
podemos definir polimorfismo como a capacidade de uma mensagem 
ser exibida em mais de uma forma.
Olhe outro exemplo da vida real de polimorfismo, uma pessoa ao 
mesmo tempo pode ter características diferentes. Como um homem 
ao mesmo tempo pode ser pai, marido, empregado. Portanto, a mes-
ma pessoa possui um comportamento diferente em várias situações 
dentro de um sistema computacional.
Orientação a objetos 61
E para finalizar, outro exemplo, o jogo de xadrez apresenta várias 
peças, certo? Para sermos mais precisos, no xadrez moderno cada jo-
gador irá dispor de 16 peças, sendo oito peões, dois bispos, dois ca-
valos, duas torres, um rei e uma dama, sendo que cada componente 
possui um movimento particular.
O peão, por exemplo, se desloca para frente, o cavalo, por sua vez, 
anda em L, enquanto o bispo se movimenta na diagonal e assim por 
diante. Dentro do conceito do polimorfismo, podemos afirmar que to-
dos são peças, porém com métodos de deslocamentos diferentes.
Podemos concluir que o polimorfismo abre a possibilidade para que 
os programadores se preocupem com as generalidades, deixando que 
o ambiente de tempo de execução trate as especificidades. Agora va-
mos explorar o conceito de herança.
3.6 Herança 
Vídeo Herança é um dos principais conceitos da OO, pois é onde o progra-
mador pode derivar uma classe de outra classe para uma hierarquia de 
classes que compartilham um conjunto de atributos e métodos.
É possível declarar diferentes tipos de exceções, adicionar lógica 
personalizada a estruturas existentes e até mesmo mapear seu mode-
lo de domínio para um banco de dados.
A herança visa otimizar o trabalho dos programadores, pois permite 
que aconteça a tão buscada otimização, deixando que os engenheiros 
de software criem hierarquias de classes, em que classes e objetos her-
dam propriedades e comportamentos de sua classe pai.
Uma classe que herdade uma classe pai é chamada de subclasse ou 
classe filha, e os objetos que recebem propriedades e comportamentos 
de um pai por meio de herança são chamados de objetos filhos.
Como isso é útil? 
Um grande diferencial da herança é a possibilidade da reutilização 
de procedimentos já testados e validados. Vamos usar como exemplo 
um zoológico que possui duas ou mais espécies de cada animal, sem-
pre com o objetivo da preservação. 
62 Engenharia de Software
Suponhamos que você desenvolverá um software para o controle 
dos animais, provavelmente seria essencial criar uma classe chama-
da animal. 
Lembrando que criar uma classe única para cada animal rapidamen-
te se tornaria muito repetitivo, porque existem algumas propriedades 
e comportamentos que se aplicam a cada animal, desde um papagaio 
até uma girafa. 
As funções compartilhadas podem incluir alimentar(), hidratar(), 
limpar_ambiente(). Em vez de criar esses atributos compartilhados re-
petidamente para cada animal, poderíamos criar uma classe Animal pai. 
Essa classe pai iria conter as propriedades e os comportamen-
tos universais para todos os animais e nos salvaria de ter que criar 
essas funções compartilhadas. Deu para perceber a importância do 
conceito herança?
Ou seja, herança é um caminho dentro da Programação Orientada 
a Objetos que possibilita ao engenheiro utilizar propriedades de outras 
classes sem a necessidade de reprogramação.
Uma criança herda as características de seus pais, por exemplo. Com 
a herança, podemos reutilizar os campos e os métodos da classe exis-
tente. Consequentemente, a herança facilita a reutilização de códigos.
Dentro dela temos alguns tipos de herança que iremos explorar a 
seguir (HASSAN, 2011).
Herança única: uma única classe fornece seus atributos a uma 
outra classe.
Figura 4
Herança única
Class A Class B
Fonte: Elaborada pelo autor.
No diagrama da Figura 4, a Class A fornece atributos apenas a Class 
B. A Class A é uma superclasse e a Class B é uma subclasse.
Orientação a objetos 63
Herança múltipla: é uma herança em que uma classe se estende a 
mais de uma classe. 
Figura 5
Herança múltipla
Class A Class B
Class C
Fonte: Elaborada pelo autor.
Conforme o diagrama da Figura 5, a Class C herda atributos da 
Class A e da Class B.
Herança multinível: uma classe pode herdar de uma classe deriva-
da. Portanto, a classe derivada se torna a classe base para a nova classe.
Figura 6
Herança multinível
Class A Class B Class C
Fonte: Elaborada pelo autor.
Conforme mostrado no diagrama da Figura 6, a Class C é uma 
subclasse de B, e B é uma subclasse da Class A. Sendo que a Class B 
herda atributos da A e a Class C herda atributos da Class A e também 
da Class B.
Herança hierárquica: uma classe herda atributos de muitas ou-
tras superclasses.
64 Engenharia de Software
Figura 7
Herança hierárquica
Class B Class C
Class A
Class D
Fonte: Elaborada pelo autor.
Na herança hierárquica, conforme mostrado no diagrama da Figura 
7, a Class C, B e D herdam atributos da superclasse A.
Com essas estruturas, o programador pode escolher entre a melhor 
opção para desenvolver seus modelos orientados a objetos, sempre 
buscando eficiência, eficácia em seus códigos.
Dentro dos recursos da orientação a objetos, vale ressaltarmos a 
generalização e a especialização. Eles representam uma hierarquia 
de relacionamentos entre classes, em que as subclasses herdam de 
superclasses.
CONCLUSÃO
Neste capítulo foi possível compreender como os princípios de obje-
tos, encapsulamento, herança e polimorfismo são as bases para o desen-
volvimento de sistemas orientados a objetos. 
Para compreender e expressar os recursos essenciais e interessantes 
de um aplicativo no complexo mundo real, um modelo orientado a ob-
jetos é construído em torno destes. Um objeto encapsula dados e com-
portamentos, o que implica que os analistas podem usar a abordagem 
orientada a objetos para modelagem de dados e modelagem de processo.
Vimos também que objetos específicos em um sistema podem herdar 
características da instância global de um objeto. Por exemplo, muitos ti-
pos de objetos podem ter um nome e uma data de criação. 
Objetos específicos podem herdar essas características globais de 
objetos pais que incluem apenas características globais e podem herdar 
características de mais de um objeto pai. A herança tenta evitar a definição 
Na obra de iniciação à 
orientação a objetos, Orien-
tação a objetos: aprenda 
seus conceitos e suas aplica-
bilidades de forma efetiva, 
você poderá irá iniciar a 
leitura com um breve histó-
rico do tema conhecendo 
o início desse conceito 
que surgiu na Noruega, 
aprofundando os conceitos 
de reuso, coesão e acopla-
mento. Suas definições de 
classe, atributo, método e 
objeto são bastante claras 
e objetivas, ajudando você 
a se aprofundar num as-
sunto que, algumas vezes, 
parece mais complicado 
do que é. A obra finaliza 
com boas práticas no uso 
da orientação a objetos, 
chamando atenção para 
herança, polimorfismo, en-
capsulamento e abstração, 
e como eles podem ser 
úteis no desenvolvimento 
de sistema eficientes.
CARVALHO, T. L. São Paulo: Casa do 
Código, 2016.
Livro
Orientação a objetos 65
redundante de características semelhantes que podem ser incorporadas 
em níveis superiores do sistema.
Outro conceito importante abordado foi o polimorfismo, funcionalida-
de conceitualmente semelhante entre objetos diferentes, é extraída em 
um nível global.
Esse processo limita a produção de funcionalidade paralela e agiliza 
a interface de informações. O polimorfismo direciona o redator da es-
pecificação a compreender a funcionalidade de um processo e torná-lo 
disponível para qualquer objeto que requeira uma instância semelhante 
de funcionalidade.
E foi assim que exploramos melhores práticas para a análise e o de-
senvolvimento de sistemas computacionais, sempre visando não só aten-
der às necessidades dos usuários, e sim surpreendê-los em menor tempo 
com menor custo possível.
ATIVIDADES
Atividade 1
Você foi chamado para convencer um time de engenheiros de 
softwares que a orientação a objetos é muito mais adequada para 
o atual momento quando comparamos com os antigos padrões 
de análise e desenvolvimento de software. Para essa missão, você 
deverá construir um quadro que compare e ressalte os benefícios 
entre a orientação a objetos e os métodos tradicionais.
Atividade 2
Seguindo os exemplos vistos, escolha e desenvolva mais três 
classes de objetos com no mínimo três atributos e três métodos 
para um sistema de supermercado.
REFERÊNCIAS 
HASSAN, G. Software modeling and design: UML, use cases, patterns, and software 
architectures. Cambridge: Cambridge University Press, 2011.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de 
Janeiro: Elsevier, 2011.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: 
AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Education, 2011.
WAZLAWICK, R. S. Engenharia de software: conceitos e práticas. São Paulo: GEN LTC, 2019.
66 Engenharia de Software
4
UML – Unified Modeling 
Language
Com o estudo deste capítulo, você será capaz de: 
• compreender conceitos da Unified Modeling Language (UML);
• desenvolver notações gráficas de engenharia de softwares;
• explorar atividades práticas de diagramas de caso de uso;
• entender e implementar os diagramas da UML, que são o dia-
grama de atividades, diagrama de classe, diagrama de objetos e 
diagrama de sequência.
Objetivos de aprendizagem
O desenvolvimento de software é uma atividade complexa e, como tal, 
quando não há um padrão comum de comunicação e interpretação da 
equipe envolvida, surgem problemas. 
Para que um projeto de software seja desenvolvido sem prejuízos e 
seja fácil mantê-lo no futuro, os envolvidos devem interpretar a mesma 
linguagem. Assim como vimos, para desenvolver um software, seguimos 
algumas etapas indicadas pela engenharia de softwares; jápara a tarefa 
de documentar sistemas, temos a Linguagem de Modelagem Unificada, 
do inglês Unified Modeling Language (UML).
Essa linguagem gráfica descreve o desenvolvimento de diagramas 
ilustrativos para o desenvolvimento de softwares orientados a objetos, 
atribuindo mais eficiência e assertividade ao processo (HIRAMA, 2011).
4.1 UML 
Vídeo
UML é como é conhecida no mercado a Unified Modeling Language 
– ou, em português, Linguagem de Modelagem Unificada. Trata-se de 
uma forma padronizada e gráfica para a ilustração de sistemas.
UML – Unified Modeling Language 67
O UML é composto por um conjunto de diagramas confeccionado, 
ao longo do tempo, por profissionais de tecnologia, buscando a espe-
cialização, visualização, construção e documentação de partes ou siste-
mas completos (HASSAN, 2011). Essa coleção de melhores práticas em 
engenharia de softwares apresenta um passo a passo para que enge-
nheiros de softwares e todos os envolvidos possam dialogar de modo 
eficiente na construção dos projetos. 
A linguagem visual é uma parte muito importante do desenvolvi-
mento de software orientado a objetos e, também, do processo de 
desenvolvimento de software. A UML usa, principalmente, notações 
gráficas para expressar o design de projetos de software. Seu uso aju-
da as equipes de projeto a se comunicarem, a explorarem projetos po-
tenciais e a validarem o projeto arquitetônico do software.
No ano de 1994, o engenheiro de software Jim Rumbaugh, um dos 
idealizadores do Object Modeling Technique (OMT) – técnica de mo-
delagem de objetos da época –, deu um grande passo na carreira, 
deixando o emprego na General Electric e se unindo com outro enge-
nheiro, Grady Booch, da Rational Corp, para o desenvolvimento do mé-
todo unificado, que deu origem à UML atual (PRESSMAN, 2016).
À medida que o valor estratégico do software aumenta para muitas em-
presas, a indústria busca técnicas para automatizar a produção de software, 
melhorar a qualidade e reduzir o custo e tempo de colocação no mercado. 
Além disso, o desenvolvimento para a World Wide Web (WWW), que é 
a internet, embora torne algumas coisas mais simples, exacerbou esses 
problemas de arquitetura. A UML foi projetada para responder a essas 
necessidades, ou seja, ela (PRESSMAN, 2016):
 • entrega aos interessados no processo uma linguagem de mode-
lagem visualmente eficiente e pronta para utilizar, com o objetivo 
de desenvolver e socializar modelos;
 • fornece dispositivos visuais para demonstrar o desenvolvimento 
de softwares, explorando os conceitos principais;
 • é independente de determinadas linguagens de programação e 
processos de desenvolvimento;
 • fornece uma base formal para a compreensão da linguagem 
de modelagem;
 • incentiva o crescimento do mercado de ferramentas voltadas à 
orientação a objetos;
68 Engenharia de Software
 • suporta conceitos de desenvolvimento macros, como colabora-
ções, estruturas, padrões e componentes;
 • integra as melhores práticas.
A seguir, vamos explorar os seus vários diagramas que representam 
os softwares e seus projetos a todos os interessados, desde o usuário 
e o presidente da empresa até os engenheiros, os programadores e os 
analistas de sistemas.
4.2 Os diagramas da UML 
Vídeo Em um desenvolvimento de software, temos muitas partes inte-
ressadas participando, como: analistas, designers, programadores, 
testadores, usuários, clientes, autores técnicos entre outros.
Todas essas pessoas estão interessadas em diferentes aspectos do 
sistema, e cada um deles requer um nível diferente de detalhe. Por 
exemplo, um programador precisa entender o design do sistema e ser 
capaz de converter esse design em um código-fonte (PRESSMAN, 2016).
Por outro lado, se um redator técnico está interessado no comporta-
mento do sistema como um todo, precisa entender como o produto 
funciona. Assim, a UML tenta fornecer uma linguagem bem expressiva, 
de modo que todos os interessados possam se beneficiar de pelo me-
nos um diagrama.
A UML é composta por diversos tipos de diagramas que ilustram os 
projetos com diversas visões. Em seguida, vamos conhecer os seguin-
tes diagramas:
 • diagrama de atividades;
 • diagrama de classe;
 • diagrama de objetos;
 • diagrama de sequência.
4.3 Diagrama de atividades 
Vídeo
Os diagramas de atividades são usados para desenvolver representa-
ções gráficas que ilustram os fluxos de trabalho e as atividades dos partici-
pantes do sistema, com suporte para escolha, interação e simultaneidade. 
UML – Unified Modeling Language 69
Ele descreve o fluxo de controle do sistema de destino, como a 
exploração de regras e as operações de negócios complexas, descre-
vendo o caso de uso e, também, o processo de negócios. 
Na UML, os diagramas de atividades têm como objetivo modelar 
processos computacionais e organizacionais, ou seja, os fluxos de 
trabalho (HASSAN, 2011). Esses diagramas descrevem como as ativi-
dades são coordenadas, para fornecer um serviço que pode estar em 
diferentes níveis de abstração. 
Normalmente, um evento precisa ser alcançado por algumas opera-
ções, particularmente quando a operação se destina a atingir uma série 
de coisas diferentes que requer coordenação. Ainda, como os eventos 
em um único caso de uso se relacionam entre si, em particular, há casos 
de uso em que atividades podem se sobrepor e exigir coordenação. 
Esse diagrama também é adequado para modelar como uma coleção 
de casos de uso é coordenada para representar fluxos de trabalho de 
negócios. Para ilustrar o entendimento, vamos tomar alguns exemplos.
O primeiro exemplo é o processo de escrever um texto em um 
software de editor de texto; é um caso simples, que todos nós faze-
mos automaticamente, mas vamos aceitar o desafio de modelar 
esse processo.
A seguir são apresentadas as atividades que desempenhamos para 
desenvolver um texto (WAZLAWICK, 2019): 
1. abra o software de processamento de texto;
2. crie um arquivo;
3. salve o arquivo com um nome exclusivo em seu diretório;
4. digite o documento;
5. se forem necessários gráficos, abra o pacote de gráficos, crie os 
gráficos e cole-os no documento;
6. se for necessária uma planilha, abra o pacote da planilha, crie a 
planilha e cole-a no documento;
7. salve o arquivo;
8. imprima uma cópia impressa do documento;
9. saia do pacote de processamento de texto.
De posse dessas nove atividades, vamos ao desenvolvimento do 
diagrama de atividades.
70 Engenharia de Software
Imprima uma 
cópia impressa do 
documento
Salve o arquivo
Abra o pacote da planilha, 
crie a planilha e cole-a no 
documento
Abra o pacote de gráficos, 
crie os gráficos e cole-os 
no documento
Digite o documento
Salve o arquivo com 
um nome exclusivo 
em seu diretório
Crie um arquivo
Abra o software de 
processamento de 
texto
Saia do pacote de 
processamento de 
texto
Se forem necessárias planilhas
Se forem necessários gráficos
Figura 1
Diagrama de atividades: elaborando um texto
Fonte: Elaborada pelo autor.
4.4 Diagrama de classe 
Vídeo O diagrama de classes é uma ferramenta que auxilia na modela-
gem de todos os métodos da orientação a objetos. Ele impulsiona a 
descrição dos tipos de objetos nos projetos e os respectivos tipos de 
relacionamentos que existem entre esses objetos. Há três tipos de re-
lacionamento essenciais, a saber (WAZLAWICK, 2019): 
1. Associação: representa relacionamentos entre instâncias de 
tipos – uma pessoa trabalha para uma empresa, e uma empresa 
possui vários escritórios.
2. Herança: ocorre quando entidades herdam atributos e métodos 
de outras entidades; ajuda muito na otimização de códigos.
3. Agregação: é uma forma de composição de objetos no design 
orientado a objetos.
UML – Unified Modeling Language 71
O diagrama de classes possui alguns objetivos específicos:
 • mostrar a estrutura estática dos classificadores em um sistema;
 • fornecer uma notação básica para outros diagramas de estrutu-
ra, prescritos pela UML;
 • ser útil para desenvolvedores e outros membros daequipe também;
 • ser usado pelos analistas de negócios para modelar sistemas 
por meio de uma perspectiva de negócios.
Para o desenvolvimento dos diagramas de classe, é preciso seguir 
uma notação específica que pode ser compreendida por todos os 
envolvidos e padronizada no mundo todo: 
• Nome da classe: aparece na primeira partição.
• Atributos de classe: são mostrados na segunda partição.
• Operações de classe (métodos): são mostradas na terceira partição, sendo 
entendidas como serviços que a classe oferece.
Veja, na Figura 2, como deve ser usada a notação para classes 
de objeto.
Figura 2
Classe de objetos 
Nome da classe
Atributo da classe
Métodos da classe
Fonte: Elaborada pelo autor.
Para ficar mais claro, vamos usar um exemplo simples, pensando 
em um sistema que irá controlar alunos alocados em uma turma, com 
professores destacados para ministrar aulas.
Aluno
nome: Texto
matricula: Inteiro
definirNome(nome)
obterNome()
definirNome()
definirMatricula(matricula)
obterMatricula
Professor
nome: Texto
titulacao: Texto
definirNome(nome)
obterNome()
definirTitulacao(titulo)
obterTitulacao
Turma
codigo: Texto
sala: Texto
horario: Horario
estaAberta()
definirProfessor(professor)
incluirAluno(aluno)
esta-matriculado-em e-ministrada-por 
Figura 3
Diagrama de classe: salas de aula
Fonte: Elaborada pelo autor.
72 Engenharia de Software
Vamos destacar algumas características do diagrama apresentado.
A classe Aluno possui como atributos: “nome”, como texto; e 
“matrícula”, como número inteiro. Ainda, possui como métodos: 
definirNome, ObterNome, definirMatrícula e obterMatricula – todos 
eles relacionados à classe Aluno.
O mesmo ocorre com as classes Turma e Professor; entre elas, te-
mos relacionamentos simples, em que um Aluno está matriculado em 
uma Turma, e uma Turma é ministrada por professores.
No próximo exemplo, usamos as chamadas cardinalidades, nas 
quais é possível indicar as quantidades nos relacionamentos. Vamos 
hipoteticamente desenvolver um sistema para um berçário. 
Medico
CRM
Endereco
Telefone celular
Bebe
Medicamento
Descricao
Quantidade em estoque
UnidadeMedida
Mae
Sobrenome
Endereco
Telefone
Medicacao
Quantidade
Data
Hora
Pessoa
Nome
Data de nascimento
Figura 4
Diagrama de classe: berçário
Uma pessoa pode ser um bebê, 
um médico ou uma mãe
faz parto
0..* 0..* 
0..* 
0..* 
1 1
possui uma
Ingere
Fonte: Elaborada pelo autor.
Nesse exemplo, temos que um médico pode fazer o parto de zero a 
infinitos bebês, com a notação “0...*”, enquanto um bebê terá exclusi-
vamente “1” médico responsável pelo parto.
Vamos a outra ilustração para ficar claro o entendimento: uma 
classe Mae pode possuir de zero a infinitos bebês, e um bebê tem 
exclusivamente uma mãe. Já uma classe Bebe pode ter de zero a infini-
tos medicamentos, e um medicamento pode ser ministrado de zero a 
infinitos bebês.
UML – Unified Modeling Language 73
O diagrama de classes é um modelo estático utilizado para ilustrar, 
com uma visão estática, o funcionamento de um sistema a ser projeta-
do. Esse tipo de diagrama é essencial, também, para os codificadores 
implementarem seus códigos.
Alguns pontos devem ser lembrados ao desenhar um diagrama de 
classe, a saber (WAZLAWICK, 2019):
 • o nome do diagrama de classes precisa ser significativo para de-
monstrar o aspecto do sistema;
 • cada elemento e as suas relações devem ser levantados junto aos 
usuários com antecedência;
 • os atributos e métodos de cada classe devem ser claramente 
identificados;
 • as propriedades essenciais devem ser especificadas para cada 
classe, desconsiderando-se os desnecessários;
 • as notas podem ser utilizadas à vontade para descrever e informar 
aos interessados sobre as particularidades do sistema.
Antes de finalizar, faça a revisões necessárias. Não se preocupe em 
chegar à versão final, porque, depois que as codificações se iniciam, os 
custos aumentam.
4.5 Diagrama de objetos 
Vídeo Um diagrama de objeto é uma ilustração gráfica de um software, 
em que é possível demonstrar os relacionamentos entre os objetos, 
com seus respectivos valores e instanciamento. Com o diagrama de 
objeto, pode-se entregar uma visão estática e momentânea do funcio-
namento do sistema a ser desenvolvido.
Alguns profissionais podem achar difícil entender a diferença entre 
um diagrama de classes UML e um diagrama de objetos UML, pois 
ambos são compostos de “blocos retangulares” nomeados, com atri-
butos e ligações entre eles, que fazem com que os dois diagramas UML 
pareçam semelhantes. 
Além disso, algumas pessoas podem até pensar que eles são iguais, 
porque na ferramenta UML eles usam as notações para diagrama de 
classes e diagrama de objetos, que são colocadas dentro do mesmo 
editor de diagramas – diagrama de classes.
74 Engenharia de Software
O objeto é uma instância de uma classe, em um determinado mo-
mento no tempo de execução, que pode ter seu próprio estado e valores 
de dados. Da mesma forma, um diagrama de objeto, dentro dos conceitos 
da UML, pode ser considerado um instanciamento estático do software.
O diagrama de objetos mostra um instantâneo do estado detalhado 
de um sistema em um ponto no tempo; portanto, esse tipo de diagra-
ma engloba objetos e seus relacionamentos, que podem ser conside-
rados um caso especial de um diagrama de classes ou de um diagrama 
de comunicação (HASSAN, 2011).
O uso de diagramas de objetos é limitado, principalmente para 
mostrar exemplos de estruturas de dados.
Durante a fase de análise de um projeto, o engenheiro pode criar 
um diagrama de classes para descrever a estrutura de um sistema e, 
em seguida, criar um conjunto de diagramas de objetos, como teste 
para verificar a precisão e integridade do diagrama de classes.
Antes de criar um diagrama de classe, o profissional pode criar um 
diagrama de objeto, para descobrir fatos sobre elementos de mode-
los específicos e seus links ou para ilustrar exemplos específicos dos 
classificadores que são necessários.
Um diagrama de objetos mostra essa relação entre as classes 
instanciadas e a classe definida, bem como a relação entre esses obje-
tos no sistema. Ele é útil para explicar porções menores do seu sistema, 
quando o diagrama de classes é muito complexo, e, também, às vezes, 
para modelar relacionamentos recursivos no diagrama.
A seguir, destacamos alguns aspectos importantes do diagrama 
de objeto:
 • realiza ilustração estática estrutural das instâncias e dos objetos 
do software;
 • faz uso de uma notação que se assemelha à notação utilizada nos 
diagramas de classes;
 • demonstra de modo eficiente os relacionamentos entre as classes 
dentro do sistema;
 • ilustra as instâncias e os respectivos links entre elas de 
maneira estática; 
 • pode ser criado pelo engenheiro, instanciando os classificadores 
em diagramas de classe, implantação, componente e caso de uso.
UML – Unified Modeling Language 75
Com isso, podemos concluir que, com o diagrama de objetos, 
é possível demonstrar a todos os interessados os objetos com seus 
respectivos relacionamentos, para o pleno funcionamento do sistema 
a ser desenvolvido. 
4.6 Diagrama de sequência 
Vídeo
O diagrama de sequência modela a colaboração de objetos, com 
base em uma sequência de tempo. Assim, mostra como os objetos 
interagem uns com outros em um cenário particular de um caso de 
uso. Com a capacidade de modelagem visual avançada, o engenheiro 
pode criar diagramas de sequência complexos com poucos cliques.
Logo, os diagramas de sequência UML são diagramas de interação, 
que detalham como as operações são realizadas. Eles capturam a inte-
ração entre objetos no contexto de uma colaboração. 
Esse tipo de diagrama é focado no tempo e mostra a ordem da inte-
ração visualmente, usando o eixo vertical do diagrama para representar 
o tempo em que as mensagens são enviadas e quando.
Os diagramas de sequência capturam (WAZLAWICK, 2019):
 • a interação que ocorre em uma colaboração que realiza um caso 
de uso ou uma operação;• as interações de alto nível entre o usuário do sistema e o sistema, 
e entre o sistema e outros sistemas.
Esses diagramas possuem o objetivo de modelar:
 • a interação de alto nível entre objetos ativos em um sistema;
 • a interação entre instâncias de objeto em uma colaboração que 
realiza um caso de uso;
 • a interação entre objetos em uma colaboração que realiza 
uma operação;
 • tanto as interações genéricas do modelo, mostrando todos os 
caminhos possíveis por meio da interação, quanto as instâncias 
específicas de uma interação, mostrando apenas um caminho 
por meio da interação.
76 Engenharia de Software
Os diagramas de sequência mostram os elementos conforme eles 
interagem ao longo do tempo e são organizados de acordo com o obje-
to (horizontalmente) e o tempo (verticalmente).
No diagrama de sequência, o eixo horizontal mostra os elementos 
que estão envolvidos na interação. Convencionalmente, esses objetos 
envolvidos são listados da esquerda para a direita, de acordo com o 
momento em que participam da sequência de mensagens. No entanto, 
os elementos no eixo horizontal podem aparecer em qualquer ordem 
(HIRAMA, 2011).
O eixo vertical representa os processos de tempo (ou progresso) 
ao longo da página. O tempo em um diagrama de sequência tem tudo 
a ver com ordenação, e não com duração. O espaço vertical em um 
diagrama de interação não é relevante para a duração da interação.
Notação do diagrama de sequência
Para o diagrama de sequência, temos os seguintes componentes:
Figura 5
Ator
Fonte: Elaborada pelo autor.
Figura 6
Linha do tempo
Fonte: Elaborada pelo autor.
LifeLine
 • Ator
O ator é caracterizado por desempenhar determinada função 
dentro do sistema, ou seja, tem um protagonismo no software, 
recebendo e inserindo dados. Demonstra atuações humanas no 
processo.
Pessoas, empresas e outros sistemas podem ser considerados 
atores, isto é, tudo aquilo que, de alguma forma, interage com o 
software, inserindo, alterando, excluindo, consultando ou receben-
do informação.
 • Linha de vida
Uma linha de vida representa um participante individual na 
interação.
UML – Unified Modeling Language 77
Figura 7
Ativações
Fonte: Elaborada pelo autor.
LifeLine
Figura 8
Mensagem de chamada
Fonte: Elaborada pelo autor.
1: message
Figura 9
Mensagem de retorno
Fonte: Elaborada pelo autor.
1.1:
 • Ativações
Um retângulo fino, em uma linha de vida, representa o período 
durante o qual um elemento está executando uma operação. As 
partes superior e inferior do retângulo estão alinhadas com o 
tempo de iniciação e conclusão, respectivamente.
 • Mensagem de chamada
Uma mensagem define uma comunicação particular entre linhas de 
vida de uma interação.
A mensagem de chamada é um tipo de mensagem que representa 
uma chamada de operação da linha de vida de destino.
 • Mensagem de retorno
A mensagem de retorno é um tipo de mensagem que repre-
senta a passagem de informações de volta para o chamador de 
uma mensagem anterior correspondente.
• Automensagem
A própria mensagem é um tipo de mensagem que representa a 
invocação de mensagem da mesma linha de vida.
 • Mensagem recursiva
Mensagem recursiva é um tipo de mensagem que representa a 
invocação de mensagem da mesma linha de vida. Seu alvo aponta para 
uma ativação em cima da ativação de onde a mensagem foi invocada.
Figura 10
Automensagem
Fonte: Elaborada pelo autor.
1: message
Figura 11
Autorrecursiva
Fonte: Elaborada pelo autor.
1: message
78 Engenharia de Software
 • Criar mensagem
Criar mensagem é um tipo de mensagem que representa a 
instanciação da linha de vida (destino).
 • Mensagem de destruição
Mensagem de destruição é um tipo de mensagem que representa 
a solicitação de destruição do ciclo de vida da linha de vida de destino.
 • Mensagem de duração
A mensagem de duração mostra a distância entre dois instantes de 
tempo para uma chamada de mensagem.
• Observação
Uma nota (comentário) permite anexar várias observações aos ele-
mentos. Um comentário não carrega nenhuma força semântica, mas 
pode conter informações que são úteis para um modelador.
Figura 12
Criar mensagem
Fonte: Elaborada pelo autor.
1: message
LifeLine2
Figura 13
Mensagem de destruição
Fonte: Elaborada pelo autor.
1: message
Figura 14
Mensagem de duração
Fonte: Elaborada pelo autor.
1: message
Figura 15
Observação
Fonte: Elaborada pelo autor.
A seguir, há um exemplo genérico de diagrama de sequência.
Figura 16
Diagrama de sequência genérico
classe ator
1: evento
2: operação 3: operação (lista parâmetros)
4: operação (lista de parâmetros)
Nome ator:
objeto 1:
nome da classe objeto2 :nome da classe
Fonte: Elaborada pelo autor.
UML – Unified Modeling Language 79
Em seguida, apresentamos mais um exemplo. Nesse caso, trazemos 
o diagrama de sequência para um processo genérico de um cadastro 
de alunos. A ilustração mostra como ator o aluno, que é quem detém 
as informações que serão inseridas no sistema.
É possível observar que temos quatro linhas de tempo identificadas 
como interface do sistema com o ator; depois, a interface do sistema 
com o banco de dados e, então, o próprio banco de dados.
Para conectar as linhas do tempo, foram inseridas as trocas de da-
dos, como “inclui dados cadastrais do aluno”, “validação dos campos 
inseridos” e outros, que demonstram como os dados são socializados 
entre as linhas do tempo.
Figura 17
Diagrama de sequência: cadastro de alunos
Aluno Interface do sistema com o ator
Interface do sistema 
com o banco de dados Banco de dados
Fonte: Elaborada pelo autor.
Inclui dados cadastrais 
do aluno
Correção dos dados
Mensagem de erro ou de 
aluno já cadastrado
Mensagem de finalização 
do processo
Validação dos campos 
inseridos
Correção dos campos
Mensagem de erro ou de 
aluno já cadastrado
Mensagem de finalização 
do processo
Acesso ao banco de 
dados para a gravação 
dos dados
Gravação dos dados 
corrigidos
Mensagem de erro ou de 
aluno já cadastrado
Mensagem de finalização 
do processo
No livro UML 2: uma 
abordagem prática, 
você vai poder explorar 
diversos estudos de caso 
modelados e demonstra-
dos com exemplos 
práticos, com os diversos 
diagramas que estuda-
mos neste capítulo.
Além dos exemplos, a 
obra apresenta exercícios 
para que os leitores 
possam aferir os conhe-
cimentos absorvidos 
durante a leitura. É indi-
cado para profissionais 
iniciantes e experientes, 
sendo um ótimo livro de 
cabeceiras para os enge-
nheiros de softwares. 
GUEDES, G. T. A. São Paulo: Novatec, 
2018.
Livro
CONCLUSÃO
Neste capítulo foi possível compreender como os diagramas UML são 
essenciais para a construção de um software. Eles devem ser usados pe-
los engenheiros de softwares antes de começarem a codificar; ainda, os 
diagramas UML podem ajudar todos a estarem na mesma página. 
Compreender o sistema que eles estão tentando criar permite que 
os desenvolvedores deleguem trabalho, identifiquem problemas em po-
80 Engenharia de Software
tencial antes do início desse trabalho e trabalhem com eficiência, em prol 
de um objetivo comum.
Foi possível entender, ainda, a importância da UML também após a 
codificação do software. Depois que o código é escrito, um diagrama UML 
pode ajudar os desenvolvedores a entender as decisões tomadas e as 
estruturas desenvolvidas para o projeto. Essas informações auxiliam as 
equipes na busca por melhorias no projeto para o futuro.
ATIVIDADES
Atividade 1
Dentro do ecossistema do UML, temos vários diagramas que 
colaboram integralmente na construção de softwares. Nesse 
sentido, você deve se colocar como um engenheiro de softwares 
de uma grande empresa e desenvolver um documento de no 
máximo duas páginas, que ilustre de maneira resumida as dife-
renças entre os seguintes diagramas:
a) Diagrama de atividades
b) Diagrama de classe
c) Diagrama de objetos
d) Diagrama de sequência
Atividade 2
Nesta atividade, a missão é compreender a figura deste livro, 
chamada Diagrama de atividades: elaborando um texto, dentroda 
Seção 4.3, e transformá-la para atender a um processo de login 
em um aplicativo comum, como o Facebook ou Instagram. 
Imagine o passo a passo que você executa para acessar sua rede 
social preferida. Para tanto, você pode usar qualquer software 
que tenha mais facilidade ou pegar um lápis e folha de papel e 
soltar sua criatividade.
REFERÊNCIAS 
HASSAN, G. Software modeling and design: UML, use cases, patterns and software 
architectures. Cambridge: Cambridge University Press, 2011.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de 
Janeiro: Elsevier, 2011.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: 
AMGH, 2016.
WAZLAWICK, R. Engenharia de software: conceitos e práticas. São Paulo: GEN LTC, 2019.
Diagrama de caso de uso 81
 5
Diagrama de caso de uso
 Ao final do estudo deste capítulo, você será capaz de:
• implementar diagramas de caso de uso;
• esboçar e interpretar o conceito dos elementos do modelo de 
caso de uso;
• interpretar e utilizar cenário e atores;
• estabelecer relacionamentos, associações e generalização.
Objetivos de aprendizagem
O diagrama de caso de uso é uma das principais ferramentas para o 
engenheiro de software, e com ela é possível trazer todos os interessa-
dos para um mesmo ponto de entendimento do sistema computacio-
nal que será desenvolvido.
O diagrama de caso de uso tem a característica que o difere dos demais 
diagramas: ele pode ser compreendido por todos os envolvidos, desde 
pessoas sem conhecimentos técnicos até desenvolvedores experientes.
Podemos afirmar que esse diagrama estabelece um protocolo de co-
municação perfeito entre os interlocuto-
res; com isso, a eficiência na construção 
do software aumenta significativamente.
O modelo de caso de uso contempla 
três objetivos: descrever a necessidade 
do cliente, estabelecer a base do sistema 
a ser implementado e definir um con-
junto de requisitos que possam ser va-
lidados quando o projeto for construído 
(IAN, 2011). 
Figura 1
Modelo de caso de uso
Fonte: Elaborada pelo autor.
Modelo de 
caso de uso
Requisitos 
definidos
Sistema a ser 
implementado
Necessidade 
do cliente
82 Engenharia de Software
Ou seja:
 • Necessidade do cliente: consenso de ideias.
 • Requisitos definidos: o que o sistema deverá fazer.
 • Sistema a ser implementado: desenvolvimento deve ser de acor-
do com as necessidades do cliente.
Neste capítulo iremos explorar o desenvolvimento dos diagramas 
de caso de uso e seus componentes.
5.1 Diagrama de caso de uso
Vídeo
O modelo de casos de uso é uma forma de representação gráfica das 
funcionalidades possível de detectar no sistema, antes de seu desenvol-
vimento, junto a todas as entidades externas que trocam informações.
Além disso, esse modelo detalha os chamados requisitos funcionais 
de um sistema levando em consideração a visão do usuário, e assim os 
desenvolvedores podem ter a certeza de que os usuários serão atendi-
dos plenamente.
Sua construção desse modelo relaciona todas as funções do siste-
ma, seu ambiente de processamento, usuários e seus respectivos pa-
péis dentro da operação do software.
De acordo com Hassan (2011), o diagrama de caso de uso especifica 
uma ordem precisa das ações que o sistema irá desempenhar, bem 
como o resultado esperado.
É importante ressaltar que o caso de uso não representa um passo 
ou uma etapa em uma funcionalidade do sistema; ele é a especificação 
detalhada de uma das funcionalidades.
O modelo de caso de uso é elaborado durante as reuniões entre 
todos os envolvidos no desenvolvimento, desde a equipe técnica até 
usuários leigos, pois somente assim se assegura que a solução será 
entregue conforme as necessidades dos usuários e não como os ana-
listas desejam.
De posse dos relatos dos envolvidos, os engenheiros iniciam a mon-
tagem de uma ilustração, seguindo premissas e padrões para que o sis-
tema seja visualizado em um formato agradável e intuitivo. Com isso, 
o tempo que se leva para traduzir códigos, por exemplo, é poupado.
Diagrama de caso de uso 83
Podemos afirmar que o diagrama de caso de uso deixa a relação en-
tre a pessoas envolvidas no desenvolvimento do software muito mais 
harmônica e produtiva (SOMMERVILLE, 2011).
5.2 Cenário
Vídeo
De acordo com Pressman (2016), conforme os requisitos são levan-
tados, uma visão geral sobre as características e funções do sistema 
começa a se concretizar. No entanto, é difícil entender como essas ca-
racterísticas e funções serão usadas por diferentes usuários. Para isso, 
é possível criar um conjunto de cenários que identifique um roteiro de 
uso para o sistema a ser desenvolvido.
Um cenário é a ilustração do ambiente no qual o sistema irá operar. 
Ele representa a ordem com que as interações entre os usuários e o sis-
tema acontece, desde a entrada de dados até a saída esperada, sempre 
visando resolver um problema.
O cenário do diagrama de caso de uso pode ser comparado ao de 
um filme, desenho ou um game, e descreve em qual ambiente o siste-
ma irá operar com suas características.
A seguir, ilustramos um cenário de um ambiente que comercializa 
laranjas, em que temos como ator o cliente que irá realizar a compra 
informando a quantidade e fazendo o pagamento.
Quadro 1
Cenário – venda de laranjas
Item Descrição
Caso de uso Comprar laranjas
Ator Cliente
Pré-condição Ter estoque disponível
Pós-condição Registrar a compra
Fluxo principal
O cliente seleciona o produto e a quantidade, o sistema 
verifica o estoque e calcula o valor a pagar
Fluxo alternativo
O cliente pode alterar a quantidade antes de fechar a 
 compra
Fluxo exceção Cartão de crédito inválido
Fonte: Elaborado pelo autor.
Conheceremos, a seguir, o conceito de ator, que tem papel fundamen-
tal nos cenários que serão criados para o desenvolvimento de softwares.
84 Engenharia de Software
5.3 Ator 
Vídeo Os atores são todos aqueles que inserem ou recebem informação 
do sistema. Podemos encontrar atores seres humanos específicos, por 
exemplo, o presidente da empresa, e até grupos de pessoas, como 
vendedores.
Empresas também podem ser atores; seguindo o mesmo raciocínio 
que tivemos com as pessoas, podemos ter empresas específicas, como 
a Receita Federal, ou grupo de empresas, por exemplo, fornecedores 
de matéria-prima.
Um outro sistema também pode ser um ator. Imagine um sistema 
contábil que recebe informação de um sistema de vendas. Esse sistema 
contábil será ator no cenário de funcionamento do sistema de vendas 
e vice-versa, ou seja, o sistema de vendas será ator no cenário de fun-
cionamento do sistema contábil.
Uma boa dica para encontrarmos os atores é fazer algumas pergun-
tas, como (HASSAN, 2011):
 • Quem usa o sistema?
 • Quem inicializa o sistema?
 • Quem fornece os dados?
 • Quem remove os dados?
 • Quem usa as informações?
 • Quem autoriza a venda?
 • Quem tem a senha do administrador?
Com as respostas para essas perguntas, o analista tem os atores 
que interagem com o sistema; depois disso, o próximo passo é tentar 
agrupar os atores, se possível. O agrupamento de atores somente é 
realizável quando os agrupados recebem e inserem as mesmas infor-
mações – se houver alguma divergência, eles devem ficar desagrupados.
Imagine um time de vendedores no qual um deles tem a função 
de inserir a senha de liberação de crédito. Nesse caso, teremos o ator 
“vendedores” e outro ator “vendedor detentor da senha de liberação 
de crédito”.
Agora vamos entender como os atores se relacionam no cenário do 
sistema.
Diagrama de caso de uso 85
5.4 Relacionamentos 
Vídeo O estabelecimento de relacionamentos entre os elementos dos 
casos de uso permite a reutilização daqueles casos de uso que preci-
sam ser definidos repetidamente, e isso reduz os esforços dos desen-
volvedores. Nos casos de uso, podemos utilizar os seguintes tipos de 
relacionamentos:
 • incluir;
 • estender;
 • generalizar.
Incluir
O relacionamento de inclusão é utilizado entre os casos de uso 
quandoum componente inclui a sequência de métodos e funções de 
outro componente. Os casos de uso que precisam ser descritos repeti-
damente para um sistema complexo ou grande são modelados uma vez 
e incluídos nos demais casos de uso, quando necessário (WAZLAWICK, 
2019).
Incluir, nos cenários de casos de uso, é semelhante a sub-rotinas, 
pois corresponde ao conjunto de instruções usadas repetidamente no 
programa, mas esse conjunto de instruções é escrito apenas uma vez 
e é chamado sempre que necessário. A inclusão pode ou não aparecer 
como uma sequência de comportamento por conta própria.
Vamos prosseguir com um outro exemplo para ajudar no entendi-
mento dos relacionamentos de inclusão entre os componentes de um 
caso de uso. Considere um sistema de corretagem de ações on-line que 
envolve vários casos de uso, sendo três deles “sessão segura”, “fazer 
uma negociação” e “validar a senha”.
Sempre que um usuário estabelece uma sessão segura, ela inclui a 
validação de senhas; e sempre que o usuário faz uma negociação com 
ações, as senhas são validadas.
Assim, a sessão segura de casos de uso inclui o caso de uso “validar 
senha” e, da mesma forma, fazer um caso de uso de troca também in-
clui o caso de uso de validação de senha. Com isso, observamos que a 
86 Engenharia de Software
senha de validação de caso de uso é usada repetidamente por outros 
casos de uso e modelada apenas uma vez.
O relacionamento de inclusão é apresentado, dentro dos casos de 
uso, com uma seta tracejada nos diagramas que representam o siste-
ma a ser desenvolvido. A ponta da seta está apontando para o caso de 
uso incluído, enquanto a seta tracejada é sempre anotada pela palavra-
-chave << include >> para mostrar a relação de inclusão.
Estender
Estender relacionamento adiciona a sequência de comportamento 
ao caso de uso padrão. É semelhante ao relacionamento de inclusão, 
mas a direção de adição da sequência de comportamento ao caso de 
uso base é oposta.
Nos relacionamentos com relacionamento de inclusão, os compo-
nentes do caso de uso base incorporam os componentes do caso de 
uso a ser incluído. Porém, no relacionamento de extensão, o caso de 
uso estendido adiciona sua sequência de comportamento ao caso de 
uso base (WAZLAWICK, 2019).
Se observarmos os relacionamentos “incluir” e “estendido”, ambos 
adicionam a sequência de comportamento ao caso de uso base. Esse é 
o cenário em que inicialmente os elementos básicos são modelados e, 
em seguida, os recursos avançados são adicionados à base.
Imagine um sistema de corretagem de ações que possui um caso 
de uso de ações comerciais, o que permite ao cliente comprar as ações 
com o dinheiro da conta corrente. E se o cliente tiver saldo insuficiente 
em sua conta, mas ainda assim ele desejar comprar o estoque, temos 
que “estender” o relacionamento do caso de uso.
Para essa situação, o sistema de corretagem de valores adiciona 
um recurso ou extensão – negociação de margem –, que permite ao 
cliente tomar um empréstimo para comprar as ações. Esse recurso é 
adicionado ao caso de uso base quando o custo de compra do estoque 
é verificado com relação ao saldo disponível na conta do cliente. Nesse 
momento, verifica-se que o saldo é insuficiente para comprar o estoque.
O relacionamento de extensão na notação UML é representado 
com a seta tracejada. A ponta da seta aponta para o caso de uso base. 
Essa seta tracejada é anotada pela palavra-chave << extend >>.
Diagrama de caso de uso 87
Generalização
Generalização é o termo mais comum em computadores. Na gene-
ralização existe uma classe pai que consiste em atributos e operações 
comuns, e a classe filha contém os atributos e operações particulares 
(WAZLAWICK, 2019).
Análogo à generalização em classes, há um conceito de generalização 
no relacionamento de caso de uso. O caso de uso pai contém a sequên-
cia de comportamento comum, e o caso de uso filho contém os recursos 
particulares. A generalização no caso de uso é representada com a seta 
triangular onde a ponta da seta indica para o caso de uso pai.
Agora que já conhecemos os relacionamentos, vamos aos casos 
práticos.
5.5 Caso prático 
Vídeo Para iniciarmos um caso prático de diagrama de caso de uso, vale 
seguir os seguintes passos:
• Contextualize as necessidades do sistema.
Etapa 1
• Identifique os atores.
• Identifique os casos de usos com seus respectivos cenários.
• Identifique os relacionamentos entre os atores e os casos de usos.
• Identifique os relacionamentos entre os atores, se houver.
• Desenvolva o caso de uso.
Etapa 2
• Documentação do caso de uso.
Etapa 3
Com essas etapas cumpridas, só nos resta desenvolver o Modelo 
Entidade Relacionamento (MER) para que o sistema posso ser codifica-
do, testado e implementado.
88 Engenharia de Software
Vale ressaltar que, além da modelagem gráfica, o diagrama de caso 
de uso deve apresentar a especificação de detalhamento do diagrama 
de caso de uso. Essa descrição também é conhecida por documentação 
de caso de uso.
Antes de entrarmos no caso do aplicativo voltado para o health tech, 
vamos imaginar um cenário de um e-commerce de sucos naturais. O 
cliente entra no site da loja “Amantes de Sucos Naturais” e pesquisa os 
tipos de sucos desejados; seleciona as frutas, a base, complementos, e 
o sistema deve exibir os dados da pesquisa em até três segundos.
Para efetuar o pedido de compra, o cliente seleciona o suco e infor-
ma a quantidade desejada. O sistema calcula o preço total e o apresen-
ta ao usuário.
Para finalizar a compra, o cliente preenche o cadastro, caso não o 
possua; preenche o campo “Dados do cliente”, informando nome, en-
dereço de entrega, telefone e CPF. Os dados devem ser armazenados 
em banco de dados para futuras compras.
Então o cliente efetua o pagamento. Para isso, seleciona a forma 
como o fará. Se o pagamento for por cartão de crédito, o cliente in-
forma os dados do cartão: número, data de validade, nome, nome da 
operadora do cartão de crédito e o código de segurança. O sistema 
deve solicitar a autorização do pagamento para a operadora do cartão 
de crédito. Se o pagamento for por boleto, o sistema o emite.
O funcionário, gerente do setor financeiro, efetua o login com a se-
nha de administrador, consulta os pagamentos e, se confirmar o paga-
mento, emite a nota fiscal.
O funcionário separa e envia os produtos para a transportadora que 
fará a entrega. Ao encaminhá-los, o funcionário registra o envio do pe-
dido para entrega, informa o status do pedido – enviado para entrega, 
por exemplo.
Ao receber os produtos, o cliente assina a nota de entrega. A nota 
de entrega possui um QR Code que identifica o pedido efetuado pelo 
cliente; por meio desse código, o funcionário efetua a baixa do pedido 
caso haja a assinatura do cliente e a data de entrega.
Iniciamos identificando os atores envolvidos nesse cenário.
Então, quem são os atores?
 • Cliente
Fonte: Elaborada pelo autor.
Figura 2
 Ator do cenário
Quem pode interagir com 
um e-commerce de sucos 
naturais?
Ator representa um papel 
que usuários, sistema 
externo, hardware ou dis-
positivos desempenham 
à medida que interagem 
com o sistema.
Dica
Diagrama de caso de uso 89
 • Gerente
 • Funcionário
 • Operadora do cartão de crédito
Agora vamos identificar os casos de uso envolvidos nesse cenário. 
A seguir, temos alguns casos do sistema de e-commerce. Você poderá 
identificar outros, caso queira.
Caso de uso Pesquisar sabores de sucos naturais
Ator Cliente
Objetivo Pesquisar os tipos de suco desejados
Caso de uso Efetuar compra
Ator Cliente
Objetivo Registrar o pedido de compra
Caso de uso Calcular valor da compra
Ator secundário Ação executada pelo sistema e desencadeada pelo 
usuário
Objetivo Ativar o sistema a fim de calcular o preço total da compra 
quando o cliente seleciona os sucos e as quantidades
Caso de uso Cadastrar cliente
Ator Cliente
Objetivo Efetuar o cadastro dos dados do cliente na base de 
dados
Caso de uso Registrar pagamento
Ator Cliente
Objetivo Registraro pagamento da compra
Caso de uso Solicitar autorização do pagamento
Ator secundário Sistema e sistema externo da operadora do cartão de 
crédito
Objetivo Solicitar a autorização do pagamento para a operadora 
do cartão de crédito quando o cliente informa os dados 
do cartão
Caso de uso Emitir boleto
Ator secundário Ação executada pelo sistema desencadeada pelo 
usuário
90 Engenharia de Software
Objetivo Ativar o sistema para emitir o boleto quando o cliente 
seleciona a forma de pagamento: boleto
Caso de uso Efetuar login
Ator secundário Gerente financeiro
Objetivo Validar a senha para efetuar o login
Caso de uso Consultar pagamento
Ator secundário Gerente financeiro
Objetivo Consultar os pagamentos
Caso de uso Emitir nota fiscal
Ator secundário Gerente financeiro
Objetivo Emitir o boleto após o gerente financeiro consultar o 
registro do pagamento
Caso de uso Registrar pedido para entrega
Ator secundário Funcionário
Objetivo Registrar o pedido de entrega a fim de atualizar o status 
do pedido
Caso de uso Caso de uso: baixar pedido de compra
Ator secundário Funcionário
Objetivo Baixar o pedido de compra após a confirmação de 
entrega
Com base nos casos levantados, seguimos para a identificação dos 
relacionamentos envolvidos nesse cenário.
Deve-se analisar se todo ator tem, no mínimo, uma associação com 
um caso de uso e se todo caso de uso interage com algum ator ou com 
outro caso de uso.
Agora, vamos identificar os relacionamentos entre os casos de usos, 
se houver.
Deve-se verificar se existe a necessidade do relacionamento de in-
clusão, extensão ou generalização. Em seguida, deve-se identificar os 
relacionamentos entre os atores, se houver.
É preciso verificar se existe a necessidade do relacionamento de ge-
neralização entre os atores.
Após todos esses levantamentos, chegamos à seguinte solução:
O relacionamento indica 
quem solicita, quem exe-
cuta e como será executa-
da uma funcionalidade.
Dica
Diagrama de caso de uso 91
Pesquisar tipos de 
sucos
Calcular valor da 
compra
Registrar compra Cadastrar cliente
Registrar 
pagamento
Solicitar 
autorização de 
pagamento
<<includes>>
<<extend>>
<<extend>>
<<extend>>
funcionário
Operadora 
de cartão de 
crédito
Gerente
Cliente
Consultar 
pagamento Emitir Nota Fiscal
Efetuar Login Emitir boleto
Registrar pedido 
de entrega
Baixar pedido de 
compra
Figura 3
Modelagem de e-commerce de sucos naturais
Fonte: Elaborada pelo autor.
Como segundo exemplo, usaremos a aplicação em health tech 
objetivando cuidar mais da saúde e menos da doença. Vamos propor 
uma solução de como a tecnologia pode ajudar as pessoas na preven-
ção de doenças. 
Para isso, vamos usar as três etapas citadas anteriormente.
• Contextualize as necessidades do sistema.
Etapa 1
<<extend>>
92 Engenharia de Software
• Identifique os atores.
• Identifique os casos de usos com seus respectivos cenários.
• Identifique os relacionamentos entre os atores e os casos de usos.
• Identifique os relacionamentos entre os atores, se houver.
• Desenvolva o caso de uso.
Etapa 2
• Documentação do caso de uso.
Etapa 3
Vamos à solução!
Etapa 1: Contextualize as necessidades do sistema
O aplicativo health tech virá para atender a uma grande demanda 
de usuários que buscam aumentar sua qualidade de vida, cuidando 
mais da saúde e menos da doença. A tecnologia pode ser uma grande 
aliada para que se possa monitorar o estado clínico das pessoas.
O aplicativo irá colaborar com o monitoramento dos biossinais, aler-
tando o paciente e o médico quando algo estiver fora do padrão, bem 
como irá colaborar indicando uma dieta balanceada e atividades físicas 
indicadas para que cada paciente tenha uma vida saudável.
Etapa 2: Diagrama de caso de uso
Fonte: Elaborada pelo autor com o software Astah.
Administrador do 
aplicativo
Módulo de parametrização e 
administração do aplicativo
Login/cadastro de usuários/
parametrização do sistema
Controle dos exercícios físicos
Monitoramento 
de biossinais
Controle da dieta do paciente
Alerta de alterações clínicas
UsuárioMédico
Health Track
<<Include>>
<<Include>>
<<Include>>
Figura 4
Diagrama de caso de uso do HealthTech
Diagrama de caso de uso 93
Etapa 3: Documentação do caso de uso
Quadro 2
Módulo de parametrização e administração do aplicativo
Documentação de caso de uso
Título do caso de uso Módulo de parametrização e administração do aplicativo
Código identificado HT01
Sumário
Este módulo será responsável por toda a parametrização dos aplicativo. Nele, o administra-
do do sistema poderá inserir diversas informações para o pleno funcionamento da aplica-
ção, como: quantidade de vezes que o usuário poderá erra a senha, cadastro de usuários, 
formato das mensagens de alertas, reset de senha e usuários, entre outras.
Ator primário Administrador do sistema
Ator secundário
Pré-condição Login e senha de Admin
Fluxo principal
Ator Sistema
FP01 – Administrador 
seleciona botão de pa-
rametrização
FP02 – Solicitar credenciais para acessar como administrador
FP02 – Administrador 
insere todos os parâ-
metros
FP04 – Receber e armazenar as parametrizações do administrador do sistema
Fluxo Alternativo
FA01 Administrador não possui as credenciais necessárias para o acesso
FA02 Aplicativo sem acesso à internet – Mensagem de erro
FA03 Gravação dos parâmetros com sucesso
Regras do negócio
RN01 O administrador deve ter a senha do Admin
Sem a senha do Admin, o acesso não deve ser permitido
Fonte: Elaborada pelo autor.
Quadro 3
Login / Cadastro de usuários / Parametrização do sistema
Documentação de caso de uso
Título do caso de uso Login / Cadastro de usuários / Parametrização do sistema
Código identificado HT02
Sumário
Deverá fazer o login e o controle de usuários validando login e senha. Além disso, 
faz a leitura do módulo de parametrização para que a aplicação funcione perfei-
tamente
Ator primário Usuários do aplicativo
Ator secundário Médico
Pré-condição
(Continua)
94 Engenharia de Software
Documentação de caso de uso
Fluxo principal
Ator Sistema
FP05 – Usuários do aplicativo 
realizam o cadastro para obter as 
credenciais de acesso
FP07 – Solicitar credenciais para o acesso do usuário
FP06 – Usuários do aplicativo 
realizam o cadastro para obter as 
credenciais de acesso
FP08 – Solicitar credenciais para o acesso do médico
Fluxo Alternativo
FA04 Usuário não tem as credenciais de acesso
FA05 Médico não tem as credenciais de acesso
Regras do negócio
RN02 Usuário e médico necessitam ter as credenciais para acessar o sistema
Fonte: Elaborada pelo autor.
Quadro 4
Monitoramento de Bio Sinais
Documentação de caso de uso
Título do caso de uso Monitoramento de biossinais
Código identificado HT03
Sumário
Receberá os biossinais do paciente, bem como, quando autorizado, os parâmetros do 
médico. Com essas informações, criará condições para alertas ou não de alterações cli-
nicas. Com essa função, o médico poderá ter um “filme” de todo o estado clínico do 
paciente e não somente uma “foto” como acontece nas consultas presenciais.
Ator Primário Usuários
Ator Secundário Médicos
Pré-condição Login e senha válidos
Fluxo principal
Ator Sistema
FP09 – Usuários do apli-
cativo fornecem a ele os 
biossinais por meio do ce-
lular ou smartwatch
FP11 – Recebe de maneira ininterrupta os biossinais para armazenamento e utilização 
posterior
FP10 – Informa anomalias 
ao sistema de alertas
FP12 – Se os biossinais estiverem em desacordo com os parâmetros do médico, o sinal 
de alerta deve ser disparado para o médico e para o usuário
Fluxo Alternativo
Não há
Regras do negócio
RN03
Se os biossinais estiverem em desacordo com os parâmetros informados pelo médico, o 
sinal de alerta deve ser disparado.
Fonte: Elaborada pelo autor.
Diagrama de caso de uso 95
Quadro 5
Alerta de alterações clínicas
Documentação de caso de uso
Título do caso de uso Alerta de alterações clínicas
Código identificado HT04
Sumário
Caso o monitoramento de biossinais detecte algumaanomalia comparando-se com a para-
metrização do médico, um sinal de alerta é enviado ao usuário e ao médico quando autori-
zado pelo usuário.
Ator primário Monitoramento de biossinais
Ator secundário Usuário e médico
Pré-condição Input do monitoramento de biossinais
Fluxo principal
Ator Sistema
FP13 – Usuários do 
aplicativo recebem 
alerta de emergência
FP15 – Sistema informa ao usuário sinal de emergência e sua gravidade
FP14 – Médico recebe 
alerta de emergência 
do paciente
FP16 – Sistema informa ao médico sinal de emergência e sua gravidade
Fluxo Alternativo
FA06
Caso o usuário e/ou médico não confirmem o recebimento do alerta, um alerta especial 
deve ser enviado ao administrador do aplicativo 
Regras do negócio
RN04
Se os biossinais estiverem em desacordo com os parâmetros informados pelo médico, o 
sinal de alerta deve ser disparado
Fonte: Elaborada pelo autor.
Quadro 6
Controle de dieta do paciente
Documentação de caso de uso
Título do caso de uso Controle de dieta do paciente
Código identificado HT05
Sumário
Por meio das informações do médico e do paciente, uma dieta balanceada é 
apresentada ao paciente todos os dias
Ator primário Usuário
Ator secundário Médico
Pré-condição Parametrização por parte do usuário e do médico
Fluxo principal
Ator Sistema
(Continua)
96 Engenharia de Software
Documentação de caso de uso
FP17 – Usuários do aplicativo rece-
bem dieta adequada
FP19 – Sistema informa ao usuário dieta adequada
FP18 – Médico informa parâmetros 
para a dieta adequada ao paciente
FP20 – Médico informa dieta adequada ao paciente
Fluxo Alternativo
FA07 Aceite do usuário quanto a dieta
FA08 Aplicativo solicita ao médico dieta caso não tenha enviado
Regras do negócio
RN04 As dietas precisam ser informadas e validadas pelo médico do paciente
Fonte: Elaborada pelo autor.
Quadro 7
Controle dos exercícios físicos
Documentação de caso de uso
Título do caso de uso Controle dos exercícios físicos
Código identificado HT06
Sumário
Por meio das informações do médico e do paciente, uma sequência de 
exercícios físicos é apresentada ao paciente todos os dias
Ator Primário Usuário
Ator Secundário Médico
Pré-condição Parametrização por parte do usuário e médico
Fluxo principal
Ator Sistema
FP21 – Usuários do aplicativo recebem 
sequência de exercícios adequada
FP23 – Sistema informa ao usuário a sequência de exercícios
FP22 – Médico informa parâmetros para 
a sequência de exercícios ao paciente
FP24 – Médico informa sequência de exercícios para o paciente
Fluxo Alternativo
FA07 Aceite do usuário quanto aos exercícios
FA08
Aplicativo solicita ao médico sequência de exercícios caso não tenha en-
viado
Regras do negócio
RN04
Os exercícios precisam ser informados e validados pelo médico do pa-
ciente
Fonte: Elaborada pelo autor.
Como foi citado, para complementarmos a documentação do siste-
ma para seu desenvolvimento, falta apenas a modelagem dimensional 
do data mart da aplicação em health tech, ou seja, vamos apresentar o 
MER – Modelo Entidade Relacionamento do sistema.
Diagrama de caso de uso 97
Figura 5
MER – Modelo Entidade Relacionamento do sistema do health tech
Dimensão: Paciente
ID_Paciente
Paciente_nome
Paciente_endereço
Paciente_email
Paciente_convenio
Paciente_celular
Paciente_senha
Tabela Fato: Login
ID_usuario (médico ou 
paciente)
Data
Hora
Dimensão: Medico
ID_medico
Medico_nome
Medico_endereco
Medico_email
Medico_especialidade
Medico_celular
Medico_senha
Tabela Fato:
Dieta_Paciente
ID_dieta
ID_paciente
ID_medico
Data_inicio
Data_termino
Tabela Fato:
Monitoramento
ID_Bio
ID_paciente
Data
Hora
Medicao
Tabela Fato:
Atividade_Paciente
ID_atividade
ID_paciente
ID_medico
Data_inicio
Data_termino
Dimensão: Dieta
ID_dieta
dieta_nome
dieta_calorias
dieta_procedimento
dieta_lista_de_alimentos
Dimensão: Bio_sinais
ID_Bio
Bio_descricao
Bio_medicao maxima
Bio_medicao minima
Bio_importancia
Dimensão:
Atividades_Fisicas
ID_atividade
atividade_nome
atividade_calorias
atividade_procedimento
FK FK FK
FK
FK
FK
FK
FK
PK
PK
PK
PK
PK
Fonte: Elaborado pelo autor.
Complementando o Modelo Entidade Relacionamento, temos a 
descrição das dimensões: 
Dimensão Paciente
ID_Paciente Chave primária de paciente, será armazenado um código único para cada paciente
Paciente_nome Será armazenado o nome do paciente
Paciente_endereco Será armazenado o endereço do paciente
Paciente_email Será armazenado o e-mail do paciente
Paciente_convenio Será armazenado o convênio do paciente
Paciente_celular Será armazenado o celular do paciente
Paciente_senha Será armazenada a senha do paciente
Dimensão Médico
ID_medico Chave primária de médico, será armazenado um código único para cada médico
Medico_nome Será armazenado o nome do médico
Medico_endereco Será armazenado o endereço do médico
Medico_email Será armazenado o e-mail do médico
Medico_especialidade Será armazenada a especialidade do médico
Medico_celular Será armazenado o celular do médico
Medico_senha Será armazenada a senha do médico
98 Engenharia de Software
Dimensão Dieta
ID_dieta Chave primária de dieta, será armazenado um código único para cada dieta
dieta_nome Será armazenado o nome da dieta
dieta_calorias Será armazenada a quantidade de calorias da dieta
dieta_procedimento Será armazenado o procedimento para a dieta
dieta_lista_de_alimentos Será armazenada a lista de alimentos da dieta
Dimensão Biossinais
ID_Bio Chave primária de biossinais, será armazenado um código único para biossinal
Bio_descricao Será armazenada a descrição do biossinal
Bio_medicao maxima Será armazenado o limite máximo do biossinal
Bio_medicao minima Será armazenado o limite mínimo do biossinal
Bio_importancia Será armazenada a importância do biossinal
Dimensão Atividades_Físicas
ID_atividade
Chave primária das Atividades Físicas, será armazenado um código único para 
cada atividade física
atividade_nome Será armazenado o nome da atividade física
atividade_calorias Será armazenada a quantidade de calorias gastas com a atividade física
atividade_procedimento Será armazenado o procedimento para executar as atividades físicas
Tabela fato Dieta_Paciente
ID_dieta Chave primária da dieta
ID_paciente Chave primária do paciente
ID_medico Chave primária do médico
Data_inicio Data de início da dieta
Data_termino Data de término da dieta
Tabela Fato Monitoramento
ID_Bio Chave primária de bio sinais
ID_paciente Chave primária do paciente
Data Data do monitoramento
Hora Hora do monitoramento
Medicao Medição do monitoramento
Tabela Fato Atividade_Paciente
ID_atividade Chave primária de atividade física
ID_paciente Chave primária do paciente
ID_medico Chave primária do médico
Data_inicio Data de início da atividade física
Data_termino Data de término da atividade física
Diagrama de caso de uso 99
Informações úteis para o usuário paciente
Consultar suas dietas
Consultar suas atividades físicas
Consultar os resultados de suas medições de biossinais
Informações para o usuário médico
Inserir dietas ao paciente
Inserir atividades físicas ao paciente
Analisar os biossinais dos pacientes
Questões de negócio
Quantos usuários do perfil Médicos estão cadastros no aplicativo?
Quantos usuários do perfil Paciente estão cadastros no aplicativo?
Qual é o índice de utilização do aplicativo por parte dos médicos?
Qual é o índice de utilização do aplicativo por parte dos pacientes?
Qual é o índice de cadastros cancelados do perfil Paciente?
Qual é o índice de cadastros cancelados do perfil Médico?
Qual é o índice de cadastros cancelados de todos os perfis?
Quantos monitoramentos de biossinais são analisados?
Quantos novos pacientes entram no aplicativo por mês?
Quantos novos médicos acessam o aplicativo por mês?
Com essas perguntas, é possível entender as questões do negócio 
para que a modelagem tenha êxito atendendo a todas as expectativas 
do cliente.
Nesta indicação temos 
uma abordagem prática 
do uso do UML na cons-
trução de softwares. São 
apresentados exemplospráticos de como o enge-
nheiro pode iniciar suas 
primeiras modelagens de 
sistemas computacionais.
O mapeamento das 
classes é bem prático e 
objetivo, levando ao leitor 
a uma grande viagem 
dentro da engenharia 
de software sem haver 
descuidos quanto aos 
conceitos essenciais, 
principalmente a genera-
lização, tão importante na 
otimização dos códigos.
LIMA, A. S. G. UML 2.5: do requisito 
à solução. São Paulo: Érica, 2014.
Livro
CONCLUSÃO
Neste capítulo foi possível compreender e interpretar diagramas de 
caso de uso e como eles são importantes na construção de softwares, 
apresentando a todos os envolvidos ilustrações que posteriormente irão 
se tornar códigos executáveis.
Pudemos também entender o papel de cada componente dentro dos 
cenários onde irão operar o sistema; vimos como ator, relacionamentos e 
cenários se fundem em um só projeto para dar vida aos sistemas.
100 Engenharia de Software
ATIVIDADES
Atividade 1
O diagrama de caso de uso é uma das principais ferramentas 
para o engenheiro de software. Com ela é possível trazer todos 
os interessados para um mesmo ponto de entendimento do 
sistema computacional que será desenvolvido. Ele contempla três 
objetivos, cite quais são.
Atividade 2
Nesta atividade a missão é desenvolver um caso de uso simples, 
no qual o usuário irá inserir seu login e senha, e o sistema irá 
validar e devolver uma mensagem de erro ou acesso concebido.
REFERÊNCIAS 
HASSAN, G. Software modeling and design: UML, use cases, patterns and software 
architectures. Cambridge: Cambridge University Press, 2011.
IAN, S. Engenharia de software. 9. ed. São Paulo: Pearson, 2011.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: 
AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Education, 2011.
WAZLAWICK, R. Engenharia de software: conceitos e práticas. São Paulo: GEN LTC, 2019.
Resolução das atividades
1 A importância da engenharia de software
1. Você assumiu a missão de um museu altamente relevante nos 
Estados Unidos de criar uma experiência histórica aos visitantes: 
elaborar uma linha do tempo com os principais avanços 
tecnológicos ao longo da história. Para tanto, utilize os marcos 
trazidos neste capítulo, bem como outras pesquisas, para criar o que 
conhecemos como timeline da tecnologia. Use a criatividade para 
surpreender a todos com gráficos, imagens e até animação gráfica. 
Nesta atividade você deverá citar as principais evoluções tecnológicas 
abordadas no capítulo, bem como outras que porventura sejam 
pesquisadas. O principal objetivo é demonstrar uma linha do tempo 
identificando o ano das inovações e uma breve descrição delas.
2. Escolha um aplicativo que você utiliza no seu dia a dia e desenvolva 
um documento com os itens do design de software tratados neste 
capítulo. Fale como a abstração, a modularidade, a arquitetura, o 
refinamento, o padrão, a ocultação de informações e a refatoração 
podem ser encontrados no aplicativo. 
Nesta atividade você deverá escolher um aplicativo e descrever em 
curtos textos como a abstração, a modularidade, a arquitetura, o 
refinamento, o padrão, a ocultação de informações e a refatoração 
estão presentes no aplicativo.
2 Ciclo de vida do software
1. Neste momento você é o engenheiro de software chefe de uma 
grande empresa de cosmético e precisa convencer todo o seu time 
de desenvolvedores de que o ciclo de vida de desenvolvimento de 
software eficiente é importante. Ressalte os principais benefícios 
conseguidos com a implantação de um ciclo de vida. Se preferir, 
use um ou mais slides ou, ainda, apresente esses benefícios em um 
texto de no máximo uma página.
Nesta atividade você deverá citar os principais benefícios de 
um ciclo de vida eficiente, ressaltando que ele reduz o custo de 
desenvolvimento de software e, ao mesmo tempo, melhora a 
qualidade e reduz o tempo de produção, atingindo essas metas que 
Resolução das atividades 101
se mostram aparentemente divergentes, mas que na verdade são 
essenciais no desenvolvimento de softwares. Além disso, ele entrega 
ao usuário uma nova experiência, deixando todos os envolvidos 
satisfeitos com os resultados.
2. Ainda como engenheiro de software chefe de uma grande 
empresa de cosmético, você precisa, agora, apresentar as etapas 
que compõem o ciclo de desenvolvimento de software e explicar 
rapidamente cada uma dessas fases.
Nesta atividade você deverá listar e detalhar as seguintes fases: 
• levantamento de requisitos;
• análise e projeto;
• implementação e testes;
• implantação e manutenção.
3 Orientação a objetos
1. Você foi chamado para convencer um time de engenheiros de 
softwares que a orientação a objetos é muito mais adequada para 
o atual momento quando comparamos com os antigos padrões 
de análise e desenvolvimento de software. Para essa missão, você 
deverá construir um quadro que compare e ressalte os benefícios 
entre a orientação a objetos e os métodos tradicionais.
Nesta atividade você deverá citar os principais benefícios da orientação 
a objetos ressaltando seus pontos positivos em relação aos métodos 
tradicionais, tais como: reutilização de código, manutenção do código, 
forma de execução, entre outros. Ressaltando que provê uma melhor 
organização do código, ajuda para o reaproveitamento de código, 
alinhamento com os novos mindsets dos programadores etc.
2. Seguindo os exemplos vistos, escolha e desenvolva mais três 
classes de objetos com no mínimo três atributos e três métodos 
para um sistema de supermercado.
Você deverá imaginar quais classes podemos ter em um supermercado 
e indicar três atributos e três métodos, na obra, demos alguns 
exemplos de classes, tais como:
102 Engenharia de Software
produtos
- código
- descrição
- quantidade em estoque
- preço
- peso 
inclusão()
consulta() 
venda()
rental_car
- placa do automóvel
- modelo
- cor
- ano
- tamanho
inclusão()
exclusão() 
fornecedores
- cnpj
- razão social
- endereço
- cidade
- estado
alteração()
relatório() 
Você deverá fazer o mesmo com outras classes de um supermercado, 
como por exemplo: Produtos, Fornecedor, Cliente, Contas a pagar, 
Contas a receber, Fluxo de caixa, Nota Fiscal de Compra, Nota 
Fiscal de Venda, enfim, qualquer classe que possa pertencer a um 
supermercado.
4 UML – Unified Modeling Language
1. Dentro do ecossistema do UML, temos vários diagramas que 
colaboram integralmente na construção de softwares. Nesse 
sentido, você deve se colocar como um engenheiro de softwares de 
uma grande empresa e desenvolver um documento de no máximo 
duas páginas, que ilustre de maneira resumida as diferenças entre 
os seguintes diagramas:
a) Diagrama de atividades
• É utilizado para desenvolver representações gráficas 
que ilustram os fluxos de trabalho e as atividades dos 
participantes do sistema.
• Descreve o fluxo de controle do sistema de destino.
• Tem como objetivo modelar processos computacionais 
e organizacionais.
• Descreve como as atividades são coordenadas para fornecer 
um serviço que pode estar em diferentes níveis de abstração. 
b) Diagrama de classes
• Auxilia na modelagem de todos os métodos da orientação 
a objetos.
• Impulsiona a descrição dos tipos de objetos nos projetos 
e os respectivos tipos de relacionamentos que existem 
entre eles.
Resolução das atividades 103
• Mostra a estrutura estática dos classificadores em um 
sistema.
• Fornece uma notação básica para outros diagramas de 
estrutura prescritos pela UML.
• É útil para desenvolvedores e para outros membros da 
equipe também.
• Pode ser usado por analistas de negócios para modelar 
sistemas por meio de uma perspectiva de negócios.
c) Diagrama de objetos
• É gráfico de instâncias, incluindo objetos e valores de dados.
• É uma instância de um diagrama de classe.
• Mostra um instantâneo do estado detalhado de um sistema 
em determinado momento. 
• É limitado, principalmente para mostrar exemplos de 
estruturas de dados.
d) Diagrama de sequência
• Modela a colaboraçãode objetos, com base em uma 
sequência de tempo. 
• Mostra como os objetos interagem com outros em um 
cenário particular de um caso de uso. 
• Trata-se de diagramas de interação que detalham como as 
operações são realizadas. 
• Captura a interação entre objetos no contexto de uma 
colaboração. 
• É focado no tempo e mostra a ordem da interação 
visualmente, usando o eixo vertical do diagrama para 
representar o tempo em que as mensagens são enviadas 
e quando.
• Captura a interação que ocorre em uma colaboração, 
realizando um caso de uso ou uma operação.
• Mostra as interações de alto nível entre o usuário do sistema 
e o sistema, e entre o sistema e outros sistemas.
2. Nesta atividade, a missão é compreender a figura deste livro, 
chamada Diagrama de atividades: elaborando um texto, dentro da 
104 Engenharia de Software
Seção 4.3, e transformá-la para atender a um processo de login em 
um aplicativo comum, como o Facebook ou Instagram. 
 Imagine o passo a passo que você executa para acessar sua rede 
social preferida. Para tanto, você pode usar qualquer software que 
tenha mais facilidade ou pegar um lápis e folha de papel e soltar 
sua criatividade.
Login com sucesso
Mensagem de erro 
Clicar no botão de 
acesso
Inserir senhaInserir login
Abrir o aplicativo 
da rede social
Se dados incorretos
5 Diagrama de caso de uso
1. O diagrama de caso de uso é uma das principais ferramentas 
para o engenheiro de software. Com ela é possível trazer todos 
os interessados para um mesmo ponto de entendimento do 
sistema computacional que será desenvolvido. Ele contempla três 
objetivos, cite quais são.
Nesta atividade você deverá descrever os três objetivos do diagrama 
de caso de uso, que são: necessidade do cliente, sistema a ser 
implementado e requisitos definidos.
2. Nesta atividade a missão é desenvolver um caso de uso simples, no 
qual o usuário irá inserir seu login e senha, e o sistema irá validar e 
devolver uma mensagem de erro ou acesso concebido.
Como nesta atividade temos como ator somente o usuário, um 
cenário de autenticação de login e senha e uma resposta positiva ou 
negativa do acesso, seu diagrama deve ter a seguinte estrutura:
Resolução das atividades 105
Solicitação de 
login e senha
Resposta do 
acesso
Valida dados
106 Engenharia de Software
Engenharia
de Software
Wagner Sanchez
W
agner Sanchez
Engenharia de Softw
are
Fundação Biblioteca Nacional
ISBN 978-65-5821-067-2
9 786558 210672
Código Logístico
I000358
	Página em branco
	Página em branco

Mais conteúdos dessa disciplina