Engenharia de
Software I
Profa. Denise Neves
[email protected]
2011
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

Diferença entre computação e engenharia de
software
A ciência da computação está relacionada com
teorias e fundamentos, engenharia de
software está relacionada com a prática e o
desenvovlimento de SW.
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
e a documentação associada.
diversas formas,
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.
Produtos genéricos : stand-alone. Produzidos e vendidos no
mercado.
Produtos sob encomenda : sistemas encomendados.
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.
Responsabilidade profissional e ética.
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
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
Download

Engenharia de Software