©Ian Sommerville 2006Engenharia de Software, 8ª. edição. Capítulo 1 • 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? • Qual é a diferença entre engenharia de software e ciência da computação? • Qual é a diferença entre engenharia de software e engenharia • 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 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 ? • O que vocês acham ? • 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 é 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 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 envolvidos exercem um trabalho intelectual. • 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 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. • 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 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 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 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 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 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 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, 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, 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 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 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 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 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 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).