Buscar

Processo de Software I_Teorico

Prévia do material em texto

Inserir Título Aqui 
Inserir Título Aqui
Processo de Software
Conceitos Gerais de Processo de Software
Responsável pelo Conteúdo:
Prof. Me. Afonso Maria Luiz Rodrigues
Revisão Textual:
Prof. Me. Claudio Brites
Nesta unidade, trabalharemos os seguintes tópicos:
• Introdução;
• Top-down;
• Bottom-up;
• JAD (Joint Application Development);
• RAD (Rapid Aplication Development);
• Waterfall;
• Sashimi;
• Chaos Model;
• V-Model;
• Espiral;
• Wheel and Spoke Model;
• Incremental;
• Iterativo;
• Processo Unificado – RUP.
Fonte: iStock/Getty Im
ages
Objetivos
• Conceituar e descrever padrões e modelos básicos de processos;
• Perceber os pontos fortes e fracos de cada processo;
• Revisar os modelos de processos de software.
Normalmente, com a correria do dia a dia, não nos organizamos e deixamos para o 
último momento o acesso ao estudo, o que implicará o não aprofundamento no material 
trabalhado ou, ainda, a perda dos prazos para o lançamento das atividades solicitadas.
Assim, organize seus estudos de maneira que entrem na sua rotina. Por exemplo, você 
poderá escolher um dia ao longo da semana ou um determinado horário todos ou alguns 
dias e determinar como o seu “momento do estudo”.
No material de cada Unidade, há videoaulas e leituras indicadas, assim como sugestões 
de materiais complementares, elementos didáticos que ampliarão sua interpretação e 
auxiliarão o pleno entendimento dos temas abordados.
Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de 
discussão, pois estes ajudarão a verificar o quanto você absorveu do conteúdo, além de 
propiciar o contato com seus colegas e tutores, o que se apresenta como rico espaço de 
troca de ideias e aprendizagem. Bons Estudos!
Conceitos Gerais de Processo de Software
UNIDADE 
Conceitos Gerais de Processo de Software
Contextualização
Falar ou escrever sobre processo de desenvolvimento de software é tão apaixonante 
e desafiador como prever o tempo para uma estação toda. Livros e mais livros, cursos e 
vídeos, fóruns e blogs são escritos diariamente de forma incessante em todo o mundo, e 
o motivo disso tudo é muito simples: os negócios das organizações!
Não são os softwares, afirmar isso seria uma grande mentira, pois, apesar dos 
processos de desenvolvimento de software terem sua origem na necessidade de 
otimizar o tempo dos programadores, arquitetos de sistemas e analistas de forma geral, 
softwares contam com um tempo de desenvolvimento inerente à época do princípio 
do desenvolvimento dos grandes sistemas comerciais, baseados em grande porte, e que 
permitiam um conhecimento tanto do negócio quanto do problema estável.
Com o avanço dos negócios, da economia, tanto as crises quanto as oportunidades 
de negócios no mundo todo começaram a ocorrer com maior frequência, e de maneira 
muito veloz. Isso impactava profundamente nas corporações e nos negócios no mundo 
todo, e um dos grandes culpados disso acontecer cada vez mais rápido, e com maior 
frequência, foram os avanços nas telecomunicações.
Isso a ponto de, em determinado momento no século XX – no início dos anos 1970 
–, haver uma crise generalizada no desenvolvimento de softwares, que levou a área de 
tecnologia da informação a repensar a forma com que escrevia seus softwares.
Percebeu-se que a forma com que se produzia artefatos, funcionalidades e sistemas 
inteiros não era nem eficiente e nem eficaz, já que, devido à velocidade com que as 
coisas aconteciam no mundo todo, essas impactavam os negócios negativamente, pois 
simplesmente a área de desenvolvimento não estava preparada para tantas mudanças de 
escopo e de requisitos, principalmente quando isso ocorria durante a fase de codificação. 
Projetos inteiros, incluindo tempo e dinheiro, eram jogados fora, eram perdidos no mar 
de solicitações de mudanças e das não-conformidades.
Principalmente por esses motivos associados, urge a necessidade de colocar esses 
softwares cada vez mais cedo no ar, complicando em muito a vida dos analistas e 
programadores. Fora o fato – comum de fato – de que um sistema podia demorar anos 
para ser entregue e a única fase de conversa que havia com os especialistas do negócio, 
clientes e, às vezes, os usuários finais do software era no início de sua produção – ou 
seja, na coleta de requisitos e no final na fase de testes. Portanto, a possibilidade de haver 
defasagem entre o que foi projetado com os requisitos da época e o que seria entregue 
contra os requisitos futuros e necessidades de negócios era gritantemente diferente.
A forma de diminuir esse gap foi verificar o que poderia ser feito para controlar 
ou tentar eliminar esse impacto. Mesmo nos dias atuais, os programadores, analistas 
e gerentes de projeto sofrem horrores com os desafios cada vez mais crescentes por 
velocidade de entrega, precisão, qualidade, custo baixo e assertividade.
6
7
Com o tempo, os pesquisadores da área, normalmente trabalhando, ou que trabalha-
ram em grandes empresas, perceberam que o desenvolvimento de software segue ciclos 
regulares, com etapas muito bem definidas, e começaram a regulamentar, na forma de 
processos e procedimentos, essas fases e seus conteúdos. Criaram boas práticas, viram 
que boa parte desses itens era repetível, testaram, publicaram seus artigos, escreveram 
livros e evoluíram até termos hoje mais de 100 processos diferentes de se fazer software, 
para cada tipo de finalidade e indústria.
Sim, o processo de desenvolvimento de softwares para um banco pode ser bem di-
ferente de como seria para um comércio que, por sua vez, é diferente do que seria para 
os militares.
Mais do que nunca, você, analista e programador, deve estar antenado a essas 
metodologias e processos, pois o mercado de trabalho está cada vez mais dinâmico, 
exigente e buscando o salvador da pátria; embora saibamos que isso não existe.
Portanto, você deve estar preparado para essa dinâmica e suas novas regras de 
jogo nesse tabuleiro chamado mercado. Fazer a diferença conhecendo e sabendo usar 
os processos de desenvolvimento mais adequados para cada situação e software que 
a empresa, onde você atua ou atuará, irá precisar para se diferenciar no mercado e 
continuar existindo – e você fará essa diferença!
7
UNIDADE 
Conceitos Gerais de Processo de Software
Introdução
Para iniciar nossa jornada no mundo dos processos de desenvolvimento de software, 
devemos retomar o SDLC (System Development Life Cycle – o Ciclo de Vida do 
Desenvolvimento de Sistemas).
O SDLC é como um guia que utilizaremos para consulta durante a execução de um 
projeto de software e nele está o começo, meio e fim de todas as coisas e atividades 
inerentes. São um conjunto de fases ordenadas e, dessa forma, os marcos do software 
podem ser estabelecidos e seguidos – e o melhor: tanto os executores dos processos de 
desenvolvimento quanto os gerentes de projeto, preocupados com a entrega do produto 
de software, podem acompanhar e ter o controle necessário para cumprir escopo, 
prazo e orçamento.
Isso mesmo, o SDLC é um processo para criar modelos e metodologias que permi-
tem você desenvolver softwares com qualidade, atendendo às mudanças do negócio.
Você já deve ter ouvido falar ou deve até mesmo conhecer vários tipos de SDLC, pois 
eles são chamados de:
• Waterfall;
• Espiral;
• Iterativo;
• Incremental;
• Prototipagem;
• RUP;
• XT;
• SCRUM.
Esses são os mais comuns, existem muitos outros e aqui nós vamos relembrar de 
alguns e ser apresentados a outros. A ideia é que você possa ampliar seus horizontes e 
perceber a quantidade de opções que tem para usar em seu dia a dia.
Como se trata de um processo, o SDLC possui fases:
• Pesquisa e análise: estudo de viabilidade, análise de custo/benefício, quais os 
limites do sistema, os riscos envolvidos, a equipe que trabalhará no projeto, se vale 
a pena desenvolver dentro ou fora, coleta de requisitos, reuniões com as partes 
interessadas, brainstormings, gente de negócio, modelagens bpm/n, regras de 
negócios, funcionalidades etc.;
• Design:é a fase de criação de layouts, arquitetura da informação, distribuição dos 
elementos na tela, interfaces humano-computador etc.;
• Testes: planejamento, criação dos casos de testes, testes unitários, testes de regres-
são e integração, entre outros; pode envolver os usuários finais ou fábricas de testes;
• Implementação: disponibilizar para ambientes produtivos o sistema todo;
8
9
• Suporte e evolução: foco em pegar os problemas que possam ter acontecido, 
mantendo o cuidado de monitorá-los atentamente no início, visando manter a 
estabilidade e corrigir prontamente se ocorrerem bugs ou flutuações inesperadas 
no desempenho, entre outras coisas. Nessa fase, podem ser percebidas mudanças 
necessárias e também testes adicionais quando se implementam essas mudanças 
ou correções. Isso se repete até decidirem que o sistema não pode evoluir mais e, 
portanto, deve ser substituído por outro.
Operate and
maintain the 
system
Analyse user
requirements
Design the 
program
Code the 
program
Document and 
test the system
Figura 1 – Gráfico contendo as 5 fases do ciclo de vida de desenvolvimento de software
Não importa quantos subitens existam num SDLC, essas 5 fases sempre se manterão.
A importância do SDLC está na oferta de que o software será concluído dentro do 
prazo e custo estabelecidos.
Sim, claro que haverá flutuações, mas essas também estarão dentro de margens 
aceitáveis. Além disso, seguindo o processo estabelecido, a entrega do software deverá 
funcionar dentro da tecnologia usada para o projeto. Se pararmos para pensar, isso re-
presenta, entre outras coisas, em economia de custos e de tempo, que, quando colocado 
no mercado, gerará vantagens competitivas importantes para as organizações.
Além de tudo isso, um dos grandes problemas enfrentados por equipes que precisam 
manter sistemas de informação no ar, quando acontece de todos os membros do time 
de desenvolvimento do projeto terem partido da empresa ou por demissão ou por irem 
para outras empresas, é a perda da memória do projeto, porque não houve cuidado no 
desenvolvimento de documentação tanto do projeto quanto do software, principalmente 
desse último. O SDLC regulamenta isso e coloca tal ação como item essencial e, por si 
só, já aumenta as chances de sobrevida do sistema enormemente.
9
UNIDADE 
Conceitos Gerais de Processo de Software
A partir da definição do SDLC, podemos partir para as perspectivas de abordagem 
de problemas para o desenvolvimento de softwares, e elas são bem conhecidas e 
servem para praticamente qualquer problema. São elas a top-down e a bottom-up – em 
português, uma abordagem de cima para baixo e a outra, de baixo para cima.
Top-down
Permite a decomposição de um problema, no nosso caso, em partes menores, 
utilizando a técnica de decomposição, ou seja, do todo para as partes. Do sistema maior, 
resultado desejado para as partes menores em subsistemas, funcionalidades, módulos, 
rotinas etc. Conforme Santos (2005, p. 16-17), 
[...] a primeira etapa é o levantamento de requisitos, seguido pela es-
pecificação, onde é criada uma descrição detalhada do que queremos. 
Na especificação, descrevemos como o sistema se comporta, e não 
como ele é construído. O detalhamento interno do sistema começa 
a aparecer quando desenvolvemos a arquitetura, a qual resulta na es-
trutura do sistema em termos de grandes componentes. Identificamos 
nesses componentes abstratos os módulos de software e os componen-
tes específicos de hardware, componentes ainda não implementados 
são desenvolvidos como parte do projeto. Com base nestes compo-
nentes, podemos finalmente construir o sistema completo. No fim do 
projeto está integração e testes dos componentes de hardware e dos 
componentes de software, fase em que grande parte dos bugs são des-
cobertos. Para isso, temos que trabalhar fortemente no planejamento e 
numa compreensão plena do sistema que será desenvolvido. Somente 
depois podemos sair escrevendo código.
Essa abordagem foi desenvolvida pelo pessoal da IBM, pelos pesquisadores Niklaus 
Wirth e Harlan Mills, por volta do início dos anos 1970. A própria engenharia de 
software utilizou esse tipo de abordagem de forma a produzir seus artefatos e processos.
A abordagem top-down, entre outras coisas, favorecia um design mais elegante de 
aplicações. Ela também foi apropriada pelo pessoal de desenvolvimento de código con-
forme o excerto a seguir:
Na programação estruturada, ao desenvolvermos um algoritmo, temos 
como objeto um produto final – o programa. Todavia, para termos 
essa transição, passamos por várias fases, no sentido cima para baixo, 
onde cada fase é documentada, e principalmente obtida por “refina-
mento” da fase anterior, até chegarmos a um nível de detalhamento 
que permita implementar o algoritmo diretamente na linguagem de 
programação. Este é o desenvolvimento top-down (CPT, 20[--]).
10
11
Conforme a própria IBM, podemos fazer uma lista de vantagens e desvantagens 
dessa abordagem:
Tabela 1 – Top-down – prós e contras
A FAVOR
• Sua organização realiza um uso focado de recursos do aplicativo gerenciado:
• A primeira implementação se torna uma vitrine para a solução de gerenciamento de identidade;
• Quando as fases são concluídas para o aplicativo gerenciado, você programou uma implementação 
mais profunda e madura da solução de gerenciamento de identidade;
• Os recursos de operação e manutenção não são inicialmente impactados tão severamente quanto 
com a abordagem de baixo para cima.
CONTRA
• A solução fornece uma cobertura limitada nas primeiras fases;
• Uma porcentagem mínima de contas de usuário é gerenciada nas primeiras fases;
• Você pode ter que desenvolver adaptadores personalizados em uma fase inicial;
• O suporte e o negócio em geral não perceberão o benefício da solução tão rapidamente;
• O custo de implementação provavelmente será maior.
Fonte: https://goo.gl/gieaKJ
Bottom-up
Todas as rotinas de nível inferior são escritas primeiro e, em seguida, ligadas entre 
si para formar um sistema completo. A programação orientada a objetos segue essa 
abordagem – onde definimos os objetos primeiro e depois usamos padrões de design 
para conectá-los e formar uma solução completa.
Essa abordagem, entre outras coisas, nos dá implantação em fases iniciais facilitada, 
já que você está iniciando construções pequenas e funcionais, porém específicas, e há, 
com certeza, um retorno mais rápido de investimento em comparação com a abordagem 
top-down por motivos óbvios de dispêndio de tempo no planejamento (já que as fases e 
o problema vão sendo quebrados em partes cada vez menores até podermos codificar).
Dessa forma, bottom-up pode, de partida, criar um impacto maior para a organização.
Essa abordagem permite testes iniciais e detalhados, já que todos os submódulos 
são implementados de forma independente. Outro benefício dessa abordagem é que 
qualquer novo produto pode reutilizar os submódulos já implementados. 
Mas isso pode levar a complicações, ao mesmo tempo em que integra os produtos 
de software completos, pois podem estar envolvidas equipes de desenvolvimento 
inteiramente diferentes e que só estão interessadas em seus próprios módulos, não no 
produto completo.
11
UNIDADE 
Conceitos Gerais de Processo de Software
Da mesma maneira que a abordagem anterior, ela também tem seus prós e contras, 
a saber:
Tabela 2 – Bottom-up – prós e contras
A FAVOR
• Consciência dos usuários e empresas sobre o produto;
• Os benefícios são realizados nas fases iniciais;
• Você pode substituir muitos processos manuais com automação precoce;
• Sua organização amplia habilidades de gerenciamento de identidade e 
compreensão durante a primeira fase;
• Substituição facilitada de processos manuais.
CONTRA
• A estrutura organizacional estabelecida pode ter que ser alterada em uma fase 
posterior de implantação;
• Devido às mudanças imediatas nos proprietários do repositório e na população 
de usuários, o lançamento terá um impacto maior e exigirá maior cooperação;• Essa estratégia é impulsionada pela infraestrutura existente, em vez de ser 
pelos processos de negócios;
• Dependência de processos comerciais já existentes;
• Difícil gerenciar o progresso do software.
Fonte: https://goo.gl/gieaKJ
JAD (Joint Application Development)
JAD é um processo que acelera o design de software e utiliza como componente 
importante o cliente e dinâmicas de elicitação de requisitos para descrever a visão do 
negócio e desenvolver uma solução com esses atores envolvidos.
Foi uma grande novidade na época porque os requisitos eram elicitados por meio de 
reuniões e entrevistas com cada usuário, ou seja, um a um. Isso nunca gerava consenso 
de requisitos e também de objetivos, coisa que o JAD resolveu colocando praticamente 
todos os envolvidos em dinâmicas, ou na mesma página e na mesma sala.
O foco de JAD é a equipe e, portanto, o mote é consenso. É justamente esse 
consenso que permite a documentação dos requisitos de forma rica e de aceitação geral, 
tendo em vista que foi participativa e justa.
Mais uma vez aqui há o dedo da IBM, um de seus pesquisadores, Chuck Morris, já 
no final da década de 1970, elaborou uma método para juntar todos os requisitos em 
sistemas de informação com uso em diferentes bases territoriais, ou seja, extremamente 
distribuídos. Isso foi importante porque JAD ajuda muito na análise e design de software. 
12
13
Participants
Facilitator
Business Sta�
Technical Sta�
Scripted Sessions
Timeboxed
Brainstorming
Helps Forming, Storming 
and Nothing of Project Team What, Why, When, Where and How
Final Project Work Product is
Create Project Ownership, 
Commitment and Buy-In
Breaks down Them/Us
Barriers
Developed
Inspected
Approved
Business Sta�
BetterUnderstand IT Issues 
and Project Management 
Levers of Control
Also See “Workshop Breakdown 
Structure (WBS)
Workshops
Join Application
Development
(JAD)
Resolve Con�icts
Identi�es Best Practices
Quickly De�nes Requirements
Figura 2 – Mapa mental do funcionamento do processo JAD
Um bom projeto candidato ao uso de JAD deve ao menos conter as seguintes 
características:
• Ser fundamental para a continuidade e o resultado da empresa;
• Projetos de desenvolvimento de software nunca feito antes;
• Possuir muitos usuários ou grupos de usuários com papeis que cruzem outros de-
partamentos e áreas, ou seja, as famosas áreas cinzentas;
• Possuir pessoas dispostas a compartilhar e participar;
• Ser problemático, produz desentendimentos entre os atores; e possuir baixa inte-
gração com outros sistemas da empresa.
Prós e contras de usarmos JAD:
Tabela 3 – JAD – prós e contras
A FAVOR
• Acelera o design;
• Melhora a qualidade;
• Promove o trabalho em equipe com o cliente;
• Cria um design da perspectiva do cliente;
• Reduz os custos de desenvolvimento e manutenção;
• As decisões são presentes;
• A maioria dos erros é detectada nas etapas de análise e design;
• Os problemas são resolvidos rapidamente;
• Os pressupostos são documentados e compreendidos.
CONTRA
• Toma uma quantidade excessiva de tempo para o planejamento e agendamento;
• Requer investimento significativo de tempo e esforço;
• Solicita especialistas altamente treinados, o que é difícil de encontrar.
Fonte: https://goo.gl/eRBtaS
13
UNIDADE 
Conceitos Gerais de Processo de Software
RAD (Rapid Aplication Development)
RAD, em linha gerais, apareceu por volta de 1980 e foi um dos primeiros modelos 
funcionais a colocar em cheque os processos tradicionais de desenvolvimento, como o 
waterfall. Por ser mais flexível, permite a mudança, aproveitando-se por exemplo de 
prototipagem. É um modelo incremental, durante o SDLC os componentes podem ser 
desenvolvidos em paralelo, depois são integrados e estão prontos para uso.
60-90 days
Team #1
Business 
Modelling
Data
 Modelling
Data
 Modelling
Process
 Modelling
Process
 Modelling
Application
Generation
Testing &
Turnover
Testing &
Turnover
Application
Generation
Process
 Modelling
Application
Generation
Testing &
Turnover
Data
 Modelling
Business 
Modelling
Business 
Modelling
Team #2
Team #3
Figura 3 – Fases do processo de desenvolvimento RAD
O modelo RAD, de James Martin, aproveita muitas coisas do processo ESPIRAL de 
Boehm – quanto aos riscos e ao elemento cíclico. Esse método tem o mérito de ser o 
precursor dos métodos ágeis.
Possui alguns princípios fundamentais como:
• Gerar satisfação no cliente por entregas antecipadas e contínuas com valor agregado;
• A mudança e seus consequentes requisitos são aceitos e acolhidos, mesmo que as 
etapas de desenvolvimento estejam já bem avançadas;
• O software pronto para uso é entregue com frequência em semanas ao invés de anos;
• Os princípios do RAD se concentram na funcionalidade e na satisfação do usuário;
• Leva em consideração o poder do feedback dos usuários finais;
• O software em produção é a principal medida de progresso.
14
15
Vamos ver quais as vantagens e desvantagens do RAD:
Tabela 4 – RAD – prós e contras
A FAVOR
• Sinergia inerente aos requisitos do próprio meio;
• Progresso mensurável;
• Gerar rapidamente o código produtivo;
• Compartimentalização dos componentes do sistema;
• Rápido, constante feedback do Usuário;
• Integração de sistemas precoce.
CONTRA
• Requer sistemas modulares;
• Dificuldade em projetos de grande escala;
• Exige interação frequente com usuários;
• Depende de desenvolvedores especializados.
Fonte: https://goo.gl/iyLKlX
Usamos RAD quando nossa demanda de desenvolvimento de software permite 
modularização e o tempo de desenvolvimento é curto, como, por exemplo, até 4 meses 
corridos. Além disso, o time deve conhecer profundamente o negócio para ser efetivo 
no desenvolvimento, isso quer dizer também que você precisa possuir em sua equipe 
profissionais experientes em design de solução.
Waterfall
Esse processo foi o primeiro a ser desenvolvido para o desenvolvimento de softwares. 
Foi criado em 1970 pelo Dr. Winston Royce e ganhou notoriedade porque estabeleceu 
um caminho rigoroso, um processo com começo, meio e fim, para se criar software. 
Possui como componentes as seguintes fases:
• Determinação de Requisitos;
• Design;
• Implementação;
• Verificação; e
• Manutenção.
Cada um desses componentes só pode seguir para o próximo se ele estiver encerrado. 
Portanto, só se avança para o design se a etapa anterior de requisitos estiver encerrada. 
Não há concomitância e nem paralelismo.
Existe, obviamente, um engessamento aqui, que, devido à pouca participação dos 
usuários finais nas outras fases do projeto, pode gerar forte desatualização e distan-
ciamento do propósito do software, já que esses usuários ou clientes somente verão o 
resultado quando o software estiver pronto.
15
UNIDADE 
Conceitos Gerais de Processo de Software
Waterfall-Model
Project Planning
Requirements
Analysis
Design
Coding
Testing
Deployment
Figura 4 - Sequência de eventos no processo Waterfall
Todavia, como em todo processo, há vantagens e desvantagens que você precisa 
conhecer:
Tabela 5 – Prós e contras do Waterfall
A FAVOR
• Os erros de design são capturados antes de qualquer software estar escrito economizando tempo durante 
a fase de implementação;
• Excelente documentação técnica é parte dos produtos e é mais fácil para os novos programadores se 
atualizarem durante a fase de manutenção;
• A abordagem é muito estruturada e é mais fácil medir o progresso por referência a marcos 
claramente definidos;
• O custo total do projeto pode ser estimado com precisão após os requisitos terem sido definidos;
• O teste é mais fácil, pois pode ser feito por referência aos cenários definidos na especificação funcional.
CONTRA
• Os clientes geralmente terão dificuldade em indicar seus requisitos no nível abstrato de uma especificação 
funcional e só apreciarão o que é necessário quando o aplicativo for entregue;
• Torna-se muito difícil e cara a reengenharia da aplicação;
• O modelo não atende à possibilidade de mudanças de requisitosdurante o ciclo de desenvolvimento;
• Um projeto geralmente pode levar muito mais tempo para entregar do que quando desenvolvido com 
uma metodologia iterativa, como o método de desenvolvimento ágil.
Fonte: https://goo.gl/eBr8lr
Apesar de estar perdendo a força para os processos ágeis de desenvolvimento, o 
processo waterfall ainda pode ser empregado com sucesso em projetos maiores e em 
empresas que exigem em seus projetos estágios rigorosos de cumprimento de escopo e 
requisitos, bem como prazos mais extensos.
16
17
Sashimi
O processo sashimi é uma forma de organizar o processo waterfall inserindo 
superposição entre as fases. Foi criado por Peter DeGrace e a novidade da sobreposição 
de fases faz com que os requisitos não se concluam até que a arquitetura esteja evoluída, 
e assim por diante.
Requisitos
Arquitetura
Design do Módulo
Implementação
Teste do Sistema
Operação e
Manutenção
Figura 5 – O modelo sashimi
Conforme Rising (2009), sashimi é às vezes referenciado como o “processo em 
cascata com sobreposição de fases” ou “processo em cascata com feedback”. Ou seja, 
desde que há a sobreposição de fases no modelo do processo sashimi, informações do 
problema podem ser postas em execução durante fases que, normalmente, no modelo 
cascata puro, precisariam estar terminadas antes de irem para a próxima.
Rising (2009) explica: “Por exemplo, desde as fases de concepção e implementação 
se sobrepõem no modelo de sashimi, problemas de execução podem ser descobertos 
durante a fase de concepção e implementação do processo de desenvolvimento”.
Sashimi é apropriado para projetos de médio porte para os quais a comunicação 
entre fases pode ser tratada de forma improvisada.
Waterfall com prototipagem
O processo waterfall tradicional é muito rígido e tem servido cada vez menos aos 
projetos de software do tempo em que vivemos; dessa forma, foram criados alguns 
processos híbridos como, por exemplo, colocar a prototipagem para dar maior 
flexibilidade ao waterfall – lembrando que a prototipagem é usada quando o cliente não 
é muito claro sobre os requisitos do projeto.
17
UNIDADE 
Conceitos Gerais de Processo de Software
Normalmente, isso segue algumas regras:
• Um primeiro protótipo do projeto é apresentado pela primeira vez ao cliente.
• Esses protótipos são refinados e o requisito final é congelar de antemão.
• Uma comunicação estreita entre empresa e cliente é a chave para o sucesso do 
modelo de protótipo.
• É um processo que usa diferentes testes e erros antes do protótipo ser finalizado.
Validar
Veri�car
Análise
de Requisitos
Projeto do
Sistema
Design do
Sistema
Testes do
Sistema
Teste de
Aceitação Operação e 
Manutenção
Codi�cação
Prototipagem Teste de Unidade 
e Integração
Figura 6 – O modelo waterfall com prototipagem
Chaos Model
A principal regra na estratégia do caos é sempre resolver a questão mais importante pri-
meiro. Portanto, nesse processo, há uma declaração muito forte de que um projeto de de-
senvolvimento de software é claramente não linear e trata-se aqui de sistemas complexos.
Conforme Raccoon (1995),
O processo de desenvolvimento de software CHAOS combina um 
loop linear de resolução de problemas para sugerir que um projeto 
consiste de múltiplos níveis inter-relacionados de resolução de proble-
mas. O comportamento de um sistema complexo emerge do compor-
tamento combinado dos blocos de construção menores.
18
19
De acordo com o excerto do mesmo artigo, Raccon (1995) elucida que o modelo 
Chaos define uma estrutura caótica dentro dos processos de software. São muitos níveis 
de resolução de problemas em um projeto:
• Nos níveis mais altos, o desenvolvedor escreve e mantém todo o programa;
• Nos níveis superiores, os desenvolvedores escrevem e mantêm os componentes;
• Nos níveis mais baixos, os desenvolvedores escrevem e mantêm objetos e funções. 
Os desenvolvedores decidem qual função ou objeto criar, criam o objeto e, em se-
guida, testam e integram a função no software;
• Nos níveis inferiores, os desenvolvedores escrevem e mantêm linhas de código 
individuais. Os desenvolvedores primeiro decidem qual linha de código escrever ou 
editar e, a seguir, mudam a fonte usando um editor. Então eles veem se o código 
parece correto e elegante o suficiente para manter.
O SDLC, ciclo de vida do Chaos, define as frases do ciclo de vida do desenvolvimento 
de software em termos de fractais que mostram que todas as fases do ciclo de vida 
ocorrem em outras fases também, ou seja, o maior padrão se replica no menor padrão, 
e assim por diante.
Para colocar um pouco de luz sobre o caos no desenvolvimento de softwares nessa 
nova abordagem, com os atores estando inseridos dentro de um ambiente complexo, 
significa em software que os resultados serão totais, completa e absolutamente 
imprevisíveis.
Nem tanto, contudo, mas o processo ChaoS tenta unificar os melhores processos 
de desenvolvimento com as melhores técnicas de gerenciamento de projetos, formando 
idealmente uma estratégia geral superior.
O relacionamento do modelo do caos com a teoria do caos é a ideia de que as questões 
arquitetônicas em larga escala não podem ser estabilizadas sem também estabilizarem-se 
os problemas “menores” no software. Dessa forma, usando esse processo, resolver um 
problema é levá-lo a um ponto de estabilidade.
V-Model
Em linhas gerais, o modelo V nada mais é do que verificar e validar todos os artefatos 
em todas as fases. Da mesma forma que um modelo estilo Waterfall, o modelo V é 
sequencial, como num SDLC tradicional, para a execução de processos.
Cada fase deve ser concluída antes da próxima fase começar. O teste do produto está 
prevista em paralelo com uma fase de desenvolvimento correspondente, como você 
19
UNIDADE 
Conceitos Gerais de Processo de Software
pode visualizar na figura a seguir.
Análise de 
Requisitos
Projeto de 
Sistema
Design de 
Arquitetura
Design do 
Módulo
Codi�cação
Design de teste 
de aceitação
Projeto de teste 
do sistema
Teste de 
aceitação
Testes do
Sistema
Teste de
Integração
Testes 
Unitários
Design de teste 
de unidade
Design de teste 
de integração
Figura 7 – Processo de desenvolvimento de software V-Model
O modelo V é uma extensão do modelo waterfall e é baseado na associação de uma 
fase de teste para cada estágio de desenvolvimento correspondente. Isso significa que, 
para cada fase única no ciclo de desenvolvimento, há uma fase de teste diretamente 
associada. Este é um modelo altamente disciplinado e a próxima fase só começa após a 
conclusão da fase anterior.
O que há a favor e contra esse processo:
Tabela 6 – Modelo V – prós e contras
A FAVOR
• Este é um modelo altamente disciplinado e as fases são completadas uma por vez;
• Funciona bem para projetos menores onde os requisitos são muito bem compreendidos;
• Simples e fácil de entender e usar;
• Fácil de gerenciar devido à rigidez do modelo. Cada fase possui entregas específicas e um processo de revisão.
CONTRA
• Alto risco e incerteza;
• Não é um bom modelo para projetos complexos e orientados a objetos;
• Modelo pobre para projetos longos e em andamento;
• Não é adequado para os projetos onde os requisitos estão em um risco moderado a alto de mudar;
• Uma vez que um aplicativo está na fase de teste, é difícil voltar e mudar uma funcionalidade;
• Nenhum software de trabalho é produzido até o final do ciclo de vida.
Fonte: https://goo.gl/TRp6Bm
20
21
Espiral
Esse processo combina a ideia de desenvolvimento iterativo com os aspectos siste-
máticos e controlados do modelo waterfall, com ênfase elevada na análise de riscos. 
Permite versões incrementais do produto ou refinamento incremental através de cada 
iteração ao redor da espiral até o final do desenvolvimento e entrega do software. Veja 
a figura a seguir:
Cumulative Cost
Evaluate Alternatives;
Identify, Resolve Risks
Determine
Objectives,
Alternatives,
Constraints
Plan
Next Phases
Develop, Verify
Next-Level Product Boehm (1988)
Progress
Through
Steps
RiskAnalysis
Operational
Prototype
Benchmarks
Simulations Models
Prototype 2
Software 
Rqts.
Requirements
Validation
Concept of
Operation
Proto-
type 1
Prototype 3
Detailed
DesignSoftware
Product
Design
Design Validation
and Veri�cation
Code
Unit
Test
Determine
Process
Objectives,
Alternatives,
Constraints
Evaluate Process
Alternatives;
Identify, Resolve
Process Risks
Develop, Verify
Next-Level
Process Plans
Review
Commitment
Partition
Integration
and TestAcceptance 
TestImplemen-
tation
Risk Analysis
Risk Analysis
R
A
Rqts. Plan
Life Cycle
Plan
Development 
Plan
Integration 
and Test Plan
Figura 8 – Processo de desenvolvimento de software Espiral
Onde podemos usar o modelo Espiral e ele se torna especialmente útil:
• Em caso de restrição orçamentária, portanto, saber os riscos é importante para não 
estourar orçamento;
• Projetos de longo termo, com potencial de ter mudanças que impactam em valores;
• Problemas de incerteza nos requisitos, o que geralmente é o caso;
• Falta de clareza em requisitos;
• Quando apesar dos requisitos, grandes mudanças são esperadas durante o ciclo de 
desenvolvimento.
21
UNIDADE 
Conceitos Gerais de Processo de Software
Tabela 7 – Modelo Espiral – prós e contras
A FAVOR
• A alteração dos requisitos pode ser acomodada sem maiores problemas;
• Permite o uso extensivo de protótipos;
• Os requisitos podem ser capturados com mais precisão;
• Usuários veem o sistema mais cedo, e ver uma tela ou uma sequência funcional é 
muito importante para eles;
• O desenvolvimento pode ser dividido em partes menores e isso ajuda a melhorar 
o gerenciamento de riscos.
CONTRA
• A gestão é mais complexa;
• O final do projeto pode não ser conhecido no curto prazo;
• Não é adequado para projetos de pequeno ou baixo risco e pode ser caro para 
pequenos projetos;
• O processo é complexo, isso significa que gente experiente deve estar envolvida;
• Os ciclos da espiral podem continuar indefinidamente;
• Um grande número de estágios intermediários requer documentação excessiva.
Fonte: https://goo.gl/TRp6Bm
Wheel and Spoke Model
O processo wheel and spoke – “roda e raio”, se você preferir – tem como inspiração 
o processo espiral projetado trabalhar com equipes menores inicialmente. Trata-se de 
uma abordagem bottom-up que retém a maior parte dos elementos do modelo em 
espiral porque ocorre através de iterações múltiplas.
É um processo que pode ser melhor utilizado em um ambiente onde vários projetos 
possuem arquitetura comum ou conjunto de recursos que podem ser abstraídos em uma 
API (Interface de programação de aplicativos).
Cross-product
Collaboration Requirements
Product C
Product B
Pro
du
ct 
A
Product 3
Product 2
Product 1
Requirements
Figura 9 – Processo de desenvolvimento de software
22
23
Incremental
No modelo incremental, os requisitos são fracionados em várias partes. Essas partes 
passarão por desenvolvimento em sequência e ciclo após ciclo serão encerradas, como 
se fosse uma sequência waterfall – ou seja, uma cachoeira termina e começa outra, e 
assim vai até o final; cada ciclo pode representar um modulo do software entregue.
Basicamente, um ciclo de desenvolvimento abrange as fases de requisitos, design, 
implementação e teste e, dessa forma, vários ciclos são produzidos até que o software 
total seja entregue.
(Build 1)
(Build 2)
(Build 3)
Design &
Development Testing
Testing
Testing
Implemention
Implemention
Implemention
Design &
Development
Design &
DevelopmentRe
qu
ire
m
en
ts
Figura 10 – Processo de desenvolvimento de software Incremental
Esse processo como qualquer outro SDLC possui pontos forte e pontos fracos. Va-
mos conhecer alguns:
Tabela 8 – Modelo Incremental – prós e contras
A FAVOR
• Gera software de trabalho rápido e cedo durante o SDLC;
• Mais flexível e mais econômico quando precisamos realizar mudanças 
no escopo ou nos requisitos;
• É mais fácil testar e depurar durante um incremento;
• Reduz os custos iniciais de entrega;
• Mais fácil de gerenciar o risco porque as peças de risco são identificadas 
no incremento.
CONTRA
• Precisa de bom planejamento e design, portanto, de gente experiente;
• Precisa de uma definição clara e completa de todo o sistema antes que 
ele possa ser dividido e construído de forma incremental;
• O custo total acaba sendo maior que do waterfall.
Fonte: https://goo.gl/4tdb1i
Dessa forma, o processo incremental pode ser usado para desenvolver softwares cujos 
requisitos são claros e definidos e os detalhes finais podem ser inseridos tardiamente; 
mas o princípio é usar gente que conheça bem o negócio para ajudar os analistas a 
coletarem os dados de forma mais precisa. Uma coisa é certa: precisa ser um time com 
experiência para lidar com fatores como riscos, coisas novas ou novas abordagens de 
desenvolvimento em softwares que entregarão alto valor aos usuários.
23
UNIDADE 
Conceitos Gerais de Processo de Software
Iterativo
O processo iterativo não está centrado em obter logo de início uma especificação 
completa de requisitos, mas sim atuando em pequenas partes, conhecendo em peque-
nas partes, revisitando e revisando sempre, complementando com novos requisitos e 
produzindo sempre uma nova versão do software a cada iteração.
Tenha em mente que, nesse processo, cada iteração entrega um produto de software 
completo, um sistema completo, que é melhorado a cada iteração.
De maneira geral, o processo iterativo se apresenta da seguinte forma:
Iteration 1 Iteration 2 Iteration 3
Analyze
Analyze
Analyze
Analyze
Analyze
Design
Implement
Test
Analyze
Design
Implement
Test
...Iteration N
Figura 11 – Processo de desenvolvimento de software Iterativo
Algumas de suas vantagens e desvantagens são:
Tabela 9 – Modelo Iterativo – prós e contras
A FAVOR
• Podemos criar apenas um projeto de alto nível antes de começar a construir o 
produto e definir a solução de design para todo o produto;
• Projetar e construir uma versão do arcabouço do sistema;
• Evoluir o design baseado no que foi construído;
• Enquanto construímos, melhoramos o produto passo a passo;
• Rastreiam-se defeitos nos estágios iniciais;
• Obtemos feedback confiável dos usuários;
• Dedicamos menos tempo à documentação e mais tempo para a construção.
CONTRA
• Mais recursos podem ser necessários;
• Embora o custo de mudança seja menor, não é adequado mudar os requisitos;
• É necessária mais atenção de gerenciamento;
• Definir incrementos pode exigir a definição do sistema completo.
Fonte: https://goo.gl/xUdQ6h
Processo Unificado – RUP
É um processo de engenharia de Software desenvolvido originalmente por uma 
empresa chamada Rational, que foi comprada pela IBM. Sua execução gera melhoria 
24
25
continua, incrementa a produtividade da equipe, cria e dá manutenção em modelos 
eficientes para tratar as diversas categorias de projeto de software, implementa direta-
mente o uso consciente de UML (Unified Modeling Language), o que gera eficiência 
e eficácia na tradução de requisitos em artefatos, bem como a entrega de softwares de 
alta qualidade em conformidade com o que o cliente realmente deseja.
Tem embarcado em seu framework:
• Desenvolvimento Iterativo;
• Gestão de requisitos;
• Modelagem visual de sistemas utilizando UML por exemplo;
• Gestão da qualidade;
• Gestão do controle de mudanças.
GO / NO GO
Inception Elaboration Transition
Lifecycle
Objective
Commit
resources for 
colaboration
Commit
resources for 
construction
Customer
acceptance
or end-of-life
Product 
mature & 
customer 
ready
Lifecycle
Architecture
Product
Release
Initial
Operational
Capability
Construction
Figura 12 – Processo de desenvolvimento de software RUP
Os aspectos favoráveis e desfavoráveis são:
Tabela 10 – Modelo RUP – prós e contras
A FAVOR
• Feedback regular de e para as partes interessadas;
• Uso eficiente dos recursos;
• Entregar exatamente o que o cliente quer;
• Problemas são descobertos no início do seu desenvolvimento;
• Desenvolvimentoiterativo;
• Melhoria da gestão do risco.
CONTRA
• O processo pode ser muito complexo para implementar;
• Desenvolvimento pode sair do controle;
• É um processo pesado;
• É mandatório o uso de um especialista para adotar totalmente este processo.
Fonte: https://goo.gl/BKgYrU
25
UNIDADE 
Conceitos Gerais de Processo de Software
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
 Livros
The Chaos Model and the Chaos Life Cycle
LBS RACCOON. The Chaos Model and the Chaos Life Cycle. Software Engineering 
Notes, v. 20, n. 1, p. 55-66, jan. 1995. ACM Press.
 Leitura
Metodologia de Desenvolvimento de Sistemas – JAD e RAD
https://goo.gl/7YQRZC
Jim Rising – Sashimi Waterfall Software Development Process
https://goo.gl/DtvwXv
Steve Johnston – Software CHAOS
https://goo.gl/EXhT7P
Rational Unified Process – Best Practices for Software Development Teams
https://goo.gl/UeJcAi
Fases do ciclo de vida de desenvolvimento de software
https://goo.gl/0xFa7z
Estudo comparativo de metodologias de desenvolvimento de sistemas embutidos
SANTOS, Danilo Moura.
https://goo.gl/33N7SE
CPT
https://goo.gl/Tj12TY
Top-down – prós e contras
https://goo.gl/gieaKJ
Bottom-up – prós e contras
https://goo.gl/gieaKJ
Mapa mental do funcionamento do processo JAD
https://goo.gl/GAqW7V
JAD – prós e contras
https://goo.gl/eRBtaS
Fases do processo de desenvolvimento RAD
https://goo.gl/3wf2fe
26
27
RAD – prós e contras
https://goo.gl/iyLKlX
Sequência de eventos no processo Waterfall
https://goo.gl/GAqW7V
Prós e contras do Waterfall
https://goo.gl/eBr8lr
O modelo sashimi
https://goo.gl/EnfeVK
O modelo waterfall com prototipagem
https://goo.gl/images/akxYud
Processo de desenvolvimento de software V-Model
https://goo.gl/TRp6Bm
Modelo V – prós e contras
https://goo.gl/TRp6Bm
Processo de desenvolvimento de software Espiral
https://goo.gl/TRp6Bm
Modelo Espiral – prós e contras
https://goo.gl/TRp6Bm
Processo de desenvolvimento de software
https://goo.gl/aH4Ntq
Processo de desenvolvimento de software Incremental
https://goo.gl/JmhCSQ
Modelo Incremental – prós e contras
https://goo.gl/4tdb1i
Processo de desenvolvimento de software Iterativo
https://goo.gl/8MDZsp
Modelo Iterativo – prós e contras
https://goo.gl/xUdQ6h
Processo de desenvolvimento de software RUP
https://goo.gl/GAqW7V
Modelo RUP – prós e contras
https://goo.gl/BKgYrU
27
UNIDADE 
Conceitos Gerais de Processo de Software
Referências
CENTRO DE PRODUÇÕES TÉCNIAS (CPT). Lógica de programação: top-down, 
modularização, estruturas de controle, confiabilidade, manutenibilidade e Portugol. 20[--]. 
Disponível em: <https://www.cpt.com.br/cursos-informatica-desenvolvimentodesoftwares/
artigos/logica-de-programacao-top-down-modularizacao-estruturas-de-controle-
confiabilidade-manutenibilidade-e-portugol>. Acesso em: 08 jan. 2018.
FOGGETTI, C. (Org.). Gestão ágil de projetos. São Paulo, Pearson, 2015. (e-book)
PAGE-JONES, M. Fundamentos do desenho orientado a objetos com
UML. São Paulo: Makron Books, 2001. (e-book)
PFLEEGER, S. L. Engenharia de software – teoria e prática. 2. ed. São Paulo: Pearson/
Prentice Hall, 2004. (e-book)
PRESSMAN, R. S. Engenharia de software. 7. ed. Rio de Janeiro: McGraw-Hill do 
Brasil, 2011. (e-book)
SANTOS, D. M. Estudo comparativo de metodologias de desenvolvimento de 
sistemas embutidos. 2005. Disponível em: <https://projetos.inf.ufsc.br/arquivos_
projetos/projeto_433/monografia_top.pdf>. Acesso em: 08 jan. 2018.
SCHACH, S. R. Engenharia de software: os paradigmas clássicos & orientado a 
objetos. 7. ed. São Paulo: Bookman, 2009.
SHORE, J.; WARDEN, S. A arte do desenvolvimento ágil. Rio de Janeiro: Alta 
Books 2008.
SOMMERVILLE, I. Engenharia de software. 8. ed. São Paulo: Pearson, 2001. (e-book)
WAZLAWICK, R. S. Análise e design orientados a objetos para sistemas de infor-
mação: modelagem com UML, OCL e IFML. 3. ed. Rio de Janeiro: Campus, 2015.
28

Continue navegando