Engenharia de software I Ian Sommerville 2006 Engenharia

  • Slides: 27
Download presentation
Engenharia de software I ©Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 1

Engenharia de software I ©Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 1

 • Apresentar a engenharia de software e explicar a sua importância • Dirigir

• Apresentar a engenharia de software e explicar a sua importância • Dirigir as respostas às questões-chave sobre engenharia de software • Apresentar questões éticas e profissionais e explicar por que elas são assunto para engenheiros de software

 • O que é software? • O que é engenharia de software? •

• O que é software? • O que é engenharia de software? • Qual é a diferença entre engenharia de software e ciência da computação? • Qual é a diferença entre engenharia de software e engenharia de sistemas? • O que é processo de software? • O que é um modelo de processo de software?

Quais são os custos da engenharia de software? Quais são os métodos da engenharia

Quais são os custos da engenharia de software? Quais são os métodos da engenharia de software? O que é CASE (Computer-Aided Software Engeneering) Quais são os atributos de um bom software? Quais são os desafios-chave enfrentados pela engenharia de • Quais são os desafios-chave enfrentados pela engenharia de software? • •

 • Qual o primeiro conceito ? • Por onde devemos começar ? •

• Qual o primeiro conceito ? • Por onde devemos começar ? • O que vocês acham ?

 • Reposta não é obvia, segundo Pressman, em 1970 menos de 1% dos

• Reposta não é obvia, segundo Pressman, em 1970 menos de 1% dos profissionais poderiam ter definido o que é software. • Produto que os engenheiros de software projetam e constroem, englobando: • Instruções que produzem algum resultado desejado. • Estrutura de dados que permitem que os programas manipulem adequadamente a informação. • Documentação que descreve o uso dos programas • Software se desgasta ?

 • Software é um produto desenvolvido pelo Eng. De Software e Hardware é

• Software é um produto desenvolvido pelo Eng. De Software e Hardware é um produto desenvolvido pelo Engenheiro Eletrônico ? • Software é lógico • Hardware é físico

 • Programas de computador e documentação associada, tais como requisitos, modelos de projetos

• Programas de computador e documentação associada, tais como requisitos, modelos de projetos e manuais de usuário. • Produtos de software podem ser desenvolvidos para um cliente particular ou para um mercado geral. • Produtos de software podem ser: • Genéricos –desenvolvidos para serem vendidos para uma grande variedade de clientes, por exemplo, softwares para PC, tais como Excel e Word. • Personalizados –desenvolvidos para um único cliente de acordo com as suas especificações. • Um software novo pode ser criado através do desenvolvimento de novos programas, da configuração de sistemas de software genéricos ou da reutilização de um software existente.

 • No desenvolvimento de software conceitualmente não existe um processo manual, todos os

• No desenvolvimento de software conceitualmente não existe um processo manual, todos os envolvidos exercem um trabalho intelectual.

 • Os custos de software dominam os custos de sistemas computacionais. Em um

• Os custos de software dominam os custos de sistemas computacionais. Em um PC, os custos de software são freqüentemente maiores que o custo do hardware. • Manter um software custa mais que desenvolvê-lo. Para sistemas com uma longa vida, os custos de manutenção podem ser muito maiores que os custos de desenvolvimento. • A engenharia de software dedica-se ao desenvolvimento de software com custos adequados

 • • • Efeitos colaterais: é o que tira o sono dos desenvolvedores

• • • Efeitos colaterais: é o que tira o sono dos desenvolvedores de software Correções de erro tendem a gerar novos erros Desenvolvedores temem modificações, tentam evitá-las. Porém, as mudanças são inevitáveis e temos que lidar com isso. Esso processo pode ser menos traumático ? Como ?

 • As economias de TODAS as nações desenvolvidas são dependentes de software. •

• As economias de TODAS as nações desenvolvidas são dependentes de software. • Cada vez mais sistemas são controlados por software. • A engenharia de software se dedica às teorias, métodos e ferramentas para desenvolvimento de software profissional Os dispêndios com software representam uma fração • Os dispêndios com software representam uma fração significativa do PIB em todos os países desenvolvidos

 • É uma disciplina de engenharia relacionada com todos os aspectos da produção

• É uma disciplina de engenharia relacionada com todos os aspectos da produção de software, desde a especificação até a manutenção. • Por que Disciplina? – Os engenheiros aplicam teorias métodos e ferramentas onde for apropriado e de forma seletiva mesmo quando não existem teorias e métodos aplicáveis, e fazem as coisas funcionarem. Trabalham também sob restrições organizacionais e financeiras. • Todos os aspectos? – Porque também se relaciona com atividades do gerenciamento do projeto, desenvolvimento de ferramentas, métodos e teorias que apoiem a produção. • Em geral utiliza-se uma abordagem sistemática e organizada, mas pode ser extremamente eficaz selecionar uma abordagem alternativa e menos formal para uma determinada circunstância.

 • A ciência da computação dedica-se à teoria e aos fundamentos; já a

• A ciência da computação dedica-se à teoria e aos fundamentos; já a engenharia de software dedica-se aos aspectos práticos de desenvolvimento e de entrega de software para o uso. • Teorias de ciência da computação são ainda insuficientes para atuar como uma base completa para a engenharia de software (diferente de, por exemplo, física e engenharia elétrica).

 • A engenharia de sistemas dedica-se aos aspectos de desenvolvimento de sistemas baseados

• A engenharia de sistemas dedica-se aos aspectos de desenvolvimento de sistemas baseados em computador, incluindo a engenharia de hardware, de software e de processo. A engenharia de software é parte desse processo que se dedica ao desenvolvimento da infra-estrutura do software, controle, aplicações e banco de dados no sistema. • Os engenheiros de sistema estão envolvidos na especificação, no projeto de arquitetura e na integração e implantação do sistema.

 • É um conjunto de atividades cuja meta é o desenvolvimento ou evolução

• É um conjunto de atividades cuja meta é o desenvolvimento ou evolução de software. • As atividades genéricas em todos os processos de software são: • Especificação –o que o sistema deve fazer e suas restrições de desenvolvimento. • Desenvolvimento –produção do sistema de software. • Validação –verificação de que o software é o que o cliente deseja. • Evolução –mudança do software em resposta às demandas de mudança. • Diferentes tipos de sistemas necessitam de diferentes tipos de desenvolvimento. Ex. : Alguns podem requerer que sejam especificados totalmente antes do desenvolvimento, para outros, essas atividades podem ocorrem em paralelo. O uso de um processo inadequado pode reduzir a qualidade ou a utilidade do produto de software a ser desenvolvido e/ou aumentando os custos de desenvolvimento.

 • Uma representação simplificada de um processo de software, apresentado sob uma perspectiva

• Uma representação simplificada de um processo de software, apresentado sob uma perspectiva específica. • Exemplos de modelos de processo são: • Modelo de workflow –seqüência de atividades; • Modelo de fluxo de dados –fluxo de informações; • Modelo de papel/ação –quem faz o quê. • Modelos gerais de processo • Cascata; • Desenvolvimento iterativo; • Engenharia de software baseada em componentes.

 • Aproximadamente 60% dos custos são custos de desenvolvimento e 40% são custos

• Aproximadamente 60% dos custos são custos de desenvolvimento e 40% são custos de testes. Para software sob encomenda, os custos de evolução normalmente excedem de desenvolvimento. • Os custos variam dependendo do tipo de sistema que está sendo desenvolvido e dos requisitos de atributos de sistema, tais como desempenho e confiabilidade. • A distribuição de custos depende do modelo de desenvolvimento que é usado.

 • Abordagens estruturadas para desenvolvimento de software que incluem modelos de sistema, notações,

• Abordagens estruturadas para desenvolvimento de software que incluem modelos de sistema, notações, regras, recomendações de projeto e guia de processo. • Descrições de modelo de sistema: • Descrições de modelos gráficos que devem ser produzidos; • Regras • Restrições aplicadas aos modelos de sistema; • Recomendações: • Recomendações de boas práticas de projeto; • Guia de processo: • Quais atividades devem ser seguidas.

 • São ferramentas utilizadas para dar apoio as atividades do processo de software,

• São ferramentas utilizadas para dar apoio as atividades do processo de software, tais como análise, modelagem, depuração e testes. Todos os métodos vêm atualmente com uma tecnologia case associada.

 • • Qualidade no produto final Produtividade Agilizar o tempo para tomada de

• • Qualidade no produto final Produtividade Agilizar o tempo para tomada de decisão Menor quantidade de códigos de programação Melhoria e redução de custos na manutenção Agilidade no retrabalho do software Maior facilidade para desenvolvimento E tem desvantagens ? • Incompatibilidade de ferramentas • Treinamento para utilização

 • • Controle de Versão Gerência de projetos Edição Ferramentas de prototipagem Suporte

• • Controle de Versão Gerência de projetos Edição Ferramentas de prototipagem Suporte a programação Análise de programas Teste • • Depuração Geração de código Documentação Reengenharia Ferramentas Integradas Ferramentas de Métricas Ferramentas de Planejamento

 • O software deve fornecer a funcionalidade e o desempenho requeridos para o

• O software deve fornecer a funcionalidade e o desempenho requeridos para o usuário e deve ser manutenível, confiável e aceitável. • Facilidade de manutenção • O software deve evoluir para atender às necessidades de mudança; • Confiança • O software deve ser confiável; • Eficiência • O software não deve desperdiçar os recursos do sistema; • Usabilidade • O software deve ser aceito pelos usuários para o qual foi projetado. Isso significa que ele deve ser compreensível, usável e compatível com outros sistemas.

 • Desafio da heterogeneidade: É necessário que os sistemas de software operem com

• Desafio da heterogeneidade: É necessário que os sistemas de software operem com sistemas distribuídos e também com sistemas mais antigos (legados). Necessário técnicas para desenvolver sistemas flexíveis e confiáveis para adaptar-se a essa heterogeneidade. • Desafio de entrega: Muitas técnicas tradicionais demandam tempo para obter a qualidade. O desafio da entrega consiste em reduzir os tempos de entrega dos sistemas grandes e complexos sem comprometer a qualidade. • Desafio da confiança: Os softwares estão presentes em todos os aspectos da nossa vida e precisamos confiar nele. O desafio da confiança consiste em desenvolver técnicas que demonstrem aos usuários que é possível confiar nele.

 • Confidencialidade: respeitar a confidencialidade de seus funcionários ou clientes independente ou não

• Confidencialidade: respeitar a confidencialidade de seus funcionários ou clientes independente ou não de acordo formal. • Competência: Não deve conscientemente aceitar um trabalho que esteja fora da sua competência. • Direitos sobre propriedade intelectual: Estar ciente das leis locais, patentes e assegurar que a propriedade intelectual de funcionários e clientes esteja protegida. • Mau uso de computadores: Evitar mau uso desde o trivial (como jogos por exemplo) até o mais sério (disseminação de vírus).