Você está na página 1de 72

ENGENHARIA Introdução

DE SOFTWARE
João Alexandre Bonin de Mello
jalexandremello@gmail.com
A situação do
Desenvolvimento de Software

 Menos de 5% do software é
utilizado sem alterações
 Mais de 95% do software é utilizado
com alterações ou não utilizado
 Utilizado com alterações
 Grande retrabalho
 Entregue mas não utilizado
 Não entregue (mas pago)
 (c) 1997 – Rational Corporation
Como o Cliente
Explicou
Como o Consultor de
Negócios Descreveu
Como o líder de
projeto entendeu
Como o Analista
Planejou
Como o Programador
Codificou
O que os Beta Testers
Receberam
O que foi entregue
Como foi
documentado
O que o cliente
pagou
O que o cliente
realmente
necessitava
Problemas

Identificação de
defeitos → somente
após a entrega do
sistema
Não há provas de que
o sistema vá rodar a
menos que ele esteja
pronto
Problemas

A demanda por
software é um negócio
crescente
Ninguém entende o
sistema todo
Problemas

Sistemas legados
precisam ser
mantidos...
Problemas

… mas os
desenvolvedores
originais sumiram!!!
Problemas

Requisitos instáveis!
Software Complexo!
Flexibilidade!
Não há provas de que
o sistema vá rodar a
menos que ele esteja
pronto!
Problemas
Usuário x
Profissional
de TI
Conclusão: Desperdício
Engenharia de
Software
 Aplicação de:
 teoria,
 modelos,
 formalismos, Engenharia
 técnicas e ferramentas de
 da ciência da
computação e áreas Software
afins
 para o desenvolvimento
sistemático de software
Engenharia Formalidade
de Software
Princípios Abstração
Decomposição
Generalização
Flexibilização
 Formalidade
 o software deve ser
desenvolvido de acordo com
passos definidos com precisão
e seguidos de maneira Engenharia
efetiva;
 Abstração
de
 preocupa-se com a
identificação de um
Software
determinado fenômeno da
realidade, sem se preocupar
Princípios
com detalhes, considerando
apenas os aspectos mais
relevantes.
 Decomposição
 divide o problema em partes, de
maneira que cada uma possa ser
resolvida de uma forma mais
específica;
Engenharia
 Generalização
 usada para resolver um problema,
de
de forma genérica, com o intuito
de reaproveitar essa solução em
Software
outras situações;
Princípios
 Flexibilização
 permite que o software possa ser
alterado, sem causar problemas
para sua execução.
Engenharia de Software
Software
extra-power
COMO SE DEFINE UM
SOFTWARE DE QUALIDADE?
SOFTWARE BOM
SEGUNDO A
O grande software é o código orientado
ORIENTAÇÃO A a objetos.
OBJETOS Assim, não há um monte de código
duplicado e cada objeto controla seu
próprio comportamento. Também é fácil
estendê-lo, uma vez que o projeto é
realmente sólido e flexível.
O grande software é criado quando
SOFTWARE você usa padrões de projeto e princípios
BOM comprovados e verdadeiros. Você
SEGUNDO manteve seus objetos livremente unidos
O PESSOAL e o seu código é aberto para extensão,
mas fechado para modificação. Isso
DE também ajuda a tornar o código mais
PADRÕES reutilizável, por isso você não precisa
DE trabalhar em tudo novamente para usar
PROJETO partes de suas aplicações em outras
ocasiões.
O grande software sempre faz o que o
cliente deseja. Portanto, mesmo que o
SOFTWARE clientes pensem em novas formas de
usá-lo, ele não dará problemas ou
BOM apresentará resultados inesperados.
SEGUNDO
O CLIENTE
Os clientes acharão seu software ótimo
quando ele fizer o que tiver de fazer
RESUMINDO... Você achará seu software ótimo
quando seu software for fácil de manter,
reutilizar e estender
Dados

SOFTWARE Pessoas Processos

Tecnologia
Concepção

Desenvolvimento
O ciclo
de vida Manutenção
de um
sistema
Descarte
Ativação

Requisitos

Desenho de alto nível (Análise)


O ciclo de vida Desenho detalhado (projeto)
do
desenvolvimento
Construção (programação)

Testes

Transição
Erro,
Defeito e
Falha
Defeito, Erro e Falha
Produção x
Retrabalho
Origem dos Defeitos
DEFEITOS

Outros
31%
Requisitos
41%

Projeto
28%

Fonte: USAF, 1992


Custo de Correção de Defeitos
Ciclo de Vida
do Software

O ciclo de vida
trata das fases
identificadas
entre o
nascimento e a
morte de um
software.
Modelo de
Ciclo de
Vida do
Software
Modelo de
Ciclo de
Vida do
Software
 Conjunto de atividades,
métodos, práticas e
Processo transformações que guiam
pessoas na produção de
de
software.
Software
Modelos de
Processo
de Software
 Características da aplicação (domínio
do problema, tamanho do software, tipo
e complexidade, etc);
 Tecnologia a ser adotada na sua
construção (paradigma de
desenvolvimento, linguagem de
programação, mecanismo de
Modelos de persistência, etc);
Processos  Organização onde o produto será
Consideram desenvolvido e a equipe de
desenvolvimento alocada (recursos
humanos).
 É uma caracterização prescritiva ou
descritiva de como um produto de
software deve ser desenvolvido, i.e.,
define o quê, como e quando fazer algo
 Planejamento:
 faz-se o esboço do escopo e dos
requisitos, além de estimativas
razoáveis sobre recursos, custos e
prazos.
 Análise e Especificação de Requisitos:
 durante essa fase, refina-se os
Fases requisitos e o escopo e desenha-se o
Genéricas problema em questão.
dos  Projeto:
Modelos  durante essa fase, incorpora-se
requisitos tecnológicos aos requisitos
essenciais do sistema e projeta-se a
arquitetura do sistema.
 Implementação:
 durante essa fase, codifica-se o
software como um conjunto de
programas executáveis pela
máquina.
 Teste:
 o programa é testado como um
sistema completo para garantir que
Fases os requisitos de software foram
Genéricas atendidos.
dos  Implantação, Operação e
Manutenção:
Modelos
 o sistema de software é liberado
para o cliente, treina-se usuários,
gerencia serviços e realiza
manutenções.
Fases Genéricas dos Modelos

PLANEJAMENTO ANÁLISE E PROJETO IMPLEMENTAÇÃO


ESPECIFICAÇÃO
DE REQUISITOS

TESTE IMPLANTAÇÃO,
OPERAÇÃO E
MANUTENÇÃO
Principais Modelos
Codifica e remenda

Especificação
(???)

Produto
Codifica e Remenda - Problemas
Cascata
Cascata - Problemas
Só se conhece o produto no final do processo
Prototipação
Problemas
com a
Prototipação
Adaptar o protótipo final
para um sistema real
Espiral ou
Evolucionário
Espiral -
Problemas
O Gerenciamento é mais
complexo
Releases sucessivos ou Incremental
Rational Unified Process
Às vezes
soluções
mais
complexas...
Não
substituem a
simplicidade
Métodos
Ágeis
Manifesto Ágil
Programação
Extrema - XP
Programação Extrema - XP

Histórias de Usuário

Programação
em Pares
comunicação;
Programação
Extrema – XP
Valores simplicidade;

feedback;

coragem;

respeito.
cliente sempre à disposição;

uso de metáforas;

reuniões de planejamento (planning


Programação
game);
Extrema
Práticas
reuniões diárias, de 15 minutos, para
alinhamento (stand up meeting);

integração contínua dos módulos


desenvolvidos;
mudanças incrementais;

entregas frequentes ao cliente (small


releases);

Programação design simples e funcional;


Extrema
Práticas

testes de aceitação;

refatoração (refactoring) ou melhoria


contínua
Métodos Ágeis
Scrum
Processos
Ágeis -
Problemas
Métodos Ágeis
Desenvolvimento
Orientado a
Testes