Aula 01 – Introdução

Download Report

Transcript Aula 01 – Introdução

ENGENHARIA DE SOFTWARE
Professor Mário Dantas
Ementa da Disciplina
2













Processos Existentes;
Ciclo de vida de desenvolvimento de software;
Engenharia de Requisitos;
Princípios e conceitos de análise e projeto;
Métricas de software;
Qualidade de software;
Verificação, Validação e Teste de software;
Gerência de Configuração;
Ferramentas Case;
Ambientes de desenvolvimento de software;
Padrões de desenvolvimento;
Reuso;
Engenharia reversa e Reengenharia.
Bibliografia Básica
3





GUSTAFSON, D. Teoria e Problemas de Engenharia de
Software, Bookman, 2003 (Coleção Schaum).
PAULA FILHO, W. de P. Engenharia de Software –
Fundamentos, Métodos e Padrões. LTC, 2001
PFLEEGER, Shari Lawrence. Engenharia de Software Teoria e Prática, 2ª Edição, Makron Books, 2004.
PRESSMAN, R. S. Engenharia de Software, 6ª Edição,
São Paulo: McGraw-Hill 2006.
SOMMERVILLE, Ian. Engenharia de Software, 6ª
Edição, São Paulo: Addison-Wesley, 2003.
Bibliografia Complementar
4




CARVALHO, A.M.B.R. e CHIOSSI, T.C.S. Uma
Introdução a Engenharia de Software. São Paulo:
Editora da Unicamp, 2001.
McCONNELL, S. Code Complete: um Guia
Completo para Construção de Software. Porto
Alegre: Bookman, 2000.
REZENDE, D. A. Engenharia de Software e
Sistemas de Informações. Brasport, 1999.
VAZQUEZ, C. E., SIMÕES, G. S., ALBERT, R. M.
Análise de Pontos de Função. 1 ed., Érica, 2003.
Histórico
6

Até o início da década de 60:

O custo de hardware era o fator mais importante na
automatização de tarefas;

Software era uma arte: inexistência de sistematização na sua
construção e documentação;

Modelos e documentação técnica residiam somente na cabeça
do desenvolvedor.
Histórico
7

Entre 1965 a 1975:

Desenvolvimento dos primeiros SGBD's;

Surgimento do conceito de software como produto;

Surgimento das empresas desenvolvedoras de software;

Manutenção torna-se tarefa perigosa: CRISE DO SOFTWARE.
Histórico
8

A partir daí...

Disseminação das redes;

Queda no preço do hardware;

Aumento no poder de processamento e armazenamento dos
computadores;

Surgimento da Internet;

E muito mais...
Histórico
9





Habilidade em construir software deixa a desejar em relação ao
potencial do hardware;
A construção de software não é rápida o suficiente para atender as
necessidades do mercado;
A sociedade depende cada vez mais de software confiável;
O esforço para construir software confiável e de qualidade é muito
grande;
O suporte aos programas existentes é pobre e de recursos
inadequados.
Relatório do Caos
10

Relatório do Standish Group

Projetos construídos dentro do orçamento e no prazo: 16,2%;

Projetos cancelados: 31,1%;

Projetos concluídos atrasados ou fora do orçamento: 52,7%;
Crise do Software
A “crise do software” é caracterizada pela
incapacidade da indústria de software de
atender a demanda de mercado em entregar
produtos dentro dos custos, prazos, qualidade e
além de tudo, atendendo aos requisitos
contratados.
Falhas em Projetos de Software
12


Em 1992 e 1993, mais de 60% dos softwares nos EUA estavam
atrasados e mais da metade ultrapassa em 50% o prazo
planejado.
Em 1999, 37% dos projetos foram entregues no prazo, dos 63%
que atrasaram, 42% ultrapassaram o orçamento.
Desenvolvimento de Software
13

Por que é tão difícil desenvolver software?

Processo Jovem;
Conceitos iniciais
14


Informática: Ciência que tem como objetivo o
tratamento da informação através do uso de
equipamentos e procedimentos da área de
processamento de dados;
Ciência: Conjunto organizado de conhecimentos
relativos a determinado objeto (assunto ou tema),
especialmente os obtidos mediante a observação,
a experiência dos fatos e um métodos próprio;
Conceitos iniciais
15


Processamento de Dados: Tratamento dos dados
por meio de máquinas, com o fim de obter como
resultado informação a partir dos dados;
Engenharia: Arte de aplicar conhecimentos
científicos e empíricos e certas habilitações
específicas à criação de estruturas, dispositivos e
processos que se utilizam para converter recursos
(hardware e software configurados e programados)
em formas adequadas ao atendimento das
necessidades humanas.
Engenharia de Software
16
“É a aplicação de uma abordagem sistemática,
disciplinada e mensurável ao desenvolvimento, à
operação e à manutenção de software”
IEEE (Institute of Eletric and Eletronic Engineers)
Objetivos Gerais
17



Qualidade (adequação às necessidades)
Produtividade (agilidade para construção e
manutenção)
Controle (qualidade, prazos e custos)
Cenário
18


Gasta-se mais na manutenção do software, mas
ainda documenta-se pouco (e mal) os produtos e
projetos de software.
55% dos defeitos são inseridos durante a análise
de requisitos, mas apenas 18% desses defeitos são
localizados nessa fase.
Comparativo de Indicadores
19
Outros Motivadores
20



As economias de todos os países (e organizações),
em maior ou menor grau, são dependentes de
software;
Mais e mais sistemas são controlados por software
(“computação invisível”);
As despesas com software representam uma fração
significativa do PIB dos países e mundial.
Custo de Software
21



Geralmente domina o custo total dos sistemas: o
custo de software em um PC geralmente é maior
que o custo de hardware.
Custa mais para ser mantido do que para ser
desenvolvido.
Quando o ciclo de vida é longo, o custo de
manutenção é muitas vezes superior ao custo de
desenvolvimento.
Custo de Software
22
A Engenharia de Software preocupa-se com o custo
efetivo do desenvolvimento, operação e da
manutenção de Software.
Software
23








Processo jovem;
Quando falham: consertados;
Falhas ignoradas, amenizadas, racionalizadas;
Erros continuam sendo cometidos;
Problemas de escopo;
Solicitações de mudanças pelo contratante;
Concluídos fora dos prazos e custos;
Quando entregues não atendem a expectativas do cliente.
Questões freqüentes sobre
Engenharia de Software
24
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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 de
Sistemas?
O que é Processo de Software?
O que é Modelo de Processo de Software?
O que são Métodos da Engenharia de Software?
Quais são os Custos da Engenharia de Software?
O que é CASE (Computer-Aided Software Engineering)?
Quais os atributos de um bom software?
Quais os desafios chave enfrentados pela Engenharia de Software?
O que é software?
25


Programas de computador e toda a documentação
a eles associada (diferente de programa isolado
para realização de testes computacionais e sem
orientação sistêmica).
Produtos de software podem ser:
 Desenvolvidos
para um cliente em particular
(personalizados)
 Desenvolvidos para o mercado em geral (genéricos)
 Oferecidos na forma de serviços
Características
26




O software é desenvolvido e passa por um processo de
engenharia;
Software não “se desgasta”;
Os produtos de software podem ser desenvolvidos
para um cliente específico ou para um mercado geral;
A maior parte dos softwares continua a ser construída
sob encomenda.
Tipos
27
Software de aplicação
 Software científico
 Software embutido
 Software para linhas de produto
 Aplicações Web
 Computação ubíqua
 Software aberto

O que é Engenharia de Software?
28




É a engenharia que se ocupa dos aspectos da
produção e da manutenção de software.
Produz as especificações para a criação dos
programas que compõem o software.
Tem engenheiros de software como protagonistas.
Os engenheiros de software devem adotar uma
abordagem sistemática e organizada ao seu trabalho
e devem usar ferramentas e técnicas apropriadas,
dependendo do problema a ser resolvido, das
restrições e dos recursos disponíveis (premissas).
Qual é a diferença entre Engenharia de
Software e Ciência da Computação?
29




Ciência da Computação se ocupa da teoria e dos
fundamentos (algoritmos, estruturas de dados, etc.), tendo
base abstrata;
Engenharia de Software se ocupa das práticas para
desenvolver e entregar software de qualidade, valendo-se
de conhecimentos científicos e empíricos e da aplicações de
habilidades específicas.
As teorias da Ciência da Computação são insuficientes
para atuar como suporte completo à Engenharia de
Software.
São complementares, pois a segunda fornece
infraestrutura de software para que a primeira se ocupe
da solução de problemas complexos de alto nível que
requerem uma solução baseada em software.
Qual é a diferença entre Engenharia de
Software e Engenharia de Sistemas?
30



Engenharia de Sistemas se ocupa de todos os aspectos do
desenvolvimento de sistemas (na disciplina em estudo, os
sistemas baseados em computadores), incluindo hardware,
software, peopleware e processos de negócio.
Engenheiros de Sistemas cuidam da especificação, desenho
arquitetônico, integração e desenvolvimento de sistemas
complexos.
A Engenharia de Sistemas é anterior a Engenharia de
Software e, na maioria dos casos, essencial ao sucesso
desta.
Conhecimento de Ciência da Computação é essencial
para os engenheiros de software
O que é processo (metodologia de
desenvolvimento) de software?
31


É um conjunto de atividades cujo objetivo é desenvolver e/ou evoluir
um produto de software.
Atividades que fazem parte de todos os processos (de
desenvolvimento) de software:







Especificação – o que o sistema deve fazer e quais as suas restrições
(requisitos funcionais e não-funcionais).
Construção – produção de um software.
Validação – verificar que o software é o que o cliente deseja.
Evolução – modificar o software em resposta às novas demandas.
Define o ciclo de vida (fases) de um software, usando modelos de
processos de software e métodos (paradigmas).
Trata-se da metodologia para desenvolver software.
É uma abstração que se concretiza em projetos de software.
O que é um modelo de processo de
software?
32


Uma representação simplificada e abstrata de um processo de
software, que pode ser apresentada a partir de perspectivas.
Exemplos de perspectivas (visões) de processo são:




Workflow (fluxo de trabalho) – seqüência de atividades
Data-flow (fluxo de dados) – fluxo de informações
Role/Action (papeis e ações) – quem faz o quê
Exemplos de Modelos de Processos Abstratos são:






Cascata
Evolucionário
Iterativo (Espiral, Incremental)
Integração a partir de componentes reutilizáveis
Prototipagem Evolutiva (Metodologias Ágeis)
Entrega Evolutiva (Cascata + Prototipagem Evolutiva)
O que são métodos de engenharia de
software?
33



Descrevem modelos, gráficos, diagramas, notações,
regras, restrições e práticas de desenho (Notação)
Orientam o processo, recomendando práticas mais
adequadas e atividades a serem seguidas
Os métodos podem ser:
 Estruturados
 Orientados
a Dados
 Orientados a Objetos
 Baseados em Protótipos
Quais os custos da Engenharia de
Software?
34



Grande parte dos custos do processo de software
estão concentrados na engenharia (entendimento do
problema, desenho e arquitetura da solução e
especificação dos programas).
Os custos variam em função do tipo de sistema que
está sendo desenvolvido, dos requisitos (funcionais) e
dos requisitos de performance e nível de
disponibilidade (requisitos não funcionais).
Os custos de distribuição dependem do modelo de
processo de desenvolvimento usado (complexidade da
gerência de configuração).
Quais os custos da Engenharia de
Software?
35


O processo de engenharia de software em si, assim
como qualquer processo de gestão e planejamento,
tem um custo e é importante que os stakeholders
estejam a par deles.
É papel do engenheiro de software demonstrar a
relação entre os custos incorridos e os benefícios
auferidos, com base em fatos concretos.
O que é CASE (Computer-Aided
Software Engineering)?
36


Sistemas de Software que servem para dar suporte
automatizado às atividades do processo. Ferramentas
CASE devem ser usadas.
Upper-CASE


Ferramentas para suportar as atividades desde o início do
processo, incluindo requisitos e desenho (Judy, DB Designer,
Power Design, Rational Rose).
Lower-CASE

Ferramentas para suportar as atividades finais como
programação, depuração e teste de programas (Netbeans,
Eclipse, Ant, JUnit).
Quais os atributos de um bom
software?
37


O software deve fornecer as funcionalidades requeridas e atender
aos requisitos não funcionais de performance, segurança,
confiabilidade, usabilidade, manutenibilidade, entre outros.
Manutenibilidade


Segurança e Confiabilidade


O sistema do qual faz parte deve ser confiável e seguro física e
logicamente.
Eficiência


Deve poder ser alterado para atender as mudanças de necessidades.
Não deve desperdiçar recursos do sistema.
Usabilidade e Acessibilidade

Deve ser de fácil utilização para os usuários para os quais foi
desenhado e proporcionar acesso universal.
Quais os grandes desafios da
engenharia de software?
38


Lidar com sistemas legados, com grande diversidade de tecnologias,
menores tempos de entrega e manutenção.
Sistemas Legados


Heterogeneidade


Os sistemas são distribuídos para várias plataformas e incluem uma
composição de hardware e software básico.
Tempo


Antigos, mas ainda úteis, são os sistemas que devem ser mantidos e
aprimorados
Existe forte e crescente pressão para uma entrega mais rápida, quase
sempre, com clientes subestimando a complexidade.
Manutenção

Os reparos em software são geralmente mais complicados que os
reparos em hardware (faltam documentação e boas práticas).
Síntese
39



Engenharia de Software ocupa-se de todos os
aspectos da produção de software.
Produtos de software consistem de programas
(desenvolvidos sob encomenda ou não) e toda a
documentação associada.
Características essenciais são manutenibilidade,
segurança e confiabilidade, eficiência e
usabilidade.
Síntese
40

O processo de software (ou metodologia) consiste
em atividades que fazem parte do
desenvolvimento de produtos de software. As
atividades básicas são: especificação e análise,
desenho e construção, teste e validação e evolução.
Exemplos: RUP, PRAXIS, Processo Unificado, eXtreme
Programming – XP, METODES.
Síntese
41

Métodos são maneiras organizadas de produzir
software. Incluem sugestões a serem seguidas,
notações, regras e modelos, orientando o processo
de desenvolvimento. Exemplos: Estruturado,
Orientado a Dados, Orientado a Objetos, Baseado
em Protótipos.
Síntese
42

Ferramentas CASE são sistemas de software
desenhados para dar suporte a atividades do
processo de software como: organização de
requisitos, produção e consistência de diagramas,
rastreamento, codificação e teste de programas.
Síntese
43


Os Engenheiros de Software devem ir além dos
aspectos técnicos, pois, como nos ensina a Teoria
Geral de Sistemas, os sistemas são abertos,
influenciando e sendo influenciados pelo meio onde
estão inseridos.
Software é elemento chave para o sucesso, mas
software não é fácil e demanda gerenciamento de
projeto eficaz...
44
MITOS DA ENGENHARIA DE SOFTWARE
Mitos da Gerência
45


Mito
“Já temos um livro que está cheio de padrões e
procedimentos para elaborar o software. Isso não
fornece ao meu pessoal tudo que ele precisa
saber?”
Mitos da Gerência
46


Realidade
O livro é usado? Os profissionais sabem da sua existência? Ele
reflete as práticas modernas da ES? É Completo? Adaptável?
Melhora o prazo de entrega mantendo o foco na qualidade?
Mitos da Gerência
47



“Se nos atrasarmos no cronograma, podemos
adicionar mais programadores e ficar em dia?”
Realidade
“Adicionar pessoas a um projeto de software
atrasado atrasa-o ainda mais.”
Mitos da Gerência
48

“Se eu decidir terceirizar um projeto de software
vou poder relaxar e deixar que aquela firma o
elabore?”
Realidade
 Se uma empresa não sabe como gerir e controlar
projetos de software internamente, certamente
terá problemas quando terceirizar esses
projetos.

Mitos do Cliente
49

“O estabelecimento geral dos objetivos é suficiente
para iniciar a escrita de programas – podemos
fornecer os detalhes posteriormente?”
Realidade
 Uma descrição formal e detalhada do domínio
da informação, da função, do comportamento,
do desempenho, das interfaces, das restrições de
projeto e dos critérios de validação é
ESSENCIAL.

Mitos da Gerência
50

“Os requisitos de projeto mudam continuamente,
mas as mudanças podem ser facilmente
acomodadas porque o software é flexível.”
Realidade
 O impacto da mudança varia com a época em
que é introduzida.

Mitos do Profissional
51

“Quando escrevemos um programa e o fazemos
funcionar, nosso trabalho está completo.”
Realidade
 “Quanto mais cedo você começar a escrever
código, mais vai demorar para acabar.”
 Entre 60% e 80% de todo o esforço despendido
em software vai ser despendido depois de ele
ser entregue ao cliente pela primeira vez.

Mitos do Profissional
52

“Até que eu esteja com o programa ‘rodando’ não
tenho como avaliar a sua qualidade.”
Realidade
 E a revisão?
 Garantindo a qualidade em todas as etapas, o
produto final não terá qualidade?

Mitos do Profissional
53

“O único produto de trabalho que pode ser
entregue para um projeto de software bem
sucedido é o programa executável.”
Realidade
 E a documentação?

Mitos do Profissional
54



“A engenharia de software vai nos fazer criar documentação
volumosa e desnecessária que certamente nos atrasará.”
Realidade
A ES não se relaciona à criação de documentos. Refere-se à
criação de qualidade. Melhor qualidade leva à redução de
re-trabalho. E menor re-trabalho resulta em tempos de entrega
mais rápidos.