adélia barros ([email protected]) introdução à engenharia de software

58
Adélia Barros ([email protected]) Introdução à Engenharia de Software

Upload: internet

Post on 16-Apr-2015

104 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Adélia Barros([email protected])

Introdução à Engenharia de Software

Page 2: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Informações Importantes Datas

◦ 29/09/08 - 1ª avaliação do semestre ◦ 24 e 26/11/08 – Apresentação dos projetos◦ 03/12/08 - 2ª avaliação do semestre ◦ 15/12/08 - 2ª chamada◦ 22/12/08 - Avaliação Final

Critérios de avaliação:◦ Entrega e apresentação de trabalhos em grupos

valendo 30% da nota geral;◦ Duas provas valendo, cada uma, 35% da nota

geral.

Page 3: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Objetivos Definir a engenharia de software e explicar sua

importância

Discutir os conceitos de produto de software e processo de software

Explicar a importância da visibilidade do processo

Introduzir o conceito de software de qualidade

Page 4: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Tópicos Contexto e definições Características do (produto) software Software de Qualidade Crise do software Mitos do software Processo de software

◦ Paradigmas de desenvolvimento

Page 5: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A economia de todos os países do mundo depende cada vez mais de software.

Existem cada vez mais sistemas controlados por software.

Os gastos com desenvolvimento de software representam uma fração significativa do PIB de muitos países.

Contexto

Page 6: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Contexto O desenvolvimento de software é muitas vezes

puramente artesanal; As pessoas desenvolvendo sistemas erram

constantemente nas suas estimativas de custo e tempo;

Vários sistemas contém muitos erros; Consertar erros muitas vezes produz mais erros; O tamanho dos sistemas cresce

consideravelmente.

Page 7: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Contexto: exemplos interessantes

Estudo feito em 1979 pelo governo dos Estados Unidos em relação ao software produzido:◦ 2% Funcionava;◦ 3% Funcionaria com poucas correções;◦ 45% Entregues mas nunca foram usados com

sucesso;◦ 20% Usados, mas tremendamente modificados ou

abandonados;◦ 30% Pagos, mas nunca foram terminados e/ou

entregues.

Page 8: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Contexto: exemplos interessantes

Dados levantados no Chaos Report, estudo clássico feito pelo Standish Group sobre projetos de desenvolvimento (Chaos, 1994):◦ 10% terminam dentro do prazo estimado;

◦ 25% são descontinuados antes de chegarem ao fim;

◦ 60% dos projetos possuem custo acima do esperado;

◦ Atraso médio nos projetos: um ano.

Page 9: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Contexto: exemplos interessantes A proporção dos custos com software e

hardware mudou bastante ao longo do tempo: ◦ Década de 60: 20% -- 80%◦ Década de 70: 50% -- 50%◦ Década de 90: 80% -- 20%◦ Atualmente: 90% -- 10%

Page 10: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Custo do software geralmente domina o custo do desenvolvimento. ◦ Os custos do software de um PC são

geralmente maiores do que do hardware. Software custa mais para manter do que

para desenvolver! ◦ Os custos de manutenção são várias vezes

maiores do que o de desenvolvimento

Custo do Software

Page 11: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Definições de Engenharia de Software

Disciplina que se preocupa com os problemas práticos inerentes ao desenvolvimento de sistemas◦ Não é simplesmente programação;

◦ Também não é só ciência da computação;

◦ Uso de teorias (resultados), métodos, e ferramentas na resolução de problemas.

Page 12: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Definições de Engenharia de Software

É o estabelecimento e uso de sólidos princípios de engenharia visando obter economicamente um software que seja confiável e que funcione eficientemente em máquinas reais [Bauer69].

Page 13: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Definições de Engenharia de Software

É a aplicação de ciência e matemática visando tornar as capacidades do equipamento úteis para o ser humano através de programas, procedimentos e documentação;

É a abordagem sistemática para o desenvolvimento, operação, manutenção, e aposentadoria de Software.

Page 14: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Características da Engenharia de Software

Engenharia de Software se refere a software (sistemas) desenvolvidos por grupos ao invés de indivíduos;

Engenharia de Software usa princípios de engenharia ao invés de arte, e

Engenharia de Software inclui tanto aspectos técnicos quanto não técnicos.

Page 15: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Características da Engenharia de Software

O principal objetivo da Engenharia de Software é produzir, a um custo baixo, software de qualidade.◦Custo é fácil de ser medido;◦Qualidade não é.

O processo de planejamento é crucial na engenharia de software. ◦ A implementação é só uma parte do processo.

Page 16: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Características da Engenharia de Software

A Engenharia de Software engloba todo o ciclo de vida do software (concepção, implementação, uso e manutenção).

Page 17: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

O que é Software? Há 20 anos, pouquíssima gente sabia

explicar o que é software. Hoje, praticamente todo mundo acha que

sabe ... Software não é só programas! A documentação necessária para instalar,

usar, e manter os programas é parte integrante do software.

Page 18: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

O que é Software? Definição - Software é:

◦ Instruções (programas de computador) que, quando executadas, produzem a função e o desempenho desejados;

◦ Estruturas de dados que permitem a manipulação das informações;

◦ Documentos que descrevem a operação e uso dos programas.

Page 19: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Tipos de software

Page 20: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Atributos dos produtos de Software

Manutenibilidade◦ Deve ser possível para o software evoluir de forma a

atender a requisitos que mudam. Nível de confiança

◦ Software não deve causar prejuízo físico ou econômico no caso de uma falha.

Eficiência◦ Software não deve desperdiçar recursos do sistema.

Usabilidade◦ O software deve ter uma interface de usuário

adequada e ser documentado.

Page 21: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Importância das características do produto

A importância relativa destas características depende do produto e do ambiente em que ele será usado

Em alguns casos, alguns dos atributos podem ser mais importantes◦ Em sistemas de segurança críticos, de tempo-

real, os atributos chave podem ser confiança e eficiência

Page 22: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

É software que “funciona” (é confiável): ◦ ele não deve falhar mais do que o especificado na

documentação. É software que funciona de acordo com a sua

especificação:◦ Mesmo software que aparentemente funciona pode

não estar satisfazendo a sua especificação. É software que é fácil de manter.

◦ Código bem escrito◦ Documentação apropriada.

O que é software de qualidade ?

Page 23: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

O que é Software de qualidade?

É software que funciona de maneira eficiente.◦ Software mais eficiente não é necessariamente software

que roda mais rápido ou que gasta menos memória/disco;

◦ A complexidade do código e o custo também são fatores importantes.

É software que possui uma boa interface com o usuário:◦ Muitos softwares não funcionam direito porque são

difíceis de usar.

Page 24: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A Crise de Software O que é esta crise?

Métodos de desenvolvimento de software existentes não são bons o bastante para o desenvolvimento de software de grande porte.

Page 25: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A Crise de Software:crise? CRISE?

◦ Momento perigoso ou decisivo.◦ Decadência, carência, queda.◦ Mas a chamada crise de software já dura mais de

30 anos. DOENÇA?

◦ No momento não se conhece uma cura, apenas paliativos para reduzir a dor.

Page 26: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Therac-25 Equipamento de Radioterapia. Entre 1985 e 1987 se envolveu em 6

acidentes, causando mortes por overdoses de radiação.

Software foi adaptado de uma antecessora, Therac-6:◦ falhas por falta de testes integrados◦ falta de documentação

Page 27: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Denver International Airport

Custo do projeto: US$ 4.9 bilhões◦ 100 mil passageiros por dia◦ 1,200 vôos◦ 53 milhas quadradas◦ 94 portões de embarque e

desembarque◦ 6 pistas de pouso /

decolagem

Page 28: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Denver International Airport

Erros no sistema automático de transporte de bagagens (misloaded, misrouted, jammed):◦ Atraso na abertura do aeroporto com

custo total estimado em US$360 Milhões

86 milhões para consertar o sistema

Page 29: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Ariane 5

Page 30: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Ariane 5

Projeto da Agência Espacial Européia que custou:◦ 10 anos.◦ US$ 8 Bilhões.

Capacidade 6 toneladas. Garante supremacia européia

no espaço.

Page 31: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Resultado Explosão 40 segundos

após a decolagem. Destruição do foguete

e carga avaliada em US$ 500 milhões.

Page 32: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

O que aconteceu? (I) Fato: o veículo detonou suas cargas

explosivas de autodestruição e explodiu no ar. Por que?

Porque ele estava se quebrando devido às forças aerodinâmicas. Mas por que?

O foguete tinha perdido o controle de direção (atitude). Causa disso?

Os computadores principal e back-up deram shut-down ao mesmo tempo.

Page 33: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

O que aconteceu? (II) Por que o Shut-down? Ocorrera um run

time error (out of range, overflow , ou outro) e ambos computadores se desligaram. De onde veio este erro?

Um programa que convertia um valor em ponto flutuante para um inteiro de 16 bits recebeu como entrada um valor que estava fora da faixa permitida.

Page 34: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A Crise de Software: principais problemas

Os grandes softwares não funcionam adequadamente;

Os projetos de software estão sempre atrasados;

Os custos dos projetos de desenvolvimento de software são sempre maiores do que o previsto.

Page 35: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A Crise de Software:principais problemas

Os computadores estão cada vez mais rápidos, sofisticados, e baratos;

Os softwares estão cada vez maiores e mais sofisticados, e a produtividade não acompanha a demanda;

Os custos com manutenção são muito altos: para sistemas com uma longa vida, eles são várias vezes maiores do que os custos de desenvolvimento.

Page 36: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A Crise de Software:outras dificuldades

Dedica-se pouco tempo à coleta de dados (requisitos dos clientes):

◦ Normalmente apenas um subconjunto das necessidades do cliente são levadas em conta ...

◦ Os profissionais estão sempre com muita pressa para começar a programar ...

Page 37: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A Crise de Software:outras dificuldades

A qualidade geralmente é suspeita ...◦ Testes sistemáticos e tecnicamente completos

raramente são feitos;◦ A flexibilidade da maioria dos softwares também é

bastante limitada;◦ A concorrência com software barato mas sem

qualidade, feito por pessoas sem qualificação adequada, é grande.

Page 38: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A Crise de Software:outras dificuldades

Não há muito interesse em se gastar tempo para se entender mais a respeito de estimativas, produtividade, precisão e eficácia de novos métodos e novas ferramentas, etc.

A resistência a mudanças é grande ...

Page 39: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

A Crise de Software:existe solução?

O uso de melhores técnicas, métodos, e ferramentas.

Mais treinamento e educação: ◦ Pouco investimento!

Page 40: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software Propagam desinformação e confusão. No passado eram tomados como verdades

absolutas. É difícil mudar hábitos antigos. Existem 3 tipos de mitos:

◦ Do cliente;◦ Administrativos, e ◦ Do profissional.

Page 41: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software: mitos do cliente

Uma declaração geral dos objetivos é suficiente para começar a escrever os programas: podemos preencher os detalhes mais tarde.◦ Uma definição inicial ruim é a principal causa da

maioria dos fracassos no desenvolvimento de software.

◦ Estudo baseado em 6700 sistemas feito em 1997, mostrou que os custos resultantes de um fraco entendimento do problema podem ser 200 vezes maiores que o necessário (Carper Jones, 1997).

Page 42: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software: mitos do cliente As necessidades do projeto mudam

continuamente mas isto não é problema pois o software é flexível.

◦ Os requisitos do software podem mudar, mas o custo da mudança varia bastante dependendo da fase em que ela ocorre: Definição . . . . . . . . . . . . . . . . . x Desenvolvimento . . . . . . . . . . 1.5x a 1.6x Manutenção . . . . . . . . . . . . . . 60x a 100x

Page 43: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software: mitos administrativos Temos um manual de padrões e

procedimentos para a construção de software e isto basta!◦ O manual é usado?◦ Os profissionais de software sabem que ele

existe?◦ Ele reflete as técnicas mais modernas?◦ Ele é completo?

Page 44: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software: mitos administrativos Temos ferramentas de desenvolvimento de

última geração, pois compramos os computadores mais novos!

◦ Em geral, ter ferramentas de auxílio ao desenvolvimento de software (ex. CASE) é mais importante do que ter a última geração em termos de hardware.

Page 45: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software: mitos administrativos Estamos atrasados no prazo: podemos tirar

o atraso colocando mais programadores no projeto.

◦ Normalmente isto não funciona!

◦ As novas pessoas precisam se integrar ao projeto ...

Page 46: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software: mitos do profissional

Assim que escrevermos o programa e ele funcionar o nosso trabalho está terminado.◦ Em geral, mais de 70% de todo o esforço gasto num

programa ou sistema ocorre depois que ele foi entregue ao cliente (manutenção);

Page 47: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software: mitos do profissional Enquanto o programa não estiver

funcionando não há como avaliar a sua qualidade.

◦ Revisões técnicas podem ser feitas desde o começo de um projeto e são uma das formas mais efetivas de garantia de qualidade de software.

Page 48: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Mitos do Software: mitos do profissional A única coisa a ser entregue em um projeto

bem sucedido é o programa funcionando. ◦ O programa funcionando é só uma parte;

◦ Uma boa documentação incluindo os requisitos, projeto das estruturas de dados, especificação de testes, etc. é o alicerce para um projeto bem sucedido e serve como guia de manutenção.

Page 49: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Processo de Software O que é processo de software:

◦ É um conjunto de todas as atividades necessárias para definir, desenvolver, testar e manter um produto de software;

Objetivos de um processo de desenvolvimento:◦ Definir quais as atividades a serem executadas;◦ Quando, como e por quem as atividades serão

executadas;◦ Prover pontos de controle para verificar o andamento

do desenvolvimento;◦ Padronizar a forma de desenvolver software em uma

organização.

Page 50: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Processo de Software Através de uma visão geral um processo de

software pode ser considerado assim (Uma Visão

Genérica: 3 Fases):◦ Definição - “o que”

Levantamento de Requisitos; Análise de Sistemas.

◦ Desenvolvimento - “como” Projeto; Geração do Código; Teste.

◦ Implantação e Manutenção

Page 51: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Levantamento de Requisitos Compreensão do problema; Usuários e desenvolvedores devem ter a

mesma visão do problema; Definir as necessidades dos futuros usuários; Definição do Escopo; Entender o domínio do negócio que deve ser

automatizado.

Page 52: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Levantamento de Requisitos Requisitos Funcionais:

◦ Definem as funcionalidades do sistema. Requisitos não-funcionais:

◦ Declaração as características de qualidade que o sistema deve possuir;

◦ Declaração das restrições sobre o desenvolvimento do sistema.

Ordenação dos requisitos.

Page 53: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Análise Entendimento geral do problema que se tem para resolver; Divisão do sistema em módulos; Construção de modelos para representar o sistema; Definir o que o sistema proposto deve fazer; Análise de domínio

◦ Modelagem de objetos do mundo real; Análise da aplicação

◦ Identificação de objetos que só tem sentido no contexto de um sistema de software;

Modelo de análise.

Page 54: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Projeto de Sistemas

Modelar o que e como será implementado; Definir a arquitetura que será utilizada; Diagramas para facilitar o entendimento;

◦UML Modelo de Dados; Modelo da implementação; Componentes do sistema; Padrões de interface gráfica.

Page 55: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Implementação de Sistemas Tradução da descrição computacional obtida

na fase de projeto em código executável; Criar ou adquirir os componentes identificados

na fase de projeto; Montar os componentes; Implementar o sistema novo ou modificado; Testes unitários.

Page 56: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Testes de Sistemas

Realização de Testes Unitários; Preparação do Projeto de Testes; Módulos da aplicação;

◦ Outras aplicações; Relatório de testes.

Page 57: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Implantação de Sistemas Planejamento da Implantação; Treinamento do Usuário Final;

◦ Preparação do material para treinamento; Preparação do Ambiente de Produção;

◦ Banco de Dados;◦ Versão do Software que será instalada.

Plano para atendimento na fase de garantia;

Preparação do “HelpDesk”.

Page 58: Adélia Barros (adelia_nassau@yahoo.com.br) Introdução à Engenharia de Software

Manutenção

Processo geral de modificação de um sistema depois de ter sido colocado em uso;

Tipos de Manutenção◦ Para reparar defeitos;◦ Para adaptar o software a ambiente operacional

diferente;◦ Para fazer acréscimo de funcionalidade;◦ Melhorar o desempenho.