Escolar Documentos
Profissional Documentos
Cultura Documentos
Inserir Título
de Software
Aqui
Inserir Título Aqui
Conceitos Gerais de Processo de Software
Revisão Textual:
Prof. Me. Claudio Brites
Conceitos Gerais de Processo de Software
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!
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
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
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).
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.
8
• 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
Document and requirements
test the system
Não importa quantos subitens existam num SDLC, essas 5 fases sempre se manterão.
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
9
UNIDADE
Conceitos Gerais de Processo de Software
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.
10
Conforme a própria IBM, podemos fazer uma lista de vantagens e desvantagens
dessa abordagem:
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.
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
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:
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.
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
Business Staff
Facilitator Breaks down Them/Us
BetterUnderstand IT Issues
Participants Barriers
and Project Management
Business Staff
Levers of Control
Technical Staff
Scripted Sessions
Workshops Create Project Ownership,
Timeboxed Commitment and Buy-In
Join Application
Brainstorming
Development Developed
Quickly Defines Requirements
(JAD) Final Project Work Product is
Inspected
Resolve Conflicts
Also See “Workshop Breakdown Approved
Identifies Best Practices Structure (WBS)
13
13
UNIDADE
Conceitos Gerais de Processo de Software
Team #3
Team #2 Business
Team #1 Modelling
Business
Business Modelling
Data
Modelling Modelling
Data
Modelling Process
Modelling
Data
Modelling
Process Application
Generation
Modelling
Application
Generation Testing &
Turnover
Testing &
Turnover
60-90 days
Figura 3 – Fases do processo de desenvolvimento RAD
14
Vamos ver quais as vantagens e desvantagens do RAD:
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.
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.
15
15
UNIDADE
Conceitos Gerais de Processo de Software
Waterfall-Model
Project Planning
Requirements
Analysis
Design
Coding
Testing
Deployment
16
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
17
17
UNIDADE
Conceitos Gerais de Processo de Software
Análise Validar
de Requisitos
Projeto do Verificar
Sistema
Design do
Sistema
Codificação
Testes do
Sistema
Teste de
Aceitação Operação e
Manutenção
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.
18
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.
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.
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
19
UNIDADE
Conceitos Gerais de Processo de Software
Design de teste
Análise de de aceitação Teste de
Requisitos aceitação
Projeto de teste
Projeto de do sistema Testes do
Sistema Sistema
Design de teste
Design de de integração Teste de
Arquitetura Integração
Design de teste
Design do de unidade Testes
Módulo Unitários
Codificação
20
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
Progress
Determine Through Evaluate Alternatives;
Objectives, Steps
Identify, Resolve Risks
Alternatives,
Constraints Risk Analysis
Risk Analysis
Risk Analysis
Operational
R Proto- Prototype
Prototype 3
Commitment A type 1 Prototype 2
Review
Partition Simulations Models
Rqts. Plan
Concept of Benchmarks
Life Cycle
Plan Operation Software
Develop, Verify Rqts. Detailed
Next-Level Software Design
Process Plans Development Requirements
Plan Validation Product
Design
Code
Integration Design Validation
and Test Plan Unit
Evaluate Process and Verification Test
Alternatives;
Identify, Resolve Determine Integration
Process Risks Process Acceptance and Test
Objectives, Implemen- Test
Alternatives, tation
Constraints
Plan Develop, Verify
Next Phases Next-Level Product Boehm (1988)
21
21
UNIDADE
Conceitos Gerais de Processo de Software
É 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).
Product 2
Pr
Pro
oduct
du
ct 1
Cross-product
Requirements Requirements
Collaboration
ct A
Pro
Product B
du
du
Pro
ct C
22
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.
Design &
Requirements
Esse processo como qualquer outro SDLC possui pontos forte e pontos fracos. Va-
mos conhecer alguns:
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
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.
24
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.
GO / NO GO
25
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
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
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)
28