Você está na página 1de 27

Engenharia de Projetos

Livro: Engenharia de Software


Autor: Pressman
Capítulo 9
Projeto e Projeto Detalhado
Engenharia de Projetos

 O que é projeto? É onde você instala um pé em dois


mundos – o mundo da tecnologia e o mundo das pessoas
e objetivos humanos.

Mitch Kapor
Manifesto do Projeto de Software
Engenharia de Projetos
 Edifícios bem projetos eram aqueles que exibiam firmeza,
comodidade e prazer. (Vitruvius – crítico romano de
arquitetura)
 O mesmo poderia ser dito de bom software:
 Firmeza: um programa não deve ter quaisquer erros que
inibam sua função;
 Comodidade: um programa deve ser adequado às finalidades
foi planejado;
 Prazer: a experiência de usar o programa deve ser agradável.

Mitch Kapor
Manifesto do Projeto de Software
Engenharia de Projetos
 O projeto é o lugar em que a criatividade impera – em
que os requisitos do cliente, as necessidades do negócio e
as considerações técnicas se juntam na formulação de um
produto ou sistema.

 O projeto permite ao engenheiro de software modelar o


sistema ou produto que deve ser construído. Esse modelo
pode ser avaliado quanto a qualidade e aperfeiçoado
antes que o código seja gerado.
Engenharia de Projetos
 Projeto é o lugar em que a qualidade do software é
estabelecido.

 Sem projeto, nos arriscamos a construir um sistema


instável:
 que falhará quando pequenas modificações foram feitas;
 que pode ser difícil de testar;
 cuja qualidade não pode ser avaliada até certo ponto do
processo de desenvolvimento.
Engenharia de Projetos
 Iniciado logo que os requisitos de software tenham sido
analisados e modelados, o projeto de software é a última
ação do engenheiro de software dentro da atividade de
modelagem e prepara a cena para a construção.

Requisitos Implementação Manutenção

Projeto Verificação
Engenharia de Projetos
 “O milagre mais comum da engenharia de software é a
transição da análise para o projeto e do projeto para o
código.”
Richard Duo

 “Escrever um pedaço inteligente de software que


funcione é uma coisa, projetar algo que possa dar suporte
a negócios duradouros é outra.”
C. Ferguson
Engenharia de Projetos
 Um projetista precisa praticar diversificação e
convergência.
 Diversificação: é a aquisição de um repertório de alternativas:
componentes, soluções de componentes e conhecimento;
 Convergência: uma particular configuração de componentes e,
assim, a criação do produto final.
Modelos de Projeto
Projeto em
nível de
componente
Projeto de
Interface

Projeto arquitetural

Projeto de dados
Elementos de Projeto de Dados
 Cria um modelo de dados e/ou informações que é
representado no nível mais alto de abstração. Esse
modelo de dados é então refinado em representações
cada vez mais específicas da implementação que podem
ser processadas pelo sistema baseado em computador.
Elementos do Projeto Arquitetural
 O projeto arquitetural do software é o equivalente à
planta baixa de uma casa. A planta baixa representa a
disposição global dos cômodos, seu tamanho forma de
relacionamento entre eles, e as portas e janelas que
permitem movimento para dentro e para fora dos
cômodos.

 A planta baixa nos dá uma visão geral da casa. Elementos


do projeto arquitetural nos dão uma visão geral do
software.
Elementos do Projeto de Interface
 Há três importantes elementos no projeto de interface:
 A interface com o usuário;
 Interfaces externas com outros sistemas, dispositivos, redes ou
outros produtores ou consumidores de informação;
 Interfaces internas entre vários componentes de projeto.
Elementos do Projeto em Nível de Componentes
 O projeto em nível de componente para software é
equivalente a um conjunto de desenhos detalhados (e
especificações para cada cômodo de uma casa.

 O projeto de componente do software descreve


completamente os detalhes internos de cada
componente de software.
Processo de Projeto e Qualidade de Projeto
 Processo de software é um processo iterativo por meio
do qual os requisitos são traduzidos em um documento
para construção do software.

 À medida que ocorrem as iterações de projeto, os


refinamentos subsequentes levam a representações de
projeto em nível de abstração muito mais baixos.
Processo de Projeto e Qualidade de Projeto
 O projeto deve implementar todos os requisitos explícitos
contidos no modelo de análise e acomodar todos os
requisitos implícitos desejados pelo cliente.

 O projeto deve ser um guia legível, compreensível para


aqueles que geram código e para os que testam e,
subsequentemente dão suporte ao software.

 O projeto deve fornecer um quadro completo do


software, focalizando os domínios de dados, funcional e
comportamental sob uma perspectiva de implementação.
Conceitos de Projeto
 “O princípio da sabedoria de um engenheiro de software
é reconhecer a diferença entre conseguir que um
programa funcione e consegui-lo corretamente.”
M. A. Jackson

 Conceitos fundamentais de projeto de software fornecem


o arcabouço necessário para “fazê-lo corretamente”.
Conceitos de Projeto
 Abstração:
 Quando consideramos uma solução modular para qualquer
problema, muitos níveis de abstração podem ser colocados.

 No nível mais alto de abstração, uma solução é enunciada em


termos amplos usando a linguagem do ambiente do problema.

 Nos níveis mais baixos de abstração, uma descrição mais


detalhada da solução é fornecida.
Conceitos de Projeto
 Padrões:

 O padrão é uma porção identificada de conhecimento


profundo, que transmite a essência de uma solução provada,
para um problema recorrente em certo contexto, em meio a
preocupações recorrentes.
Conceitos de Projeto
 Arquitetura:

 Uma meta do projeto de software é derivar um quadro


arquitetural do sistema. Esse quadro serve como arcabouço
com base no qual atividades de projeto detalhado são
conduzidas.

 Um conjunto de padrões de software arquiteturais permite ao


engenheiro de software reusar conceitos de projeto.
Conceitos de Projeto
 Modularidade:

 Arquitetura de software e padrões de projeto incorporam


modularidade; o software é dividido em componentes
nomeados separadamente, algumas vezes chamados de
módulos, que são integrados para satisfazer aos requisitos do
problema. Dividir para conquistar.

 Software monolítico (composto por um único módulo) pode


não ser compreendido pelo engenheiro de software.
Conceitos de Projeto
 Ocultamento da Informação:

 Módulos devem ser especificados e projetados para que a


informação (algoritmos e dados) contida em um módulo seja
inacessível a outros módulos que não necessitam dessa
informação.

 Ocultamento implica que efetiva modularidade pode ser


conseguida pela definição de um conjunto de módulos
independentes que informam uns aos outros apenas o
necessário para realizar uma função do software.
Conceitos de Projeto
 Independência Funcional:

 O conceito de independência funcional é uma decorrência


direta da modularidade e dos conceitos de abstração e
ocultamento de informação.

 A independência funcional é obtida pelo desenvolvimento de


módulos com função de “finalidade única” e uma “aversão” à
interação excessiva com outros módulos.

 Coesão e Acoplamento.
Conceitos de Projeto
 Refinamento:

 Refinamento é na verdade um processo de elaboração.


Começamos com um enunciado da função que é definida em
um alto nível de abstração. O enunciado descreve a função ou
informação conceitualmente, mas não fornece qualquer
informação sobre o funcionamento interno da função ou
estrutura interna da informação.

 O refinamento leva o projetista a elaborar o enunciado


original, fornecendo mais e mais detalhes à medida que cada
refinamento sucessivo ocorre. Abstração e refinamento são
conceitos complementares.
Conceitos de Projeto
 Refabricação:

 Refabricação é o processo de modificar um sistema de


software de modo tal que ele altere o comportamento externo
do código [projeto], mas melhore sua estrutura externa.
Conceitos de Projeto
 Classes de Projeto:

 A medida que o projeto evolui, a equipe de software deve


definir um conjunto de classes de projeto que refina as classes
de análise, fornecendo detalhes do projeto que vão permitir
que as classes sejam implementadas e crie um conjunto de
classes de projeto que implemente um infraestrutura de
software para apoiar a solução do negócio.
Leitura e Discussão de Texto
 Fundamentos de Arquitetura de Software

 Trabalho (2pts para AV1)


1. Pontos Importantes;
2. Dúvidas (o que eu não entendi do texto);
3. Resenha (minha opinião sobre os pontos importantes do
texto).

Você também pode gostar