Engenharia de Software
Introdução
Universidade Federal da Paraíba – Campus IV Centro de Ciências Aplicadas e Educação
Departamento de Ciências Exatas
Prof. Jorge Dias
www.jorgediasjr.com
Introdução
Nas primeiras décadas de uso do
computador, o principal desafio era desenvolver um hardware que
reduzisse o custo de processamento
e armazenamento de dados
A complexidade dos programas
era limitada pelos recursos de
Introdução
1946: Primeiro computador Digital eletrônico
ENIAC
30 toneladas, media 5,60 m de altura e 25 m de comprimento e
Introdução
Os programas eram desenvolvidos por
um pequeno grupo de pesquisadores
Não havia método no desenvolvimento
de software
Quase um processo de criação
artística!
As exigências e as expectativas dos
usuários eram baixas, pois não havia concorrência no mercado
Introdução
Ao longo de 50 anos, a
importância
do software
passou por
mudanças
significativas:
Melhoria no
desempenho
dos computadores
Modificações nas
arquiteturas
de computadores
Aumento significativo na
memória
e capacidade de
armazenamento
Grande
variedade
de opções de
entrada
e
saída
Crise do software
Aconteceu no fim dos anos 60
Quando a Engenharia de Software ainda não existia
Dificuldades no desenvolvimento de software
Frente ao rápido crescimento da demanda por software Complexidade dos problemas a serem resolvidos
Inexistência de técnicas que funcionassem
Consequências
Projetos estourando o orçamento;
Projetos estourando o prazo; Software de baixa qualidade;
Software muitas vezes não atingiam os requisitos; Projetos ingerenciáveis e o código difícil de manter.
Introdução
“O Software ultrapassou o Hardware
como chave para o sucesso de muitos
sistemas baseados em computador”
(Pressman, pg. 3, 1992)
Introdução
Na década de 50,
ninguém
poderia prever que:
Fosse se tornar uma tecnologia indispensável para negócios, ciência,
engenharia, ...
Fosse permitir a criação de novas tecnologias, extensão de
tecnologias existentes e declínio de antigas tecnologias
Que uma empresa de software fosse se tornar maior e mais
influente que a maioria das empresas da era industrial
Que uma vasta rede guiada por software (Internet) evoluiria e
modificaria a vida de todo o mundo
Estaria embutido em sistemas de toda espécie: transporte, médico,
militar, industrial, entretenimento, ...
Denver International Airport
Erros no sistema automático de transporte de bagagens (misloaded,
misrouted, jammed):
Atraso na abertura do aeroporto com custo total estimado em US$360 Milhões
Ariane 5
Projeto da Agência Espacial
Européia que custou:
10 anos.
US$ 8 Bilhões.
Capacidade 6 toneladas.
Garante supremacia européia no
Resultado
Explosão 40 segundos
após a decolagem.
Destruição do foguete e
carga avaliada em US$
500 milhões.
Software em carros
Problema no freio
Recall para atualização do
O Bug do Milênio
Datas eram armazenadas com
apenas 2 dígitos para o ano
Conclusão
Software é elemento chave para o sucesso.
Mas:
Software não é hardware.
Software não é fácil.
Software mata.
Software evolui.
Introdução
Mesmo assim ...
Por que leva-se tanto tempo para construir o
software?
Por que gastamos tanto
tempo e esforço mantendo programas existentes?
Por que os custos de desenvolvimento são tão
altos?
Por que não podemos achar todos os erros antes de entregar o software aos
clientes?
Por que continuamos a ter dificuldade em avaliar o
progresso enquanto o software está sendo
Software
Formalmente
, software ...
São instruções (programas de computador) que quando
executadas fornecem as características, função e desempenho desejados
Em outras palavras
, o software ...
É desenvolvido ou passa por um processo de engenharia; não é
fabricado no sentido clássico
Não “se desgasta” (se deteriora)
Em sua maior parte, continua a ser construído sob encomenda,
apesar da indústria estar se movendo em direção à montagem
baseada em componentes
Categorias de Software
Sistemas técnicos
Não incluem procedimentos e processos
Não são produzidos para automatizar processos específicos
executado por pessoas
Sistemas sociotécnicos
Incluem procedimentos e processos
Possui processos operacionais definidos As pessoas são partes inerentes do sistema Políticas e regras organizacionais
A Natureza do Software
Categorias de software:
Software de sistemas: Coleção de programas escritos para servir a
outros programas
Software de aplicação: Programas isolados que resolvem uma
necessidade específica do negócio
Software científico e de engenharia: Aplicações voltadas para a
pesquisa científica
Software embutido: Controla as funções de um produto ou sistema Software para linhas de produto: Capacidade específica a ser usadas
por muitos clientes com o mesmo objetivo
Aplicações da Web: Sofisticados ambientes computacionais,
integrados a banco de dados e aplicações de negócio
Software para inteligência artificial: Faz uso de algoritmos
não-numéricos para resolver problemas complexos
Engenharia de Software
Utiliza a Computação para resolver problemas
Porém, nem sempre o problema tem a ver com
computadores
É essencial entender a natureza do problema
Utiliza a tecnologia como ferramenta para implementar a
solução
Resolvendo problemas
Problema
Subproblema 1 Subproblema 2 Subproblema 3
Dividir para conquistar
Métodos, Ferramentas, Procedimentos e
Paradigmas da Engenharia de Software
Métodos de Engenharia de Software
Detalhes de “como fazer” para construir um software; Procedimento formal para produzir algum resultado.
Ferramentas de Engenharia de Software
Criadas para apoiar de forma automatizada os métodos; Ex.: ferramentas CASE;
Procedimentos da Engenharia de Software
Elo entre métodos e ferramentas;
Definem, por exemplo, a seqüência em que os métodos serão aplicados
e os produtos a serem entregues;
Paradigmas na Engenharia de Software
Representa uma abordagem ou filosofia em particular para a construção
Engenharia de Software
Ciência da Computação Cliente
Teoria
Computacionais FunçõesProblema
Engenharia de
Software
Ferramentas e técnicas para resolver problemas
Engenharia de Software
“Criação e a utilização de
sólidos princípios
de engenharia a
fim de obter
softwares
econômicos
que sejam
confiáveis
e
que trabalhem
eficientemente
em
máquinas
reais” [Fritz
Bauer]
“Aplicação de uma
abordagem sistemática
,
disciplinada
e
quantificável
, para o desenvolvimento, operação e
manutenção; isto é, a aplicação da
engenharia
ao
software
”
[IEEE]
Engenharia de Software
Relacionada não só com os processos técnicos de
desenvolvimento de software, mas também com
atividades como o
gerenciamento de projeto de
software
e o
desenvolvimento de ferramentas,
métodos e teorias
que apóiem a produção de software;
Recomenda a aplicação de
ferramentas e
técnicas/métodos
apropriados dependendo do
problema a ser solucionado, das
restrições
de
desenvolvimento e dos
recursos
disponíveis.
Alguns Objetivos da Engenharia de Software
Controle sobre o
desenvolvimento de software
dentro de
custos, prazos
e
níveis de
qualidade
desejados;
Sistematização da produção,
manutenção e evolução dos
produtos;
Qualidade versus Produtividade;
Aprimoramento da qualidade de
software;
O que faz a Engenharia de Software?
Um componente chave do desenvolvimento de software é a
comunicação entre os clientes e os desenvolvedores
Entender as necessidades do cliente
O número de pessoas trabalhando no desenvolvimento depende
do tamanho e grau de complexidade do software
Processo e Papéis definidos no desenvolvimento
Participantes:
Cliente: empresa ou pessoa que está pagando para ter o sistema
Desenvolvedor: empresa ou pessoa que desenvolve o sistema
Atividade 1
Faça um paralelo com a Engenharia Civil.
Suponha que você é contratado para
construir uma casa.
O que é necessário para você construir
Atividade 2: Pensem em tudo que já
aprenderam no curso e responda
O que precisamos para desenvolver
um software dentro do prazo, custo
Algumas Atividades da Engenharia de
Software
Modelagem de Negócio
Engenharia de Requisitos
Análise e Projeto
Arquitetura de Software
Implementação
Testes
Implantação/Distribuição
Gerenciamento de Projetos
Gerência de Configuração e Mudanças
Manutenção
Mitos do Software
Crenças
sobre
softwares
e sobre o
processo
usado para
construí-lo
Atitudes enganosas
que causaram\causam sérios
problemas
tanto para
gerentes
quanto para
pessoal técnico
Mitos do Software
Mitos da gerência
Já temos um livro que está cheio de
padrões
e
procedimentos
para elaborar o software. Isso não fornece
ao meu pessoal
tudo
o que ele precisa
saber
?
Se nos
atrasarmos
no
cronograma
, podemos
adicionar
mais
programadores
e ficar em dia.
Se eu decidir
terceirizar
um projeto de software vou poder
relaxar
e deixar que aquela
firma
o
elabore
.Mitos do Software
Mitos do cliente
O
estabelecimento
geral de objetivos é
suficiente
para
iniciar a escrita de programas – podemos fornecer os
detalhes
posteriormente
.
Os
requisitos
de projeto
mudam
continuamente, mas as
mudanças
podem ser facilmente
acomodadas
porque o
software é
flexível
Mitos do Software
Mitos do profissional
Quando
escrevemos
um programa e o fazemos
funcionar
,
nosso
trabalho
está completo.
Até que eu esteja com o programa “
rodando
” não tenho
como avaliar a sua
qualidade
.
O único
produto
de trabalho que pode ser entregue para
um projeto de software
bem-sucedido
é o programa
executável
.
A
engenharia de software
vai nos fazer criar documentação
volumosa
e
desnecessária
que certamente nos
atrasará
.
Introdução – Aula 01Fábricas de Software
“Um processo
estruturado
,
controlado
e
melhorado
de
forma
contínua
, considerando abordagens de
engenharia
industrial
, orientado para o atendimento a múltiplas
demandas
de
natureza
e
escopo
distintas, visando à geração
de
produtos
de software, conforme os
requisitos
documentados dos usuários e/ou clientes, da forma mais
produtiva
e
econômica
possível”
Fábricas de Software
O termo Fábrica de Software foi empregado pela primeira vez em
1969, pela japonesa Hitachi, mas só começou a ficar popular no início dos anos 90
Características:
Ter processos claros e depender mais deles do que das pessoas, de
forma a ter resultados mais previsíveis
Aplicar conceitos da indústria em geral em ambientes de
desenvolvimento de software, de forma a aumentar a produtividade
e diminuir prazos e custos.
Divisão de trabalho com equipes especializadas para cada parte do
desenvolvimento de um software, que trabalham como numa linha
de produção
Fábricas de Software
Existem fábricas
especializadas
somente na codificação ...
Os requisitos devem ser entregues
de forma padronizada
... Assim como existem fábricas que englobam as
várias fases
de
um
processo
de desenvolvimento
Necessidade de utilização de melhores práticas de frameworks como
CMMI, PMP, MPS.BR, UML/UP, dentre outros
Alguns Problemas no Desenvolvimento de
Software...
Alguns projetos são cancelados mesmo antes de começar;
O tempo de desenvolvimento e o custo são bem maiores do
que o estimado;
Os sistemas não funcionam como planejado;
A qualidade é baixa;