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