Buscar

Engenharia de Software: Conceitos e Processos

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

2013
EngEnharia dE Software
Prof. Djone Kochanski
Copyright © UNIASSELVI 2013
Elaboração:
Prof. Djone Kochanski
Revisão, Diagramação e Produção:
Centro Universitário Leonardo da Vinci – UNIASSELVI
Ficha catalográfica elaborada na fonte pela Biblioteca Dante Alighieri 
UNIASSELVI – Indaial.
K766e
Kochanski, Djone
Engenharia de software / Djone Kochanski. Indaial : Uniasselvi, 2013.
 
172 p. : il
 
ISBN 978-85-7830-753-0
 1. Engenharia de software. I. Centro Universitário Leonardo da Vinci.
COD 005.102
Impresso por:
III
aprEsEntação
Caro(a) acadêmico(a)! Seja bem-vindo à disciplina de Engenharia de 
Software!
Você está iniciando os estudos de uma das disciplinas mais 
fascinantes da área de Computação/Informática. Ela é especial em função da 
amplitude de abrangência, quando software está em pauta. Nesta disciplina, 
você estudará importantes conceitos relacionados a aspectos técnicos da 
construção de software, bem como os aspectos gerenciais que envolvem o 
processo de software. 
O conteúdo deste Caderno de Estudos foi elaborado de forma a permitir 
uma visão adequada dos principais elementos relacionados à Engenharia de 
Software. Este conteúdo servirá como base para aprofundamentos nas demais 
subáreas deste campo de conhecimento. 
O campo da Engenharia de Software é bastante amplo, englobando, 
desde aspectos técnicos como arquitetura de software até métodos para gestão 
de pessoas em projetos. É uma importante área de conhecimento que poderá 
servir de fonte de informação para outras áreas, mesmo que não estejam 
relacionadas ao desenvolvimento de software.
Este Caderno de Estudos está dividido em três unidades. Iniciaremos 
nossos estudos a partir de uma perspectiva histórica da Engenharia de 
Software, complementando com importantes conceitos da área. Em seguida, 
estudaremos conceitos-chave relativos a Projetos de Software, uma das 
subáreas mais importantes da Engenharia de Software. Por fim, estudaremos 
importantes conceitos relativos à qualidade de software.
Desejo a você uma excelente experiência nos estudos dos conteúdos 
dessa disciplina!
Prof. Djone Kochanski
IV
Você já me conhece das outras disciplinas? Não? É calouro? Enfim, tanto 
para você que está chegando agora à UNIASSELVI quanto para você que já é veterano, há 
novidades em nosso material.
Na Educação a Distância, o livro impresso, entregue a todos os acadêmicos desde 2005, é 
o material base da disciplina. A partir de 2017, nossos livros estão de visual novo, com um 
formato mais prático, que cabe na bolsa e facilita a leitura. 
O conteúdo continua na íntegra, mas a estrutura interna foi aperfeiçoada com nova 
diagramação no texto, aproveitando ao máximo o espaço da página, o que também 
contribui para diminuir a extração de árvores para produção de folhas de papel, por exemplo.
Assim, a UNIASSELVI, preocupando-se com o impacto de nossas ações sobre o ambiente, 
apresenta também este livro no formato digital. Assim, você, acadêmico, tem a possibilidade 
de estudá-lo com versatilidade nas telas do celular, tablet ou computador. 
 
Eu mesmo, UNI, ganhei um novo layout, você me verá frequentemente e surgirei para 
apresentar dicas de vídeos e outras fontes de conhecimento que complementam o assunto 
em questão. 
Todos esses ajustes foram pensados a partir de relatos que recebemos nas pesquisas 
institucionais sobre os materiais impressos, para que você, nossa maior prioridade, possa 
continuar seus estudos com um material de qualidade.
Aproveito o momento para convidá-lo para um bate-papo sobre o Exame Nacional de 
Desempenho de Estudantes – ENADE. 
 
Bons estudos!
NOTA
V
VI
VII
UNIDADE 1 – PROCESSOS E REQUISITOS DE SOFTWARE ...................................................... 1
TÓPICO 1 – FUNDAMENTOS DE ENGENHARIA DE SOFTWARE ........................................... 3
1 INTRODUÇÃO ..................................................................................................................................... 3
2 PERSPECTIVA HISTÓRICA DA ENGENHARIA DE SOFTWARE ........................................... 4
3 ENGENHARIA DE SOFTWARE ........................................................................................................ 11
RESUMO DO TÓPICO 1........................................................................................................................ 17
AUTOATIVIDADE ................................................................................................................................. 18
TÓPICO 2 – PROCESSOS DE SOFTWARE ........................................................................................ 19
1 INTRODUÇÃO ..................................................................................................................................... 19
2 CICLOS DE VIDA DE SOFTWARE .................................................................................................. 22
3 MODELO CLÁSSICO .......................................................................................................................... 24
4 MODELO ESPIRAL ............................................................................................................................. 27
5 MODELO PROTOTIPAÇÃO ............................................................................................................. 29
6 MODELO RAD ..................................................................................................................................... 31
7 MODELO DE QUARTA GERAÇÃO ................................................................................................ 32
8 MODELO ALTERNATIVO ................................................................................................................. 35
RESUMO DO TÓPICO 2........................................................................................................................ 38
AUTOATIVIDADE ................................................................................................................................. 39
TÓPICO 3 – REQUISITOS DE SOFTWARE ....................................................................................... 41
1 INTRODUÇÃO ..................................................................................................................................... 41
2 REQUISITOS ......................................................................................................................................... 42
LEITURA COMPLEMENTAR ............................................................................................................... 52
RESUMO DO TÓPICO 3........................................................................................................................ 62
AUTOATIVIDADE ................................................................................................................................. 63
UNIDADE 2 – DESIGN E DESENVOLVIMENTO DE SOFTWARE ............................................. 65
TÓPICO 1 – DESIGN DE SOFTWARE ................................................................................................. 67
1 INTRODUÇÃO ..................................................................................................................................... 67
2 TIPOS DE DESIGN ............................................................................................................................... 68
3 ARQUITETURA DE SOFTWARE ...................................................................................................... 70
4 MODULARIDADE ............................................................................................................................... 72
5 DESIGN DE INTERFACES COM O USUÁRIO ............................................................................. 74
6 INDEPENDÊNCIA DOS COMPONENTES ................................................................................... 76
RESUMO DO TÓPICO 1........................................................................................................................78
AUTOATIVIDADE ................................................................................................................................. 79
TÓPICO 2 – DESENVOLVIMENTO DE SOFTWARE ...................................................................... 81
1 INTRODUÇÃO ..................................................................................................................................... 81
2 PADRÕES DE CODIFICAÇÃO ......................................................................................................... 81
3 NOTAÇÕES ........................................................................................................................................... 87
sumário
VIII
4 ESTILOS DE Indentação ..................................................................................................................... 89
RESUMO DO TÓPICO 2........................................................................................................................ 97
AUTOATIVIDADE ................................................................................................................................. 98
TÓPICO 3 – GERENCIAMENTO DE PROJETOS DE SOFTWARE .............................................. 99
1 INTRODUÇÃO ..................................................................................................................................... 99
2 ABRANGÊNCIA DO GERENCIAMENTO DE PROJETOS ........................................................ 100
3 DEFINIÇÃO DE PAPÉIS E RESPONSABILIDADES ................................................................... 103
4 FUNÇÕES E RESPONSABILIDADES ............................................................................................. 103
5 GESTÃO DE PESSOAS ....................................................................................................................... 105
LEITURA COMPLEMENTAR ............................................................................................................... 112
RESUMO DO TÓPICO 3........................................................................................................................ 117
AUTOATIVIDADE ................................................................................................................................. 118
UNIDADE 3 – QUALIDADE DE SOFTWARE ................................................................................... 119
TÓPICO 1 – INTRODUÇÃO À QUALIDADE DE SOFTWARE .................................................... 121
1 INTRODUÇÃO ..................................................................................................................................... 121
2 FUNDAMENTOS DE QUALIDADE DE SOFTWARE .................................................................. 122
3 MELHORIA DA QUALIDADE ......................................................................................................... 129
RESUMO DO TÓPICO 1........................................................................................................................ 137
AUTOATIVIDADE ................................................................................................................................. 138
TÓPICO 2 – MEDIÇÃO DE SOFTWARE ............................................................................................ 139
1 INTRODUÇÃO ..................................................................................................................................... 139
2 MODELO GQM .................................................................................................................................... 140
3 MODELO PSM ...................................................................................................................................... 159
LEITURA COMPLEMENTAR ............................................................................................................... 162
RESUMO DO TÓPICO 2........................................................................................................................ 165
AUTOATIVIDADE ................................................................................................................................. 166
REFERÊNCIAS ......................................................................................................................................... 167
1
UNIDADE 1
PROCESSOS E REQUISITOS DE 
SOFTWARE
OBJETIVOS DE APRENDIZAGEM
PLANO DE ESTUDOS
Esta unidade tem por objetivos:
• compreender os conceitos fundamentais da Engenharia de Software;
• entender a área de Engenharia de Software de maneira sistêmica;
• compreender os principais processos de software;
• conhecer a importância de requisitos de software.
Esta unidade está dividida em três tópicos, sendo que ao final de cada um 
deles, você encontrará atividades que lhe auxiliarão na apropriação de 
conhecimentos.
TÓPICO 1 – FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
TÓPICO 2 – PROCESSOS DE SOFTWARE
TÓPICO 3 – REQUISITOS DE SOFTWARE
2
3
TÓPICO 1
UNIDADE 1
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
1 INTRODUÇÃO
Quando se fala em Engenharia de Software, logo se imagina que, por se 
tratar de uma engenharia, tenha um cunho técnico relativamente alto. Porém, 
embora as questões técnicas precisem ser consideradas, elas são apenas meios 
para atingir os objetivos. Para a Engenharia de Software o computador, a teoria da 
computação e até mesmo os algoritmos, são apenas ferramentas necessárias para 
prover a solução para um problema (PFLEEGER, 2004).
A Engenharia de Software tem como enfoque lidar com os aspectos de 
produção de software em todas as fases do seu ciclo de vida (SOMMERVILLE, 
2003). O ciclo de vida de um software inicia no momento em que são registradas 
as primeiras especificações de funcionamento, até o momento em que o software 
deixa de ser utilizado pelos seus usuários. Isso significa que tipicamente um 
software possui um ciclo de vida longo, se considerarmos o esforço necessário 
para a produção de um software.
Por outro lado, a Engenharia de Software pode ser vista como um framework 
para o planejamento, conceituação e projeto de software (PETERS; PEDRYCS, 
2001). Na abordagem de framework pode-se considerar o conjunto de aspectos 
construtivos, seus desafios e considerações sobre produzir tudo ou adquirir 
partes e fazer com que as mesmas funcionem de maneira harmoniosa.
Acrescentaria ainda a estas, a abordagem de gestão das pessoas que 
realizam os processos de software. A produção de software é altamente dependente 
de pessoas e seus talentos e habilidades, logo, também é tarefa da Engenharia de 
Software a gestão adequada desse importante componente. “A adição de recursos 
humanos a um projeto de software atrasado irá atrasá-lo ainda mais”. (BROOKS, 
2009, p. 24). Considerando que a afirmação de Brooks é verdadeira, incorporar 
novos elementos à equipe ou substituir componentes desta, pode comprometer 
severamente o resultado final de um projeto de software.
O fato é que, independente da abordagem que se utilize, a Engenharia de 
Software lida com desafios constantemente. Produzir algo que ninguém sabe o 
que e como será, de forma que não se pode demonstrar de maneira precisa. Isso 
é no mínimo um trabalho a ser respeitado.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
4
2 PERSPECTIVA HISTÓRICA DA ENGENHARIA DE SOFTWARE
Ao iniciarmos os estudos de uma nova área de conhecimento, uma das 
primeiras dúvidas que temos é sobre sua origem e evolução que a trouxe ser o que 
é nos dias atuais. Refletindo sobre a origem da área de Engenharia de Software, 
pode-se iniciar a partir de seu nascimento formal que ocorreu no início da década 
de 1970 ou buscarmos raízes mais profundas lá no século XIX.
Almeida (2002) nos ensina que em 1843, Lady Ada, uma condessa 
considerada gênio na área da matemática trabalhou com Charles Babbage no 
desenvolvimento da máquina analítica, tratando dos conceitos relacionados às 
instruções que deveriam ser executadas.Na época, este conjunto de instruções 
era conhecido como sub-rotina. Nascia então o conceito das instruções de 
sequência, seleção e repetição. Estes conceitos podem ser considerados as raízes 
mais profundas do que conhecemos atualmente por software.
FIGURA 1 – MÁQUINA ANALÍTICA DE CHARLES BABBAGE
FONTE: O autor
A máquina proposta do Babbage foi concebida em uma época que 
a tecnologia disponível era apenas dispositivos mecânicos. Por conta dessa 
limitação tecnológica não foi possível concluir o projeto que ficou inacabado. 
Independente disso, os conceitos de Babbage e Ada foi de grande valia para a 
evolução tecnológica para chegarmos ao estágio atual.
A partir destes conceitos fundamentais, foram construídos os alicerces do 
funcionamento dos softwares. A primeira aplicação de processamento de dados 
em grande escala foi realizada no final do século XIX. Na oportunidade foram 
tabulados os dados do censo americano de 1890 através de máquinas concebidas 
por Herman Hollerith. Nestas máquinas os dados eram representados sob a 
forma de perfurações devidamente posicionadas em fita de papel.
TÓPICO 1 | FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
5
Neste momento da história não se diferenciava com clareza o que 
era hardware e o que era software, pois os equipamentos eram basicamente 
eletromecânicos. Na realidade o termo software foi criado apenas na década de 1940 
como forma de diferenciar a parte lógica da física de um sistema computacional.
FIGURA 2 – MÁQUINA TABULADORA DE HOLLERITH
FONTE: O autor
O terceiro grande marco fundamental para a área é plantado por Alan 
Turing no ano de 1937 ao propor um modelo de ações a serem realizadas por um 
tipo especial de máquina. “A Máquina Universal de Turing é capaz de calcular 
qualquer coisa que seja calculável”. (FOROUZAN; MOSHARRAF, 2011, p. 4). 
A partir daqui o software deixa de ser apenas um conceito e passa a 
ter utilidade em uma máquina que o executa de forma autônoma. É aí que os 
desafios enfrentados atualmente pela Engenharia de Software tem sua origem. 
Embora neste momento o conceito de Engenharia de Software estivesse longe de 
ser formalizado.
O momento da criação do conceito de máquina universal é muito especial 
para a área de computação/informática, pois é uma espécie de “big bang“ a partir 
do qual surge um grande ciclo evolutivo de tecnologia. Turing defendia a teoria 
de que “todo problema desde que expresso de maneira lógica apropriada, poderia 
sempre ser resolvido”. (STRATHERN, 2000, p. 53).
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
6
FIGURA 3 – ALAN MATHISON TURING
FONTE: Disponível em: <www.computerhistory.org>. Acesso em: 
10 mar. 2012.
Seguindo a corrente de evolução, foram criados os computadores 
eletromecânicos e posteriormente os eletrônicos. Um dos mais conhecidos é o 
ENIAC (Eletronic Numeric Integrator and Calculator), criado pelos Professores John 
William Mauchly e John Pesper Eckert Jr. da Universidade da Pensilvânia. O 
ENIAC entrou em operação no ano de 1946 (ALMEIDA, 2002). Naquele momento 
da história, os computadores executavam instruções com base em painéis de 
chaveamento.
Em seguida passou-se a realizar codificação com instruções de máquina, 
até que surgem as linguagens de programação. Uma das primeiras linguagens 
de programação consideradas na época de alto nível foi criada por John Mauchly 
em 1949 e denominada de Short Order Code. Na década de 1950, as principais 
linguagens de programação em uso eram APT, FORTRAN e FLOW-MATIC.
Logo surgiu a necessidade de uma linguagem de programação simples 
e padronizada para aplicações comerciais. Cria-se então a partir da linguagem 
Flow-Matic de Grace Murray Hopper o COBOL (Common Business Oriented 
Language). Grace Hopper compôs a equipe que desenvolveu o COBOL e por sua 
contribuição à humanidade, merece nosso respeito e admiração.
As linguagens de programação permitiram o desenvolvimento de softwares 
cada vez mais sofisticados e com quantidade crescente de funcionalidades. À 
medida que a complexidade e quantidade de funcionalidades crescia, também 
era crescente o volume de problemas enfrentados com a qualidade do software 
que estava sendo produzido.
TÓPICO 1 | FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
7
FIGURA 4 – GRACE MURRAY HOPPER
FONTE: Disponível em: <www.computerhistory.org>. Acesso em: 10 
mar. 2012.
A situação da indústria de software ao final da década de 1960 estava 
complicada. Os usuários e desenvolvedores enfrentavam diversos problemas 
relacionados ao processo de desenvolvimento. Estes problemas estavam 
intimamente ligados a como os softwares eram construídos, implantados e mantidos, 
bem como ao crescimento das demandas e problemas comportamentais. A esta 
situação denominou-se crise de software (MAFFEO, 1992). A crise de software é 
ocasionada por um conjunto de problemas que podem abranger (REZENDE, 
1997):
• como softwares são construídos;
• como softwares são implantados, sejam novos ou substituindo softwares 
anteriores;
• como softwares são mantidos, dada a crescente demanda e complexidade;
• como as necessidades e demandas dos usuários são atendidas;
• como as questões comportamentais, políticas, culturais e filosóficas são 
tratadas.
A crise de software é reconhecida no momento que uma aplicação de 
software não satisfaz as necessidades das pessoas para as quais foi projetado. Estas 
pessoas podem abranger não apenas os usuários do software, mas também todas 
as demais pessoas afetadas pelas consequências geradas pela não realização 
adequada da funcionalidade para a qual o software foi projetado. Alguns exemplos 
de afetados são os desenvolvedores do software, os usuários diretos e indiretos, os 
administradores de negócios, entre outros.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
8
Os principais fatores que levam à ocorrência da crise de software são 
aqueles diretamente relacionados à maneira como as aplicações de software 
são construídas, implantadas e mantidas. Além disso, a crise de software pode 
ocorrer quando as demandas de necessidades não são atendidas, seja por baixa 
produtividade, seja pela alta demanda de soluções de software para atender às 
necessidades de negócio. As questões comportamentais relacionadas ao processo 
de software também podem levar ao que se denomina crise de software.
Ao examinarmos algumas possíveis causas da crise de software podemos 
nos deparar com diversas. A cada dia que passa é crescente a necessidade de 
soluções de software mais eficientes. Além disso, a velocidade que os requisitos 
dos usuários mudam é tipicamente maior do que a equipe de desenvolvimento 
é capaz de atender. Pfleeger (2004, p. 111) nos ensina que “um requisito é uma 
característica do sistema ou a descrição de algo que o sistema é capaz de realizar, 
para atingir os seus objetivos”.
A velocidade de mudança nos requisitos, muitas vezes, vem de origens 
não controladas, como mudanças de legislação, normas ou processos aos quais as 
empresas estejam subordinadas. Neste caso podemos compreender que a crise de 
software pode ocorrer por fatores internos e teoricamente controláveis, bem como 
externos, ou seja, sobre os quais não exercemos qualquer controle.
É possível ainda que a complexidade da mudança imposta seja alta, 
requerendo maior tempo para sua realização. Muitos projetos de software nascem 
com prazos definidos antes mesmo de se ter os principais requisitos levantados. 
Isto definitivamente é algo que pode comprometer significativamente o processo 
de desenvolvimento. Um projeto de software iniciado com requisitos incompletos 
fatalmente terá um design deficitário.
Caro acadêmico! Neste Caderno de Estudos, o termo design é utilizado para 
designar a fase do ciclo de vida de software em que é realizada a definição de como o produto 
(software) será construído do ponto de vista técnico (arquitetura, dados e procedimentos). 
Esta fase também é tipicamente chamada de projeto (tradução do termo em inglês), porém 
na Engenharia de Software também utilizamos o termo projetopara denominar o processo 
de gestão de todas as atividades que envolvem o desenvolvimento do produto. Então, 
quando falarmos em design estaremos nos referindo à fase do ciclo de vida de software e 
quando falarmos em projeto estaremos nos referindo ao processo de gestão da construção 
do produto.
UNI
TÓPICO 1 | FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
9
Para agravar ainda mais o cenário, a inexistência de métricas adequadas 
para obtenção de medidas de software antes de seu desenvolvimento, é a gota 
d’água final ou a “pá de cal” sobre a equipe de desenvolvimento. As métricas 
de software são um capítulo a parte nessa discussão, pois a questão é bem mais 
complexa do que se possa imaginar. Voltaremos ao assunto mais tarde.
O que pode ser observado em parcela significativa de equipes de 
desenvolvimento de software é a adoção de práticas absurdamente obsoletas. Aliado 
a estas práticas, tipicamente se encontra uma grande desigualdade na distribuição 
do tempo dedicado às fases do ciclo de vida de software. É muito comum reduzir 
requisitos em função da falta de tempo ou eliminar atividades do processo de 
desenvolvimento com o objetivo de reduzir o tempo total do processo.
As atividades que tipicamente são mais sacrificadas são a análise, design e 
testes. Um agravante é a inexistência da definição de um padrão de processo a ser 
seguido. Padrões desenvolvidos e publicados não faltam, porém a adoção destes 
é que não se observa em muitas equipes de desenvolvimento. A inexistência de 
padrão de processo de software multiplica a dificuldade de realizar manutenção.
Muitos ainda subestimam a atividade de desenvolvimento de software, 
acreditando ser simples e fácil iniciar um software sem a definição de uma estrutura 
e arquitetura adequadas e evoluir este software até ele se tornar um produto com 
um conjunto significativo de funcionalidades. Desenvolver software não é uma 
atividade simples, logo, requisitos, arquitetura e estruturas de programas e 
dados não podem ser colocadas em segundo plano. Se as bases do novo software 
desenvolvido não forem sólidas, todo o restante do software desenvolvido será 
igualmente frágil.
Encontra-se também a ausência de valorização da fase de análise, 
na qual os requisitos são obtidos e especificados. Muitos dos softwares que há 
em uso mundo afora não precisariam existir se as necessidades tivessem sido 
devidamente entendidas e o processo de trabalho adequadamente analisado e 
modelado. Muitas vezes implementamos softwares para solucionarmos problemas 
que sequer existem.
Caro acadêmico! Neste Caderno de Estudos nos referiremos às pessoas 
que atuam no desenvolvimento de software como profissionais de software. Esta forma 
foi escolhida pelo fato de que no Brasil chamamos de engenheiros de software apenas 
profissionais formados em cursos de graduação em Engenharia de Software. Se você 
aprofundar seus conhecimentos com literaturas clássicas da área provavelmente encontrará 
o termos “engenheiro de software” sendo largamente utilizado. Isto se dá em função do 
profissional de software ser chamado de “Software Engineer” nos EUA, de onde vem boa 
parte das grandes contribuições científicas da área.
UNI
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
10
Além destes fatores podemos encontrar também um abismo de 
concordância entre os pesquisadores da área de Engenharia de Software e os 
profissionais que estão diariamente envolvidos com o processo de software. 
Pesquisadores acreditam que os profissionais não dão importância para o 
conteúdo de suas pesquisas e os profissionais acreditam que os resultados de 
pesquisas não podem ser aplicados à suas realidades. 
Quanto maior for o abismo entre as teorias de pesquisadores e os 
profissionais de software, maiores serão as dificuldades enfrentadas e maior 
será a crise resultante. É importante que profissionais de software empreendam 
iniciativas de adoção de modelos formais. 
Para o sucesso nesta adoção é recomendado que esta seja feita de maneira 
evolutiva e controlada. Apenas após comprovados os resultados com a adoção de 
uma parcela do processo é que se deveria seguir com novas iniciativas.
Devido à natureza intangível do software, há a tendência de entendimento 
de que só há algo realizado se houver código construído. Isso de fato pode ser 
uma verdade em algumas metodologias, porém não se pode ignorar que, por 
exemplo, casos de uso, diagramas de classes, diagramas E-R etc., também são 
artefatos valiosos e representam entregas do processo.
Ao ler este conteúdo em seu Caderno de Estudos, uma das perguntas que 
pode lhe ocorrer é: Com toda evolução tecnológica ocorrida desde a década de 
1970, será que ainda enfrentamos estes problemas? A resposta é sim. Na verdade, 
atualmente estamos enfrentando uma crise ainda maior, pois a natureza dos 
problemas com os quais lidamos também evoluiu e a complexidade dos processos 
cresceu.
Com o crescimento da complexidade dos problemas de negócio a 
serem resolvidos, cresceu também a necessidade de crescimento da equipe de 
desenvolvimento. O crescimento da equipe de desenvolvimento adiciona força 
de trabalho, porém traz desafios gerenciais. A partir daí começa a entrar em cena 
a importância dos aspectos gerenciais da Engenharia de Software. O maior clássico 
sobre este assunto “O Mítico Homem-Mês” está na leitura complementar desta 
unidade. Não deixe de ler!
TÓPICO 1 | FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
11
FIGURA 5 – LIVRO: O MÍTICO HOMEM-MÊS
FONTE: O autor
O livro O Mítico Homem-Mês rendeu a Frederick Books Jr. diversas premiações, 
dentre elas a Medalha Nacional de Tecnologia americana no ano de 1985 e o Turing Award no 
ano de 1999. O Turing Award é uma honraria concedida anualmente pela ACM (Association 
for Computing Machinery) para uma pessoa que tenha realizado contribuições significativas 
à área da computação. Este prêmio é conhecido como “Prêmio Nobel da Computação” e 
leva o nome de Turing pelas contribuições de Alan Turing para a ciência da computação 
moderna.
UNI
Embora tenham se passado várias décadas desde que a existência de 
uma crise de software tenha sido reconhecida, ainda hoje enfrentamos muitos dos 
problemas identificados lá no final da década de 1960. Ainda hoje enfrentamos 
problemas no processo de análise, no processo de construção, na forma como 
o software é implantado e mantido e nas consequências geradas aos usuários 
finais. As atuais exigências de disponibilidade de funções executadas por software 
requerem que os profissionais de software melhorem continuamente os processos 
de Engenharia de Software. Mas afinal o que é Engenharia de Software? Vejamos 
em detalhes no tópico a seguir.
3 ENGENHARIA DE SOFTWARE
No final da década de 1960 nasceu o termo Engenharia de Software. Fritz 
Bauer (Friedrich Ludwig Bauer) foi quem definiu em 1968 o termo pela primeira 
vez como sendo “o estabelecimento e uso de sólidos princípios de engenharia 
para que se possa obter economicamente um software que seja confiável e que 
funcione eficientemente em máquinas reais” (PRESSMAN, 1995).
http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o
http://pt.wikipedia.org/wiki/Pr%C3%AAmio_Nobel
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
12
A definição de Bauer de fato abrange o que pode ser reconhecido como 
importante no que conhecemos por Engenharia de Software. Por sólidos princípios 
de engenharia podemos entender os processos necessários para a construção de 
software de forma adequada. O software deve ser confiável e também funcionar de 
maneira eficiente em nossos equipamentos.
FIGURA 6 – FRIEDRICH LUDWIG BAUER
FONTE: Disponível em: <www.computerhope.com>. Acesso em: 
10 mar. 2013.
O objetivo da Engenharia de Software é prover soluções de software aplicáveis 
às necessidades para as quais foi concebido, construídos de forma produtiva e 
entregando alto grau de qualidade. O engenheiro de software ao aplicar de forma 
adequada os métodos, ferramentas e procedimentos da Engenharia de Software 
torna-se um criador de soluçõesque atendam as necessidades do mundo real.
No início da década de 1990 se apregoava que no futuro próximo seria tão 
simples desenvolver software que programadores não seriam mais necessários. 
Diante disso, muitos estudantes da área e profissionais passaram por momentos 
de preocupação em relação a seus futuros. Alguns visionários acreditavam 
que em breve as ferramentas de desenvolvimento seriam tão sofisticadas a 
ponto de qualquer usuário poder definir sua aplicação sem a necessidade de 
programadores.
Felizmente as previsões não se confirmaram e programadores são cada 
vez mais importantes e valorizados. Porém, se considerarmos que o processo 
de software tem forte dependência de material humano poderíamos caracterizá-
lo como artesanal. Certo? Certíssimo! Por mais que tenhamos ferramentas 
modernas para auxiliar o processo de software, o elemento humano ainda é e 
deverá continuar sendo o principal pilar do processo.
TÓPICO 1 | FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
13
Porém o fato do processo de software ainda poder ser caracterizado 
como um processo artesanal não significa que ele não possa ou não deva seguir 
processos formalizados. Na realidade, é justamente por este motivo que se faz 
tão importante a adoção de melhores métodos e formalização de procedimentos.
Diante desse contexto, a Engenharia de Software é uma área que ganha 
importância a cada dia, pois a dependência humana de softwares é cada vez maior. 
Atualmente uma parcela significativa da população utiliza software com um grau 
relevante de dependência. Dependemos de softwares para nos comunicarmos, 
nos informarmos, fazermos operações bancárias, fazermos compras num 
supermercado etc. 
Nos escritórios de empresas e instituições são utilizados editores de 
textos, planilhas, softwares de apresentação, entre outros diversos softwares e 
sistemas computacionais. Nossas contas do dia a dia são controladas por sistemas 
computacionais e sem os mesmos nossa realidade seria muito diferente, pois 
estaríamos bastante limitados em relação às possibilidades atuais.
Os processos precisam ser cada vez mais eficientes e ágeis para que as 
empresas possam se manter competitivas, gerar empregos e renda para os 
colaboradores. Toda essa realidade seria significativamente diferente sem a 
existência de softwares como temos atualmente. Porém, toda essa dependência 
pode aumentar também as consequências do funcionamento inadequado destes 
softwares.
Os softwares utilizados diariamente precisam estar livres de falhas. Dado o 
grau de dependência que indistintamente temos dos softwares que utilizamos no 
dia a dia. Quaisquer falhas que venham a ocorrer podem ter sérias consequências. 
Os softwares devem estar disponíveis aos usuários e executar suas funcionalidades 
de acordo com as regras de negócios, além de atender à legislação.
Para Sommerville (2003) a Engenharia de Software está focada em todos os 
aspectos relacionados à construção de software. É uma disciplina de engenharia 
cujo objetivo é tratar das questões ligadas ao processo de software. A abrangência 
é bastante ampla, iniciando muito antes de haver uma especificação de software, 
indo até o último momento de utilização do referido software. Na verdade 
estamos utilizando o software como elemento base, mas a Engenharia de Software 
abrange também todos os artefatos relacionados ao processo de software, como 
documentação, gestão e muitos outros.
Contribuindo na explicação do que é Engenharia de Software, Pfleeger 
(2004) argumenta que software abrange muito mais nosso mundo que efetivamente 
imaginamos, tornando nossas vidas mais confortáveis, eficientes e efetivas. Há 
aplicações de software sendo utilizadas nas mais diversas situações do cotidiano 
que nos afetam direta ou indiretamente. Por este motivo, é crescente a importância 
da existência de softwares que atendam às necessidades para as quais eles foram 
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
14
projetados e construídos. A abordagem que se pretende dar é a de que “as boas 
práticas de engenharia de software devem assegurar que o software tenha uma 
contribuição positiva em nossas vidas”. (PFLEEGER, 2004, p. 1).
De forma mais objetiva, a mensagem que Pfleeger (2004) pretende passar 
é que a Engenharia de Software é um meio para solucionar problemas de forma 
adequada. Isso pode implicar inclusive a decisão de que eventualmente a melhor 
solução seja não implementar um software para realização da atividade em questão. 
Devemos empregar as ferramentas, técnicas e procedimentos da Engenharia de 
Software para a solução de problemas e/ou necessidades.
Quando nos referimos à Engenharia de Software há a tendência de se 
pensar apenas nos aspectos tecnológicos, porém é importante observar que 
compreende também aspectos gerenciais. Na realidade, se considerarmos o 
aspecto que representa os maiores desafios, decididamente os aspectos gerenciais 
são os que mais consomem energias dos profissionais de software.
Em relação à questão gerencial Maffeo (1992) argumenta sabiamente que 
o elemento básico do processo de desenvolvimento de software são as pessoas. 
Diante da evolução tecnológica que vivemos, reconhecer que os seres humanos 
são o elemento chave para o sucesso pode causar um choque de paradigmas para 
muitas pessoas. Porém, de fato o elemento humano é fundamental no processo 
de construção de softwares. E efetivamente isso se comprova cada vez mais nas 
equipes de desenvolvimento mundo afora.
Embora tenhamos disponíveis diversas ferramentas sofisticadas para 
apoiar o processo de software a Engenharia de Software ainda tem forte dependência 
do fator humano. O desenvolvimento de software pode ser considerado como 
uma forma sistemática de fazer arte. E o que confere beleza a esta arte é quanto 
ela auxilia na solução de problemas impostos.
Pelo fato do processo de software ter forte dependência do fator humano, 
a Engenharia de Software lida também com a questão da produtividade. As 
questões de produtividade envolvem medição de software, estimativas de esforço, 
definição de indicadores, desenvolvimento de cronograma, coleta de dados de 
produtividade, análise dos dados de produtividade, entre outras atividades. 
O processo requer planejamento, organização, controle, além dos aspectos de 
motivação e liderança.
Toda a preocupação com a melhoria dos processos de Engenharia de 
Software tem como finalidade a produção e entrega de software de qualidade. 
E qualidade é algo que merece especial atenção. O assunto será devidamente 
abordado na Unidade III deste Caderno de Estudos.
Pressman (1995) categoriza os elementos fundamentais da Engenharia de 
Software em três: métodos, ferramentas e procedimentos. Os métodos podem ser 
entendidos como os roteiros a serem seguidos para realização de determinada 
TÓPICO 1 | FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
15
atividade. Exemplos são as atividades de planejamento, realização de estimativas, 
design de sistemas, definição de arquitetura de software, técnicas de programação, 
formas de realização de testes e manutenção de softwares, entre outros.
As ferramentas podem ser entendidas como o meio para realização das 
atividades. Elas servem de apoio aos métodos, permitindo que as atividades 
sejam desenvolvidas de forma mais eficiente e eficaz. Exemplos de ferramentas 
são as linguagens de programação, bancos de dados, softwares de modelagem de 
dados, softwares para modelagem de projetos, entre outros.
Os procedimentos podem ser entendidos como as ações realizadas, 
ou seja, a aplicação dos métodos e das ferramentas. Os procedimentos são as 
atividades detalhadas que são executadas para realização, por exemplo, de um 
método de planejamento apoiado por uma ferramenta de cronograma. Do ponto 
de vista técnico, a utilização adequada destes três elementos fundamentais é que 
nos permitirão obtenção de melhores resultados em processos de Engenharia de 
Software.
Em relação às ferramentas, houve um grande salto evolutivo a partir da 
década de 1990. Porvolta dessa época surgiram ferramentas de requisitos, de 
modelagem, de design, de testes e principalmente de programação. E a partir 
da metade da décade de 1990 iniciou-se de maneira mais intensa a corrida 
para o paradigma de orientação a objetos. Nos primeiros anos desse período a 
opinião dos desenvolvedores ainda estava dividida entre permanecer no modelo 
estruturado ou migrar para a orientação a objetos.
Neste período de transição o que se viu foram muitos softwares sendo 
construídos em linguagens orientadas a objetos com porções significativas 
de código idêntico ao escrito no paradigma estruturado. A migração para a 
orientação a objetos não foi tão suave e simples quanto poderia ter sido. A partir 
do início dos anos 2000 é que a orientação a objetos começou a ser utilizada de 
forma mais intensa. É certo que ainda hoje há softwares utilizando linguagens 
baseadas ou orientadas a objetos com códigos estruturados. Porém atualmente 
poucos questionam a orientação a objetos como principal paradigma.
Algo muito semelhante ocorreu com iniciativas de adotação de bancos 
de dados orientados a objetos. Houve um vai e vem de paradigmas. A principal 
causa dessas situações está relacionada à falta de uma análise prévia criteriosa 
em relação à aderência do modelo à realidade de negócio para a qual o software 
deverá ser desenvolvido. 
Da mesma forma como linguagens estruturadas não foram criadas para 
desenvolver quaisquer aplicações, as orientadas a objetos não o foram. Não seria 
a falta de aderência entre negócio e tecnologia uma das causas dos baixos níveis 
de qualidade de alguns softwares? Fica a questão para reflexão.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
16
Em relação à Engenharia de Software, Sommerville (2003) destaca alguns 
pontos-chave:
• a Engenharia de Software é uma disciplina da engenharia que se ocupa de todos 
os aspectos da produção de software;
• os produtos de software consistem de programas desenvolvidos e da 
documentação associada. Os atributos essenciais dos produtos são a facilidade 
de manutenção, a confiança, a eficiência e a facilidade de uso;
• o processo de software consiste em atividades envolvidas no desenvolvimento 
de produtos de software. As atividades básicas são a especificação, o 
desenvolvimento, a validação e a evolução do software;
• métodos são os meios organizados de produzir software. Eles incluem sugestões 
sobre o processo a ser seguido, as notações a serem utilizadas, as regras que 
regem as descrições de sistema produzidas e as diretrizes do projeto;
• as ferramentas CASE são sistemas de software projetados para dar apoio às 
atividades de rotina no processo de software, tais como editar diagramas de 
projeto, verificar a consistência de diagramas e manter o controle dos testes de 
programa que são realizados;
• os engenheiros de software têm responsabilidades para com a engenharia como 
profissão e a sociedade. Eles não devem se preocupar exclusivamente com 
questões técnicas.
17
Caro(a) acadêmico(a)! Nesse tópico, você estudou que:
• A Engenharia de Software é uma área que passou a ser formalizada a partir 
do início da década de 1970. Até este momento, as ferramentas, métodos e 
procedimentos utilizados não estavam formalmente subordinados a uma área 
específica. Cada desenvolvedor utilizava as ferramentas mais úteis aos seus 
processos de trabalho.
• A Engenharia de Software surgiu a partir da necessidade de formalização e 
aperfeiçoamento dos métodos de construção de software. A principal motivação 
foram as consequências geradas a partir de processos de software inadequados. 
Esta consequência foi denominada de crise de software entre o final da década 
de 1960 e início da década de 1970.
• A partir do momento em que a Engenharia de Software passou a ser reconhecida 
como uma subárea da Computação/Informática diversos pesquisadores 
desenvolveram métodos e técnicas para aperfeiçoar as práticas diárias 
no processo de desenvolvimento de software. Tais subsídios permitiram 
compartilhamento de experiências e métodos para melhorar a qualidade do 
software produzido.
• A Engenharia de Software veio para auxiliar os profissionais de software nas 
dificuldades encontradas no processo de produção de soluções de software 
para atender à crescente necessidade de soluções. Isso tudo sem deixar de 
considerar os aspectos técnicos e aspectos gerenciais.
• A produção de software é uma atividade que depende fortemente da habilidade 
humana. Diante disso, o fator humano é um importante quesito a ser 
considerado e gerenciado. Tais características consideram a necessidade de 
desenvolvimento de habilidades interpessoais, trabalho em equipe, motivação, 
liderança, entre outros.
RESUMO DO TÓPICO 1
18
Caro(a) acadêmico(a)! Como forma de fixar o conteúdo estudado realize 
a autoatividade proposta a seguir:
1 Aponte dois problemas que podem levar à crise de software.
2 Quando podemos reconhecer que há uma crise de software?
3 Quais são as atividade do desenvolvimento de software que são tipicamente 
mais sacrificadas?
4 Quais são os elementos fundamentais da Engenharia de Software?
AUTOATIVIDADE
19
TÓPICO 2
PROCESSOS DE SOFTWARE
UNIDADE 1
1 INTRODUÇÃO
Numa atividade de engenharia é necessário que se defina o método de 
construção que será adotado. No momento em que se decide construir um software 
para atender a uma necessidade de negócio ou entregar alguma ferramenta, 
recurso ou opção de entretenimento é importante que se decida qual o processo 
que será seguido.
A criação de um software é uma atividade intelectual de alto nível de 
complexidade. E é justamente por se tratar de uma atividade complexa que é 
fundamental que se saiba quais são as etapas que comporão tal processo. A adoção 
de processos bem definidos melhora a visibilidade da construção de software.
Aparentemente todo e qualquer software pode ser construído sem que 
um roteiro pré-definido seja seguido. Isso pode ser verdade se você estiver 
desenvolvendo um software por interesse pessoal nas horas vagas e para passar 
o tempo (hobby). Neste caso o seu compromisso está tipicamente limitado à sua 
satisfação em construir o software.
No desenvolvimento de software por hobby a necessidade de refazer uma 
parte do trabalho pode representar apenas mais algumas horas dedicadas a um 
feito que lhe proporcionará satisfação. Já no desenvolvimento profissional de 
software o cenário pode ser radicalmente diferente. Até mesmo o desenvolvimento 
de uma PoC (Proof of Concept – Prova de Conceito) que requeira muito retrabalho 
poderá se tornar algo bastante indesejado.
No desenvolvimento profissional de software é altamente desejável que 
se siga um processo que reduza, dentro do possível, o desperdício de tempo 
e maximize os resultados obtidos. Os resultados esperados são tipicamente 
funcionalidades de software com alta qualidade.
Dada à importância do processo de desenvolvimento de software é 
imperativo que se estabeleça e siga um modelo que possibilite obter software de 
alta qualidade. Deverá haver equilíbrio entre otimização do tempo e realização 
das etapas críticas do processo. O segredo do universo está no equilíbrio. 
Em relação ao processo de desenvolvimento de software, Brooks (2009) 
sugere que se explorem as opções existentes no mercado para evitar construir 
algo que pode ser comprado. Ele indica a utilização de prototipação para o 
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
20
estabelecimento de requisitos de software. Crescer os softwares organicamente 
através da adição de funções à medida que são executados, usados e testados. 
Identificar e desenvolver os grandes profissionais da geração em ascensão.
Todo produto de software é construído com base em um modelo de 
processo, também conhecido como paradigma de desenvolvimento ou ainda 
ciclo de vida. Um ciclo de vida de software compreende um conjunto de etapas 
envolvendo métodos, ferramentas e procedimentos para a obtenção do produto 
de software desejado (PRESSMAN, 1995).O ciclo de vida de software é um processo de engenharia que notadamente 
requer que algumas etapas sejam seguidas em determinada ordem para que se 
possa obter um produto final com o grau de qualidade desejado. De acordo com 
Pfleeger (2004, p. 36), todo processo tem as seguintes características:
• o processo prescreve todas as principais atividades;
• o processo gera produtos intermediários e finais, com base nos recursos e 
restrições existentes;
• o processo pode ser composto por uma hierarquia de processos onde cada 
subprocesso possa ter seu modelo;
• cada atividade do processo possui critérios de entrada e saída, permitindo 
saber quando ele começa e quando termina;
• as atividades são organizadas sequencialmente, de forma que a ordem entre as 
atividades seja clara;
• todo processo possui um conjunto de diretrizes que ajudam a explicar os 
objetivos de cada atividade.
Não é necessário seguir na íntegra um modelo de ciclo de vida proposto 
por algum pesquisador da área de Engenharia de Software. O ciclo de vida 
adotado pode ser adaptado de algum modelo anteriormente proposto por algum 
pesquisador ou totalmente personalizado de acordo com as necessidades e 
realidade da equipe e natureza do software a ser desenvolvido. Um ciclo de vida 
de software também pode ser construído através de melhores práticas de diversos 
modelos amplamente conhecidos.
De uma forma geral, qualquer processo de software ou ciclo de vida possui 
três fases que são comuns a qualquer abordagem adotada. Pfleeger (2004) diz que 
estas três fases são definição, desenvolvimento e manutenção. 
De fato não há como desenvolvermos algo sem que seja definido, mesmo 
que superficialmente. O desenvolvimento é o processo principal, pois é o momento 
em que os artefatos são produzidos. Já a manutenção é a fase de maior duração 
dentro do ciclo de vida de um software, pois tipicamente ocorre até próximo de 
sua desativação.
A fase de definição está focada em descrever o que o software deverá 
fazer (PRESSMAN, 1995). É nesta fase que são definidos os requisitos funcionais 
TÓPICO 2 | PROCESSOS DE SOFTWARE
21
e não funcionais. Os requisitos funcionais estão relacionados à descrição das 
funcionalidades que o software deverá atender. Já os requisitos não funcionais 
estão relacionados aos recursos tecnológicos que deverão ser atendidos.
Para facilitar o entendimento dos requisitos não funcionais vejamos 
alguns exemplos: um requisito não funcional pode ser a necessidade de utilizar 
o software em ambiente local, em rede local e/ou numa rede de longa distância, se 
o software deverá ser utilizado em diferentes Sistemas Operacionais, se o software 
deverá utilizar determinado banco de dados, entre outros requisitos que não 
estejam relacionados às regras de negócio que deverão ser atendidas.
Na fase de desenvolvimento ocorre a definição de como o software 
deverá ser desenvolvido (PRESSMAN, 1995). A fase de desenvolvimento pode 
compreender diversas subfases, dentre as quais as mais comuns são definição 
das estruturas de dados, modelagem de banco de dados, arquitetura, design, 
programação e testes. Boa parte dos ciclos de desenvolvimento utiliza algumas 
destas subfases como fases, conforme a importância no processo.
Na fase de manutenção são realizadas as mudanças necessárias no 
software (PRESSMAN, 1995). Estas mudanças podem ser exigidas por diversos 
motivos que podem ser categorizadas como corretivas, adaptativas, perfectivas e 
evolutivas (SWEBOK, 2004). 
As manutenções corretivas tipicamente reativas e visam eliminar falhas 
ou erros encontrados após a entrega do software para utilização. Este tipo de 
manutenção é pouco desejada e deve representar um pequeno percentual do 
esforço da equipe de desenvolvimento. 
As manutenções adaptativas são menos comuns de ocorrer. Elas visam, 
por exemplo, a mudança ou atualização de plataforma tecnológica. Ela também 
pode ser realizada para manter o software em uso num ambiente diferente ou num 
ambiente em mudança. Este tipo de manutenção também não é desejável, pois 
pode representar grande volume de esforço para sua realização.
As atividades realizadas para tornar o software mais performático 
ou melhorar sua estrutura de construção de forma a facilitar o processo de 
manutenção é definido como manutenção perfectiva. Este tipo de manutenção 
pode ser necessário nas primeiras vesões do software para aperfeiçoamento no 
desempenho de determinadas rotinas. Também pode ocorrer no momento que se 
identifica a necessidade de reescrever partes do código para deixa-lo melhor para 
realizar manutenções.
Já as manutenções evolutivas visam promover melhorias em requisitos 
funcionais e/ou não funcionais. A manutenção evolutiva é realizada para evitar 
que determinadas falhas, tipicamente de especificação, se tornem falhas efetivas, 
corrigindo-as antecipadamente. Esta manutenção deve entregar funcionalidades 
de alto valor para o negócio.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
22
A fase de manutenção pode ser vista sob duas óticas: nobre e não nobre. A 
manutenção é considerada nobre quando as alterações que estão sendo realizadas 
são motivadas por alterações nos requisitos ou necessidades dos usuários. Ela é 
considerada não nobre quando alterações precisam ser promovidas para corrigir 
falhas, tipicamente conhecidas como bugs.
Uma das grandes dúvidas que surge em relação aos tipos de manutenção 
é a distribuição ideal de esforço em cada uma delas. Esta distribuição pode variar 
com base em diversos fatores técnicos e ambientais. Porém uma distribuição 
desejável é 20% do esforço dedicado a manutenções corretivas, adaptativas 
e perfectivas e 80% em manutenções evolutivas. Destes 80% de manutenção 
evolutiva, seria interessante dedicar 30% para projetos de inovação e 50% com 
inclusão, alteração e exclusão de funcionalidades.
É certo que esta não é uma meta facilmente atingível, porém serve 
como indicador e norteador a ser observado e perseguido. Podemos comparar 
grosseiramente à qualidade total, que é uma meta ousada e que requer constante 
esforço e trabalho em melhoria contínua para aproximação à mesma.
2 CICLOS DE VIDA DE SOFTWARE
Existem diversos modelos de processo de software propostos. Alguns 
apresentam superficialmente a concepção do modelo e outros detalham 
exaustivamente as fases e subfases do processo. É importante que cada equipe de 
desenvolvimento se inspire no modelo de processo que esteja mais aderente à sua 
realidade, customize e promova melhorias contínuas neste modelo. Pfleeger (2004) 
apresenta algumas razões para a realização dessa modelagem de processo:
• melhora o entendimento do processo para a equipe de desenvolvimento;
• permite a melhoria do processo pela equipe envolvida;
• o modelo reflete os objetivos do desenvolvimento de software;
• proporciona visibilidade sobre necessidades de adequação em função da 
natureza do projeto.
Pfleeger (2004, p. 38) descreve ainda que “todo processo de desenvolvimento 
de software tem como entrada os requisitos do sistema e como saída um produto 
fornecido”.
Todo software possui um ciclo de vida através do qual ele é ou será 
construído, logo, compreender os aspectos dos principais modelos de ciclo de 
vida pode auxiliar na adoção de um dos modelos. Também servirá de importante 
embasamento teórico para a construção de um ciclo de vida mais adequado à 
realidade e necessidade da organização. Os ciclos de vida de software podem ser 
categorizados como, linear, incremental ou iterativo. 
TÓPICO 2 | PROCESSOS DE SOFTWARE
23
2 CICLOS DE VIDA DE SOFTWARE
No modelo linear, o software será entregue com todas suas funcionalidades 
em apenas uma fase. Este ciclo de vida é mais simples de entender, pois segue o 
fluxo natural do desenvolvimento de qualquer outro tipo de produto. Este ciclo 
de vida entra na fase de manutenção quando todas as funcionalidades definidas 
estiverem concluídas e entregues.
Foi a primeira categoria de ciclos de vida descrita de maneira formal, 
justamente pelofato de seguir um fluxo mais natural e compreensível. Ele pode 
ser adotado na construção de qualquer software, porém vem sendo cada vez 
menos utilizado pelo fato do tempo de entrega ser tipicamente longo.
No modelo incremental uma versão básica é disponibilizada ao final 
do primeiro ciclo e nos ciclos seguintes novas funcionalidades são agregadas 
até que se tenha o produto completo. Este modelo pode ser utilizado de forma 
independente ou em conjunto com o iterativo.
Já no modelo iterativo uma versão básica de boa parte das funcionalidades é 
disponibilizada no primeiro ciclo e funções mais aperfeiçoadas são disponibilizadas 
em ciclos posteriores. A cada ciclo são realizados aperfeiçoamentos nas 
funcionalidades até que todas as funcionalidades estejam completas.
Para cada uma destas categorias de ciclos de vida de software há um ou 
mais modelos formais disponíveis para adoção. Entre os modelos de ciclo de vida 
de software mais conhecidos está o clássico, também conhecido como modelo 
cascata (waterfall), espiral e prototipação. Além deste, há os modelos RAD, 
modelo de quarta geração ou técnicas de quarta geração, modelo em V, modelo 
transformacional, modelo evolucionário, entre outros.
Independente do ciclo de vida que seja adotado é muito importante que 
se tenha clareza do que deve ser realizado em cada fase do referido ciclo de vida. 
Por exemplo, na fase de análise é realizada a determinação do que o software 
deverá fazer. E na fase de design é realizada a determinação de como o software 
será construído. 
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
24
FIGURA 7 – INFLUÊNCIA DE CADA FASE DO CICLO DE VIDA NOS CUSTOS DO SOFTWARE
FONTE: O autor
Cada fase de um ciclo de vida de software tem sua finalidade e importância, 
logo, tratar determinada fase sem a devida atenção pode ser nocivo à saúde do 
software que será construído. O resultado típico que se observa é software com 
baixa qualidade.
A falta de valorização das fases de análise e design tipicamente geram sérias 
consequências no processo de manutenção. Não é incomum vermos softwares 
entrando em manutenção antes mesmo de serem concluídos. Se analisarmos 
a distribuição de tempo investido em cada fase do ciclo de vida poderemos 
observar que a manutenção é a mais longa e tipicamente a que mais consome 
recursos (humanos e financeiros).
3 MODELO CLÁSSICO
O ciclo de vida clássico, também muito conhecido como modelo cascata 
(waterfall), é uma abordagem sequencial sistemática do desenvolvimento de 
software. Este ciclo de vida foi modelado com base no ciclo da engenharia 
convencional (PRESSMAN, 1995). O conjunto de fases que o compõe pode variar 
conforme a necessidade da equipe em questão.
 
O ciclo de vida clássico foi proposto por Winston W. Royce no ano de 1970 
como um conjunto de estágios a serem seguidos para a obtenção de um produto 
de software. Posteriormente diversas variações do modelo foram propostas. Cada 
uma com o objetivo de eliminar fragilidades ou promover adaptações para 
melhorar a utilização do modelo.
TÓPICO 2 | PROCESSOS DE SOFTWARE
25
Royce (1970) propôs o modelo clássico com as fases de requisitos de 
sistema, requisitos de software, análise, design de programa, codificação, teste e 
manutenção. O ciclo de vida clássico tem como característica marcante o fato 
de todas as fases de desenvolvimento ter momentos de início e término bem 
definidos, ou seja, uma fase só inicia se a anterior estiver concluída.
FIGURA 8 – CICLO DE VIDA CLÁSSICO
FONTE: Royce (1970)
Na fase de requisito de sistemas são estabelecidos os requisitos para todos 
os elementos do sistema. Nesta fase são coletados requisitos em nível de sistemas 
ou alto nível sem aprofundamento em análise ou design.
Os requisitos necessários ao software são coletados na fase de requisitos 
de software. Nesta fase também é compreendido o domínio da informação, 
desempenho e interfaces necessárias. O artefato resultante é um conjunto de 
requisitos devidamente documentados.
 
A fase de análise compreende as atividades de análise do sistema no 
contexto da aplicação e análise das integrações com os demais sistemas. Nesta 
fase é intensificada a coleta de requisitos em níveis de detalhes mais específicos. 
É importante que o analista compreenda o domínio de informações necessárias 
ao software, permitindo detalhar as funções que o mesmo deve desempenhar. 
Tipicamente o artefato gerado nesta fase é a documentação dos requisitos que 
será utilizada nas fases seguintes do ciclo de desenvolvimento.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
26
O design de programa ou simplesmente design é uma fase que compreende 
a definição das estruturas de dados, arquitetura de software, decisão sobre detalhes 
procedimentais e caracterização de interfaces (PRESSMAN, 1995). Esta fase 
também deve gerar artefatos de documentação. As definições realizadas nesta 
fase são vitais para o processo de construção e manutenção do futuro software, 
pois uma vez definida a arquitetura do software a sua forma de construção estará 
apoiada nesta arquitetura.
Embora tipicamente se acredite que a maior dificuldade em criar uma nova 
geração de software esteja na linguagem ou ambiente de programação, na realidade os 
maiores desafios poderão estar relacionados às questões arquiteturais.
UNI
A fase de codificação é destinada à transcrição do design para uma 
linguagem de programação. O objetivo é realizar a programação do que foi 
definido nas fases de análise e design. Esta fase é amplamente beneficiada em 
termos de esforço na maioria dos projetos. Porém ela pode ser reduzida caso nas 
fases anteriores os artefatos gerados tenham a riqueza e consistência necessárias.
Nos testes é verificado se o produto está atendendo aos requisitos 
estabelecidos e também se o produto está livre de falhas. E por último, na fase de 
operação que é tipicamente referenciada como fase de manutenção, as eventuais 
falhas identificadas são corrigidas e novas funcionalidades são agregadas ao 
produto.
O modelo clássico tem como potencialidade a visibilidade da fase em 
que o projeto se encontra. O que também favorece o modelo é a necessidade de 
conclusão de uma fase para iniciar a seguinte. Ao seguir tal premissa do modelo, 
podemos nos beneficiar da existência de artefatos completos para subsidiar a fase 
seguinte.
Neste modelo pode ser interessante adotar também uma metodologia 
de processo de passagem de portões (stage-gate process). A ideia básica é realizar 
um processo de validação dos artefatos produzidos na fase para início da fase 
seguinte. Uma forma prática de implementar pode ser através de uma revisão 
por pares dos artefatos gerados.
O que conspira contra o modelo clássico é que geralmente é difícil poder 
seguir um fluxo sequencial no desenvolvimento de software. Outra dificuldade é 
conseguir que o usuário detalhe todas as suas necessidades no início do projeto. 
O que é relativamente natural, pois na medida em que o projeto avança e os 
TÓPICO 2 | PROCESSOS DE SOFTWARE
27
requisitos são transformados em funcionalidades de software, novas possibilidades 
e funcionalidades poderão ser percebidas. Ameaça o uso do modelo também, o 
fato de que o usuário só terá algo para utilizar quando todo o processo estiver 
concluído.
Outros autores destacam diferentes fases do modelo clássico. Por 
exemplo, Sommerville (2003) destaca as fases de definição de requisitos, projeto 
de sistemas e de software, implementação e teste de unidades, integração e teste 
de sistemas e operação e manutenção. Já Pfleeger (2004) descreve as fases de 
análise de requisitos, projeto do sistema, projeto do programa, codificação, teste 
de unidades e de integração, teste do sistema, teste de aceitação e operação e 
manutenção.
Neste caso não cabe discutir quem está certo ou não. O que importa é que 
cada autor chama a atenção para as fases que são mais relevantes de acordo com 
sua experiência e realidade em termos de processos de software.
4 MODELO ESPIRAL
O modelo espiralfoi proposto por Barry Boehm no ano de 1988 como uma 
abordagem para contribuir na melhoria da situação dos processos de software da 
época. O maior diferencial está na abordagem orientada a riscos, ao invés das 
abordagens orientadas à documentação e codificação.
O ciclo de vida espiral permite acompanhar a evolução dos requisitos, 
disponibilizando-os segundo a prioridade das necessidades do usuário. Este 
modelo facilita a incorporação de novos requisitos de forma evolutiva. Ele 
combina características do ciclo de vida clássico e da prototipação.
No modelo espiral, o desenvolvimento é progressivo a cada ciclo, sendo 
que em uma ou mais fases de engenharia e protótipos podem ser desenvolvidos 
para definir melhor o problema e refinar os requisitos. A técnica de prototipação 
é utilizada como um mecanismo de redução dos riscos.
De acordo com Sommerville (2003), cada ciclo da espiral é dividido em 
quatro setores:
• Definição de objetivos: são definidos os objetivos para a fase, identificadas as 
restrições, preparado um plano de gerenciamento detalhado, identificados os 
riscos e planejadas estratégias para tratamento dos riscos identificados.
• Avaliação e redução de riscos: para cada risco identificado é realizada uma 
análise detalhada e estabelecidos planos para tratamento dos riscos de forma a 
reduzir sua probabilidade e impacto.
• Desenvolvimento e validação: com base nos riscos identificados uma estratégia 
de desenvolvimento é adotada para reduzir a probabilidade de ocorrência do 
risco.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
28
• Planejamento: é realizada uma revisão do projeto e decidido pela sua 
continuidade ou não do próximo ciclo. Havendo a decisão de continuar, os 
planos para a próxima fase são estabelecidos.
Uma consideração importante sobre este modelo é que um risco pode 
ser simplesmente algum evento que se ocorrer pode resultar em problemas para 
o projeto. Estes eventos podem representar problemas de performance, atrasos 
em entregas do projeto, incompatibilidade de ferramentas, entre outros que 
representem algum impacto no resultado final do software. Este resultado alterado 
pode representar diversas influências sobre o software entregue.
FIGURA 9 – MODELO ESPIRAL
FONTE: Sommerville (2003)
Além da característica de avaliação dos riscos, neste modelo podem ser 
implementados ciclos com quantidade de requisitos a ponto de facilitar o controle 
do progresso. Dessa forma é possível realizar entregas de artefatos de valor em 
períodos de tempo menores, gerindo a expectativa dos usuários e realizando 
entregas de valor.
O que conspira contra o modelo espiral é a dificuldade de convencer os 
usuários das vantagens do uso do modelo evolutivo. Este modelo exige que a 
equipe de desenvolvimento tenha experiência na avaliação dos riscos. Caso um 
grande risco seja descoberto, este fato poderá inviabilizar o produto. Contribui 
também o fato de não haver um histórico suficiente de projetos desenvolvidos 
nesse modelo para que possa ser determinada sua real eficácia.
TÓPICO 2 | PROCESSOS DE SOFTWARE
29
5 MODELO PROTOTIPAÇÃO
Dentre o grande conjunto de desafios que representam os processos de 
Engenharia de Software está a dificuldade em certificar-se de que os requisitos 
definidos são efetivamente o que o usuário/cliente necessita. Para reduzir a lacuna 
de entendimento foi criada a técnica de prototipação.
A prototipação é uma técnica em que são produzidas versões iniciais 
ou modelos visuais que representam como o software ficará depois de pronto. A 
ideia dessa representação é permitir avaliar as características do software antes 
que ele seja efetivamente desenvolvido. Um modelo visual permite melhorar o 
entendimento dos requisitos que se pretende implementar no software.
No modelo de prototipação é elaborada uma representação do modelo do 
produto através de suas principais funcionalidades. O modelo permite realizar 
a validação de um conjunto de requisitos que deverão ser implementados. 
A prototipação é um modelo utilizado com grau de sucesso satisfatório, pois 
permite ao usuário compreender com mais clareza como o software ficará depois 
de pronto.
FIGURA 10 – MODELO PROTOTIPAÇÃO
FONTE: Pressman (1995)
A característica fundamental do modelo de prototipação é a representação 
do produto através de suas funcionalidades. A ideia chave deste ciclo de vida é 
a criação de um modelo para validar o conjunto de requisitos a serem atendidos.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
30
Ele pode ser entendido como uma técnica para a identificação de requisitos 
de entrada e saída por parte dos usuários, representando aspectos visíveis a ele, o 
que permite melhor entendimento daquilo que será entregue no final do projeto. 
Ele permite ainda a verificação da eficiência de determinadas rotinas ou fluxos de 
atividades.
Outra característica que pode ser de grande valia é a possibilidade de 
verificação do comportamento do software em determinado ambiente operacional. 
Em resumo, neste ciclo de vida, é realizado o desenvolvimento de um protótipo 
que permita ao usuário identificar as tarefas que deverão ser executadas pelo 
software.
O modelo de prototipação abrange as atividades de coleta e refinamento 
dos requisitos, projeto rápido, construção do protótipo, avaliação do protótipo 
pelo usuário/cliente, refinamento do protótipo e engenharia do produto.
Na fase de coleta e refinamento dos requisitos é realizada a definição 
dos objetivos globais do produto, são identificadas as exigências conhecidas e 
identificadas as necessidades de definições adicionais.
No projeto rápido é criada uma representação dos aspectos visíveis do 
produto, construído um protótipo para avaliação com o usuário/cliente e realizado 
o refinamento dos requisitos do produto que será desenvolvido.
Uma vez com as características básicas definidas pode-se partir para a 
construção do protótipo. No processo de construção do protótipo tipicamente não 
são levadas em consideração quaisquer boas práticas de construção de software, 
pois o protótipo será apenas uma representação do software a ser construído.
Tendo o protótipo pronto, este poderá ser avaliado pelo usuário/cliente. 
Em se tratando de haver necessidade de alterações, o processo segue para a fase 
de refinamento. Uma vez validado o modelo e reduzida a lacuna de entendimento 
dos requisitos, pode-se partir para a construção do produto.
Na fase de engenharia do produto é que o software representado pelo 
protótipo será construído. A ideia básica deste modelo de processos é que o 
protótipo seja descartado e o processo construtivo siga as boas práticas de 
Engenharia de Software.
Este modelo de ciclo de vida devidamente utilizado pode auxiliar 
significativamente o processo de desenvolvimento de software, reduzindo 
retrabalho e principalmente gerenciando adequadamente a expectativa dos 
usuários/clientes. No momento que o software funcional é entregue ao usuário/
cliente não deverá haver diferenças significativas entre o que foi validado em 
termos de protótipo e o software construído.
TÓPICO 2 | PROCESSOS DE SOFTWARE
31
A utilização de prototipação é recomendada por diversos autores e 
também por personalidades da área como Brooks (2009, p. 174) que sugere ”usar 
a prototipagem rápida como parte de uma iteração planejada no estabelecimento 
de requisitos de software”. 
Uma das fragilidades do ciclo de prototipação é a dificuldade do usuário/
cliente compreender que o software apresentado é apenas um modelo e não possui 
as funcionalidades que apresenta nas interfaces que ele vê. O usuário imagina 
que o protótipo é uma versão que ele poderá utilizar imediatamente e não sabe 
que o protótipo foi construído sem levar em consideração requisitos de qualidade 
e manutenibilidade. 
Em geral o que ocorre é grande pressão por parte do usuário em tornar 
o protótipo a versão de trabalho, efetuando apenas pequenos ajustes. O risco 
neste caso é de fragilizar o software pela falta de um processo de desenvolvimentoadequado.
6 MODELO RAD
Com a crescente necessidade de modelos de processos de software 
mais ágeis, no início da década de 1990, James Martin propôs o Modelo de 
Desenvolvimento Rápido de aplicações. Este modelo é conhecido como RAD 
(Rapid Application Development) e é um processo interativo e incremental que 
possui tipicamente um ciclo bastante curto.
O tempo deste ciclo pode variar de equipe para equipe, porém é 
recomendado que ele não seja superior a 90 dias. Este modelo pode ter diversas 
fases e estas variam de acordo com o autor consultado. De forma genérica, ele 
possui as fases de definição, desenvolvimento e manutenção.
FIGURA 11 – MODELO RAD
FONTE: O autor
A fase de definição é realizada a análise global do sistema, ou seja, a fase 
em que são coletados os requisitos. Nesta fase é realizado também o design que 
compreende o planejamento do processo de desenvolvimento. Além disso, são 
realizadas as validações necessárias.
Na fase de desenvolvimento é feito um desenho de interface, realizada a 
codificação e os testes de software. Esta fase é geralmente baseada em uma ou mais 
linguagens de programação.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
32
Já na fase de manutenção é realizada a evolução do software durante 
sua vida operacional. Nesta fase são realizadas modificações por alterações de 
requisitos, identificação de falhas ou alterações no ambiente do usuário.
Este modelo é recomendado para o desenvolvimento de software com 
pequena distribuição. Ele é apropriado para ambientes em que se possa fazer 
uso de componentes visuais ou classes pré-existentes como APIs (Application 
Programming Interface ou Interface de Programação de Aplicativos).
O modelo RAD pode ser eficientemente utilizado em projetos cujo escopo 
seja restrito e que o desempenho não seja requisito determinante. Também 
pode ser utilizado em projetos em que o software pode ser dividido em diversos 
módulos independentes.
Neste ponto cabe observarmos que o modelo de processo RAD não é 
adequado para qualquer tipo de software ou necessidade de aplicação. O desejo 
por modelos mais ágeis e eficientes existe desde que os primeiros softwares foram 
criados, porém a “natureza força ao equilíbrio”. Em outras palavras se quer dizer 
que não há como utilizar um modelo ágil em todas as situações. Softwares que 
requerem uma abordagem mais robusta requerem modelos de processos mais 
formais.
Para adoção de modelos mais ágeis como o RAD é recomendado que 
a plataforma de desenvolvimento privilegie a agilidade. O uso de linguagens 
de programação baseadas em componentes visuais e que tenham recursos de 
assistente de criação de aplicações é altamente recomendado em conjunto com 
este modelo.
7 MODELO DE QUARTA GERAÇÃO
À medida que as ferramentas de desenvolvimento passaram a oferecer 
novos recursos aos profissionais de software, novos modelos de processos 
também foram desenvolvidos. E o momento em que surgiram as ferramentas de 
quarta geração foi marcante para a Engenharia de Software, pois se vislumbrou 
um possível divisor de águas em relação à como softwares eram especificados e 
desenvolvidos.
Naquele momento da história acreditava-se que em pouco tempo os 
usuários poderiam criar suas aplicações de maneira simples e rápida, sem a 
necessidade do esforço gigantesco de programadores e demais profissionais 
envolvidos no processo de software. Acreditava-se vque em breve o papel dos 
profissionais de desenvolvimento de software seria extinto.
Na época, tal crença era tão forte que Edward Yourdon, um consultor na 
área de Ciência da Computação, professor universitário, defensor da programação 
estruturada e autor de diversos livros, escreveu a obra entitulada Declínio e 
Queda dos Analistas e Programadores.
TÓPICO 2 | PROCESSOS DE SOFTWARE
33
Yourdon realizou importantes contribuições para a área de Engenharia de 
Software, porém, aos olhos da maioria dos profissionais de software, nesta obra, do ano 
de 1992, ele exagerou. A comunidade de profissionais de software criticou Yourdon 
de maneira bastante dura, até que em 1996 ele escreveu uma obra para se retratar. 
A esta obra ele chamou Ressurreição e Ascenção dos Analistas e Programadores.
FIGURA 12 – LIVRO DECLÍNIO E QUEDA DOS ANALISTAS E 
PROGRAMADORES
FONTE: O autor
FIGURA 13 – LIVRO RESSURREIÇÃO E ASCENÇÃO DOS 
ANALISTAS E PROGRAMADORES
FONTE: O autor
Não foi a primeira vez e não será a última que alguém não acertou em 
suas previsões. O papel dos visionários tem grande valor para o progresso da 
tecnologia. Mesmo que as previsões não se confirmem. No ano de 1997, Yourdon 
publicou a obra Projetos Virtualmente Impossíveis. Nela são descritas diversas 
razões pelas quais os projetos se tornam virtualmente impossíveis. 
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
34
Entre estas razões destacadas estão as questões políticas, promessas e 
otimismos ingênuos em relação às entregas e à mentalidade de que programadores 
não precisam dormir. Acrescenta-se também pressão intensa provocada pela 
globalização de mercados, aparecimento de novas tecnologias e mudanças de 
legislação, além de crises inesperadas.
FIGURA 14 – LIVRO: PROJETOS VIRTUALMENTE IMPOSSÍVEIS
FONTE: O autor
Para a felicidade dos profissionais de software as previsões em relação à sua 
obsolecência profissional estavam equivocadas. O que se observa mais de vinte 
anos depois de tais previsões é que profissionais de software são cada vez mais 
importantes e valorizados. Mas vamos às características do modelo de processo 
de quarta geração. 
O modelo de quarta geração, também conhecido como técnica de quarta 
geração, é baseado na utilização de ferramentas de alto nível para especificação 
e desenvolvimento de softwares. Este modelo visa permitir ao desenvolvedor 
especificar software de uma forma que esteja próxima à linguagem natural. É uma 
técnica adequada para desenvolvimento de aplicações pequenas e intermediárias.
A técnica de quarta geração pode abranger as ferramentas de consulta 
a bancos de dados, geração de relatórios, manipulação de dados, interação e 
definição de telas, geração de códigos e capacidade gráfica de alto nível.
TÓPICO 2 | PROCESSOS DE SOFTWARE
35
FIGURA 15 – MODELO DE QUARTA GERAÇÃO
FONTE: Pressman (1995)
Este modelo de processo de software abrange as atividades de coleta de 
requisitos, estratégia de projeto, implementação usando ferramentas de quarta 
geração e testes. Na coleta de requisitos é realizado o levantamento dos requisitos 
junto ao usuário e tradução dos mesmos num protótipo operacional. Já a estratégia 
de projeto abrange o planejamento de como desenvolver o produto para garantir 
a qualidade e manutenibilidade.
Na implementação é realizada a representação dos requisitos numa 
ferramenta de desenvolvimento, resultando em geração automática de código 
e a ligação da aplicação com a estrutura de dados necessária. Os testes visam à 
verificação do produto gerado versus especificações iniciais e o desenvolvimento 
da documentação do produto gerado.
O que conspira contra o modelo de quarta geração é que cada ferramenta 
permite o desenvolvimento de produtos para domínios de aplicações muito 
específicos. Além disso, ainda não há ambientes de quarta geração que possam 
ser utilizados com igual facilidade para todas as categorias de software.
Registrem-se ainda dificuldades de utilização das ferramentas, ineficiência 
do código gerado e manutenibilidade questionável. Por estes motivos, em geral o 
uso da técnica de quarta geração é limitado ao desenvolvimento de um universo 
restrito de sistemas.
8 MODELO ALTERNATIVO
O modelo alternativo incorpora as características dos demais modelos, 
utilizando em maior grau, os processos mais adequados para a aplicação a ser 
desenvolvida. Além disso, podem-se adotar boas práticas de metodologias de 
desenvolvimento de software clássicas ou ágeis.
UNIDADE 1 | PROCESSOS E REQUISITOS DE SOFTWARE
36
Neste modelo de processo de software pode, por exemplo, ser efetuado 
o levantamento

Continue navegando