©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).
Download

Engenharia-de-software-I-Aula