Engenharia de Software

Download Report

Transcript Engenharia de Software

Engenharia de Software
Profa. Denise Neves
[email protected]
Engenharia de Software
Ementa








Projeto de software e engenharia de software;
o processo de projeto;
aspectos fundamentais do projeto;
metodologias de desenvolvimento de sistemas;
as abordagens do processo;
o modelo de processo;
desenvolvimento do modelo de processo;
aplicação do modelo de processo no projeto de desenvolvimento
de aplicação; aplicando o modelo de processo no projeto de
infraestrutura;
Engenharia de Software
Ementa





princípios do modelo de processo;
o modelo de processo para a arquitetura organizacional:
perspectiva do negócio, perspectiva da aplicação,
perspectiva da informação e perspectiva da tecnologia;
o modelo de processo para o desenho de componentes:
conceito de desenho, desenho lógico e desenho físico;
relacionamento com o modelo de processo;
Engenharia de Software
Ementa




conceito de desenho no modelo de processo: desenho
lógico no modelo de processo e desenho físico no modelo
de processo;
o modelo de aplicação; o modelo em 3 camadas: serviços
de usuário, serviços de negócio e serviços de dados;
benefícios da aplicação baseada em serviços;
documentação de projeto.
Ferramentas de modelagem de processos.
Engenharia de Software

Este curso apresenta métodos e técnicas para o desenvolvimento
de software que abordam especificação, modelagem,
arquiteturas, verificação e testes de software, bem como para o
planejamento e gerenciamento do processo de
desenvolvimento.A disciplina de ES se preocupa em sistematizar
o desenvolvimento através de modelos, técnicas e ferramentas
para o produto e para o processo.
Engenharia de Software
Bibliografia

Engenharia de Software
Ian Sommerville
Pearson Education

Engenharia de Software
Roger Pressman
6ª edição
McGraw-Hill
Artigos sobre Engenharia de Software
Engenharia de Software
Conceitos Básicos

Software:
São programas de computadores, em suas
documentação associada.
diversas formas, e a
Um programa é um conjunto de soluções algorítmicas,
codificadas numa linguagem de programação, executado numa
máquina real.

Software é um produto conceitual e lógico.
Engenharia de Software
Conceitos básicos
Características do Software




Invisibilidade – Software é invisível e invisualizável
Complexidade – Software é mais complexo do que qualquer outro
produto construídos por seres humanos
Mutabilidade – Existe sempre uma pressão para se fazer
mudanças em um software
Conformidade – O software deve ser desenvolvido conforme o
ambiente. Não é o ambiente que deve se adaptar ao software.
Se o software esta conforme os requisitos (o ambiente) todo o
suporte operacional deve se adaptar ao software.
[Brooks, F. No Silver Bullet]
Engenharia de Software
Conceitos Básicos






O estabelecimento de objetivos gerais é suficiente para
se começar a escrever programas.
Dê a uma pessoa técnica um bom livro de programação e
você terá um programador.
Mudanças no software podem ser feitas facilmente
porque ele é "flexível".
Até que o programa esteja "rodando" não é possível
verificarmos a sua qualidade.
Uma vez que o programa esteja escrito e funcionando,
nosso trabalho está feito.
Um projeto é bem sucedido se conseguirmos um
programa funcionando corretamente.
Mitos do Software [Pressman]
Engenharia de Software
Conceitos Básicos
Falhas de Software
 Ariane 5, 1996
 O foguete explodiu 40 segundos após a sua primeira
decolagem.
 Prejuízo de U$ 500 milhões
 Foi aproveitado um pacote de software de navegação do
Ariane 4 que não tinha erros.
 No módulo Sistema de Referencia Inercial uma conversão
de valores de 64-bits para 16-bits causou um operando
inválido que o interrompeu
 A falha no SRI levou o computador de bordo a modificar a
trajetória do foguete levando à ruptura de juntas e isto
causou a ativação da auto-destruição.
 No Ariane 5, o módulo SRI só deveria ter sido utilizado
antes do lançamento.
Engenharia de Software
Conceitos Básicos
Falhas de Software
 London Ambulance System - despacho de ambulâncias em
Londres, 1992.
 Morte de pessoas que não foram socorridas em tempo.
 Problema de Gerência de Software:
– Responsáveis contrataram uma empresa desconhecida
cujo valor cobrado era menor que os cobrados pelas
empresas de renome.
– Colocaram o sistema no ar sem os devidos testes.
– Não foi feita uma migração correta do sistema antigo para
o novo.
Engenharia de Software
Conceitos Básicos
Falhas de Software
 Máquina de radioterapia com software controlador (1985 87).
 O controle de segurança feito pelo hardware em máquinas
anteriores foi removido e passou a ser feito pelo software.
 O software falhou na tarefa de, ao mesmo tempo, manter
invariantes essenciais: o feixe de elétrons e o dispositivo
que controla a concentração do feixe em níveis seguros.
 Diversas mortes em decorrência de queimaduras.
O programador não tinha experiência em programação
concorrente.
Engenharia de Software
Conceitos Básicos

Bug do Milênio

Datas no formato : dd/mm/aa
Na virada do ano 2000 -> 00 que vai ser entendido como
1900
O bug pode aparecer em harware, software (sistemas e
aplicativos), bases de dados, arquivos, scripts, enfim, onde
houver processamento de datas, ali pode estar o problema.
No caso dos computadores e programas, a solução é
relativamente simples (se não considerarmos os custos) atualização (upgrade) de software, hardware e utilização
dos remendos (patches) que estão sendo lançados pelos
fabricantes.
Engenharia de Software
Documento : "Testing for The Year 2000 Deadline"







Se uma aplicação não é mais necessária, livre-se dela;
Se você está usando atualmente uma aplicação que
planeje desativar antes do ano 2000, então comece a fazêlo gradualmente;
Se uma aplicação for considerada em conformidade com o
ano 2000, realize alguns testes preliminares e passe para o
próximo software;
Contacte seu fornecedor de software para verificar se pode
ser feito o upgrade das aplicações;
Determine se o software pode ser trocado por um outro
pacote adequado e faça a cotação do mesmo;
Se você tiver alguma aplicação que precise ser convertida,
comece imediatamente;
Estabeleça um plano para ajudá-lo a navegar por tudo que
precisa ser feito, e imponha uma linha de tempo rígida para
cada uma das atividades.
Engenharia de Software
Documento "Testing for The Year 2000 Deadline"
Atividades :






Determinar as correções que devem ser aplicadas a cada
elemento com problemas;
Determinar os custos para a solução;
Gerar um relatório de custos;
Priorizar e aplicar as correções com base na análise de
riscos;
Documentar as correções aplicadas para cada um dos
ítens;
Caso as correções afetem outros setores, comunicá-los
sobre os planos de correção;
Engenharia de Software
Conceitos Básicos
Atividades :





Estabelecer planos de contingência para os elementos
chaves, para o caso de haver problemas na passagem para
o ano 2000;
Estabelecer processos manuais para processos
automatizados;
Manter cópias impressas de informações importantes;
Garantir o processo de backup;
Deixar um estoque razoável de materiais, prevendo falhas
nos fornecedores (Ex.: toner de impressoras, papéis para
impressão, disquetes, fita DAT, material de escritório, água
potável, baterias, pilhas, materiais de limpeza, etc.).
Engenharia de Software
Conceitos Básicos
Engenharia de Software
Conceitos Básicos:Evolução






Os primeiros anos (1950 a início dos 60)
– Aplicações científicas e de engenharia
A segunda era (1960 a meados de 80)
– Aplicações comerciais em grande-porte (sistemas de
informação BD)
A terceira era (meados de 70 e década de 80)
– Aplicativos pessoais em microcomputadores
A quarta era (meados de 80 a meados de 90)
– Aplicativos com Interfaces Gráficas
– Redes e Arquitetura Cliente-Servidor
A quinta era (de meados de 90 a ???)
– Software Distribuídos,Internet, Groupwares e Intranets
Sexta era??
– Computação Pervasiva, Móvel e Ubíqua
Engenharia de Software
Conceitos Básicos
Desafios para a Indústria de Software
 Sistemas legados
– Sistemas antigos, mas de extrema importância para uma
organização e que funcionam bem.
Linguagens antigas – falta de pessoal
Específico de plataformas obsoletas
 Heterogeneidade
– Os sistemas são distribuídos e incluem diversidade de
hardware e plataforma operacional
 Entrega
– Existe sempre uma pressão forte para diminuir o tempo de
entrega.
Engenharia de Software



É uma disciplina da engenharia dedicada a
todos os aspectos da produção de software.
Engenheiros de software devem adotar uma
abordagem sistemática e organizada para o
seu trabalho e usar técnicas e ferramentas
apropriadas, de acordo com o problema a ser
resolvido, e com as restrições e recursos
disponíveis.
Fonte: Ian Sommerville
Engenharia de Software
Engenharia
 Desenvolvimento de um produto
Processo de desenvolvimento envolvendo
análise, design, implementação e avaliação
 Baseado em teoria, princípios, modelos,
métodos, técnicas e ferramentas
 Equipe de especialistas
Planejamento e gerenciamento de recursos,
custos e prazos
Engenharia de Software
Conceitos Básicos

Objetivos da Engenharia de Software
Aplicação de teoria, modelos, formalismos, técnicas e
ferramentas da ciência da computação e áreas afins
para o desenvolvimento sistemático de software.
Aplicação de métodos, técnicas e ferramentas para o
gerenciamento do processo de desenvolvimento.
Produção da documentação formal destinada a
comunicação entre os membros da equipe de
desenvolvimento bem como aos usuários.
Engenharia de Software
Conceitos Básicos
Aspectos Históricos
 1968 Conferência da OTAN, Garmisch
 Objetivo: resolver a “Crise do Software”
 Software é entregue
– Atrasado
– Com orçamento estourado
– Com falhas residuais
 Custo do hardware decrescente e custo do
software em ascensão
Engenharia de Software
Projeto
Um projeto é um empreendimento
temporário empreendido para alcançar
um único conjunto de objetivos.
(PMI,PMBOK Guide)
Engenharia de Software
Projeto
Projeto de TI



Projetos de desenvolvimento de Softwares, podem ser de
desenvolvimento de um novo projeto ou a atualização de
programas existentes;
A seleção, aquisição e implementação de pacotes de
Softwares , os quais podem incluir aspectos de
customização;
A seleção, aquisição e implementação de Softwares, o que
pode incluir equipamento de mainframe , servidores,
estações de trabalho e outros equipamentos de suporte;
Engenharia de Software
Projeto
Projeto de TI



Produtos de redes e telecomunicações e a seleção de
serviços, aquisição ou implementação;
Integração de sistemas ; e
Alguma combinação dos itens acima
Engenharia de Software
Projeto
Tripé das Restrições



Escopo
Tempo
Custo
Engenharia de Software
Projeto
Relatório do Standish Group 2003 vs, 1995
O excesso de tempo diminuiu significamente a 63%
comparado com 222%
O excesso dos custos caiu para 45% comparado com 189%
As características e funções requeridas foram até 67%
comparadas com 61%
78.000 projetos dos EUA foram brm sucedidos comparados
com 28.000
28% dos projetos de TI foram bem sucedidos comparados com
16 %
Engenharia de Software
Projeto
Porque as melhorias ?

“As razões para o incremento dos projetos bem sucedidos
variam. Primeiro, o custo médio de um projeto foi cortado
pela metade. Melhores ferramentas foram criadas para
monitorar e controlar o progresso, assim como também
surgiram gerentes de projetos qualificados usando
melhores processos de gerenciamento. O fato da existência
de tais processos é significativo em si mesmo”
The standish Group “CHAOS 2003”
Engenharia de Software
Projeto
O que é gerenciamento do Projeto?

Gerenciamento do Projeto é a aplicação do conhecimento,
habilidades, ferramentas e técnicas para as atividades do
projeto alcançarem os seus requisitos e satisfazer as
necessidades e expectativas dos stakeholders desde a
concepção inicial do projeto”
Engenharia de Software
Projeto
Engenharia de Software
Projeto
Ferramentas e Técnicas da GP
As ferramentasé técnicas de GP ajudam aos gerentes do
projeto e suas equipes em vários aspectos de GP :
Algumas especificas incluem :
Project Charter e WBS (escopo)
Gráfico de Gantt, Gráfico PERT, Análise do caminho
crítico(Tempo)
Estimativas de Custo e Earned Value Analysis (badeline e
orçamento)
Engenharia de Software
Projeto
Processo de Iniciação
É o processo de autorizar formalmente um novo projeto
ou de que um projeto já existente deva prosseguir para
sua próxima fase.
Escopo
Inicialização
Engenharia de Software
Projeto
Termo de Referência - Project Charter




Documento que reconhece e autoriza formalmente a
existência de um projeto e fornece as diretrizes para o seu
gerenciamento.
Serve como um “contrato” entre o sponsor e o time do
projeto.
Deve ser uma fonte única de informação.
Documento de planejamento tático
Engenharia de Software
Projeto
Planejamento
Quais atividades devem ser realizadas.

WBS – Work Breakdown Structure
ou
EAP – Estrutura Analítica do Projeto
“É uma representação do trabalho como atividade e esse
trabalho leva a um resultado tangível.
É um arranjo em uma estrutura hierárquica.
Tem um objetivo ou resultado tangível, que é chamado de
deliverable.”
PFIFFER(2005)
Engenharia de Software
Conceitos Básicos
Ciclo de Vida do Software
O ciclo de vida de um software descreve as fases pelas
quais o software passa desde a sua concepção até ficar
sem uso algum.
Engenharia de Software
Conceitos Básicos
Fases do Ciclo de Vida de Sistemas
Fase de definição
– Análise e Especificação
– Estudo de Viabilidade
– Estimativas Planejamento

Fase de desenvolvimento
– Design
– Implementação e integração
– Verificação e Validação

Engenharia de Software
Conceitos Básicos
Fases do Ciclo de Vida
Fase de operação
– Distribuição, Instalação e Configuração
– Utilização e administração
– Manutenção – corretiva, evolutiva e adaptativa

Fase de retirada
– Migração, reengenharia, engenharia reversa

Engenharia de Software
Conceitos Básicos

Fases de Definição
Deve-se analisar os requisitos, recursos e restrições para
• apresentar soluções,
• estudar a viabilidade,
• planejar e gerenciar o desenvolvimento
a partir de estimativas e análise de riscos que se utilizam de
métricas
Esta fase encerra-se com o contrato de desenvolvimento.
Engenharia de Software
Conceitos Básicos
Fase de desenvolvimento
Design de Software
– Design conceitual, design da interface de usuário,
design da arquitetura de software,
design de algoritmos e estruturas de dados

• Implementação e integração
– Codificação, compilação, integração e verificação
de programas (testes, inspeção, depuração)

• Verificação da qualidade
– Testes beta, avaliação de usabilidade, avaliação
de desempenho, etc.

Engenharia de Software
Conceitos Básicos
Fase de Operação
Distribuição e entrega
 Instalação e configuração
 Utilização
 Manutenção
– corretiva – correção de erros
– evolutiva ou adaptativa – novas versões
Novos requisitos
- novas situações de operação – hardware
- sistemas operacionais

Engenharia de Software
Conceitos Básicos

FASE DE RETIRADA
Evolução do software
Sistemas legado
Reengenharia de Software
Engenharia de Software
Conceitos
Processos de Software
Conjunto coerente de atividades para especificar,
projetar, implementar e testar sistemas de
software
Engenharia de Software
Processos
Objetivos :
 Apresentar os modelos de processo de software
 Descrever os diferentes modelos de processos e quando
eles podem ser utilizados
 Descrever em formas gerais os modelos de processo para
engenharia de requisitos, desenvolvimento de software,
testes e evolução
 Apresentar a tecnologia CASE para apoiar atividades do
processo de software
Engenharia de Software
Processos
Modelos genéricos de modelos de processo de software
 O modelo cascata
• Fases de especificação e desenvolvimento separadas e
distintas
 Desenvolvimento evolucionário
• Especificação e desenvolvimento são interfoliadas
 Desenvolvimento formal de sistemas
Um modelo matemático do sistema é transformado
formalmente em uma implementação
 Desenvolvimento baseado em reuso
O sistema é montado a partir de componentes existentes
Engenharia de Software
Processos
Fases do modelo Cascata
 Definição e análise de requisitos
 Projeto do sistema e do software
 Implementação e testes de unidade
 Integração e testes do sistema
 Operação e manutenção
A desvantagem do modelo cascata é a dificuldade de
acomodar as mudanças após o processo ter sido iniciado
Engenharia de Software
Modelo Cascata[sommerville]
Engenharia de Software
Processos
Problemas da fase do modelo cascata



Particionamento inflexível do projeto em fases distintas
Isso torna difícil responder a requisitos do usuário que
mudam
Portanto, esse modelo é apropriado somente quando os
requisitos são bem compreendidos
Engenharia de Software
Processos
Desenvolvimento Evolucionário
 Desenvolvimento exploratório
O objetivo é trabalhar com os clientes e evoluir um sistema
final a partir de uma especificação genérica inicial. O
desenvolvimento se inicia com as partes do sistema que estão
compreendidas.

Fazer protótipos descartáveis
O objetivo é compreender os requisitos do sistema.
O protótipos e concentra em fazer experimentos com partes
dos requisitos que estejam mal compreendidas
Engenharia de Software
Evolucionários [summerville]
Engenharia de Software
Desenvolvimento Evolucionário
Problemas
- Falta de visibilidade do processo
- Os sistemas freqüentemente possuem pouca estrutura

Podem ser exigidas habilidades especiais (p.ex.em linguagens
para desenvolvimento rápido)
Aplicabilidade
-Para sistemas interativos pequenos ou de médio porte
-Para partes de sistemas grandes (p.ex., a interface com o
usuário)
-Para sistemas de vida curta

Engenharia de Software
Processos
Desenvolvimento formal de sistemas
 Baseia-se na transformação de uma especificação
matemática por meio de diferentes representações
para um programa executável
As transformações 'preservam a corretude', de tal
forma que possa ser diretamente mostrado que o
programa está de acordo com a sua especificação

Embutida na abordagem de desenvolvimento de
software chamada ‘Cleanroom’

Engenharia de Software
Desenvolvimento Formal
Engenharia de Software
Desenvolvimento Formal
Problemas
Necessidade de habilidades especiais e treinamento para
aplicar a técnica
Dificuldade de especificar formalmente alguns aspectos do
sistema, tais como a interface com o usuário

Aplicabilidade
Sistemas críticos, especialmente aqueles onde um estudo de
segurança deve ser feito antes de pôr o sistema em
operação

Engenharia de Software
Processos

Desenvolvimento orientado ao reuso
Baseia-se no reuso sistemático, onde sistemas são
integrados a partir de componentes existentes ou
sistemas COTS (Commercial-off-the-shelf)
Estágios do processo
• Análise dos componentes
• Modificação de requisitos
• Projeto do sistema com reuso
• Desenvolvimento e integração

Esta abordagem está se tornando mais importante, mas ainda
há uma experiência limitada com ela
Engenharia de Software
Desenvolvimento orientado ao reuso