Engenharia de Software I Profa. Denise Neves profa.denise@hotmail.com 2011.

Post on 16-Apr-2015

109 views 0 download

Transcript of Engenharia de Software I Profa. Denise Neves profa.denise@hotmail.com 2011.

Engenharia de Software I

Profa. Denise Neves

profa.denise@hotmail.com

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 SoftwareBibliografia

Engenharia de Software

Ian Sommerville

Pearson Education

Engenharia de SoftwareRoger Pressman6ª edição

McGraw-Hill

Artigos sobre Engenharia de Software

Engenharia de SoftwareConceitos Básicos

Software:

São programas de computadores, em suas diversas formas, e a documentação associada.

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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareDocumento : "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 SoftwareDocumento "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 SoftwareConceitos 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 SoftwareConceitos Básicos

Engenharia de SoftwareConceitos 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 SoftwareConceitos 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 dehardware 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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareProjeto

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 SoftwareProjeto

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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareConceitos 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 SoftwareConceitos 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çãode programas (testes, inspeção, depuração)

• Verificação da qualidade– Testes beta, avaliação de usabilidade, avaliaçãode desempenho, etc.

Engenharia de SoftwareConceitos 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 SoftwareConceitos Básicos

FASE DE RETIRADA

Evolução do software- Sistemas legado- Reengenharia de Software

Engenharia de SoftwareConceitos

Processos de Software

Conjunto coerente de atividades para especificar, projetar, implementar e testar sistemas de software

Engenharia de SoftwareProcessos

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 SoftwareProcessos

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 é transformadoformalmente em uma implementação Desenvolvimento baseado em reuso O sistema é montado a partir de componentes existentes

Engenharia de SoftwareProcessos

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 SoftwareModelo Cascata[sommerville]

Engenharia de SoftwareProcessos

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 SoftwareProcessos

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 SoftwareEvolucionários [summerville]

Engenharia de SoftwareDesenvolvimento 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 SoftwareProcessos

Desenvolvimento formal de sistemas Baseia-se na transformação de uma especificaçãomatemática por meio de diferentes representaçõespara um programa executável

As transformações 'preservam a corretude', de talforma que possa ser diretamente mostrado que oprograma está de acordo com a sua especificação

Embutida na abordagem de desenvolvimento desoftware chamada ‘Cleanroom’

Engenharia de SoftwareDesenvolvimento Formal

Engenharia de SoftwareDesenvolvimento 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 SoftwareProcessos

Desenvolvimento orientado ao reuso

Baseia-se no reuso sistemático, onde sistemas sãointegrados a partir de componentes existentes ousistemas 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 SoftwareDesenvolvimento orientado ao reuso