Engenharia de Software
Fabiana Costa Guedes Unifei
Engenharia de Software - Fabiana C Guedes 2
Introdução à Engenharia de
Software
Engenharia de Software - Pressman
Engenharia de Software - Fabiana C Guedes
3
Engenharia de Software
É a criação e a utilização de sólidos
princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe
Engenharia de Software - Fabiana C Guedes
4
Engenharia de Software
O Software tomou o lugar do hardware
como o elemento mais difícil de ser planejado e mais perigoso de
administrar.
As técnicas de Engenharia de
Software estão conquistando espaço e muita aceitação pelos
Engenharia de Software - Fabiana C Guedes
5
Engenharia de Software
As boas práticas de engenharia de
software devem assegurar que o software tenha uma contribuição positiva em nossas vidas.
Engenharia de Software - Fabiana C Guedes
6
Software
Instruções que quando executadas
fornecem a função e o desempenho desejados.
Estruturas de Dados que permitem
aos programas manipular a informação.
Documentos que descrevem o uso
Engenharia de Software - Fabiana C Guedes
7
O Papel Evolutivo do Software
O software entrega o mais importante
produto da nossa época: Informação.
Transforma dados pessoais de modo que
possam ser mais úteis em determinado contexto.
Proporciona os meios para obter
informações em todas as suas formas.
Ex: Gera informação comercial para
Engenharia de Software - Fabiana C Guedes
8
Características do Software
O Software é desenvolvido ou passa por
um projeto de engenharia, não é manufaturado no sentido clássico.
A qualidade é conseguida por um bom
projeto;
São dependentes de pessoas;
Requerem a construção de um produto; Os custos do software são concentrados
Engenharia de Software - Fabiana C Guedes
9
Características do Software
O Software não se desgasta.
O software deteriora.
O software passará por modificações. A manutenção de software envolve
consideravelmente mais
complexidade do que a manutenção de hardware.
Engenharia de Software - Fabiana C Guedes
10
Engenharia de Software - Fabiana C Guedes
11
Engenharia de Software - Fabiana C Guedes
12
Características do Software
A maioria dos Software é
construído sob medida e não por
meio da junção de componentes.
Engenharia de Software - Fabiana C Guedes
13
Crise do Software
As estimativas de prazo e de custo
freqüentemente são imprecisas.
A produtividade não acompanha a
demanda (backlog).
A qualidade do software às vezes é
menor que a adequada.
Manutenção do Software existente é
Engenharia de Software - Fabiana C Guedes
14
Questionamentos:
Por que leva tanto tempo para concluir o software? Por que os custos de desenvolvimento são tão
altos?
Por que não podemos achar todos os erros antes
de entregar o software aos clientes?
Por que continuamos a ter dificuldades em avaliar o
Engenharia de Software - Fabiana C Guedes 15
Engenharia de Software - Fabiana C Guedes
16
Ciclo de Vida
Um Ciclo de vida é utilizado para definir um
processo de desenvolvimento de software.
Um processo de software é um arcabouço
para as tarefas que serão necessárias para construir software de alta qualidade.
Um processo de software define a
abordagem que é adotada quando o software é elaborado.
Engenharia de Software - Fabiana C Guedes
17
Definição de Processo
Conceito de processo:
conjunto de passos parcialmente ordenados: atividades, métodos, práticas e transformações; usado para atingir uma meta;
meta geralmente associada a um ou mais
resultados concretos finais:
os produtos da execução do processo.
Ciclo de vida:
Engenharia de Software - Fabiana C Guedes
18
Processo de Software
Uma série de etapas que envolvem
atividades, restrições e recursos para alcançar a saída desejada.
Um conjunto de procedimentos,
organizados de modo que nos permita construir produtos que satisfaçam a uma série de objetivos e padrões.
Os processos nos permitem captar
Engenharia de Software - Fabiana C Guedes
19
Processo de Software
O processo de desenvolvimento de
software pode ser chamado de ciclo de vida do software, pois ele descreve a ‘vida’ do produto desde a concepção até a implementação, entrega,
Engenharia de Software - Fabiana C Guedes
20
Modelo de Ciclo de Vida
O modelo de ciclo de vida é escolhido
com base na natureza do projeto e da aplicação, nos métodos e ferramentas a serem usados, e nos controles e nos produtos intermediários e finais que
Engenharia de Software - Fabiana C Guedes
21
Modelo de Ciclo de Vida
Independentemente do modelo de
processo que é escolhido para um
projeto de software, todos os estágios coexistem simultaneamente em algum nível de detalhe.
A seguir são apresentados uma série
de Modelos de Ciclo de Vida utilizados.
Engenharia de Software - Fabiana C Guedes
22
Codifica-emenda
Partindo de uma especificação, os
desenvolvedores começam a codificar, remendando à medida que os erros vão sendo descobertos.
Vantagens: não requer gerenciamento, por
não possuir processo definido.
Desvantagens: modelo de alto risco,
impossível de gerir e que não permite assumir compromissos confiáveis.
Engenharia de Software - Fabiana C Guedes
23
Engenharia de Software - Fabiana C Guedes
24
Sequencial Linear ou Cascata
Os principais subprocessos são executados
em seqüência, o que permite demarcá-los com pontos de controle bem definidos.
O desenvolvimento de um estágio deve
terminar antes que o outro comece.
É necessário permitir que em fases
posteriores, haja revisão e alteração de resultados das fases anteriores.
Muitos modelos complexos são variações
do modelo cascata, incorporando loops de feedback e atividades extras.
Engenharia de Software - Fabiana C Guedes
25
Engenharia de Software - Fabiana C Guedes
26
Cascata – Vantagens e
Desvantagens
Vantagens: facilita a gerencia do processo, o que
torna o processo confiável e utilizável em projetos de qualquer escala.
Desvantagens:
é um processo rígido e burocrático; baixa visibilidade para o cliente;
não reflete o modo como o código é desenvolvido; impõe uma estrutura de gerenciamento de projeto ao
desenvolvimento do sistema;
o modelo não fornece orientação em como tratar as
mudanças nos produtos e atividades que ocorrerão durante o desenvolvimento.
Engenharia de Software - Fabiana C Guedes
27
Cascata – Vantagens e
Desvantagens
Na prática, é sempre necessário permitir que,
em fases posteriores, haja revisão e alteração de resultados das fases anteriores. Projetos
reais raramente seguem o fluxo seqüencial que o modelo propõe.
Leva a Estados de Bloqueio: alguns
membros da equipe precisam esperar que outros da equipe completem as tarefas
dependentes. O tempo em espera pode exceder o tempo produtivo.
Engenharia de Software - Fabiana C Guedes
28
Sashimi
Variação do modelo cascata que
permite superposição entre fases e a realimentação de correções.
Desvantagens: a superposição de
fases torna difícil o gerenciamento de projetos baseados nesse modelo de ciclo de vida.
Engenharia de Software - Fabiana C Guedes
29
Engenharia de Software - Fabiana C Guedes
30
Espiral
O produto é desenvolvido em uma série de
iterações. Cada nova iteração corresponde a uma volta na espiral.
Vantagens:
Permite construir produtos em prazos curtos; as atividades de manutenção são usadas para
definir problemas.
Desvantagens: requer gestão muito
Engenharia de Software - Fabiana C Guedes
31
Espiral
Comunicação com o Cliente
Planejamento Análise de Risco
Arquitetura Construção e Liberação Avaliação pelo Cliente Ponto de Entrada
Engenharia de Software - Fabiana C Guedes
32
Espiral
Comunicação com o cliente:
desenvolvedor e cliente.
Planejamento: definir recursos, prazos, etc. Análise de Risco: avaliar riscos técnicos e
gerenciais
Engenharia: desenvolvimento da
representação da aplicação.
Construção e Liberação: construir, testar,
instalar e fornecer apoio ao usuário (documentação, treinamento)
Engenharia de Software - Fabiana C Guedes 33
Modelo: Espiral
Voltas no Espiral:
1.Projetos de Desenvolvimento
Conceitual do Produto.
2.Projetos de Desenvolvimento de
Novos Produtos.
3.
Projetos de
Melhoria do Produto
.
4.Projetos de
Manutenção do
Engenharia de Software - Fabiana C Guedes 34
Prototipação
Coleta e Refinamento dos Requisitos Projeto rápido Construção do Protótipo Avaliação do Protótipo pelo Cliente Refinamento Protótipo Engenharia do Produto INÍCIOEngenharia de Software - Fabiana C Guedes
35
Prototipação
A espiral é usada não para
desenvolver o produto completo, mas para construir uma série de versões provisórias que são chamadas de protótipos.
Os protótipos cobrem cada vez mais
requisitos, até que atinja o produto desejado.
Engenharia de Software - Fabiana C Guedes
36
Prototipação
Vantagens:
permite que os requisitos sejam definidos
progressivamente;
permite que todo o sistema seja construído
rapidamente;
apresenta alta flexibilidade e visibilidade para os
clientes.
Desvantagens:
Requer gestão sofisticada e o desenho deve ser
de excelente qualidade, para que a estrutura do produto não se degenere ao longo dos
Engenharia de Software - Fabiana C Guedes
37
Desenvolvimento em fases
As duas abordagens mais populares são o
desenvolvimento incremental e o desenvolvimento iterativo.
Desenvolvimento incremental - o sistema é
dividido em subsistemas por funcionalidades. As versões são definidas, começando com um
pequeno subsistema funcional e adicionando mais funcionalidades a cada versão.
Desenvolvimento iterativo - entrega um sistema
completo e então muda a funcionalidade de cada subsistema a cada nova versão.
Engenharia de Software - Fabiana C Guedes
38
Engenharia de Software - Fabiana C Guedes
39
Modelo Incremental
Entrega do Incremento
Análise Projeto Codificação Teste
Análise Projeto Codificação Teste
Análise Projeto Codificação Teste
Incremento 2
Incremento 3
Engenharia de Software - Fabiana C Guedes
40
Desenvolvimento em fases
Vantagens:
O treinamento pode começar nas primeiras versões; Mercados podem ser criados antecipadamente para
recursos que nunca haviam sido oferecidos;
Versões freqüentes permitem que os
desenvolvedores resolvam problemas não previstos antecipados de uma maneira global e rápida;
A equipe de desenvolvimento pode enfocar
diferentes áreas de especialização com diferentes versões;
Engenharia de Software - Fabiana C Guedes
41
Técnicas de Quarta Geração
Engloba um conjunto de
ferramentas de software que
possibilitam que:
1. O sistema seja especificado em
uma linguagem de alto nível.
2. O código fonte seja gerado
automaticamente a partir dessas especificações.
Engenharia de Software - Fabiana C Guedes
42
Técnicas de Quarta Geração
Concentra-se na habilidade de
especificar software usando formas
especializadas de linguagem, ou uma notação gráfica que descreve o
problema a ser resolvido de forma que o cliente possa entender.
O paradigma 4GT começa com um
diálogo cliente/desenvolvedor para a definição dos requisitos.
Engenharia de Software - Fabiana C Guedes
43 Ferramentas do ambiente de
desenvolvimento de software de 4GL
Linguagens não procedimentais
para consulta de banco de dados
Geração de relatórios
Manipulação de dados
Interação e definição de telas
Geração de códigos
Capacidade gráfica de alto nível
Engenharia de Software - Fabiana C Guedes
44
Engenharia de Software - Fabiana C Guedes
45
Técnicas de Quarta Geração
Vantagens e Desvantagens:
Dados coletados por empresas que
utilizam 4GT indicam que o tempo
necessário pra produzir software é
bastante reduzido em pequenas e
médias aplicações.
Em pequenas aplicações a
quantidade de análise e projeto
também é reduzida.
Engenharia de Software - Fabiana C Guedes
46
Técnicas de Quarta Geração
Vantagens e Desvantagens:
Em aplicações maiores o uso de
4GT exige tanto ou mais análise,
projeto e teste para alcançar uma
substancial redução de tempo
resultante da eliminação da
Engenharia de Software - Fabiana C Guedes
47
Conclusões
Deveríamos considerar o processo de
desenvolvimento como um conjunto de modelos de processo, em vez de nos concentrarmos em um único
modelo ou uma única perspectiva.
Não importa qual modelo de processo
é utilizado, muitas atividades são comuns a todos eles.
Engenharia de Software - Fabiana C Guedes
48
Conclusões
Um modelo de processo é útil para orientar o
comportamento quando você estiver trabalhando em grupo.
Modelos de processo detalhados nos dizem como
coordenar e colaborar enquanto se projeta e constrói um sistema.
Um modelo de processos traz claras vantagens
para a equipe de desenvolvimento. Um bom
modelo mostra a cada membro da equipe quais atividades ocorrem, quando e por quem são
realizadas, de modo a tornar clara a divisão de tarefas.
Engenharia de Software - Fabiana C Guedes
49
Tópicos para Discussão
Ciclo de Vida
Processo de Desenvolvimento
Processo de Desenvolvimento X Ciclo de
Vida
Engenharia de Software - Fabiana C Guedes 50
Engenharia de Software - Fabiana C Guedes
51
Decomposição e
Modularidade
• Projetar um sistema é determinar um
conjunto de componentes e interfaces entre os componentes, que satisfaça um conjunto específico de requisitos.
• Assim como existem várias maneiras de obter e documentar os requisitos, também há vários modos de criar bons projetos.
• Porém, todos os métodos de projetos
Engenharia de Software - Fabiana C Guedes
52
Decomposição e
Modularidade
• Não importa qual seja a abordagem
utilizada para o projeto, cada tipo de decomposição separa o projeto em suas partes componentes,
denominadas módulos ou componentes.
Engenharia de Software - Fabiana C Guedes
53
Engenharia de Software - Fabiana C Guedes
54
Por que utilizar uma
Metodologia?
Padronização de técnicas, ferramentas e
métodos para toda a organização;
Provê condições de gerenciamento;
Envolvimento de todos os participantes;
Estabelecimento de padrões de qualidade e
de planejamento e controle de projetos;
Facilita a manutenção;
Documentação incremental de todo o ciclo
de vida do projeto;
Engenharia de Software - Fabiana C Guedes
55
Engenharia de Software - Fabiana C Guedes
56
Por que Modelar?
• A modelagem é a parte fundamental das
atividades que levam à implantação de um bom software.
• Construímos modelos para:
o Comunicar a estrutura e o comportamento
desejados do sistema;
o Visualizar e controlar a arquitetura do sistema; o Compreender e racionalizar o sistema em
elaboração;
Engenharia de Software - Fabiana C Guedes
57
Por que Modelar?
Um modelo é uma simplificação da realidade. Um modelo é uma ABSTRAÇÃO!
Engenharia de Software - Fabiana C Guedes
58
Por que Modelar?
Esquema tático de um time de futebol ou Organograma ou Pirâmide Circense ou Hierarquia de Generalização/Especialização ?
Engenharia de Software - Fabiana C Guedes
59
Definição de modelo
• Modelo é a representação abstrata de um
sistema real, com a qual se pode explicar ou testar o seu comportamento em seu todo ou em partes.
• Encontramos inúmeros exemplos de modelos fora da área de informática
– Manequim de vitrine;
– Foto de imóvel;
Engenharia de Software - Fabiana C Guedes
60
Modelagem
• Devemos construir modelos que
permitam produzir uma especificação que possa ser apresentada ao usuário e com ele discutida;
Engenharia de Software - Fabiana C Guedes
61
Modelagem
• Cada ambiente que nos depararmos
para modelar terá suas próprias características. Por mais que
acreditemos que já conhecemos de experiências anteriores,
particularidades existirão;
• Podemos partir de padrões para
acelerar mais produção de nosso resultado final.
Engenharia de Software - Fabiana C Guedes
62
Conclusão: Para que
modelar?
Para representar o ambiente
observado;
Servir de instrumento de
comunicação;
Favorecer o processo de verificação
e validação;
Servir como referencial para a
Engenharia de Software - Fabiana C Guedes
63
Por que o analista de sistemas
usa ferramentas de modelagem?
Engenharia de Software - Fabiana C Guedes
64
Por que o analista de sistemas usa
ferramentas de modelagem?
• Focalizar a atenção nas características importantes do sistema;
• Discutir modificações e correções nos
requisitos do usuário com baixo custo e mínimo risco;
• Verificar se o analista conhece corretamente o ambiente do usuário e o documento de
uma tal maneira que os projetistas e
Engenharia de Software - Fabiana C Guedes
65
Características das
Engenharia de Software - Fabiana C Guedes
66
Qual Diagrama Utilizar?
• Podemos utilizar qualquer modelo que
seja útil para o sistema desejado.
• Diferentes projetos podem requerer
diferentes ferramentas de modelagem.
• Diferentes tipos de sistemas podem
exigir modelos diferentes para realçar as características importantes.
Engenharia de Software - Fabiana C Guedes
67
Qual Diagrama Utilizar?
• Muitos sistemas exigem modelos
múltiplos: cada modelo focaliza um número limitado de aspectos do
sistema, deixando de lado outros aspectos do sistema.
Engenharia de Software - Fabiana C Guedes
68
Características das
Ferramentas de Modelagem
• Deve ser gráfica, com adequado
detalhamento textual de apoio;
• Deve permitir que o sistema possa ser
visualizadado de forma subdividida;
• Deve ter mínima redundância;
• Deve ajudar o leitor a prognosticar o
comportamento do sistema;
Engenharia de Software - Fabiana C Guedes
69
Tópicos para Discussão
• Decomposição e Modularidade
• Por que utilizar uma Metodologia? • Modelo
Engenharia de Software - Fabiana C Guedes
70
Tópicos para Discussão
• Qual diagrama Utilizar?
• Características das ferramentas de