Buscar

Engenharia_de_Software

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Engenharia de Software
Créditos
Centro Universitário Senac São Paulo – Educação Superior a Distância
Diretor Regional 
Luiz Francisco de Assis Salgado
Superintendente Universitário 
e de Desenvolvimento 
Luiz Carlos Dourado
Reitor 
Sidney Zaganin Latorre
Diretor de Graduação 
Eduardo Mazzaferro Ehlers
Diretor de Pós-Graduação e Extensão 
Daniel Garcia Correa
Gerentes de Desenvolvimento 
Claudio Luiz de Souza Silva 
Luciana Bon Duarte 
Roland Anton Zottele 
Sandra Regina Mattos Abreu de Freitas
Coordenadora de Desenvolvimento 
Tecnologias Aplicadas à Educação 
Regina Helena Ribeiro
Coordenador de Operação 
Educação a Distância 
Alcir Vilela Junior
Professora Autora 
Ana Cláudia Rossi
Revisor Técnico 
Raphael Mendes de Oliveira Cobe
Técnicos de Desenvolvimento 
Ozeas Vieira Santana Filho 
Rodrigo Moura Galhardo
Coordenadoras Pedagógicas 
Ariádiny Carolina Brasileiro Silva 
Izabella Saadi Cerutti Leal Reis 
Nivia Pereira Maseri de Moraes
Equipe de Design Educacional 
Alexsandra Cristiane Santos da Silva 
Angélica Lúcia Kanô 
Cristina Yurie Takahashi 
Diogo Maxwell Santos Felizardo 
Elisangela Almeida de Souza 
Flaviana Neri 
Francisco Shoiti Tanaka 
Gizele Laranjeira de Oliveira Sepulvida 
João Francisco Correia de Souza 
Juliana Quitério Lopez Salvaia 
Jussara Cristina Cubbo 
Kamila Harumi Sakurai Simões 
Karen Helena Bueno Lanfranchi 
Katya Martinez Almeida 
Lilian Brito Santos 
Luciana Marcheze Miguel 
Luciana Saito 
Mariana Valeria Gulin Melcon 
Mônica Maria Penalber de Menezes 
Mônica Rodrigues dos Santos 
Nathália Barros de Souza Santos 
Paula Cristina Bataglia Buratini 
Renata Jessica Galdino 
Sueli Brianezi Carvalho 
Thiago Martins Navarro 
Wallace Roberto Bernardo
E
Aparecida Daniele Carvalho do Nascimento 
Gabriela Souza da Silva 
Vivian Martins Gonçalves
Coordenador Multimídia e Audiovisual 
Adriano Tanganeli
Equipe de Design Visual 
Adriana Matsuda 
Caio Souza Santos 
Camila Lazaresko Madrid 
Carlos Eduardo Toshiaki Kokubo 
Christian Ratajczyk Puig 
Danilo Dos Santos Netto 
Hugo Naoto 
Inácio de Assis Bento Nehme 
Karina de Morais Vaz Bonna 
Lucas Monachesi Rodrigues 
Marcela Corrente 
Marcio Rodrigo dos Reis 
Renan Ferreira Alves 
Renata Mendes Ribeiro 
Thalita de Cassia Mendasoli Gavetti 
Thamires Lopes de Castro 
Vandré Luiz dos Santos 
Victor Giriotas Marçon 
William Mordoch
Ana Paula Pigossi Papalia 
quipe de Qualidade 
Equipe de Design Multimídia 
Alexandre Lemes da Silva 
Cláudia Antônia Guimarães Rett 
Cristiane Marinho de Souza 
Eliane Katsumi Gushiken 
Elina Naomi Sakurabu 
Emília Correa Abreu 
Fernando Eduardo Castro da Silva 
Mayra Aoki Aniya 
Michel Iuiti Navarro Moreno 
Renan Carlos Nunes De Souza 
Rodrigo Benites Gonçalves da Silva 
Wagner Ferri
Engenharia de Software
Aula 01
Introdução à Engenharia de Software
Objetivos Específicos
• Entender a Engenharia de Software e sua importância e também, identificar
os diferentes tipos de sistemas que podem requerer diversos processos,
métodos e técnicas de Engenharia de Software.
Temas
Introdução
1 Entendendo a Engenharia de Software e sua importância
2 Diferentes aplicações da Engenharia de Software
3 Discutindo questões éticas e profissionais importantes para os engenheiros 
de software
Considerações finais
Referência
Professora
Ana Cláudia Rossi
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
3
Introdução
Olá, seja bem-vindo!
Nesta aula, apresentaremos a Engenharia de Software como área de conhecimento, e 
discutiremos a sua importância para a sociedade, as abordagens a serem utilizadas para o 
desenvolvimento de produtos de software e as questões éticas e profissionais envolvidas.
1 Entendendo a Engenharia de Software e sua importância
É muito difícil ver o mundo atual sem produtos de software. Cada vez mais as nossas 
atividades do cotidiano estão apoiadas por aplicações computacionais que, por sua vez, estão 
disponíveis para nós em diversos formatos ou dispositivos. Entendemos que esses recursos 
computacionais, na forma de aplicações, são fundamentais para a nossa qualidade de vida, 
pois agilizam e melhoram a nossa forma de viver em sociedade.
Segundo Sommerville (2011), os sistemas de software são abstratos e intangíveis. 
Não são restritos por propriedades materiais nem por leis da Física. Isso permite infinitas 
possibilidades de desenvolvimento de aplicações sem a intervenção das leis da natureza. 
Contudo, esse fato pode contribuir para ampliar a complexidade de um software, bem como 
a dificuldade de entendê-lo ou alterá-lo.
O software está presente em diversos sistemas, desde aplicações embutidas, como 
em uma televisão, até em aplicações com abrangência mundial, como o sistema de buscas 
do Google. Desenvolver essa diversidade de aplicações exige várias abordagens, técnicas, 
métodos e notações. A diversidade de abordagens nos permite encontrar o instrumental 
mais adequado para desenvolver determinado tipo de software.
É então que surge a importância da engenharia de software como área de 
conhecimento. Assim como o engenheiro civil e o médico, construir diversos tipos de 
edificações, ou executar diferentes procedimentos cirúrgicos, demanda abordagens 
apropriadas para alcançar sucesso naquilo que se faz. Desenvolver software não é diferente. 
Precisamos da Engenharia de Software para estudar e sedimentar diferentes abordagens, 
que nos levarão a produtos de qualidade.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
4
Imagine que você escreva programas como parte de um projeto maior, em 
conjunto com outros colegas. Haveria a necessidade de compartilhar 
informações sobre o sistema de software em desenvolvimento. Nesse cenário, 
poderiam surgir perguntas do tipo: como fazer determinado programa? Como 
documentar o que já foi feito? Como saber o que falta fazer? Estamos no prazo? 
As estimativas de custo estão corretas? Além disso, considere que essa equipe 
pode estar trabalhando em dois ou mais projetos de software simultaneamente. 
Como gerenciar essa complexidade garantindo produtos de qualidade para os 
futuros usuários dos sistemas?
Podemos listar estas e outras várias questões que estão diretamente atreladas ao 
desenvolvimento de produtos de software. E a Engenharia de Software busca respostas para 
todas essas questões, pois ela estuda todos os aspectos da produção de software. Desde 
a concepção de um projeto de software, passando por todo o seu ciclo de vida, até a sua 
manutenção e, posteriormente, sua desativação ou substituição por outro software mais 
moderno.
O termo engenharia é aqui aplicado, pois está diretamente ligado ao conceito de que 
o engenheiro é o profissional que faz as coisas funcionarem. Ele aplica teorias, métodos e 
ferramentas do modo mais apropriado para buscar os melhores resultados. Os engenheiros 
também têm consciência de que devem trabalhar considerando os limites financeiros e 
organizacionais das instituições que promovem a solução.
Figura 1 – Engenharia, aplicação de teorias, métodos e ferramentas
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
5
De modo complementar, quando nos referimos a todos os aspectos da produção de 
software indicamos não estarmos preocupados somente com a produção dos programas 
que serão escritos, mas também com todo o ciclo de vida desse produto de software. Por 
exemplo, com a documentação, com o ambiente onde esse software vai “rodar”, com as 
pessoas envolvidas etc.
Resumindo, a Engenharia de Software é importante porque existe uma dependência 
evidente da sociedade por produtos de software nas diversas atividades humanas, e utilizar 
seus preceitos permite entregar e manter produtos de qualidade, diminuir tempo e custos, 
além de minimizar o retrabalho daquilo que fazemos.
1.1 O processo de Software
A Engenharia de Software utiliza uma abordagem sistêmica que chamamos de processo 
de software, que compreende uma sequência de atividades que serão encadeadas para 
compor a produção de um ou maisprodutos de software. As atividades a serem utilizadas vão 
variar em função das abordagens que utilizaremos ou, ainda, dos diferentes tipos de software 
que desenvolveremos. Contudo, existem quatro atividades fundamentais para todo processo 
de software desenhado, como apresenta a figura 2.
Figura 2 – Atividades fundamentais do processo de software
Fonte: Elaborada pela autora (2014).
1.1.1 Especificação de software
A atividade de especificação deve reunir o conjunto de necessidades que o cliente do 
produto deseja. Essas necessidades são expressas em requisitos funcionais. A somatória 
desses requisitos definirá o escopo do projeto e permitirá a equipe ter um entendimento 
mais profundo sobre o que será desenvolvido para evoluir e alcançar um bom software em 
funcionamento.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
6
1.1.2 Desenvolvimento de software
O desenvolvimento pode ser entendido como a fase do projeto em que efetivamente 
construiremos o software. Escrever programas e preparar o ambiente no qual o software será 
instalado está entre as tarefas dessa atividade.
1.1.3 Validação de software
A atividade de validação deve atestar que o software produzido está em conformidade 
com a especificação produzida na primeira atividade. Fazendo uma analogia com a engenharia 
civil, seria o momento de verificar se a casa está de acordo com a planta desenhada, com as 
respectivas janelas, portas, cômodos etc. 
1.1.4 Evolução de software
A atividade de evolução pode ocorrer paralelamente a outras atividades. Se o cliente 
resolver mudar os requisitos, o produto de software será mudado também. Isso implica 
verificar e analisar os impactos ao projeto, pois haverá necessidade de esforços adicionais 
para essas mudanças.
1.2 Requisitos de qualidade de um software
Mas, o que é um bom software? 
Nem sempre aquele que atende a todas as necessidades descritas pelo cliente é um bom 
software. A qualidade não implica somente o que o software faz, devemos incluir também 
aspectos sobre como ele se apresenta ao usuário, a forma como ele é operado, o tempo de 
resposta etc. Esses aspectos são chamados de requisitos não funcionais ou de qualidade, 
que também devem ser determinados na atividade de especificação do software.
Portanto, além de atender a requisitos funcionais, um bom software também deve seguir 
critérios de qualidade, como demonstra Sommerville (2011):
• manutenibilidade: desenvolver programas que possam evoluir quando houver novas 
necessidades dos clientes; 
• confiança e proteção: garantir a segurança da aplicação, de modo que não gere 
prejuízos físicos ou econômicos;
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
7
• eficiência: primar pelo excelente uso dos recursos, como processador e memória de 
discos para obter a melhor capacidade de resposta que o produto puder alcançar;
• aceitabilidade: projetar sistemas compatíveis com os usuários finais tornando o 
software mais compreensível e intuitivo para o uso.
2 Diferentes aplicações da Engenharia de Software
Como já mencionamos anteriormente, existem tipos diferentes de sistemas de 
software a serem desenvolvidos que, por sua vez, irão requerer diferentes abordagens de 
desenvolvimento no processo de software.
As diferentes abordagens também variam em função da organização responsável pelo 
desenvolvimento e as pessoas envolvidas no processo. Não obstante, o tipo de software talvez 
seja o fator mais preponderante para a definição do processo de software a ser utilizado. O 
quadro 1 apresenta diferentes tipos de produtos de software:
Quadro 1 – Diferentes tipos de aplicação do software
Tipo de Aplicação Definição
Stand-alone
São executadas em um único local, sem a 
necessidade de conexão com a internet ou a 
outra rede.
Interativas baseadas em 
transações
Por meio de acesso via computador ou terminal, 
executam operações em um computador 
remoto.
Embutidas São sistemas que controlam e gerenciam dispositivos de hardware.
Batch (em lote) Consistem em aplicações projetadas para processar grandes conjuntos de dados.
Entretenimento Caracterizam os jogos ou outros sistemas com foco no entretenimento pessoal.
Modelagem e simulação
Desenhados para simular situações físicas ou 
reais de forma que permitam a tomada de 
decisão sobre o problema em estudo.
Coleta de dados Baseados no uso de sensores, que coletam dados de um ou mais ambientes.
Sistema de sistemas
São sistemas compostos por uma série de 
outros sistemas que somente em conjunto 
alcançam seus objetivos.
Fonte: Sommerville (2011, p. 7).
Em função do problema que queremos abordar, utilizaremos tipos de aplicação diferentes. 
Por exemplo, um jogo (game) poderia ser desenvolvido na modalidade stand-alone, porém, 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
8
se a intenção for competir com outros participantes, será necessário criar conexões com a 
internet e produzir formas de interação entre os participantes.
Por outro lado, muitas transações bancárias realizadas por correntistas hoje acontecem 
fora do banco, em aplicativos denominados home banking (na tradução do inglês seria algo 
como banco em casa). Para esse caso, precisamos de aplicativos capazes de se conectar com 
um servidor centralizado para requisitar permissões, consultar saldo da conta-corrente e 
efetuar um pagamento ou transferência bancária.
Figura 3 – Sistemas transacionais operados em diferentes equipamentos e plataformas
Observe que a complexidade de um projeto pode aumentar muito, em função dos 
requisitos definidos pelos stakeholders (traduzindo do inglês: interessados pelo projeto).
Já no caso de aplicações do tipo sistema de sistemas, temos o desafio da troca de 
dados entre aplicações heterogêneas, ou seja, que podem ter sido desenvolvidas para 
diferentes tipos de equipamentos. Nesse exemplo, utilizamos protocolos de comunicação 
para estabelecer uma forma padronizada de comunicação.
2.1 As complexidades no processo de negócios
Note que estamos apenas discutindo aqui questões técnicas que poderão surgir durante 
o processo de desenvolvimento do produto de software, também conhecido como ciclo 
de vida do produto. Mas, também existem outros pontos a se considerar sobre a área em 
que o produto de software será desenvolvido. Em outras palavras, estamos nos referindo à 
complexidade de um negócio específico ou de um processo sistêmico que será automatizado.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
9
Como exemplo, podemos citar um sistema que controla o carregamento 
de um navio. Considere que o posicionamento dos contêineres deve obedecer 
a regras como distribuição do peso no navio, limite de empilhamento e ordem 
de carga e descarga nos portos, para minimizar o manuseio dos blocos.
Portanto, podemos observar que o desenvolvimento de um produto de software 
exige profissionais capazes de enfrentar desafios técnicos sobre equipamentos, conexão, 
transmissão de dados etc., e desafios sobre a área de negócios que será melhorada com a 
implantação do novo sistema.
Figura 4 – Complexidade no caso do carregamento de contêineres
Diferentemente do estereótipo nerd que todos desenham para um profissional de 
Tecnologia da Informação, habilidades de comunicação e relacionamento interpessoal são 
importantes para ter sucesso nas etapas iniciais do processo de software, como o levantamento 
de dados e elicitação dos requisitos que farão parte do escopo do projeto. 
Mais para frente, discutiremos técnicas de levantamento e elicitação de requisitos, 
bem como questões de arquitetura de software, em que definimos como o produto será 
desenvolvido e implantado, tornando-se um sistema em produção para atender aos 
nossos usuários.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
10
3 Discutindo questões éticas e profissionais importantes 
para os engenheiros de software
Sabemos que várias pessoas escrevem programas, não necessariamente profissionaisde computação, alguns o fazem por hobby. Porém, em sua maioria, o desenvolvimento de 
software é uma atividade profissional e, para isso, exige práticas que são estudadas no âmbito 
da Engenharia de Software.
Existem muitas estatísticas que apontam o insucesso de projetos de sistemas de 
informação. Muitas vezes isso ocorre porque os profissionais envolvidos desconhecem 
algumas boas práticas da Engenharia de Software. Por esse motivo, é importante estudar o 
assunto, para tornar-se um bom profissional nessa área.
Contudo, além de ser um profissional conhecedor de práticas, métodos e técnicas 
inerentes à sua profissão, as questões éticas também são muito importantes para compor 
uma formação sólida e reconhecida no mercado.
A Engenharia de Software é desenvolvida dentro de um contexto social e, para tanto, 
deve respeitar seus protocolos. Ou seja, o profissional de Engenharia de Software deve se 
comportar de acordo com os aspectos éticos e morais da sociedade.
Mas o que isso significa? 
Estamos falando sobre manter padrões de honestidade e moralidade. Trabalhar com 
informação significa ter acesso a ela. Portanto, questões de confidencialidade devem ser 
respeitadas. No contexto empresarial, quando iniciamos uma carreira em uma nova empresa, 
os nossos contratantes apresentam códigos de conduta que devemos respeitar enquanto 
formos colaboradores dessa organização. Contudo, a responsabilidade profissional vai além 
disso e abrange aspectos como os destacados por Sommerville (2011):
• confidencialidade: respeitar o sigilo dos empregadores, independentemente de 
assinar acordos formais;
• competência: saber quais são os seus limites de capacidade de produção e não 
aceitar demandas que estão além da sua competência; 
• direitos de propriedade intelectual: estar ciente sobre legislação de patentes e 
direitos autorais; 
• preservação dos recursos: usar computadores e outros equipamentos de forma 
racional de modo a não depreciar ou danificar esses recursos. Também é necessário 
manter atenção para questões de segurança, como invasão de vírus, entre outros. 
Essas questões devem ser consideradas, pois um profissional de Engenharia de Software 
pode trabalhar nas dependências da empresa que o contratou, ou em um cliente da 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
11
empresa. Nesse caso, ele representa a empresa onde trabalha e deve se portar como tal. 
Mas, o profissional também pode trabalhar remotamente, em casa, por exemplo, utilizando 
equipamentos do contratante. Nesses exemplos, o cuidado com os aspectos de segurança 
são ainda mais presentes.
Muitas vezes você poderá participar de projetos sigilosos ou ter acesso a documentos 
confidenciais de uma empresa contratante. O cuidado com o sigilo é parte do nosso trabalho, 
manter-se como um profissional ético e íntegro traz visibilidade para a sua carreira. 
Outro aspecto envolve situações de conflito nas quais você poderá discordar das visões 
e dos objetivos de seus empregadores e enfrentar dilemas éticos. Por exemplo: você não 
concorda com alguma prática ilegal ou suspeita de que existam problemas no projeto em que 
trabalha. Como conduzir questões como essas? Demitir-se? Levar a questão para a diretoria? 
Bem, esses dilemas acontecem na maioria das profissões e fazem parte das nossas vidas. 
Acreditamos que você deve ter consciência do que é certo ou errado e manter-se na linha da 
ética e integridade. 
Para saber mais sobre questões éticas e profissionais importantes para os 
engenheiros de software, acesse a Midiateca. 
Considerações finais
Chegamos ao fim desta aula! Como você pôde perceber, a Engenharia de Software é uma 
área de conhecimento muito importante e cria condições para desenvolvermos produtos de 
software mais robustos e eficientes, de modo a melhorar a vida das pessoas que dependerão 
desses produtos.
Os profissionais que trabalham nessa área, além do domínio técnico, buscam ampliar suas 
habilidades de comunicação e relações interpessoais para entender melhor as necessidades 
dos seus clientes. Além disso, apropriam-se de técnicas, métodos e práticas para dominar 
a complexidade do seu trabalho, na produção de infinitas possibilidades de sistemas de 
informação para a nossa sociedade.
Esperamos que você tenha se motivado a conhecer mais sobre o assunto. 
Até mais!
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
12
Referência
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson, 2011.
Engenharia de Software
Aula 02
Processo de desenvolvimento de software: sequencial 
e evolucionário
Objetivos Específicos
• Identificar os elementos do ciclo de vida do software, entender o conceito
de processo de software e os modelos de processo de software clássicos e
suas características.
Temas
Introdução
1 Ciclo de vida e processo de software
2 Características do software
3 Modelo de processo de software
Considerações finais
Referências
Professora
Ana Cláudia Rossi
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
2
Introdução
O objetivo desta aula é conhecer os elementos envolvidos no ciclo de vida do software 
e compreender os conceitos fundamentais e os elementos do processo de dele. Além disso, 
também serão apresentados os modelos de processo de software em cascata, incremental e 
evolucionário.
Assim, ao terminar esta aula você deverá ser capaz de:
• compreender os conceitos do ciclo de vida do software, processo de software e 
modelo de processo de software, e em qual contexto cada um desses conceitos deve 
ser usado;
• conhecer as etapas fundamentais do processo de software, que são: engenharia de 
requisitos, projeto arquitetural, implementação, testes e evolução;
• compreender o impacto das mudanças de requisitos do software, como os modelos 
de processo tratam essas mudanças e como elas influenciam no custo, no cronograma 
e na qualidade do software;
• conhecer dois modelos de processo de desenvolvimento de software, e qual o 
contexto de adoção desses modelos em uma organização. Além de acompanhar 
quais são as vantagens e desvantagens de cada um.
Vamos começar com alguns conceitos fundamentais da Engenharia de Software, tais 
como ciclo de vida de um software, processo de software e modelo de processo de software.
1 Ciclo de vida e processo de software
O termo ciclo de vida é definido pela norma ISO/IEC 12.207 como a evolução de um 
sistema, produto, serviço, projeto ou outra entidade construída por seres humanos desde sua 
concepção até a descontinuação (ISO/IEC 12.207, 2011). Dessa forma, o conceito de ciclo 
de vida de software abrange o período de tempo desde a concepção até a descontinuação 
do uso do software em uma organização, ou seja, as fases de concepção, requisitos, projeto, 
implementação, testes, implantação, manutenção (ou evolução) e descontinuação do uso (ou 
retirada de operação). 
Já o conceito de modelo de ciclo de vida é definido como um framework de processo e 
atividades preocupadas com o ciclo de vida, que deve ser organizado em fases, que também 
atuam como uma referência comum para a comunicação e o entendimento do mesmo (ISO/
IEC 12.207, 2011), ou seja, o modelo de ciclo de vida do software é uma abstração do ciclo 
de vida real.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
3
É muito comum os termos ciclo de vida de software e processo de 
software serem usados de forma indistinta, entretanto, segundo Hirama (2012), 
o conceito de processo está ligado a um conjunto de atividades relacionadas 
para atingir um objetivo, enquanto que ciclo de vida, é um período entre a 
concepção e a desativação do software.
Segundo Sommerville (2011), processo de software é definido como um conjunto de 
atividades e resultados associados que produz um produto de software, que são divididos 
em quatro fases fundamentais de processo: Especificação de software: levantamento e 
especificação das funcionalidades do software e as restrições sobre suaoperação.
• Projeto e implementação de software: construção do software que atenda 
à especificação.
• Validação de software: garantia de que o software esteja de acordo com o que foi 
especificado e que o software faça o que o cliente deseja dele.
• Evolução de software: manutenção e evolução do software para atender às 
necessidades mutáveis do cliente.
A figura 1 apresenta uma esquematização genérica das fases fundamentais do processo 
de software:
Figura 1 – Esquematização das fases fundamentais do processo de software
Fonte: Elaborada pela autora (2014). 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
4
Podemos observar através da figura que nas fases de especificação e projeto, o software 
é representado de forma mais abstrata, através de textos e notações gráficas, como os 
diagramas UML (Unified Modeling Language), enquanto nas fases de teste, implementação 
e evolução a representação do software se encontra mais concreta, ou seja, já temos a 
implementação do software, que pode ser executado e ter o seu comportamento observado.
No processo de produção e evolução do software estão envolvidas várias pessoas, com 
papéis e habilidades diversas, que produzem diferentes artefatos de software e em distintos 
momentos do processo. Nesse contexto, os modelos de processo de software têm a finalidade 
de estabelecer:
• os papéis; 
• as atividades a serem executadas; 
• o que deve ser consumido e produzido em cada atividade;
• em que momento do processo de software eles acontecem.
Segundo Sommerville (2011), um modelo de processo de software é uma representação 
simplificada de um processo de software, sendo que cada modelo representa uma perspectiva 
particular de um processo, e como consequência fornece informações parciais sobre ele. Não 
existe um processo de software adequado para todas as organizações e para todos os tipos 
de software produzidos, assim, as organizações definem seus processos de software a partir 
de modelos de processo existentes na literatura, através de adaptações e adoções de práticas 
que combinem características de modelos de processos de software.
Por exemplo, podemos citar o contexto de sistemas críticos, que é 
necessário à adoção de um processo de desenvolvimento de software muito 
bem estruturado e formal, enquanto que no contexto de sistemas de negócios 
corporativos, com requisitos que se alteram de forma mais rápida é mais 
adequado à adoção de um modelo de processo menos formal e mais flexível. 
(SOMMERVILLE, 2011).
Nesse contexto, é essencial discutir as características do produto de software e entender 
os principais modelos de processo de desenvolvimento e suas características, bem como seu 
contexto de adoção.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
5
2 Características do software
Tanto na indústria como no meio acadêmico discute-se a necessidade de se 
produzir software com mais qualidade, produtividade, custos mais baixos e com maior 
interoperabilidade. A Engenharia de Software se torna uma área desafiadora por vários 
aspectos, como a necessidade de atender à demanda crescente de sistemas de informação, 
que apoiam processos de negócios vitais e essenciais em vários tipos de organizações, a 
necessidade de esses sistemas operarem em uma plataforma heterogênea de hardware e de 
software e se comunicarem com outros sistemas de diferentes fornecedores, entre outros. 
Os sistemas de software são elementos-chave no dia a dia de pessoas e organizações.
Nesse cenário, a construção ou evolução de um software tem origem na necessidade 
do negócio que, segundo Pressman (2011), podem ser:
• a correção de um defeito em um software existente; 
• a necessidade de adaptar um sistema legado devido à mudança no ambiente 
de negócio; 
• a demanda em estender funcionalidades e características de um software existente; 
• a necessidade de criar um novo produto, serviço ou sistema.
2.1 Dificuldades do desenvolvimento de sistemas de software
Brooks (1987) definiu quatro dificuldades inerentes do desenvolvimento de sistemas de 
software, que foram: complexidade, conformidade, modificabilidade e invisibilidade.
2.1.1 Complexidade
A complexidade está relacionada aos vários componentes de software e hardware que 
compõem uma solução de tecnologia de informação para automatizar os processos de negócio 
de uma organização e que, muitas vezes, também envolve a integração com sistemas legados 
e de organizações parceiras, de maior ou menor porte, em uma plataforma heterogênea.
2.1.2 Conformidade
A conformidade ainda é um desafio que também se faz presente, uma vez que o sistema 
de software pode ser tanto um novo desenvolvimento como também uma evolução de uma 
versão já existente, que pode necessitar de adaptações ou customizações para atender a 
diferentes organizações e, novamente, pode envolver a integração com outros sistemas. 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
6
2.1.3 Modificabilidade
Dentro desse contexto de necessidade de adaptações, de customizações e de evoluções, 
temos a modificabilidade, que está relacionada às pressões por mudanças e as alterações 
constantes que o software está sujeito, devido a alguns fatores, como: mudanças em estratégias 
organizacionais, novos requisitos, evolução tecnológica ou novas leis de regulamentações 
governamentais.
2.1.4 Invisibilidade
A dificuldade da invisibilidade está relacionada ao fato de que o software não é 
espacialmente representável, ou seja, não existe um diagrama ou esquema lógico que o 
descreva de forma que proporcione um fácil entendimento entre os diferentes envolvidos no 
seu processo de desenvolvimento e evolução (BROOKS, 1987). 
2.2 As representações abstratas do sistema
Para obter um entendimento do sistema são necessárias muitas representações 
abstratas, através de técnicas, métodos, documentos e ferramentas. Elas devem atender a 
diferentes visões dos envolvidos com relação ao contexto do sistema. Além desses aspectos, 
os envolvidos podem ter necessidades específicas de informação sobre o sistema e seu 
ambiente, em diferentes fases do processo de software e também possuir um conhecimento 
diverso com relação ao domínio das técnicas, dos métodos e das ferramentas de representação 
abstrata do sistema.
As dificuldades acidentais apontadas por Brooks (1987) ainda são preocupações para 
o engenheiro de software no contexto atual, além de serem muito discutidas na literatura. 
Como lidar com esses desafios é o campo de estudo da Engenharia de Software.
3 Modelo de processo de software
Nas pesquisas realizadas pelo SEI (Software Engineering Institute), para auxiliar 
organizações a desenvolver e manter a qualidade nos produtos e serviços de software, 
foram identificadas três dimensões que as organizações devem focar para a melhoria de seu 
negócio (nesse caso, construção e evolução de software): pessoas, procedimentos e métodos, 
ferramentas e equipamentos. 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
7
Figura 2 – As três dimensões críticas do processo
Fonte: CMMI (2010, p. 4).
Como foi observado na figura, o processo de software estabelece:
• quem faz: pessoas com habilidades, treinamentos e motivação;
• o que e quando: procedimentos e métodos definindo os relacionamentos entre 
tarefas e atividades;
• como: ferramentas e equipamentos.
Como foi definido anteriormente, um modelo de processo de software é uma 
representação simplificada de um processo de software, sendo que cada modelo representa 
uma perspectiva particular de um processo e como consequência fornece informações 
parciais sobre ele (SOMMERVILLE, 2011). 
Vamos estudar agora alguns modelos de processo.
3.1 Cascata
O modelo em cascata foi o primeiro modelo de processo publicado e recebeu este nome 
devido ao encadeamento entre uma fase e outra. A figura 3 apresenta as fases do modelo em 
cascata (SOMMERVILLE, 2011).
Senac São Paulo - Todos os Direitos Reservados
Engenhariade Software
8
Figura 3 – Modelo de processo em cascata
Fonte: Sommerville (2011, p. 20).
Segundo Sommerville (2011), as principais fases do modelo em cascata são:
• análise e definição de requisitos: os serviços, restrições e metas do sistema 
são especificados por meio de consultas aos usuários e demais envolvidos com o 
software e, em seguida, são definidos em detalhes. Depois, finalmente é gerada uma 
especificação do sistema;
• projeto de sistema e software: alocação dos requisitos tanto para os sistemas 
de hardware como para os sistemas de software, por meio da definição de uma 
arquitetura geral. Para isso, o projeto arquitetural envolve a identificação e descrição 
das abstrações fundamentais do sistema de software e seus relacionamentos;
• implementação e teste unitário: desenvolvimento do projeto como um conjunto 
de programas ou unidades de programas. Para garantir o funcionamento de cada 
unidade de programa é realizado o teste unitário para assegurar que as especificações 
foram atendidas;
• integração e teste de sistema: integração das unidades individuais do(s) programa(s) 
e realização de testes durante a integração, como também do sistema completo. 
Dessa forma, é assegurado que os requisitos de software tenham sido atendidos. 
Após a realização dos testes, o sistema é entregue ao cliente;
• operação e manutenção: instalação do sistema e disponibilização para uso. A fase 
de manutenção envolve a correção de erros que não foram identificados durante a 
fase de testes, como também a melhoria da implementação e a construção de novas 
funcionalidades em resposta à descoberta de novos requisitos.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
9
O modelo em cascata é caracterizado pela execução sequencial das 
fases, sendo que o resultado de cada uma é a aprovação de um ou mais 
documentos. Dessa forma, a fase seguinte não deve iniciar até que a fase 
anterior seja concluída. Entretanto, durante o projeto de software podem ser 
identificados problemas com requisitos de software e, como consequência, 
pode se observar que o processo de desenvolvimento de software não segue 
um fluxo linear e sequencial, mas envolve realimentação de uma fase para 
outra (SOMMERVILLE, 2011).
Pressman (2011) aponta algumas críticas com relação ao modelo em cascata:
• fluxo sequencial: dificilmente projetos reais seguem um fluxo sequencial de atividade 
como o modelo em cascata propõe;
• incerteza natural nas fases iniciais do processo: no início de muitos projetos de 
software existe uma incerteza natural, ou seja, muitas vezes o cliente ainda não 
consegue estabelecer todas as necessidades explicitamente;
• cliente deve ter paciência até a entrega do software: uma versão operacional do 
software será entregue após a fase de teste de sistema, ou seja, a experimentação do 
software pelo cliente acontece no momento de colocar em operação. Assim, se houver 
algum desvio de especificação de requisitos do usuário, isto pode ser desastroso.
Podemos observar que o modelo em cascata é recomendado quando os requisitos 
são bem compreendidos e com pouca possibilidade de mudança durante o processo de 
desenvolvimento do software (SOMMERVILLE, 2011; PRESSMAN, 2011).
Segundo Sommerville (2011), o modelo de desenvolvimento formal é uma variação 
importante do ciclo de vida em cascata, pois cria um modelo matemático para a especificação 
de um sistema. Esse modelo matemático é refinado através de transformações que preservam 
sua consistência, em código executável. Dessa forma, partindo-se do pressuposto de que suas 
transformações matemáticas estão corretas, você pode, portanto, usar um forte argumento 
que um programa gerado dessa forma é consistente com suas especificações. O modelo formal 
é usado apenas para desenvolvimento de sistemas críticos de segurança ou de proteção.
3.2 Modelo incremental
O modelo incremental visa à produção do software a partir da ideia de desenvolver 
uma implementação inicial de software, realizar uma avaliação dos usuários e continuar a 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
10
construção do software por meio da criação de versões intermediárias, até que um sistema 
adequado seja desenvolvido (SOMMERVILLE, 2011).
Figura 4 – Modelo incremental
Fonte: Sommerville (2011, p. 22).
Na figura 4, notamos que as atividades de especificação, desenvolvimento e validação 
são realizadas simultaneamente e intercaladas com rápido feedback entre todas as atividades. 
Assim, o modelo incremental reflete o modo como resolvemos problemas, ou seja, raramente 
desenvolvemos uma solução completa para um problema e sim um esboço inicial, que será 
dividido e construído em partes menores.
Segundo Sommerville (2011), as organizações que adotam o modelo 
incremental, têm um processo de produção de software com menor custo e 
maior facilidade em acomodar mudanças durante o desenvolvimento. Cada 
incremento ou versão do sistema incorpora alguma funcionalidade necessária 
para o cliente (os incrementos iniciais incluem funcionalidades que agregam 
mais valor ou são mais urgentes para o cliente).
As vantagens mais importantes do modelo incremental são (SOMMERVILLE, 2011):
• redução no custo de acomodar mudanças de requisitos: quantidade de análise e de 
documentação é menor do que no modelo em cascata; 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
11
• validação do cliente a cada entrega de versão: envolvimento do cliente no 
processo de produção de software a cada validação das versões entregues, através 
de feedback constante;
• entrega mais rápida de uma versão parcial do software para o cliente: entrega de 
versões parciais do sistema para uso em operação, agregando valor ao processo de 
negócio do cliente.
As desvantagens do modelo incremental são (SOMMERVILLE, 2011):
• falta de visibilidade no processo: a gerência precisa de entregas regulares para 
mensurar o progresso, se as entregas são muito rápidas não é viável a produção de 
documentos que reflitam cada versão do sistema;
• degradação da estrutura do sistema com a adição de novos incrementos: mudanças 
constantes tendem a corromper a estrutura do sistema se não for investido tempo 
em técnicas de refatoração para a melhoria do software.
3.3 Modelo evolucionário
Como discutimos anteriormente, uma característica do software é sua evolução ao 
longo do tempo, ou seja, conforme as fases do desenvolvimento do software avançam, temos 
mudanças nas necessidades de negócio e os produtos que mudam frequentemente, como 
consequência, torna-se inadequado um planejamento linear de um produto de software. 
Os modelos de processo evolucionário contemplam esse aspecto de possibilitar o 
desenvolvimento de um produto que evolua ao longo do tempo e são caracterizados por 
serem interativos e apresentarem características que possibilitem desenvolvermos versões 
cada vez mais completas do software. 
Considerações finais
O processo de software estabelece um conjunto de atividades relacionadas para atingir 
um objetivo e, nesse caso, quando falamos em processo de desenvolvimento de software o 
objetivo é a produção de um software. O processo define quem faz o que, quando e como, 
assim, quando iniciamos um projeto de software, precisamos nos apoiar em modelos de 
processo para nos guiar no que deve ser feito.
Nesta aula, conhecemos dois modelos de processo de software que têm o mesmo 
objetivo, ou seja, a produção de um software. O modelo em cascata organiza suas fases de 
forma sequencial e linear e em cada término de fase temos uma documentação intermediária 
que documenta o software produzido e fornece suporte às suas manutenções e evoluções 
futuras. Em contrapartida, apresenta algumas desvantagens, como a acomodação de 
mudanças de requisitos apenas no final do processo.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
12
Já o modelo incremental, a cada incremento produz um software que agrega valor ao 
cliente maisrapidamente e permite acomodar mudanças com mais facilidade, entretanto, a 
documentação dos artefatos das fases intermediárias não é seu ponto forte, como também 
não é a visibilidade gerencial das fases.
Cada modelo de processo tem suas características e é adequado para diferentes contextos 
de uso, razão pela qual devemos continuar aprofundando os estudos. 
Referências
BROOKS, F. P. No silver bullet - essence and accidents of software engineering. IEEE Computer, 
v. 20, n. 4, p. 10–19, 1987.
CMMI, CMMI® for Development, Version 1.3: in improving processes for developing better 
products and services. Software Engineering Institute - Carnegie Mellon University, 2010. 
Disponível em: <http://www.sei.cmu.edu/reports/10tr033.pdf>. Acesso em: 15 nov. 2014.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de Janeiro: 
Editora Campus, 2012.
ISO/IEC 12.207 - The International Organization for Standardization and the International 
Electrotechnical Commission. ISO/IEC 12207 information technology – Software life cycle 
processes, Geneve: ISO, 2008.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. Porto Alegre: Mcgraw 
Hill - Artmed, 2011.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson, 2011.
Engenharia de Software
Aula 03
Processos de desenvolvimento de software: prototipagem, 
modelo espiral, componentização e UP
Objetivos Específicos
• Entender outros processos de desenvolvimento de software e suas 
características.
Temas
Introdução
1 Processo de Desenvolvimento – Diferentes abordagens
2 Modelos de processo – Iterativos e evolucionários
Considerações finais
Referências
Ana Cláudia Rossi
Professora
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
2
Introdução
Nesta aula, conheceremos mais alguns modelos de processo de software que adotam as 
estratégias iterativa e incremental. Para isso, vamos conhecer suas características e exemplos 
de modelos de processo de desenvolvimento de software. É muito importante você observar 
as diferenças entre os processos que estamos estudando.
Portanto, ao terminar esta aula, você deverá ser capaz de:
• compreender os conceitos que envolvem os modelos de processos iterativos 
e evolucionários;
• conhecer o que é desenvolvimento de software baseado em componentes 
e prototipação;
• conhecer os principais modelos de processo iterativos e evolucionários;
• compreender as diferenças entre os modelos de processo;
• saber quais são as vantagens e desvantagens de cada um.
• Vamos continuar aprofundando nossos conhecimentos sobre modelos de processo 
de software.
1 Processo de Desenvolvimento – Diferentes abordagens
Segundo Pressman (2011), um processo de desenvolvimento de software tem 
quatro funções: 
• fornecer um guia de como estabelecer a ordem das atividades da equipe;
• especificar os artefatos que serão desenvolvidos e quando eles serão desenvolvidos;
• direcionar as tarefas individuais dos projetistas e da equipe como um todo;
• oferecer critérios para monitoração e medida dos produtos e das atividades 
do projeto.
Os modelos de processo podem ter seu fluxo de atividades organizado de diferentes 
maneiras, que são: linear, iterativa, incremental e paralela (PRESSMAN, 2011).
1.1 Estratégia linear
Nos modelos de processo que adotam a estratégia linear as atividades são executadas 
de forma sequencial e encadeada, uma após a outra, começando com especificação de 
requisitos e finalizando com a manutenção, como pode ser observado na figura 1.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
3
Figura 1 - Processo linear
Fonte: adaptado de Pressman (2011, p. 54).
1.2 Estratégia iterativa
Já nos modelos de processo que adotam a estratégia iterativa, uma ou mais atividades 
são repetidas antes de se prosseguir para as seguintes, como podemos observar na figura 2. 
Essa estratégia é adequada quando temos apenas uma ideia vaga do que queremos e iremos 
refinar os detalhes ao longo do desenvolvimento do software.
Figura 2 - Processo iterativo
Fonte: adaptado de Pressman (2011, p. 54).
1.3 Estratégia evolucionária
É importante observar que os modelos de processos que adotam a estratégia denominada 
evolucionária executam as atividades de forma circular e a cada volta conduzem a uma versão 
mais completa do software, como é apresentado na figura 3.
Figura 3 - Processo evolucionário
Fonte: adaptado de Pressman (2011, p. 54).
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
4
2 Modelos de processo – Iterativos e evolucionários
Dada a complexidade do software e a sua característica de evoluir ao longo do tempo, 
conforme as fases do desenvolvimento do software avançam, podem ocorrer mudanças nas 
necessidades de negócio e, como consequência, os produtos de software sofrerem alterações 
constantes. Isso faz com que a adoção de modelos de processo que utilizam a estratégia 
linear seja inadequada para lidar com mudanças de requisitos, como o modelo em cascata. 
Os modelos de processo que adotam a estratégia evolucionária contemplam esse 
aspecto de possibilitar o desenvolvimento de um produto que evolua ao longo do tempo.
Esses modelos evolucionários são caracterizados por serem iterativos e apresentarem 
características que possibilitem desenvolvermos versões cada vez mais completas do software, 
ou seja, o software evolui.
Vamos estudar alguns desses modelos de processo, que permitem tratar esses aspectos 
de incertezas e do software apresentar evolução ao longo do ciclo de vida dele para 
acomodar mudanças.
2.1 Prototipagem
Muitas vezes, o nosso cliente não tem certeza, ou tem apenas um objetivo muito 
genérico para o software, ou até mesmo, o desenvolvedor pode não estar muito seguro sobre 
a forma de interação entre os usuários e o sistema, ou com a ideia da solução proposta. 
Nesses casos, podemos fazer uso do modelo de prototipação para auxiliar no entendimento 
das necessidades do cliente e do contexto de uso do sistema.
Podemos entender um protótipo como uma versão inicial de um sistema de software, 
usado para demonstrar conceitos, experimentar opções de projeto e ajudar no entendimento 
do problema e a descobrir possíveis soluções (SOMMERVILLE, 2011). 
Através do protótipo, é possível o cliente/usuário ter uma ideia mais clara sobre o sistema 
e, até mesmo, ter uma experiência mais próxima do real das funcionalidades do sistema. 
Assim, o protótipo auxilia:
• na identificação de novas ideias para os requisitos e, assim, novos requisitos para 
o sistema;
• na busca por pontos fortes e pontos fracos do software;
• na revelação de erros e omissões nos requisitos propostos (SOMMERVILLE, 2011).
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
5
Podemos perceber a importância da prototipação no processo de desenvolvimento de 
software e, principalmente, na fase de requisitos e no projeto de interface gráfica de usuário.
A figura 4 apresenta o processo de desenvolvimento de protótipo.
Figura 4 - Processo de desenvolvimento de protótipo
Fonte: SOMMERVILLE (2011, p. 30).
É importante ressaltar que os objetivos da prototipação devem ser definidos desde o 
início do processo, que podem ser para projetar interface com o usuário, para desenvolver um 
sistema para validação dos requisitos funcionais do sistema ou, até mesmo, para desenvolver 
um sistema para demonstrar a validade técnica de uma solução (SOMMERVILLE, 2011).
Segundo Pressman (2011), tanto cliente quanto desenvolvedor devem estar de acordo 
que o protótipo é construído apenas para servir como um mecanismo de definição de requisitos 
e que depois será descartado (pelo menos em parte) e o software real será construído com 
foco na qualidade.
2.2 Modelo espiral
O modelo espiral é um modelo de processo proposto por Boehm (1988 apud 
SOMMERVILLE, 2011), que em vez de representar o processo como uma sequência de 
atividades, usou uma espiral para representar o encadeamento das atividades,como mostra 
a figura 5.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
6
Figura 5 - Modelo espiral
Fonte: Boehm (1998) apud Sommerville (2011, p. 33).
O modelo espiral é um exemplo de processo evolutivo, ou seja, o software é desenvolvido 
de forma evolutiva até que o produto final esteja cada vez mais completo, assim, a partir da 
figura 5 podemos observar que as atividades do modelo espiral evoluem no sentido horário, 
do centro para fora.
Como características do modelo espiral, podemos citar Hirama (2012) e Pressman (2011):
• integração entre as disciplinas de gerência de projetos e as disciplinas de 
engenharia (construção);
• diminuição dos riscos de desenvolvimento através da disciplina de análise de riscos, 
ou seja, até para iniciar o desenvolvimento é verificado se é gerencialmente e 
tecnicamente viável;
• envolvimento do cliente a cada iteração ou produto obtido.
O modelo espiral é dividido em quatro setores, que são (SOMMERVILLE, 2011):
• definição dos objetivos: definição dos objetivos específicos para a fase do projeto, 
tais como: restrições ao processo e ao produto, plano de gerenciamento, identificação 
de riscos de projeto e, também, pode ser elaborado um plano de alternativas em 
função dos riscos;
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
7
• avaliação e redução de riscos: é realizada a avaliação dos riscos técnicos e gerenciais 
identificados e medidas para redução dos riscos são tomadas;
• desenvolvimento e avaliação: envolvem as atividades de engenharia, construção 
e validação;
• planejamento: revisão do projeto e decisão sobre a próxima espiral, caso seja 
decidido pela continuidade, mais um incremento é realizado, para isso, planos são 
elaborados para a próxima fase.
2.3 Componentização
Durante as fases do processo de desenvolvimento de software observa-se que alguns 
artefatos de software gerados (especificações, projeto de arquitetura, código-fonte, casos 
de teste e outros) são similares, ou até mesmo iguais, a outros confeccionados em outros 
projetos. O que se percebe que uma grande quantidade de esforço, em geral, é desperdiçada. 
Esses artefatos de software desenvolvidos no contexto de outros projetos podem ser 
utilizados em novos projetos, com o intuito de diminuir o retrabalho realizado durante o 
processo de desenvolvimento de um produto de software.
A combinação de reuso de software e componentes de software é uma alternativa 
para alcançar a produtividade na elaboração de um produto de software com qualidade, 
visando custos mais baixos no processo de desenvolvimento. Como consequência, o 
processo de desenvolvimento baseado em componentes é apontado como uma abordagem 
de desenvolvimento que promove a redução do custo e do tempo de desenvolvimento de 
sistemas de software.
O componente de software é um dos principais artefatos de software que pode ser 
usado e reusado para a construção de novos sistemas. O reuso de software pode ser obtido 
por meio do desenvolvimento baseado em componentes, ou seja, um novo sistema pode ser 
construído utilizando partes (componentes), que foram criadas para compor outro sistema.
Deste modo, essa abordagem tem como premissa fundamental a construção de um 
sistema de software a partir de componentes de software já existentes. Isso contrasta com 
o processo de desenvolvimento tradicional, em que praticamente todos os elementos são 
construídos. Como qualquer processo de desenvolvimento, o processo de desenvolvimento 
de software baseado em componentes envolve uma sequência lógica de fases constituídas de 
atividades, que transformam os artefatos de entrada em artefatos de saída para construir o 
sistema desejado. Entretanto, essa abordagem difere da tradicional, pois um sistema é obtido 
através do uso de componentes de software.
Apesar de não serem iguais, os modelos de processo baseados em componentes, 
encontrados na literatura de engenharia de software, possuem um conjunto de fases em 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
8
comum, que são (PRESSMAN, 2011): análise de requisitos, aquisição do componente, 
entendimento do componente, adaptação do componente, composição do componente e 
certificação do componente.
Podemos observar que o reuso de software está implícito dentro dessa abordagem, 
uma vez que um sistema de software é construído a partir de componentes de software 
previamente construídos e, além disso, um ou mais componentes podem ter sido utilizados 
para a construção de outro sistema de software.
O processo de desenvolvimento baseado em componentes possui dois enfoques a 
serem considerados: 
• desenvolvimento de componentes de software para reuso: trata-se da construção 
de componentes de software para reuso. Para isso, são realizadas as atividades de 
construção de modelos de domínios e arquitetura, construção de novos componentes, 
ou reengenharia de componentes existentes para melhorar a sua reusabilidade;
• desenvolvimento de software com reuso de componentes: trata do uso de 
componentes de software desenvolvidos com propósito de serem reutilizados para a 
obtenção de sistemas. Suas atividades são relativas ao processo de desenvolvimento, 
incluindo a identificação e a busca de componentes reutilizáveis na base de 
reutilização, a construção de novo componente de software (se necessário) ou sua 
adaptação ou composição.
2.4 Modelo UP (Unified Process – Processo Unificado)
O processo unificado adota o desenvolvimento de software baseado em componentes, 
ou seja, prevê que o sistema de software pode ser construído através da composição de 
componentes de software interconectados através de interfaces bem definidas. Segundo 
Pressman (2011), utilizando a Unified Modeleing Language (UML) – Linguagem de 
Modelagem Unificada, o processo unificado define os componentes de software que serão 
usados para construir o sistema e as interfaces, que fornecem meios para a conexão entre 
os componentes.
O processo unificado adota o desenvolvimento iterativo e incremental e define as funções 
do sistema aplicando uma abordagem baseada em cenários denominada modelo de casos de 
uso (PRESSMAN, 2011).
O RUP é uma instância mais específica do Processo Unificado e as melhores práticas 
de processos de software incorporadas neste processo são Pressman (2011) e Sommerville 
(2011):
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
9
• desenvolvimento iterativo;
• gerência de requisitos;
• utilização de arquitetura e componentes;
• modelagem visual através da UML;
• qualidade de processo e de produto;
• gerência de configuração e versões;
• casos de uso dirigindo muitos aspectos do desenvolvimento;
• modelo de processo de desenvolvimento, que pode ser adaptado e estendido para as 
características da organização;
• necessidade de ferramentas de desenvolvimento de software para fornecer suporte 
ao processo.
A figura 6 apresenta um exemplo da estrutura do RUP, suas fases e seu núcleo do fluxo 
de trabalho.
Figura 6 - Estrutura, fases, iterações e o fluxo de trabalho da estrutura do RUP 
Fonte: Ambler (2008, p. 220).
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
10
É importante destacar que no eixo vertical, da estrutura do RUP, está a representação 
dos fluxos de trabalho do processo, consistindo basicamente de: modelagem de negócio, 
gerência de requisitos, análise e projeto, implementação, teste e distribuição. Podem existir 
outros elementos no ciclo de vida e cada elemento é apoiado por ferramentas e guias de 
processos, descrevendo cada um deles e sua aplicação.
O eixo horizontal representa o tempo e mostra como os componentes do ciclo de vida do 
processo são desdobrados através das suas fases. Essa representação descreve os aspectos 
dinâmicos do processo como ele ordena e expressa em termos de ciclos, fases, iterações e 
os pontos de verificação, sendo que, dentro de cada fase, gerentes ou projetistas podem 
dividir o trabalhoem duas ou mais iterações e cada fase termina com um ponto de verificação 
(SOMMERVILLE, 2011). 
Cada fase do processo é descrita a seguir:
• concepção: definição clara do que é o produto a ser desenvolvido; para isso, devem 
ser estabelecidos o escopo do sistema, uma visão inicial dos casos de uso principais, 
as condições limites e o critério de aceitação;
• elaboração: elaboração da especificação detalhada de mais casos de uso do produto 
e da arquitetura do sistema. Essa fase pode ser executada em uma ou mais iterações, 
dependendo do escopo, tamanho e do nível de domínio sobre o assunto do projeto;
• construção: processo de produção do produto, ou seja, implementação do software, 
integração, teste dos componentes e avaliação da versão dos produtos em relação 
aos critérios de aceitação. O resultado dessa fase é o produto que incorpora todos os 
casos de usos, definidos pelo cliente e pela gerência, para fazer parte dessa versão;
• transição: conjunto de atividades que conduzem o produto obtido ao ambiente de 
produção, compreendendo, por exemplo, manufatura, treinamento de usuário, 
suporte e correção de erros encontrados depois da entrega. 
Para mais informações sobre o processo de desenvolvimento de software, 
acesse a Midiateca. 
Considerações finais
Refletindo sobre o que estudamos até agora, podemos perceber que a mudança é 
inevitável na maioria dos projetos de software uma vez que (SOMMERVILLE, 2011):
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
11
• requisitos dos sistemas mudam em decorrência de mudanças nos processos de 
negócio devido a pressões externas e que mudam as prioridades gerenciais;
• disponibilidade de novas tecnologias e, assim, novas possibilidades de implementação 
e novos projetos;
• novas necessidades ou novos processos que precisam de automação.
Ou seja, a evolução do software ocorre quando se alteram os sistemas atuais de software 
para atender aos novos requisitos e essas mudanças são contínuas para o software continuar 
sendo útil dentro da organização.
Assim, podemos concluir que os modelos de processo de software devem ser capazes de 
lidar com a mudança e a evolução dos sistemas de software.
Referências
AMBLER, S. W. Modelagem ágil: práticas eficazes para programação extrema. Porto Alegre: 
Bookman, 2008.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de Janeiro: 
Campus, 2012.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. Porto Alegre: Mcgraw 
Hill - Artmed, 2011.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson, 2011.
Engenharia de Software
Aula 04
Metodologia ágil
Objetivos Específicos
• Entender os princípios e valores da metodologia ágil e as características dos 
modelos de processos ágeis. 
Temas
Introdução
1 Desenvolvimento ágil
2 Movimento ágil
3 Scrum
4 Extreme programming
Considerações finais
Referências
Ana Cláudia Rossi
Professora
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
2
Introdução
Vamos começar a nossa aula sobre metodologias ágeis!
O objetivo desta aula é conhecer o movimento ágil, sua filosofia e os principais processos 
adotados por equipes de desenvolvimento de software. Vamos observar as diferenças entre 
eles e a quebra de paradigma que temos em relação aos processos prescritivos, como o 
Modelo Cascata e o evolucionário.
Portanto, ao terminar esta aula, você deverá ser capaz de:
• compreender os conceitos que envolvem o desenvolvimento ágil;
• conhecer os principais métodos ágeis;
• compreender as diferenças entre os modelos de processo do movimento ágil e os 
modelos de processo prescritivos;
• conhecer com mais detalhes dois modelos de processo do movimento ágil, que são: 
SCRUM e XP (Extreme Programming).
Vamos começar conhecendo o manifesto ágil e o que impulsionou esse movimento.
1 Desenvolvimento ágil
No cenário atual, as empresas operam em um ambiente globalizado e muito suscetível 
a mudanças. Como sabemos, o software é parte importante deste ambiente e também é 
impactado por mudanças que vão desde a economia mundial até questões operacionais da 
empresa, em que se fazem necessários ajustes rápidos para garantir a competitividade no 
setor de atuação.
Sendo assim, considere o tempo necessário para executar todas as etapas de um 
processo de software. Neste tempo, contado desde a elicitação de requisitos até a entrega 
do produto, mudanças no ambiente podem ocorrer e gerar alterações nos requisitos 
inicialmente desenhados.
Portanto, um processo de software que planeja especificar completamente todos os 
requisitos para depois implementar e testar o sistema, não está adaptado para o cenário 
atual que descrevemos anteriormente.
Necessitamos de processos de desenvolvimento rápido, concebidos para lidar com as 
mudanças enfrentadas pelas empresas da atualidade. Sommerville (2011) indica que essas 
questões já eram conhecidas e estudadas na década de 1980, quando a IBM introduziu o 
desenvolvimento incremental. Nessa linha, as ferramentas de quarta geração também foram 
introduzidas, objetivando entregas mais rápidas.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
3
Sendo assim, para o ciclo de vida de um produto de software, podemos criar um 
processo de software específico, mais adequado para o escopo delineado e as características 
do produto que iremos desenvolver.
Por esse motivo, a engenharia de trabalha em constante empirismo, ou seja, 
experimentando novas formas de produção mais eficientes, em menor tempo, com menor 
custo e com mais qualidade. Fazer mais com menos poderia ser uma diretiva dessa área.
Mas a ideia decolou de fato no final da década de 1990, com o desenvolvimento das 
abordagens ágeis, que são:
• Desenvolvimento de Sistemas Dinâmicos (DSDM) (STAPLETON, 1997);
• Scrum (SHWABER; BEEDLE, 2001);
• Extreme Programming (BECK, 1999).
Os processos ágeis de desenvolvimento, também conhecidos como métodos ágeis, 
foram concebidos para produzir softwares úteis rapidamente. Partindo do princípio de 
que um software pode ser desenvolvido por partes, podemos então planejar uma série 
de incrementos de software (partes), cada uma atendendo uma ou mais funcionalidades 
do sistema.
Nesse raciocínio, a produção de cada incremento poderia ser submetida a um processo 
de software previamente desenhado. Se trabalharmos nesse modo de produção, as chances 
de gerar um produto desatualizado, ou não compatível com as necessidades da empresa, 
serão menores, pois, além de distribuir a atividade de especificação ao longo do projeto, a 
cada incremento, teremos uma visão mais madura do produto que estamos criando.
Podemos observar na Figura 1 que no desenvolvimento convencional, a especificação 
inicia-se somente após o fim da fase de engenharia de requisitos. O mesmo ocorre para a 
fase de projeto e implementação. Se há mudanças de requisitos o processo reinicia-se. No 
caso do desenvolvimento ágil, existe uma interação direta entre a engenharia de requisitos e 
a fase de projeto e implementação, ou seja, a especificação ocorre dentro da fase de projeto 
e implementação, a cada novo incremento de software. 
Figura 1 – Especificações no desenvolvimento convencional e desenvolvimento ágil
Fonte: Adaptada de Sommerville (2011, p. 43).
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
4
2 Movimento ágil
Em 2001, um grupo de simpatizantes do desenvolvimento ágil se reuniu para escrever o 
que ficou conhecido como manifesto ágil, que consiste em uma declaração de valores comuns 
aos processos de software denominados ágeis. O Manifesto Ágil (2001) declara que:
Estamos descobrindo melhores maneiras de desenvolver softwares, fazendo-o e 
ajudando outros a fazê-lo. Através deste trabalho valorizamos mais:
• indivíduos e interações do que processos e ferramentas; 
• software em funcionamento do que documentação abrangente; 
• colaboração com o cliente do que negociação de contratos; 
• responderàs mudanças do que seguir um plano.”
Esses princípios resultam de anos de experiência em desenvolvimento de software, 
observando problemas e experimentando alternativas ao desenvolvimento tradicional. 
2.1 Indivíduos e interações
O primeiro item diz respeito aos indivíduos e às interações. Estamos falando das 
equipes de software que devem ser mais colaborativas entre si, trocando experiências e 
compartilhando lições aprendidas a cada novo projeto.
Na prática, o cliente está preocupado com a compra de um software que funcione 
e atenda às suas necessidades. O processo de software pode vir a ser desgastante e não 
alcançar o sucesso esperado. Por esse motivo, engenheiros de software preocuparam-se em 
criar princípios que pudessem minimizar os problemas comuns em projetos de software.
2.2 Software em funcionamento
Com relação ao segundo valor, software funcionando com documentação extensa, 
segundo Cohn (2011) o movimento ágil foi mal interpretado como sendo contra a 
documentação. Ainda segundo o autor, deve existir um equilíbrio entre o que é documentado 
e o que não é documentado, mas registrado em código-fonte e testes automatizados 
(COHN, 2011). 
Assim, podemos perceber que ninguém está dizendo: “não faça documentação”, como 
muitos pregam no movimento ágil. Apenas estabelecemos graus de importância para as 
coisas. Documentação é importante e deve ser feita. Porém, o cliente espera um software. 
Esse é o produto mais importante. 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
5
Existem situações em que 40% do tempo de projeto é destinado somente 
para documentação e reduz-se o tempo de teste para atingir esta meta. Será 
que esse é o melhor cenário para produzir software?
2.3 Colaboração com o cliente
O terceiro princípio diz respeito à participação do cliente de um modo mais próximo do 
desenvolvimento. O cliente colabora mais com a equipe de desenvolvimento em um contexto 
em que as entregas são realizadas em um espaço de tempo menor, com uma versão de software 
que agrega valor ao cliente e, assim, permitindo que ele realize um feedback contínuo e 
frequente. Desta forma, os feedbacks podem gerar mudanças na versão do software e, como 
consequência, a equipe de desenvolvimento deve responder a essas mudanças. 
Podemos perceber que os contratos formalizam as relações entre cliente e desenvolvedor, 
entretanto, o grande objetivo é entregar valor ao cliente, independentemente do que está 
descrito e registrado em um contrato assinado. Desta forma, quando uma rotina não está de 
acordo com as especificações, ou quando percebemos que determinada funcionalidade foi 
especificada de forma errada, as correções são acionadas e processadas de modo 
mais rápido.
Sabemos que o custo de correção de algum item no projeto de software 
aumenta sobremaneira na medida em que as fases do projeto avançam. Por 
esse motivo, o quanto antes o erro for detectado, mais em conta será o custo 
da correção. 
2.4 Responder a mudanças
O quarto princípio fala de mudanças. Este ponto remete ao que escrevemos no início 
desta aula. Estar suscetível a mudanças, porém seguindo o plano maior que é a entrega do 
produto funcionando e com qualidade. Para isso, gerenciar mudanças em desenvolvimento 
de software é fundamental. Tudo que mudamos tem impacto no tempo e no custo. A famosa 
frase “isso é fácil, deixa que eu resolvo” não adere às boas práticas de engenharia de software. 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
6
Tudo deve ser ponderado antes de tomar a decisão. Contudo, isso não quer dizer: “melhor 
não mudar”.
Lembre-se sempre de que o cliente precisa de um produto que atenda às suas 
necessidades. Se uma mudança solicitada não for atendida, provavelmente, o produto final 
poderá não atender às necessidades.
Geralmente produtos de software representam um modelo computacional de um 
processo que era manual e foi modificado com melhorias e benefícios da computação. 
Entender esses processos e criar produtos de qualidade está entre os nossos desafios. 
Participaram do manifesto importantes personalidades da área de 
engenharia de software, como Kent Beck, Mike Beedle, Arie van Bennekum, 
Alistair Cockburn, Ward Cunningham, Jon Kern, Martin Fowler, James Grenning, 
Jim Highsmith, Andrew Hunt, Ron Jeffries, Ken Schwaber, Brian Marick, Robert 
C. Martin, Steve Mellor, Dave Thomas e Jeff Sutherland. A maioria deles tem 
livros, artigos e materiais disponíveis na web. Vale a pena pesquisar e estudar 
mais sobre o assunto. 
E, para saber mais sobre o manifesto ágil, acesse a Midiateca. 
3 Scrum
Schwaber e Sutherland (2013) definem Scrum como um framework em que as pessoas 
podem tratar e resolver problemas complexos e adaptativos, enquanto entregam de forma 
produtiva e criativa, produtos com mais valor. 
O Scrum não é um processo ou uma técnica, é um framework, ou seja, um conjunto de 
conceitos que são aplicados para resolver um problema de domínio específico. No caso, o 
problema do processo de software. A ideia básica é compor uma equipe, chamada de equipe 
Scrum, que terá papéis específicos, eventos e artefatos (documentos, ou qualquer coisa 
produzida durante o processo) e regras.
Nesse framework, os papéis específicos são:
• Equipe de Desenvolvimento – É um grupo de pessoas auto-organizável e 
multifuncional. Você não vai encontrar pessoas com papéis específicos, como 
desenvolvedor ou tester, todos trabalham multifuncionalmente. Segundo Cohn 
(2011) o tamanho de equipe ideal é de três a nove integrantes.
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
7
• Product Owner – Também denominado de dono do produto, sua responsabilidade 
é garantir que se dedique ao objetivo correto, para isso, ele redige os requisitos e 
define as prioridades (COHN, 2011). Ele gerencia o backlog do produto, que é uma 
lista de tarefas que, quando finalizada, encerra o produto.
• Scrum Master – É o responsável por garantir que o framework Scrum seja entendido 
e aplicado pela equipe Scrum e, também, atua como um facilitador para remover 
impedimentos ao progresso da equipe durante as construções de uma versão do 
software (COHN, 2011). 
Além dos papéis, temos os eventos Scrum. A Figura 2 resume o sequenciamento 
desses eventos.
Figura 2 – Fluxo do processo Scrum
Fonte: Pressman (2011, p. 96).
O backlog do produto (ou product backlog) é um artefato Scrum. Representa uma lista 
ordenada de tudo que deve ser feito no produto. Essa lista é gerenciada pelo product owner. 
Dessa lista, selecionam-se os itens que serão entregues em um incremento de software. Os 
incrementos de software são desenvolvidos em sprints.
Um sprint pode durar de duas a quatro semanas. Isso é dimensionado pela equipe 
Scrum. Durante um sprint, existem ritos que devem ser seguidos para manter o framework 
em funcionamento. São exemplos, reuniões diárias, uso do gráfico burndown, burnup ou 
similares, monitoramento do sprint e outros. 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
8
4 Extreme programming
Mais conhecido por XP, é talvez o método ágil mais utilizado. O termo XP foi cunhado 
por Beck em 2000 e se baseou em uma coletânea de práticas reconhecidamente boas, como 
o desenvolvimento iterativo (por meio de iterações ou fases), ou a programação em pares. 
Esse conjunto de práticas foi resumido em Sommerville (2011) e reproduzido no Quadro 1:
Quadro 1 – Princípios do extreme programming
Princípio ou prática Descrição
Planejamento incremental
Requisitos são gravados em cartões de história e as histórias 
incluídas em um release são determinadas pelo tempo disponível 
e prioridade. Os desenvolvedores dividem as histórias em tarefas.
Pequenos releases
Inicia-se pelo desenvolvimento de um conjunto mínimo de 
funcionalidades úteis, que fornecem valor ao negócio. Os 
próximos releases vão gradualmente adicionando novas 
funcionalidades ao primeiro release.
Projeto simples Cada projeto é executado para atender àsnecessidades atuais.
Desenvolvimento baseado 
em testes
Utiliza-se um framework inicial de testes automatizados para 
escrever os testes de uma nova funcionalidade, antes que a 
funcionalidade seja implementada.
Refatoração Todos os desenvolvedores devem refatorar continuamente para manter o código simples e de fácil manutenção.
Programação em pares Os desenvolvedores trabalham em pares, verificando o trabalho do outro e prestando apoio para um bom trabalho.
Propriedade coletiva
Os desenvolvedores trabalham em todas as áreas do sistema 
de modo a não desenvolver ilhas de expertise. Todos os 
desenvolvedores assumem a responsabilidade por todo o código.
Integração contínua
Assim que o trabalho em uma tarefa é concluído, ele é integrado 
ao sistema como um todo. Após a integração, os testes unitários 
são repetidos.
Ritmo sustentável Grandes quantidades de horas-extras não são aceitáveis, pois geram muitas vezes um trabalho de baixa qualidade.
Cliente no local É necessário um representante usuário final disponível a todo o tempo para a equipe XP. O cliente é membro da equipe. 
Fonte: Adaptado de Sommerville (2011, p. 45).
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
9
O XP apresenta uma abordagem extrema para o desenvolvimento incremental. Novas 
versões do software podem ser disponibilizadas no mesmo dia e um release é entregue ao 
cliente em períodos curtos de tempo.
Prazos não são desrespeitados. Se houver problemas na entrega do release, o cliente é 
consultado e a funcionalidade problemática pode ser retirada do release.
Aspectos como a programação em pares ou a refatoração podem ser polêmicos para 
alguns profissionais de engenharia de software, pois existem controvérsias sobre a 
produtividade quando se utilizam essas práticas. Segundo Sommerville (2011) foram 
realizados estudos sobre produtividade de programadores para avaliar a eficiência 
dessa prática.
No estudo realizado por Cockburn e Williams (2001) apud Sommerville 
(2011), usando estudantes voluntários, a conclusão do estudo foi que a 
produtividade na programação em pares foi comparável a duas pessoas que 
trabalham de forma independente. Entretanto, na pesquisa realizada por 
Arisholm et al (2007) apud Sommerville (2011) e Parrish et al (2004) apud 
Sommerville (2011), como programadores experientes, não foi possível replicar 
o resultado, e sim, perceberam uma perda significativa de produtividade em 
comparação com dois programadores trabalhando sozinhos. Ainda segundo os 
autores, apesar do benefício na qualidade, não havia compensação na perda 
de produtividade. 
Entretanto, os entusiastas do XP garantem que a programação em pares permite 
agilidade, porque muitas vezes o desenvolvedor demora muito tempo para encontrar uma 
solução de código e, quando se trabalha em pares, duas cabeças pensam melhor do que uma. 
Já a refatoração é uma prática interessante, pois quando você revê um código, pode pensar 
em estratégias mais simples para resolver o mesmo problema, além de fazer uso de padrões 
de refatoração para melhorar um código-fonte, como os propostos por Fowler (2004).
Considerações finais
Como vimos, o movimento ágil trouxe novas abordagens para o desenvolvimento de 
software, de modo a propiciar desenvolvimento mais rápido e de qualidade.
Vimos dois métodos que atualmente são expoentes no mercado de desenvolvimento 
de software: Scrum e XP. Contudo, existem outros métodos que podem ser consultados para 
estudos mais aprofundados como: 
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
10
• Feature Driven Development;
• Crystal Clear;
• Adaptive Software Development.
Ou ainda, existem experiências que misturam partes de um ou outro método ágil, 
propondo métodos híbridos. Também vamos encontrar nessa área práticas da indústria 
de manufatura que foram inseridas no contexto do desenvolvimento de software, como o 
Kanban e o Lean. 
Portanto, este é um tema muito envolvente e apresenta diversas possibilidades de 
investigação para os interessados no assunto. O mercado vem gradativamente se inserindo 
nessas práticas, sempre na expectativa de buscar melhores métodos para desenvolver 
softwares no prazo, sem ultrapassar o orçamento e com qualidade. 
Referências
BECK, K. Embracing Change with Extreme Programming. IEEE Computer, v. 32. N. 10, 1999. P. 
70-78.
COHN, M. Desenvolvimento de software com Scrum: aplicando métodos ágeis com sucesso. 
Porto Alegre: Editora Bookman, 2011.
FOWLER, M. Refatoração: aperfeiçoando projeto de código existente. Porto Alegre: Editora 
Bookman, 2004.
MANIFESTO ÁGIL. Disponível em: <http://agilemanifesto.org>. Acesso em: 06 dez. 2014.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. Porto Alegre: Mcgraw 
Hill - Artmed, 2011.
SCHAWABER, K.; SUTHERLAND, J. The Scrum Guide. Disponível em: <http://www.scrumguides.
org/>. Acesso em: 06 dez. 2014.
SCHAWABER, K.; BEEDLE, M. Agile software development with Scrum. Englewood Cliffs, N. J.: 
Prentice Hall, 2001.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson, 2011.
STAPLETON, J. DSDM: Dynamic system development method. Harlow, Reino Unido: Addison 
- Wesley, 1997.
Engenharia de Software
Aula 05
Gerência de projetos
Objetivos Específicos
• Entender as principais tarefas de um gerente de projetos no ciclo de vida 
de desenvolvimento e os fatores que influenciam o trabalho em equipe, 
comunicação, organização e composição da mesma.
Temas
1 Gerência de projetos de software
2 Planejamento de projeto
Considerações finais
Referências
Professora
Ana Cláudia Rossi
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
2
Introdução
Vamos começar a nossa aula de Gerência de Projetos!
O objetivo desta aula é conhecer a área de gerenciamento de projetos de software, suas 
principais atividades e importância para o sucesso de um projeto de software.
Portanto, ao terminar esta aula você deverá ser capaz de:
• conhecer as principais tarefas de um gerente de projeto;
• compreender o conceito de risco e ter noções de como realizar o gerenciamento 
de riscos;
• entender os fatores que influenciam a motivação das equipes de software e o impacto 
que isso tem nos projetos de software;
• entender os aspectos envolvidos no trabalho em equipe;
• conhecer algumas noções de planejamento de projeto de software.
Vamos começar discutindo o que é gerência de projetos, suas atividades e importância.
1 Gerência de projetos de software
Um dos trabalhos do engenheiro de software é participar de projetos de desenvolvimento 
de um produto de software ou de um serviço. Mas o que é um projeto?
Segundo o PMBOK (2014), projeto é um esforço temporário empreendido para criar um 
produto, serviço ou resultado exclusivo. Neste contexto, o termo temporário significa que o 
projeto tem uma duração definida. Ou seja, um projeto tem início e fim bem definidos. Ainda 
de acordo com a definição, é importante ressaltar também que o termo esforço, no contexto 
de projeto, refere-se aos recursos humanos e materiais empregados, durante o período, que 
são utilizados para o desenvolvimento do produto ou serviço e atingir o resultado. Esses 
recursos devem ser coordenados e administrados, para que os objetivos e resultados 
esperados pelo projeto sejam atingidos dentro do orçamento e no tempo previsto. 
As características de um projeto são as seguintes (PMBOK, 2014):
• objetivo: o projeto tem um objetivo definido no início e que deve ser alcançado 
ao final;
• ciclo de vida definido: o projeto tem um ciclo de vida que envolve as seguintes 
etapas: iniciação, planejamento, execução, controle e encerramento;
• complexidade: um projeto pode existir em diferentes níveis de complexidade, do 
mais simples ao mais complexo;
Senac São Paulo - Todos os Direitos Reservados
Engenharia de Software
3
• singular: produz um produto, serviço ou resultado único;
• riscos: a execução de um projeto envolve riscos que podem prejudicar o atingimento 
de

Outros materiais