1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail:...
Transcript of 1 ENGENHARIA DE SOFTWARE: INTRODUÇÃO Professora: Aline Vasconcelos e-mail:...
1
ENGENHARIA DE SOFTWARE:ENGENHARIA DE SOFTWARE:INTRODUÇÃOINTRODUÇÃO
Professora: Aline Vasconcelos
e-mail: [email protected]
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.
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
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.
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”.
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”.
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.
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.
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.
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!!!
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.
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.
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.
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]
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]
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.
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.
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.
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.
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.
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.
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.