You are on page 1of 51

Processos de Desenvolvimento

de Software
Aula 01 - Introdução
▪ Nas primeiras décadas de uso do computador, o principal
desafio era desenvolver um hardware que reduzisse o custo
do processamento e armazenamento de dados.
▪ A complexidade dos programas era limitada pelos
recursos de hardware.

No Início...
▪ Os programas eram desenvolvidos por um pequeno grupo
de pesquisadores.
▪ Não havia método de desenvolvimento de software.
▪ As exigências e as expectativas dos usuários eram baixas,
pois não havia concorrência no mercado.

Introdução
▪ Ao longo de 50 anos, a importância do software passou por
mudanças significativas:
▪ Melhoria no desempenho dos computadores.
▪ Modificações nas arquiteturas dos computadores.
▪ Aumento significativo na memória e capacidade de
armazenamento.
▪ Grande variedade de opções de entrada e saída.

Introdução
▪ Dificuldades do desenvolvimento de software frente ao
rápido crescimento da demanda por software, da
complexidade dos problemas a serem resolvidos e da
inexistência de técnicas estabelecidas para o
desenvolvimento de sistemas que funcionassem
adequadamente ou pudessem ser validados.

Crise de
Software
▪ Baixa produtividade no desenvolvimento e alto custo.
▪ Baixa qualidade do software produzido.
▪ Custos em manutenção de software acabam superando custos
em desenvolvimento.
▪ Estimativas de prazo e custo são frequentemente imprecisas.
Crise de ▪ Manutenção de software é ameaçada por projetos ruins e falta
Software - de controle e gerência adequados.

Problemas ▪ Projetos estourando o orçamento.


▪ Projetos estourando o prazo.
▪ Projetos ingerenciáveis e código difícil de manter.
▪ Software muitas vezes não atingiam os requisitos.
▪ Erros no sistema automático de transporte de bagagens.
▪ Atraso na abertura do aeroporto com custo total estimado em
US$ 360 milhões.

▪ 86 milhões para consertar o sistema.


Denver
International
Airport
▪ Projeto da Agência Espacial Europeia que custou:
▪ 10 anos
▪ US$ 8 bilhões.
▪ Capacidade: 6 toneladas
▪ Garante supremacia europeia no espaço.
▪ Explosão 40 segundos após a decolagem.
▪ Destruição do foguete e carga avaliada em US$ 500 milhões.

Ariane 5
▪ Problema no freio.
▪ Recall para atualização do software.

Software em
Carros
▪ Datas eram armazenadas com apenas 2 dígitos para o ano.
▪ Economia de memória.

O Bug do
Milênio
▪ Softwares de sistemas: coleção de programas escritos para
servir a outros programas.
▪ Softwares de aplicação: programas isolados que resolvem
uma necessidade específica do negócio.
▪ Softwares científicos e de engenharia: aplicações voltadas
para a pesquisa científica.
Categorias de ▪ Softwares embutidos: controla as funções de um produto ou
Software sistema.
▪ Softwares para linhas de produto: capacidade específica a
ser usada por muitos clientes com o mesmo objetivo.
▪ Aplicações Web: sofisticados ambientes computacionais,
integrados a banco de dados e aplicações de negócio.
▪ Softwares para inteligência artificial: faz uso de algoritmos
não-numéricos para resolver problemas complexos.
▪ É uma área da computação voltada à especificação,
desenvolvimento, manutenção e criação de sistemas
de software, com a aplicação de tecnologias e práticas de
gerência de projetos e outras disciplinas, visando
organização, produtividade e qualidade.

Engenharia de
Software
▪ Modelagem de Negócio
▪ Engenharia de Requisitos
▪ Análise e Projeto
▪ Arquitetura de Software
Atividades da ▪ Implementação
Engenharia de ▪ Testes
Software ▪ Implantação/Distribuição
▪ Gerenciamento de Projetos
▪ Gerência de Configuração e Mudanças
▪ Manutenção
▪ O termo foi empregado pela primeira vez em 1969, pela
japonesa Hitachi, mas só começou a ficar popular no início dos
anos 90.
▪ Características:
Fábricas de ▪ Ter processos claros e depender mais deles do que das pessoas,
de forma a ter resultados mais previsíveis.
Software ▪ Aplicar conceitos da indústria em geral em ambientes de
desenvolvimento de software de forma a aumentar a
produtividade e diminuir prazos e custos.
▪ Divisão de trabalho com equipes especializadas para cada parte
do desenvolvimento de um software, que trabalham como numa
linha de produção.
▪ “A qualidade de um sistema é fortemente influenciada pela
qualidade do processo utilizado para adquiri-lo, desenvolvê-lo
e mantê-lo” SEI

Como obter
qualidade?
▪ Conjunto de tarefas ordenadas.
▪ Séries de etapas que envolvem atividades, restrições e
recursos para alcançar a saída desejada.

▪ Geralmente envolve um conjunto de ferramentas e técnicas.

Processos
▪ Conjunto de práticas realizadas para atingir um determinado
propósito; pode incluir ferramentas, métodos, materiais e/ou
pessoas.
▪ Um processo define quem está fazendo o quê, quando e como
alcançar um certo objetivo.

Processos de
Software
▪ Quando o processo envolve a elaboração de um produto,
pode ser chamado de ciclo de vida.
▪ O ciclo de vida de software descreve a vida do software desde
a concepção até a implementação, entrega, utilização e
manutenção.

Ciclo de Vida
▪ Especificação
▪ Definição das funcionalidades e restrições.
▪ Desenvolvimento
▪ Produção do software.
▪ Validação
▪ Validação do software para verificar se é o que o cliente precisa.
Atividades de ▪ Evolução
um Processo de ▪ Evolução do software para atender mudanças necessárias pelo
cliente.
Software
▪ Características das atividades:
▪ Bem definidas
▪ Com responsáveis
Atividades de ▪ Com artefatos de entrada e saída
▪ Com dependências entre as mesmas e ordem de execução
um Processo de ▪ Com “modelo de ciclo de vida”
Software
▪ Assim, um processo de software padrão é composto por:
▪ Fases/atividades (entradas e saídas)
▪ Procedimentos/métodos

Processo de ▪ Ferramentas, utilizadas para construir um produto de software


▪ Paradigmas de desenvolvimento
Software ▪ Orientado a objetos
▪ Orientado a componentes
▪ Orientado a serviços
▪ Um processo de software padrão pode ser dividido nos
seguintes subprocessos:
▪ Processos Fundamentais (Análise de Negócio, Requisitos,

Processo de Análise e Projeto, Implementação, Testes e Implantação).


▪ Processos de Apoio (Gerência de Projetos, Garantia da
Software Qualidade, Gerência de Configuração e Mudança, Medição e
Análise).
▪ Processos Organizacionais (Infraestrutura, Treinamento,
Aquisição).
▪ Cada modelo representa um processo sob determinada
perspectiva

Modelos de ▪ São bem genéricos

Processos de ▪ Podemos ver como paradigmas de processos


▪ Podem ser ampliados e adaptados
Software
▪ Não são mutuamente exclusivos, podem ser usados em
conjunto
▪ Foi o primeiro a ser adotado pelos desenvolvedores.
▪ Possui um conjunto de fases bem definidas que correspondem às
etapas do ciclo de vida do software.
▪ Não há mistura de fases: uma fase só começa quando a fase
anterior termina.
▪ Ao final de cada fase, um ou mais documentos devem ser
aprovados pela equipe de desenvolvimento.

Modelo Cascata
▪ Torna o processo de desenvolvimento estruturado.
▪ Tem uma ordem sequencial de fases.
Modelo Cascata ▪ Cada fase cai em cascata na próxima e cada fase deve estar
- Vantagens terminada antes do início da seguinte.
▪ Todas as atividades identificadas nas fases do modelo são
fundamentais e estão na ordem certa.
▪ Não fornece feedback entre as fases e não permite a
atualização ou redefinição das fases anteriores.
▪ Não suporta modificações nos requisitos.
Modelo Cascata ▪ Não permite a reutilização.
- Desvantagens ▪ É excessivamente sincronizado.
▪ Se ocorrer um atraso, todo o processo é afetado.
▪ Faz aparecer o software muito tarde.
▪ É criticado por ser rígido, monolítico e linear.
▪ Inspirado em outros modelos de engenharia, este modelo
argumenta que cada atividade apenas deve ser iniciada
quando a outra estiver terminada e verificada.
Modelo Cascata ▪ Ele é considerado monolítico por não introduzir a participação
- Críticas de clientes e usuários durante
desenvolvimento, mas apenas o
as atividades do
software ter sido
implementado e entregue.
▪ Não existe como o cliente verificar antecipadamente qual o
produto final para detectar eventuais problemas.
▪ Situações onde o software a ser desenvolvido é simples, os
Modelo Cascata requisitos são bem conhecidos, assim como a tecnologia de
programação.
– Quando usar?
Modelo Cascata
com
Realimentação
▪ Criado pelo Ministério da Defesa da Alemanha, em 1992.
▪ É uma variação do Modelo em Cascata.
▪ Demonstra que as atividades de teste estão relacionadas com
a análise e o projeto.

Modelo em V
▪ Capacita o desenvolvedor a criar um modelo do software que
será implementado.
▪ Tem o objetivo de resolver problemas ou limitações
existentes na análise de requisitos, antes do início da
implementação do software.
Desenvolvimento ▪ O protótipo pode ser apresentado ao cliente na forma de
Evolucionário - papel ou modelo executável no computador, retratando a

Prototipação interface do software.


▪ Com o protótipo, o cliente poderá verificar se os requisitos
especificados são os desejados ou reformulá-los se houver
necessidade.
Desenvolvimento
Evolucionário -
Prototipação
▪ Há duas abordagens:
▪ Desenvolvimento Exploratório – o protótipo evolui junto
com os requisitos do sistema e se transforma no próprio
Desenvolvimento sistema final.
Evolucionário - ▪ Desenvolvimento de Protótipos Descartáveis – o protótipo
Prototipação é usado apenas para ajudar na definição de requisitos e não
é aproveitado no sistema final.
▪ Desenvolvimento Exploratório – Vantagens:
▪ Sistemas que atendem à necessidade imediata dos clientes.
Desenvolvimento ▪ Resultados concretos rapidamente.

Evolucionário - ▪ Envolvimento dos usuários ao longo de todo o projeto


(contribuições).
Prototipação ▪ Especificação gradativa do sistema (flexibilidade).
▪ Desenvolvimento Exploratório – Desvantagens:
▪ A rápida evolução dos protótipos dificulta a produção de
documentação.

▪ Excesso de mudanças no código pode comprometer a


estrutura do sistema; a longo prazo, o sistema pode precisar
ser substituído ou completamente reescrito.
Desenvolvimento ▪ A mudança de membros da equipe pode tornar a
Evolucionário - compreensão do sistema difícil (falta de documentação).

Prototipação ▪ Dificuldade para estipular valores de contrato, uma vez que a


especificação não é formalizada.
▪ Cobrar por tempo de trabalho?
▪ Cobrar por funcionalidade?
▪ Desenvolvimento de Protótipos Descartáveis:
▪ O objetivo é compreender melhor os requisitos do cliente
Desenvolvimento através de protótipos experimentais.

Evolucionário - ▪ Apenas os requisitos que não estão claros são prototipados.


▪ Pronta a especificação do sistema, o protótipo deixa de ser
Prototipação útil.
▪ Vantagens:
▪ Protótipos contribuem para melhorar a qualidade da
especificação dos futuros programas, o que leva à diminuição
dos gastos com a manutenção.

Desenvolvimento ▪ O treinamento dos usuários pode ser feito antes do produto


ficar pronto.
Evolucionário - ▪ Partes do protótipo podem ser usadas no desenvolvimento
Prototipação do sistema final.
▪ Rápido fornecimento do sistema.
▪ Compromisso do usuário com o sistema.
Desenvolvimento
Evolucionário -
Prototipação
▪ Também conhecido como Desenvolvimento Baseado
em Componentes ou CBSE (Component-Based Software
Engineering).
▪ Uma base de componentes de software obtidos de
terceiros ou produzidos internamente é utilizada pelos
desenvolvedores da aplicação.
Desenvolvimento ▪ Os componentes têm diferentes níveis de abstração
Orientado a Reuso (podem ser desde funções matemáticas a componentes
de prateleira).

▪ Computação Orientada a Serviços


▪ Evolução do CBSE
▪ Pode-se utilizar serviços em qualquer lugar de maneira
interoperável
Desenvolvimento
Orientado a Reuso
▪ Vantagens:
▪ Reduzir riscos e custos (menos código)
▪ Redução de prazos de entrega
▪ Desvantagens:
Desenvolvimento ▪ Adequação dos requisitos aos componentes pode
Orientado a Reuso resultar em sistemas que não satisfaçam os clientes.

▪ A organização não tem controle sobre os componentes


de terceiros (o código muitas vezes não está disponível
e não se conhece a qualidade do mesmo).
▪ Mudanças são inevitáveis em qualquer software.
▪ As atividades do processo precisam ser repetidas.
Desenvolvimento ▪ Entrega incremental

Iterativo ▪ Desenvolvimento em ciclos


▪ Modelo Cascata + Modelo Evolucionário
▪ As funcionalidades gerais do sistema são definidas e são
planejados vários estágios de entrega de versões de acordo
com a prioridade das funcionalidades para o negócio.

Desenvolvimento
Incremental
Desenvolvimento
Iterativo e
Incremental
▪ Vantagens:
▪ O cliente recebe resultados rapidamente (vantagem
para o negócio)
Desenvolvimento
▪ Risco menor de fracasso do sistema (problemas
Iterativo e isolados, não gerais).
Incremental ▪ Funcionalidades mais importantes são entregues
primeiro (testadas com mais frequência, menor
quantidade de erros).
▪ Desvantagens:

Desenvolvimento ▪ Dificuldade para mapear requisitos em incrementos


▪ Incrementos devem ser pequenos e devem produzir
Iterativo e funcionalidades completas.

Incremental ▪ Incrementos devem ter aproximadamente o mesmo


tamanho e o mesmo prazo de entrega.
Modelo Iterativo:
Espiral
Modelo Iterativo:
Espiral
Modelo Iterativo:
Espiral
Qual o melhor
processo de
software?
Exemplos de
processos de
software?

You might also like