Você está na página 1de 53

Projeto de Sistemas

O que é software?
• Programas de computador
• Entidade abstrata.
• Ferramentas (mecanismos) pelas quais:
– exploramos os recursos do hardware.
– executamos determinadas tarefas
– resolvemos problemas.
– interagimos com a máquina.
– tornamos o computador operacional.
O que é software?
Conceito mais amplo que inclui também:

Instruções que executam uma função
desejada.

Estrutura de dados para manipular
informação.

Documentos para desenvolver, operar e
manter os programas.
Tipos de Sistemas de Software

Software básico

Software para sistema em tempo real

Software comercial

Software para engenharia e aplicações científicas

Software embarcado (ex. microwave)

Software para computadores pessoais
(shrink-wrap)

Software baseado em inteligência artificial

Software de entretenimento
A Evolução do Software A quarta era
•sistemas A quinta
A terceira era
A segunda era desktop
era •Web 2.0
poderosos
Os primeiros •sistemas •Serviços
•sistemas •tecnologia de
anos multiusuários Web
distribuídos orientação a •Computa-
•sistemas batch •sistemas em objetos ção em
•incorporação
tempo real nuvens
•distribuição de •sistemas
limitada •banco de inteligência especialistas
dados •hardware de
•software •redes neurais
personalizado •software baixo custo
produto •computação
•impacto do paralela
consumidor

1950
1960 1970 1980 1990 2000 201
0
Dificuldades para desenvolver
software

Saber o que o software deve fazer:
– quais os requisitos (abstração);


Ferramentas; linguagem; SO

Tempo e custos elevados de desenvolvimento.

Prever falhas (antes de entregar).

Tratar manutenção e versões.

Produtividade não cresce com a demanda de
serviços.
Dificuldades para desenvolver
software
Características do Software
• software não é um elemento físico;
– é um elemento lógico (não tem propriedades
físicas, como visualizar, medir ...)
• abstração maior;
– o produto final é diferente
• o software não pode ser manufaturado;
– custos estão concentrados no desenvolvimento
e não na manufatura.
• o processo de gerenciamento é diferente;
– o relacionamento entre as pessoas é diferente;
Características do Software
• existem diferentes abordagens para se chegar no
produto final
• o software não se desgasta com o uso;
– mas deteriora-se
• não há peças de reserva. => manutenção,
correção, aperfeiçoamento.
• não é construído aproveitando-se componentes
prontos.
• Um erro durante um teste => erro de projeto;
– mais difícil de testar.
Crise de Software

Alguns autores associam a palavra “crise” aos


problemas para desenvolver software
Crise de Software
Problemas:
• Software inadequado.
• Cronogramas e custos imprecisos - dificuldades
em prever o progresso durante o desenvolvimento.
• Inexistência de dados históricos sobre o processo
de desenvolvimento.
• Mitos da ES
• Comunicação deficiente - insatisfação de usuários.
• Carência de conceitos quantitativos sobre
confiabilidade, qualidade, reusabilidade.
• Software existente é de difícil manutenção.
Crise de Software
Solução:
• Combinar métodos para as fases de
desenvolvimento.
• Ferramentas para automatizar esses
métodos.
• Técnicas para assegurar qualidade.
=> Disciplina: Engenharia de Software.
Engenharia de Software
• Abordagem sistemática para o desenvolvimento,
operação, manutenção e descarte de software.
• Aplicação prática de conhecimento científico ao
projeto e construção de software.
• Disciplina que utiliza princípios de engenharia para
produzir e manter softwares dentro de prazos e
custos estimados.
• “.. construção por muitas pessoas de um software
com múltiplas visões”. (Parnas 1987)
Engenharia de Software
• Objetivos: Melhorar a qualidade do
software e aumentar a produtividade e
satisfação profissional de engenheiros de
software.
• Definição: Disciplina que utiliza um
conjunto de métodos, técnicas e ferramentas
para analisar, projetar e gerenciar
desenvolvimento e manutenção de software.
Engenharia de Software
Engenharia de Software
• Métodos e Técnicas:
– detalhes de como fazer
• Metodologias:
– como aplicar
• Ferramentas:
– automatizam os métodos, dão apoio a
utilização.
– CASE => (Computer-Aided Engineering):
Ferramentas integradas para desenvolver
software.
ES e outras
áreas
Princípios da Engenharia de
Software
• Formalidade: reduz inconsistências
• Abstração: aspectos importantes, ignorar
detalhes
• Decomposição: lidar com complexidade
• Generalização: reutilização, custo
• Flexibilização: mudanças, processo
incremental
Processo de Software
À E. S. está associado um conjunto de
passos (que englobam métodos,
ferramentas, etc) denominado paradigma
Processo de Software

Um conjunto estruturado de atividades
requeridas para desenvolver um sistema de
software


Um modelo de processo de software é uma
representação abstrata de um processo.
Apresenta uma descrição de um processo
de alguma perspectiva particular
Ciclo de Vida Clássico (cascata)
• modelo mais antigo e o mais amplamenteconhecido da
engenharia de software
• modelado em função do ciclo da engenharia
convencional
• requer uma abordagem sistemática, seqüencial ao
desenvolvimento de software
• O resultado de uma fase é entrada para outra fase.
Ciclo de Vida Clássico (cascata)
Ciclo de Vida Clássico (cascata)
Definições
● O que é Análise e Projeto de Sistema?
● Para tal, precisamos definir:
– O que é análise?
– O que é processo?
– O que é sistema?
O que é Análise?
● Derivado do grego analýein (desatar, soltar),
significa: dissolução de um conjunto em suas
partes.
● Análise é um estudo de um problema, que
antecede uma ação para resolvê-lo.
● O seu propósito é modelar um sistema de
forma que ele possa ser entendido.
O que é Processo?
● Série de fenômenos sucessivos com relação
de causa e efeito.
● Por exemplo
– uma empresa é uma série de causas - matérias
primas, recursos humanos, tecnologia - que geram
um efeito, no caso, os produtos
O que é Sistema?
● Definições:
– Um grupo de itens que interagem entre si ou que
sejam interdependentes, formando um todo unificado.
– Um conjunto organizado de doutrinas, idéias ou
princípios, habitualmente previsto para explicar a
organização ou funcionamento de um conjunto
sistemático.
– Um procedimento organizado ou estabelecido.
● Tipos: Naturais e feitos pelo homem.
O que é Análise e Projeto?
● Representa o estudo detalhado de uma área
de trabalho (processo) e o desenvolvimento
de um conjunto de softwares integrados
(sistema) destinado à execução, controle e
acompanhamento do processo.
● Análise e Projeto de Software são feitos
usando-se um processo de desenvolvimento
que mostra claramente quais são as etapas a
seguir para produzir software de qualidade.
O que é Análise e Projeto?
● Visão Tradicional
– A análise modela o problema e consiste das
atividades necessárias para entender o domínio do
problema. É uma atividade de investigação.
● O que deve ser feito?

– O projeto modela a solução e consiste das


atividades de criação
● Como pode ser feito?
O que é Análise e Projeto?
● Ambas são disciplinas de modelagem de criação
e descrição de modelos
– Todas as engenharias usam modelos
– Primeiro se cria um modelo
– Depois se constrói o produto de acordo com o modelo
● “Todos os modelos são errados, mas alguns são
úteis”
● Quando um modelo é útil?
O que é Análise e Projeto?
O que é Análise e Projeto?
● Uma Nova Visão (Mais Prática)
– A análise consiste das atividades feitas com ou
para o conhecimento do cliente. A informação
produzida é a que o cliente deve discutir e aprovar.

– O projeto inclui as atividades que resultam em


informação que interessa apenas ao programador.
O que é Análise e Projeto?
Análise — “o quê” Projeto — “como”

Investigação do problema e dos requisitos Descrição de uma solução lógica

Requisitos Objetos

Casos de uso Arquitetura

Restrições Instalação & Operação

Vocabulário Interface do usuário


Conflito de Terminologias
● Termos “Análise” e “Projeto” não são fixos, mas
usados ao longo de um contínuo

Mais orientado Mais orientado


a análise a projeto

● Significados variam de metodologia para metodologia


● Distinção é útil na prática, mas debater definições
rígidas não é construtivo
Motivações para elaborar o Projeto
● Limitações da Tecnologia – tecnologia
imperfeita
– Custo
– Capacidade de armazenamento
– Velocidade de processamento Impactos da
tecnologia imperfeita
nos SI
– Aptidão dos processadores
– Banda links de comunicação
– Falibilidade
Motivações para construir o Projeto
● Impactos da tecnologia imperfeita nos projetos
– Fragmentação
– Redundância
– Convolução (servem atividades essenciais)
– Conglomeração
– Imensidão (localização geográfica)
Metodologias de Projetos
● Projeto estruturado
– anos 70
● Stevens, Meyers, Constantine, Yourdon, Jackson
● Projeto orientado por objetos
– anos 80
● Jacobson, Booch, Rumbaugh, Yourdon
● Projeto orientado por padrões
– anos 90
● Shaw, Garlan, Buschmann, Gamma
Análise e Projeto OO

O que determina uma orientação a objetos é a maneira como
se faz o particionamento do problema (análise) ou da solução
(projeto)

Sistema de
Biblioteca

A&P Estruturados
A&P Orientados a Objeto
Particionamento através de
Particionamento funções ou processos
através de objetos ou conceitos
Sistema
Catálogo Bibliotecário

Livro Biblioteca Registra Adiciona Reporta


Empréstimos Recursos Multas
Análise e Projeto OO

Durante a Análise OO, ●
Durante o projeto OO,
a ênfase está em a ênfase está em
achar e descrever achar objetos lógicos
objetos (ou conceitos) de software que poder
no domínio do ão ser eventualmente
problema implementados
usando uma
linguagem OO
Análise e Projeto OO
Conceito Representação Representação
de domínio na análise no projeto

Livro Livro

título título
imprimir()


Exemplo: O
conceito “Livro” em
um sistema de public class Livro
biblioteca. {
public void imprimir();
Representação
no código
private String titulo;
}
Ferramentas para criar sw OO

Saber uma linguagem de programação
orientada a objeto (OO) não é suficiente
para criar sistemas OO

É preciso saber Análise e Projeto OO

Linguagem UML

Padrões de projeto
Atividades Principais de Projetos
● Projeto da Arquitetura: permite estabelecer, a
partir dos requisitos, a arquitetura do software e
da informação relacionada. Também conhecido
como projeto Alto nível ou projeto preliminar.
● Projeto detalhado: permite aperfeiçoar a
estrutura do software e definir representações
algorítmicas de seus componentes
● Projeto das interfaces do sistema
Atividades Projeto
Orientado por Objeto
● Projeto Arquitetura
– Distribuição das classes em subsistemas e
componente
– Distribuição dos componentes em recursos de
hardware
● Projeto Detalhado
– Detalhamento dos casos de uso
– Realização de casos de uso
– Projeto das interfaces
Atividades do Projeto
Atividades do projeto OO
(Resumo)

Atribuição de responsabilidades entre os objetos

Construção de diagramas de classes

Construção de diagramas de interação (seqüência e
colaboração)

Levantamento de necessidades de concorrência

Considerações de tratamento de defeitos

Detalhamento do formato de saída (interface com usuário,
relatórios, transações enviadas para outros sistemas, ...)

Definição do esquema do BD: mapeamento de objetos para
tabelas se o BD for relacional
Avaliação do Projeto
● Determina se o projeto satisfaz os requisitos do
sistema
– importante verificar se todos os requisitos foram
considerados, incluindo os requisitos não-funcionais uma
vez que não são tratados na análise
● Como o projeto realiza (atende, satisfaz) um requisito
– identificar o conjunto de entidades que colaboram e as
formas de interação para atender cada requisito.
● Determina se o projeto pode ser entendido pelos
implementadores e testadores do sistema
Princípios de Projeto
● O projeto deve:
– considerar abordagens alternativas
– ser rastreável ao modelo de análise
– reutilizar padrões ao invés de reinventar a roda
– minimizar a distância entre o software e o problema do
mundo real
– exibir uniformidade
– ser estruturado para acomodar mudanças
– ser avaliado com relação a sua qualidade, durante sua
criação
Conceitos de Projeto
● Abstração
● Refinamento
● Modularização
● Ocultação de informação
Abstração
● Permite que nos concentremos no problema
em algum nível de generalização sem
considerar detalhes
● Cada passo no processo de desenvolvimento
de um sistema é um refinamento no nível de
abstração da solução
Refinamento
● Uma elaboração maior no nível de detalhes
● Um programa é desenvolvido através de
sucessivos refinamentos
– chegamos a uma descrição em linguagem de
programação partindo de uma em linguagem
natural e refinando-a em sucessivas iterações
● Abstração e refinamento são conceitos
complementares
Modularização
● Característica dos sistemas que são divididos
em componentes permite que um sistema
complexo seja compreendido
– a mente humana não consegue lidar com toda a
complexidade dos sistemas de uma só vez
● Pergunta: Quantos módulos e qual o tamanho
ideal dos módulos?
Ocultação de informação
● O princípio da ocultação de informações
sugere que cada módulo deve conter decisões
de projeto que ele oculta dos outros módulos
● módulos comunicam entre si para obterem
informações necessárias para o que o sistema
funcione
Disciplina Análise e Projeto
● Propósito:
– Transformar os requisitos em um projeto a ser feito
– Definir uma arquitetura robusta para o sistema
– Adaptar o projeto para aderir ao ambiente de
implementação

O artefato principal é os modelo do projeto