1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail:...

22
1 ENGENHARIA DE SOFTWARE: ENGENHARIA DE SOFTWARE: INTRODUÇÃO INTRODUÇÃO Professora: Aline Vasconcelos e-mail: [email protected]

Transcript of 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail:...

Page 1: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

1

ENGENHARIA DE SOFTWARE:ENGENHARIA DE SOFTWARE:INTRODUÇÃOINTRODUÇÃO

Professora: Aline Vasconcelos

e-mail: [email protected]

Page 2: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

2

O que é Software?• “Instruções (programas de computador) que,

quando executadas, produzem a função e o desempenho desejados”. [Pressman, 1995]

• Sistemas de software: conjunto de programas compreendendo perspectivas diversas como dados, procedimentos, interface e regras operacionais, associados a um projeto de concepção e uma documentação.

Page 3: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

3

Histórico da sua Evolução

Quarta Era:-Sistemas de desktop poderosos-Redes de computadores- Tecnologia de orientação a objetos- Sistemas especialistas- Redes neurais artificiais- Computação paralela

Terceira Era:- Sistemas distribuídos- "Inteligência" embutida- Hardware de baixo custo- Impacto de consumo

1950 1960 1970 1980 1990 2000

Figura 1 – A evolução do Software

Primeira Era: - Orientação batch- Distribuição limitada- Software Customizado

Segunda Era:- Multi-usuário- Tempo real- Bancos de dados- Produto de software

Page 4: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

4

Primeira Era

• programação de computadores era vista como uma arte "secundária" para a qual havia poucos métodos sistemáticos;

• evolução e aperfeiçoamento do hardware eram colocados em primeiro plano;

• softwares eram projetados sob medida nas organizações.

Page 5: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

5

Segunda Era

• multi-programação e sistemas multi-usuários;• sistemas interativos através de terminais de

acesso;• armazenagem on-line leva à primeira geração de

sistemas de gerenciamento de bancos de dados;• altos custos e esforço em manutenção: primeira

"crise do software”.

Page 6: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

6

Terceira Era

• advento e generalizado uso de microcomputadores, computadores pessoais e poderosas estações de trabalho (workstations);

• sistemas distribuídos x sistemas centralizados;

• redes locais:sistemas departamentais e em pequenas e médias empresas;

• crescem as “software houses”.

Page 7: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

7

Quarta Era

• Problemas genéricos: nossa capacidade de construir programas não

acompanha o ritmo da demanda de novos programas;

nossa capacidade de manter programas existentes é ameaçada por projetos ruins e recursos inadequados.

• Mudança de paradigma em função da tecnologia de orientação a objetos.

Page 8: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

8

Quinta Era (do ano 2000 em diante)

• Desenvolvimento geograficamente distribuído (trabalho cooperativo);

• Componentes de software (reutilização e reciclagem);

• Fortalecimento dos especialistas do domínio;

• Desenvolvimento para a Web.

Page 9: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

9

Acontecimentos Marcantes:• 1969 - 1971: boas práticas de programação - surge a

linguagem Pascal.• 1972 - 1973: programação estruturada, ciclo de vida.• 1974 - 1975: procedimentos para teste sistemático e

prova formal de programas;• 1976-1977: focos: requisitos, especificação e projeto;

paradigma de desenvolvimento estruturado.• 1978 - 1980: era CASE.• 1990 – 2004: orientação a objetos, desenvolvimento para

Web, desenvolvimento baseado em componentes.

Page 10: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

10

Componentes do Software: Componentes executáveis em máquina, como:

instruções de programas, estruturas de dados (bancos de dados), interfaces.

Componentes não executáveis, como: documentação de projeto e análise, manual de usuário e de produção.

– A reutilização é uma característica importante de um A reutilização é uma característica importante de um componente de software de alta qualidade!!!componente de software de alta qualidade!!!

Page 11: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

11

Categorias de Software• Software Básico: uma coleção de programas escritos para servir a outros

programas. Ex: compiladores, editores, sistemas operacionais, drivers etc.

• Software de Tempo Real: programas que monitoram, analisam e controlam

eventos do mundo real. Um sistema de tempo real precisa responder dentro de restrições de tempo especificadas, requerendo um bom tempo de resposta (diferente de sistemas interativos ou on-line). Ex: software de controle de metrô, de usina nuclear, de satélites etc.

• Software para o Negócio: a maior área de desenvolvimento de software. Sistemas

de Informação: controle escolar, controle de estoque, sistema de biblioteca, comércio eletrônico, pontos de venda etc.

• Software Aplicativo: softwares de escritório, para computadores pessoais. Ex:

editores de texto, planilhas eletrônicas, software de acesso a e-mails etc.

Page 12: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

12

Categorias de Software

• Software de Inteligência Artificial: fazem uso de algoritmos não numéricos

para a resolução de problemas complexos, que não podem ser tratados de forma convencional. Softwares baseados em heurísticas e em conhecimento. Ex: Redes Neurais (reconhecimento de voz, de imagem), Sistemas Nebulosos (jogos inteligentes, gerenciamento de informações imprecisas) etc.

• Software Embarcado (ou embutido): normalmente residem em memória não

volátil (ROM) e são usados para controle de produtos e sistemas para o mercado consumidor industrial. Ex: programas em forno de microondas, celulares, computadores de bordo em automóveis etc.

• Software para Engenharia e Científicos: software para apoio a cálculos

matemáticos, físicos e para apoio a atividades de engenharia. Ex: simulação de sistemas, ferramentas CASE (computer-aided software engineering), ferramentas CAD (computer-aided design) etc.

Page 13: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

13

Problemas no Desenvolvimento de Software:

As estimativas de prazo e custo freqüentemente são imprecisas.

A produtividade do pessoal da área de software não tem acompanhado a

demanda por seus serviços.

A qualidade do software, às vezes, é inferior à adequada.

Os índices de erros em novos programas muitas vezes causam insatisfação ao

usuário e falta de confiabilidade no produto.

Os esforços e custo em manutenção são, em geral, maiores que os próprios

esforços e custo destinados ao desenvolvimento do produto.

Page 14: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

14

Solução aos Problemas:• O desenvolvimento de software pode ser visto como um problema

de engenharia? Sim, pois busca: A criação de soluções economicamente efetivas para

problemas práticos. A utilização de conhecimento científico para a criação de produtos a serviço do homem.

• Eng. de Software: "aplicação prática do conhecimento científico no projeto e construção de programas e da documentação requerida para desenvolver, operar e manter estes programas”.[Barry Böehm]

Page 15: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

15

Engenharia de Software:• “Uma disciplina que lida com a construção de sistemas de

software tão grandes e complexos, que precisam ser construídos por uma equipe ou equipes de engenheiros.” [Ghezzi, Jazayeri, Mandrioli]

• “Uma disciplina que visa à produção de software sem falhas (confiáveis), entregue no prazo e dentro do orçamento previsto, satisfazendo às necessidades do usuário. Além do mais, o software deve ser fácil de ser modificado quando as necessidades do usuário se modificam.” [Schach]

Page 16: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

16

Para garantir um bom Desenvolvimento de Para garantir um bom Desenvolvimento de Software:Software:

• Modelo de Ciclo de Vida deve ser adotado;

• Processos devem ser seguidos;

• Métodos e ferramentas de apoio devem ser buscados;

• Utilização de técnicas para estimativa de custos;

• Produção de documentação adequada;

• Utilização de técnicas para o controle de qualidade.

Page 17: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

17

Processos de Desenvolvimento de SoftwareProcessos de Desenvolvimento de Software

• Um ProcessoProcesso é um conjunto de passos parcialmente ordenados, constituídos por atividades, métodos, práticas e transformações, utilizado para se atingir uma meta. Esta meta está associada a um ou mais resultados concretos finais, que são os produtos da execução do processo.

• Um processo é uma receita que é seguida por um projeto: o projeto concretiza uma abstração, que é o processo.

• Em um Processo de Desenvolvimento de Software, o ponto de partida é a escolha de um Modelo de Ciclo de Vida.

• Ciclo de Vida do SoftwareCiclo de Vida do Software inicia-se com a definição do sistema e só termina com a operação do sistema na sua fase de produção até a sua descontinuação.

Page 18: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

18

Processos de Desenvolvimento de SoftwareProcessos de Desenvolvimento de Software

• Um ProcessoProcesso de desenvolvimento de software abrange um conjunto de atividades relacionadas à concepção do software até a sua implementação, entrega, uso e manutenção.

• Em geral, define:Em geral, define:– Um modelo de ciclo de vida para o software e um paradigma;

– Os métodos que serão adotados em cada atividade;

– As ferramentas que suportam estes métodos;

– Quem participa (papéis) e quando;

– Planos de gerência, qualidade e testes.

Page 19: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

19

Papéis no Desenvolvimento de SoftwarePapéis no Desenvolvimento de Software

• Analista de Sistemas: responsável pela elicitação de requisitos e especificação do “que” o software fará.

• Projetista: responsável pela especificação de “como” o software irá implementar os requisitos definidos na análise.

• Programador: responsável pela construção dos módulos e programas, especificados no projeto, em uma linguagem de programação.

• Gerente de Projeto: responsável por definir o processo e os planos de desenvolvimento. Estabelece cronograma, estima prazo, custo e recursos. Acompanha o desenvolvimento.

Page 20: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

20

Papéis no Desenvolvimento de SoftwarePapéis no Desenvolvimento de Software

• Arquiteto: responsável pela elaboração da estrutura modular do software. Está surgindo no mercado. Arquitetos em tecnologias específicas, como J2EE.

• Desenvolvedor: atua em todas as etapas do desenvolvimento. Normalmente, o mercado exige especialidade em tecnologias e linguagens específicas.

• Usuário: pessoas, organizações ou departamentos que utilizam o sistema. Podem ser usuários diretos, que de fato operam o software, ou indiretos, que enviam dados ou recebem resultados do software.

• Cliente: companhia, organização ou pessoa que contrata e paga o sistema de software a ser desenvolvido.

Page 21: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

21

Conceitos no Desenvolvimento de SoftwareConceitos no Desenvolvimento de Software

• MétodoMétodo: procedimento formal para a produção de um resultado. Um método define as tarefas que serão realizadas e de que forma as mesmas deverão ser executadas. Define que tecnologias e linguagens deverão ser adotadas e os produtos que serão produzidos.– Ex: metodologia de Análise Essencial, OMT (Ex: metodologia de Análise Essencial, OMT (Object Modeling Object Modeling

TechniqueTechnique), RUP (), RUP (Rational Unified ProcessRational Unified Process) etc.) etc.

• FerramentaFerramenta: instrumento ou sistema automatizado (software) para suportar a realização de uma tarefa.– Ex: DFD (diagrama de fluxo de dados), Rational Rose (ferramenta CASE) Ex: DFD (diagrama de fluxo de dados), Rational Rose (ferramenta CASE)

etc.etc.

• ParadigmaParadigma: uma maneira, estilo ou filosofia para a construção de software, envolvendo um conjunto de princípios. Ex: paradigma Ex: paradigma estruturado e paradigma de orientação a objetos (OO). estruturado e paradigma de orientação a objetos (OO). – Cada paradigma envolve um conjunto de métodos, linguagens de Cada paradigma envolve um conjunto de métodos, linguagens de

modelagem e de programação, ferramentas etc.modelagem e de programação, ferramentas etc.

Page 22: 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail: aline.vasconcelos@terra.com.br.

22

Conceitos no Desenvolvimento de SoftwareConceitos no Desenvolvimento de Software

• ArtefatosArtefatos: sub-produtos produzidos pelas atividades ao longo do processo.

• Ex: casos de uso na análise, documentação de requisitos, Ex: casos de uso na análise, documentação de requisitos, diagramas de classe no projeto, programas etc.diagramas de classe no projeto, programas etc.

• DomínioDomínio: família de aplicações com requisitos similares.

• Ex: escolar, agropecuário, legislativo etc.Ex: escolar, agropecuário, legislativo etc.