02 Introdução à engenharia de software - conceitos fundamentais

Preview:

DESCRIPTION

Tópicos para discussão em sala -

Citation preview

Introdução à Engenharia de

Software

Conceitos fundamentais

A situação do software

A sofisticação do software ultrapassou nossa

capacidade de construir um software que extraia o

potencial do hardware.

Nossa capacidade de construir programas não pode

acompanhar o ritmo da demanda de novos

programas.

Nossa capacidade de manter os programas

existentes é ameaçada por projetos ruins e recursos

inadequados

A grandeza do software na atualidade

A economia de todas as nações desenvolvidas são dependentes de software

Muitos sistemas são controlados por software

Veja – Agosto 2009

Custos de software

Os custos de software geralmente determinam os

custos de sistemas.

Em um PC:

Windows 7 Professional – R$629,00

MS Office 2010 Professional – R$1399,00

MS Visual Studio .NET 2010 Professional – R$1899,00

Licença de acesso para um usuário SAP – R$999,00 (por

ano!)

O maior custo de software é a manutenção.

A engenharia de software se preocupa com

custo/benefício (ROI)

Qualidade — Terminologias

Erro: erro humano

Defeito: resultado do erro evidenciado em algum

desenvolvimento ou manutenção do produto

Falha: divergência entre o comportamento

requerido para o sistema e o comportamento real.

Perguntas frequentes

O que é software?

Qual a diferença entre Engenharia de Software e Ciências da Computação?

Qual é a diferença entre Engenharia de Software e Engenharia de Sistemas?

O que é um processo de software

O que é um modelo de processo de software?

Quais são os custos da Engenharia de Software?

O que são métodos de Engenharia de Software?

O que é CASE (Computer-Aided Software Engineering)

Quais são as características de um software bom?

Quais são os principais desafios da Engenharia de Software?

O que é Software?

Programas de computador e documentação associada.

Produtos de Software podem ser, basicamente: Genéricos: produzidos e vendidos no mercado a

qualquer cliente

Produtos sob encomenda: são desenvolvidos para um cliente em particular – MySoftware.

Participantes do desenvolvimento de

software sob encomenda

Qual é a diferença entre Engenharia de

Software e Ciências da Computação?

A Ciência da Computação

se preocupa com as

teorias e os métodos

fundamentais.

A Engenharia de Software

se dedica aos problemas

práticos da produção de

software.

As teorias da Ciência da

Computação não são

suficientes por si só.

Qual é a diferença entre Engenharia de

Software e Engenharia de Sistemas?

Engenharia de sistemas se ocupa de todos os

aspectos de desenvolvimento e da evolução de

sistemas baseado em computadores, incluindo

hardware, software e engenharia do processo.

A Engenharia de Software é parte deste processo.

Engenheiros de sistemas estão envolvidos na

especificação do sistema, na definição de sua

arquitetura geral, integração e desenvolvimento.

O que é um processo de software?

Um conjunto de atividades cujo objetivo é o

desenvolvimento ou evolução do software.

Atividades comuns a todo processo de

desenvolvimento de software são:

Especificação – o que o sistema deveria fazer (ou não -

constraints);

Desenvolvimento – produção do software;

Validação – verificação de que o software é o que o

cliente quer;

Evolução – modificações do software em resposta às

mudanças de requisitos.

O que é um modelo de processo de software?

Uma descrição simplificada de um processo de software, que é representada a partir de uma perspectiva específica.

Exemplos de tipos de modelos de processos de software: Workflow – sequência de atividades;

Fluxo de dados ou atividades – demonstra o fluxo da informação;

Papel/Ação – quem faz o que.

Modelos genéricos de desenvolvimento Waterfall;

Desenvolvimento evolucionário;

Especificação formal;

Modelagem a partir de componentes reutilizáveis.

Quais são os custos de Engenharia de

Software?

De maneira geral: 60% dos custos são custos de desenvolvimento;

40% são custos de teste.

Para software personalizado, o custo de evolução frequentemente ultrapassa os custos de desenvolvimento.

Custos podem variar, dependendo do tipo de software que está sendo desenvolvido e os requisitos de atributos como performance e confiabilidade.

A distribuição dos custos depende do modelo de desenvolvimento que está sendo utilizado.

O que são métodos de Engenharia de

Software?

Uma abordagem estruturada para o

desenvolvimento de software que inclui:

Descrição de modelos – gráficos, textuais, documentais,

etc.

Regras – restrições aplicadas a modelos de sistemas.

Padrões de design - recomendações de melhores

práticas.

Guias de processo – quais atividades seguir,

O que é CASE (Computer-Aided Software

Engineering)?

Sistema de software cujo objetivo é fornecer suporte

automatizado para as atividades de processo de

software. Sistemas CASE são frequentemente

utilizados para apoiar a aplicação dos métodos.

Quais são os atributos de um bom

software?

Atender aos requisitos solicitados pelo usuário

Performance

Manutenibilidade – o software precisa evoluir para

atender a novos requisitos.

Confiabilidade – em caso de falha o software não

pode causar danos significativos ao usuário.

Eficiência – usar os recursos do sistema com

parcimônia.

Usabilidade – o software deve poder ser utilizado

pelos usuários para os quais ele foi desenhado.

Quais são os principais desafios

enfrentados pela Engenharia de Software?

Sistemas legados – antigos, mas valiosos.

Heterogeneidade – diversidade crescente de

plataformas, de software distribuído, mistura muito

grande de software e hardware.

Demanda x Tempo de entrega

Construindo uma casa versus um software

A casa

Identificar e analisar os requisitos

Produzir e documentar todo o projeto

Detalhar as especificações

Identificar e projetar os componentes

Construir cada componente

Testar cada componente

Integrar os componentes

Fazer as modificações finais

Manutenção contínua

O software

Análise e definição dos requisitos

Projeto do sistema

Projeto do programa

Escrever os programas

Testes das unidades

Teste de integração

Teste do sistema

Entrega do sistema

Manutenção

Os papéis na equipe de desenvolvimento