Você está na página 1de 72

ENGENHARIA DE SOFTWARE - PRESSMAN

Prof. Dr. Helton Gírio Matos


Evolução do software

Primeira Era(1950 - 1965)


O hardware sofreu contínuas mudanças
 O software era uma arte "secundária" para a qual havia poucos métodos
sistemáticos
 O hardware era de propósito geral
 O software era específico para cada aplicação
 Não havia documentação
Evolução do software

Primeira Era (1950 - 1965)


O desenvolvimento do software era feito virtualmente sem
administração.
 Usado a orientação batch (em lote) para a maioria dos sistemas.
 Distribuição limitada
 Desenvolvimento na própria organização – individualidade
Evolução do software

Segunda Era(1965 - 1975)


 Multiprogramação e sistemas multiusuários
 Sistemas de tempo real e bancos de dados
 1a. geração de SGBD’s
 Desenvolvimento para ampla distribuição no mercado – software house
 Manutenção quase impossível
..... CRISE DE SOFTWARE
Evolução do software

Segunda Era(1965 - 1975)

Detectadas falhas necessidade de correção ou adaptados a um novo hardware que


fosse comprado.

O esforço despendido na manutenção de software começou a absorver recursos


em índices alarmantes. E, ainda pior, a natureza personalizada de muitos
programas tornava-os virtualmente impossíveis de sofrer manutenção.
Evolução do software

Segunda Era (1965 - 1975)

Bibliotecas de Software

 Cresce número de sistemas baseado em computador


Evolução do software

Terceira Era (1975 - hoje)


 Sistemas distribuídos
 Redes locais e globais
 Uso generalizado de microprocessadores
 Hardware de baixo custo
 Impacto de consumo
Evolução do software

Terceira Era (1975 - hoje)


Aumento da complexidade
Computador pessoal
Produtos inteligentes
Evolução do software

A Quarta Era do software de computador está apenas começando


 Tecnologias orientadas o objetos
 Sistemas especialistas e software de inteligência artificial usados na
prática
 Software de rede neural artificial
 Computação Paralela
Evolução do software

A Quarta era do software de computador está apenas começando


 Novas abordagens
 Desenvolvimento de software
 Sistemas especialistas
Evolução do software

Quinta Era
 Atendimento de demanda?
 Manutenção eficiente?
Crise de Software

Refere-se a um conjunto de problemas encontrados no


desenvolvimento de software
1- As estimativas de prazo e de custo frequentemente são imprecisas

“Não dedicamos tempo para coletar dados sobre o processo de


desenvolvimento de software”

“Sem nenhuma indicação sólida de produtividade, não podemos avaliar com


precisão a eficácia de novas ferramentas, métodos ou padrões”
Crise de Software

2- A produtividade das pessoas da área de software não tem acompanhado


a demanda por seus serviços

“Os projetos de desenvolvimento de software normalmente são


efetuados apenas com um vago indício das exigências do cliente”
Crise de Software

3- A qualidade de software às vezes é menos que adequada


Só recentemente começam a surgir conceitos quantitativos sólidos de garantia de
qualidade de software

4- O software existente é muito difícil de manter


A tarefa de manutenção devora o orçamento destinado ao software
A facilidade de manutenção não foi enfatizada como um critério importante
Crise de Software

estimativas de prazo e de custo 

produtividade das pessoas 

qualidade de software 

software difícil de manter 


Causas dos problemas associados à Crise de
Software
1- PRÓPRIO CARÁTER DO SOFTWARE

O software é um elemento de sistema lógico e não físico.


Consequentemente o sucesso é medido pela qualidade de uma única
entidade e não pela qualidade de muitas entidades manufaturadas

O software não se desgasta, mas se deteriora


Causas dos problemas associados à Crise de
Software
2- FALHAS DAS PESSOAS RESPONSÁVEIS PELO DESENVOLVIMENTO DE SOFTWARE

Gerentes sem nenhum background em software

Os profissionais da área de software têm recebido pouco treinamento formal em


novas técnicas para o desenvolvimento de software

Resistência a mudanças.
Causas dos problemas associados à crise de software

3- M ITOS DO SOFTWARE
Propagaram desinformação e confusão
administrativos
cliente
profissional

18
Mitos do software (ADMINISTRATIVOS)

Mito: Já temos um manual repleto de padrões e procedimentos para a


construção de software. Isso não oferecerá ao meu pessoal tudo o que eles
precisam saber?

Realidade: Será que o manual é usado?


Os profissionais sabem que ele existe?
Ele reflete a prática moderna de desenvolvimento de software?
Ele é completo?
19
Mitos do software (ADMINISTRATIVOS)

Mito: Meu pessoal tem ferramentas de desenvolvimento de software de


última geração; afinal lhes compramos os mais novos computadores.

Realidade: É preciso muito mais do que os mais recentes computadores


para se fazer um desenvolvimento de software de alta qualidade.

20
Mitos do software

Mito: Se nós estamos atrasados nos prazos, podemos adicionar mais


programadores e tirar o atraso.

Realidade: O desenvolvimento de software não é um processo mecânico


igual à manufatura. Acrescentar pessoas em um projeto torna-o ainda
mais atrasado.
Pessoas podem ser acrescentadas, mas somente de uma forma
planejada.
21
Mitos do software (CLIENTE)

Mito: Uma declaração geral dos objetivos é suficiente para se começar a


escrever programas - podemos preencher os detalhes mais tarde.

Realidade: Uma definição inicial ruim é a principal causa de fracassos dos


esforços de desenvolvimento de software. É fundamental uma descrição
formal e detalhada do domínio da informação, função, desempenho,
interfaces, restrições de projeto e critérios de validação.
22
Mitos do software (CLIENTE)

Mito: Os requisitos de projeto modificam-se continuamente, mas as


mudanças podem ser facilmente acomodadas, porque o software é
flexível.

Realidade: Uma mudança, quando solicitada tardiamente num projeto,


pode ser maior do que a ordem de magnitude mais dispendiosa da mesma
mudança solicitada nas fases iniciais.
23
MAGNITUDE DAS MUDANÇAS

FASES CUSTO DE MANUTENÇÃO


DEFINIÇÃO 1x
DESENVOLVIMENTO 1.5 - 6x
MANUTENÇÃO 60 - 100x

24
Mitos do software (PROFISSIONAL)

Mito: Assim que escrevermos o programa e o colocarmos em


funcionamento nosso trabalho estará completo.

Realidade: Os dados da indústria indicam que entre 50 e 70% de todo


esforço gasto num programa serão despendidos depois que ele for
entregue pela primeira vez ao cliente.

25
Mitos do software (PROFISSIONAL)

Mito: Enquanto não tiver o programa "funcionando", eu não terei


realmente nenhuma maneira de avaliar sua qualidade.

Realidade: Um programa funcionando é somente uma parte de uma


Configuração de Software que inclui todos os itens de informação
produzidos durante a construção e manutenção do software.

26
Linguagens e suas gerações

1ª G – linguagem Assembly – o mais baixo nível de abstração

2 ª G – Cobol, Fortran, Algol

3 ª G – Programação Estruturada
Uso geral – PL1, Pascal, C, Ada
Orientada a Objeto: C ++ , Objetive-C, CLOS, Eiffel, VisualBasic (Híbrido), Visual
Smalltalk, Object C, Power Builder, Delphi New Era, Visual Object Programmer
Linguagens e suas gerações

4. GL  Linguagens com um nível elevado de abstração .


• Linguagens de consulta .
• Geradores de Programas – em linguagem 3ª G
• Linguagens de apoio a decisões .
• Linguagens de prototipação .
• Linguagens formais de especificações - Prolog, PL1, Lisp .
• Ferramentas no ambiente PC – Planilhas, Sistemas de B.D.
• CASE  UsDesigner, Designer, IBPI – o mais alto nível de abstração
Aplicações de Software

Software Básico: apoio. Componentes de sistemas operacionais,..


Software de Tempo Real: ambiente. ...
Software Comercial: acesso à informação administrativa,..
Software Científico e de Engenharia: algoritmos de processamento
numérico,...
Software Embutido
Software de Computador Pessoal: processadores de texto, planilhas, ...
Software de inteligência Artificial: técnicas de IA
O que é a Engenharia de Software?

Estudo ou aplicação de abordagens sistemáticas, econômicas e


quantificáveis para o desenvolvimento, operação e manutenção de
software de qualidade.

Engenheiros de software devem adotar uma abordagem sistemática e


organizada para seu trabalho e usar ferramentas e técnicas/métodos
apropriados dependendo do problema a ser solucionado, das
restrições de desenvolvimento e dos recursos disponíveis
O que é software?

Programas de computador e documentação associada.

Produtos de software podem ser desenvolvidos para um cliente


particular ou podem ser desenvolvidos para um mercado geral
Definição de Eng.Software

“O estabelecimento e uso de sólidos princípios de engenharia para que se possa


obter economicamente um software que seja confiável e que funcione
eficientemente em máquinas reais”.

“Engenharia de Software é uma disciplina que trata do desenvolvimento e da


aplicação de metodologias, métodos, técnicas e ferramentas para desenvolver e
manter sistemas de software com qualidade preditível e controlável, operando
em máquinas e ambientes reais de modo econômico”.

Métodos + Ferramentas + Procedimentos = Paradigma de ES


Definição de Eng.Software

Estudo ou aplicação de abordagens sistemáticas, econômicas e


quantificáveis para o desenvolvimento, operação e manutenção de
software de qualidade.

Engenheiros de software devem adotar uma abordagem sistemática e


organizada para seu trabalho e usar ferramentas e técnicas/métodos
apropriados dependendo do problema a ser solucionado, das restrições de
desenvolvimento e dos recursos disponíveis
Engenharia de Software

 Planejamento e estimativa de projeto


 Análise de requisitos de software e de sistemas
 Projeto da estrutura de dados
 Algoritmo de processamento
 Codificação
 Teste
 Manutenção
Engenharia de Software

Abrange um conjunto de três elementos fundamentais:

Métodos, Ferramentas e Procedimentos

MÉTODOS
proporcionam os detalhes de como fazer para construir o software
Engenharia de Software

FERRAMENTAS
dão suporte automatizado aos métodos.

 Existem atualmente ferramentas para sustentar cada um dos métodos.

 Quando as ferramentas são integradas é estabelecido um sistema de suporte


ao desenvolvimento de software chamado CASE - Computer Aided Software
Engineering .
Engenharia de Software

PROCEDIMENTOS
constituem o elo de ligação entre os métodos e ferramentas
 Sequência em que os métodos serão aplicados
 Produtos que se exige que sejam entregues
 Controles que ajudam assegurar a qualidade e coordenar as
alterações
 Marcos de referência que possibilitam administrar o progresso
do software.
Objetivos da Engenharia de Software

Controle sobre o desenvolvimento de software dentro de custos, prazos e níveis de


qualidade desejados.

Produtividade no desenvolvimento, operação e manutenção de software.

Qualidade versus Produtividade.

Permitir que profissionais tenham controle sobre o desenvolvimento de software


dentro de custos, prazos e níveis de qualidade desejados.
Características da
Engenharia de Software

A Engenharia de Software se refere a software (sistemas)


desenvolvidos por grupos ao invés de indivíduos usa princípios de
engenharia ao invés de arte, e inclui tanto aspectos técnicos quanto
não técnicos
O que é um software de qualidade?
O software que satisfaz os requisitos solicitados pelo usuário.
Deve ser fácil de manter, ter boa performance, ser confiável e fácil de usar.

• Alguns atributos de qualidade


• Manutenibilidade
• O software deve evoluir para atender os requisitos que mudam

• Eficiência
• O software não deve desperdiçar os recursos do sistema

• Usabilidade
• O software deve ser fácil de usar pelos usuários para os quais ele foi projetado
Qualidade de Software
(um exemplo para o Varejo)
Correto
• A loja não pode deixar de cobrar por produtos comprados pelo
consumidor
Robusto e altamente disponível
• A loja não pode parar de vender
Eficiente
• O consumidor não pode esperar
• A empresa quer investir pouco em recursos computacionais (CPU,
memória, rede)
Qualidade de Software
(um exemplo para o Varejo)
• Amigável e fácil de usar
• A empresa quer investir pouco em treinamento

• Altamente extensível e adaptável


• A empresa tem sempre novos requisitos (para ontem!)
• A empresa quer o software customizado do seu jeito (interface, teclado,
idioma, moeda, etc.)

• Reusável
• Várias empresas precisam usar partes de um mesmo sistema
Qualidade de Software
(um exemplo para o Varejo)

Aberto, compatível, de fácil integração com outros sistemas


• A empresa já tem controle de estoque, fidelização, etc.

Portável e independente de plataforma (hw e sw)


• A empresa opta por uma determinada plataforma

Baixo custo de instalação e atualização


• A empresa tem um grande número de PDVs
Produtividade

• Custo de desenvolvimento reduzido


• A empresa consumidora quer investir pouco em software
• A empresa produtora tem que oferecer “software barato”

• Tempo de desenvolvimento reduzido


• Suporte rápido às necessidades do mercado
“Software Barato”

Nem tanto resultado de baixos custos de desenvolvimento, mas


principalmente da distribuição dos custos entre vários clientes.

Reuso, extensibilidade e adaptabilidade são essenciais para viabilizar tal


distribuição.
Importância da Engenharia de Software

Qualidade de software e produtividade garantem:


• Disponibilidade de serviços essenciais
• Segurança de pessoas
• Competitividade das empresas
• Produtores
• Consumidores
Mas, na realidade, temos a Crise de Software...

• 25% dos projetos são cancelados


• o tempo de desenvolvimento é bem maior do que o estimado
• 75% dos sistemas não funcionam como planejado
• a manutenção e reutilização são difíceis e custosas
• os problemas são proporcionais a complexidade dos sistemas
Causas da Crise de Software
Essências
• Complexidade dos sistemas
• Dificuldade de formalização

Acidentes
• Má qualidade dos métodos, linguagens, ferramentas, processos, e modelos de
ciclo de vida
• Falta de qualificação técnica
Elementos e Atividades da Engenharia de Software

Elementos Atividades
• Modelagem do negócio
• Modelos do ciclo de vida do software
• Elicitação de requisitos
• Linguagens • Análise e Projeto
• Métodos • Implementação
• Ferramentas • Testes
• Distribuição
• Processos
• Planejamento
• Gerenciamento
• Gerência de Configuração e Mudanças
• Manutenção
Atividades e Artefatos da Engenharia de Software

Atividades Artefatos
• Modelagem do negócio • Plano de Negócios
• Elicitação de requisitos • Plano de Projeto
• Análise e Projeto • Plano de Riscos
• Documento de Requisitos
• Implementação
• Mapeamentos A&P
• Testes
• Documento de Caso de Uso
• Distribuição
• Documento de Arquitetura
• Planejamento • Classes
• Gerenciamento • Documento de Testes
• Gerência de Configuração e Mudanças • Documento de Validação
• Manutenção • Manual do Sistema
Objetivos da Engenharia de Software

• Controle sobre o desenvolvimento de software dentro de custos, prazos e níveis de


qualidade desejados

• Produtividade no desenvolvimento, operação e manutenção de software

• Qualidade versus Produtividade

• Permitir que profissionais tenham controle sobre o desenvolvimento de software dentro


de custos, prazos e níveis de qualidade desejados
Objetivos da Engenharia de Software

Saber como estimar um projeto (tamanho, custo, cronograma)

Saber como monitorar o andamento de um projeto de desenvolvimento e a outros

elementos vinculados ao software

Saber como testar efetivamente

Saber como controlar a evolução do Software


Engenharia de Software

Conjunto de etapas que envolve MÉTODOS, FERRAMENTAS e


PROCEDIMENTOS.

 Essas etapas são conhecidas como componentes de CICLOS DE

VIDA DE SOFTWARE
 Alguns ciclos de vida mais conhecidos são:
 Ciclo de Vida Clássico, Prototipação, Modelo Espiral e Técnicas de 4a Geração
O que é um modelo de ciclo de vida de processo de
software?

Uma representação abstrata e simplificada do processo de


desenvolvimento software, tipicamente mostrando as principais
atividades e dados usados na produção e manutenção de software.
Modelos do Ciclo de Vida de Software

• Cascata
• Modelos Iterativos
• Espiral
• Incremental (ex: do RUP)

• ...
Modelo Cascata
Modelo Cascata
Modelo Cascata na Prática
Modelos Iterativos

• Requisitos de sistema SEMPRE evoluem durante curso de um projeto. Assim


a iteração do processo sempre faz parte do desenvolvimento de grandes
sistemas.

• Iterações podem ser aplicadas a quaisquer dos modelos de ciclo de vida.

• Duas abordagens (relacionadas)


• Desenvolvimento espiral
• Desenvolvimento incremental
Desenvolvimento Espiral

• Acrescenta aspectos gerenciais ao processo de desenvolvimento de software.


• análise de riscos em intervalos regulares do processo de desenvolvimento de software
• planejamento
• controle
• tomada de decisão
• O processo é representado como uma espiral em vez de uma sequencia de atividades.
• Cada volta na espiral representa uma fase no processo.
• Não há fases fixas como especificação ou projeto - voltas na espiral são escolhidas dependendo do que
é requerido.

• Riscos são avaliados explicitamente e resolvidos ao longo do processo


Desenvolvimento
Espiral
Desenvolvimento Incremental

Em vez de entregar o sistema como um todo, o desenvolvimento e a entrega são divididos


em incrementos, com cada incremento entregando parte da funcionalidade requerida.

Requisitos dos usuários são priorizados e os requisitos de mais alta prioridade são incluídos
nas iterações iniciais.

Uma vez que o desenvolvimento de um incremento é iniciado, os requisitos são "congelados".


Embora os requisitos possam continuar a evoluir para incrementos posteriores
Desenvolvimento Iterativo e Incremental (do RUP)
Processo Unificado da Rational
Linguagem

Notação com sintaxe e semântica bem definidas.


com representação gráfica ou textual

Usada para descrever os artefatos gerados durante o desenvolvimento


de software.

Exemplos: UML, Java


Método

Descrição sistemática de como deve-se realizar uma determinada


atividade ou tarefa.

A descrição é normalmente feita através de padrões e guias.

Exemplos: Método para descoberta das classes de análise no RUP.


Ferramenta CASE

Provê suporte computacional a um determinado método ou


linguagem.

Ambiente de desenvolvimento: conjunto de ferramentas integradas


(CASE - do inglês Computer-Aided Software Engineering).

Exemplos: Rational Rose, JBuilder


Processo

Conjunto de atividades

bem definidas
com responsáveis
com artefatos de entrada e saída
com dependências entre as mesmas e ordem de execução
com modelo de ciclo de vida
Processo de software

Um conjunto de atividades cujo objetivo é o desenvolvimento ou a


evolução do software.

Conjunto coerente de atividades para especificação, projeto,


implementação e teste de sistemas de software.
Pontos principais

Engenharia de software é uma disciplina de engenharia que está envolvida com


todos os aspectos da produção de software.

Produtos de software consistem de programas desenvolvidos e documentação


associada. Alguns atributos de qualidade do produto são manutenibilidade,
eficiência e usabilidade.

O processo de software consiste nas atividades que são envolvidas no


desenvolvimento de produtos de software.
Pontos principais

Métodos são formas organizadas de produzir software. Eles incluem sugestões para
o processo a ser seguido, as notações a serem usadas, regras que governam as
descrições do sistema que são produzidas e diretrizes de projeto.

Ferramentas CASE são sistemas de software que são projetados para


suportar as atividades rotineiras no processo de software, como edição de
diagramas de projeto e verificação de consistência dos diagramas.

Você também pode gostar