Você está na página 1de 43

Engenharia de Software

Engenharia de Software Aspectos Fundamentais do Projeto de Software Prof. Laudelino Cordeiro Bastos

Aspectos Fundamentais do Projeto de Software

Prof. Laudelino Cordeiro Bastos

Considerações Iniciais

Considerações Iniciais Definição : projeto é o processo de se aplicar várias técnicas e princípios com

Definição : projeto é o processo de se aplicar várias técnicas e princípios com o propósito de se definir um dispositivo, um processo ou um sistema com detalhes suficientes para permitir sua realização física.

Importância do Projeto: Qualidade.

Fluxo de Informações

Fluxo de Informações Modelo Modelo de informação funcional Módulos do Projeto arquitet ural Projeto de dados
Modelo Modelo de informação funcional Módulos do Projeto arquitet ural Projeto de dados Programa Modelo Projeto
Modelo
Modelo de
informação
funcional
Módulos do
Projeto arquitet ural
Projeto de dados
Programa
Modelo
Projeto
Comportamental
Projeto interfaces
Código
Outros requisitos
Projeto procedimental
Teste

Produto

Características de Bom Projeto

Características de Bom Projeto Deve exibir uma organização hierárquica inteligente. Deve ser modular e logicamente dividido.

Deve exibir uma organização hierárquica inteligente. Deve ser modular e logicamente dividido.

Deve representar e separar dados e procedimentos.

Deve ter módulos que apresentem características funcionais independentes

Características de Bom Projeto

Características de Bom Projeto Deve levar a interfaces reduzidas entre os módulos (baixo acoplamento). Deve ser

Deve levar a interfaces reduzidas entre os módulos (baixo acoplamento).

Deve ser derivado com o uso de um método que seja orientado pelas informações obtidas durante a análise.

Características de Métodos de Projeto

Características de Métodos de Projeto Mecanismo para a tradução da representação do domínio de informação em

Mecanismo para a tradução da representação do domínio de informação em uma representação de projeto. Notação para representar os componentes funcionais e suas interfaces. Heurísticas para refinamento e divisão. Diretrizes para a avaliação da qualidade.

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 1 Abstração: apresentação em diferentes níveis de detalhes: Abstração procedimental. Abstração de

1 Abstração: apresentação em diferentes níveis de detalhes:

Abstração procedimental. Abstração de dados.

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 2 Refinamento : processo de elaboração: Refinamento passo a passo: antiga estratégia

2 Refinamento: processo de elaboração:

Refinamento passo a passo: antiga estratégia de projeto top-down.

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 3 Modularidade: O software é dividido em componentes separadamente nomeados e endereçáveis,

3 Modularidade: O software é dividido em componentes separadamente nomeados e endereçáveis, denominados módulos:

Atributo que permite que um programa seja intelectualmente administrável. Envolve o conceito de tipos abstratos de dados.

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 4 Arquitetura de Software: diz respeito a duas características de um programa

4 Arquitetura de Software: diz respeito a duas características de um programa de computador:

A estrutura hierárquica de componentes (módulos). A estrutura de dados.

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 4 Arquitetura de Software (continuação): Problema a ser resolvido P1 P2 P3

4 Arquitetura de Software (continuação):

Problema a ser resolvido

Solução de Software

P1 P2 P3 P4 P5
P1
P2
P3
P4
P5
Conceitos Fundamentais de Projeto 4 Arquitetura de Software (continuação): Problema a ser resolvido P1 P2 P3
S1
S1
S3
S3
S2
S2
S4
S4
S5
S5

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 4 Arquitetura de Software (continuação): Formas diferentes de estruturação P Problema Interface

4 Arquitetura de Software (continuação):

Formas diferentes de estruturação

P
P

Problema

Interface

Conceitos Fundamentais de Projeto 4 Arquitetura de Software (continuação): Formas diferentes de estruturação P Problema Interface
S4
S4
S1
S1
S5
S5

Interface

S1 S2 S3 S4
S1
S2
S3
S4
S3
S3
S5
S5
S2
S2

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 5 Hierarquia de Controle: M Fan-out a b c Profundidade d e

5 Hierarquia de Controle:

M Fan-out a b c Profundidade d e k l m f g h n o
M
Fan-out
a
b
c
Profundidade
d
e
k
l m
f
g
h
n
o
p
q
Fan-in
i
j
r
Largura

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 6 Estrutura de Dados: Representação do relacionamento lógico entre elementos de dados

6 Estrutura de Dados:

Representação do relacionamento lógico entre elementos de dados individuais.

A estrutura da informação é tão importante quanto a estrutura de programa para a representação da arquitetura do software, pois afeta o projeto procedimental final.

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 7 Procedimento de Software: Focaliza os detalhes de processamento de cada módulo;

7 Procedimento de Software:

Focaliza os detalhes de processamento de cada módulo;

Deve especificar:

Processamento. Sequência de eventos. Pontos de decisão exatos. Operações representativas. Estrutura e/ou organização de dados.

Conceitos Fundamentais de Projeto

Conceitos Fundamentais de Projeto 8 Ocultamento de Informação: Um dos aspectos fundamentais de modularidade. Critério de

8 Ocultamento de Informação:

Um dos aspectos fundamentais de modularidade.

Critério de projeto que melhora as fases de teste e manutenção do software.

Projeto Modular

Projeto Modular Abordagem aceita em todas as disciplinas de Engenharia e Computação. Facilita a mudança. Facilita

Abordagem aceita em todas as disciplinas de Engenharia e Computação.

Facilita a mudança.

Facilita a implementação (desenvolvimento em paralelo).

Independência Funcional

Independência Funcional Conceito que está diretamente relacionado a modularidade, abstração e ocultamento de informação. Características: Módulo

Conceito que está diretamente relacionado a modularidade, abstração e ocultamento de informação.

Características:

Módulo (função) de propósito único.

Interfaces simples quando visto de outras partes da estrutura do programa.

É medida usando-se dois critérios qualitativos:

Coesão. Acoplamento.

Coesão

Coesão É uma medida de força funcional relativa de um módulo. Um módulo coeso executa uma

É uma medida de força funcional relativa de um módulo.

Um módulo coeso executa uma única tarefa, exigindo pouca interação com outros módulos.

Alta coesão é o desejável.

Coesão

Coesão coincidental temporal comunicacional funcional sequencial Lógico • • • • • procedimental Baixa • •

coincidental

Coesão coincidental temporal comunicacional funcional sequencial Lógico • • • • • procedimental Baixa • •

temporal

comunicacional

funcional

sequencial
sequencial

Lógico

 
Lógico • • • • •

procedimental

Coesão coincidental temporal comunicacional funcional sequencial Lógico • • • • • procedimental Baixa • •
Baixa • • • • • Espectro de coesão • • • • • • •
Baixa • •
• • • Espectro de coesão • • • • • • • • • • Elevada

Acoplamento

Acoplamento É uma medida da interdependência relativa entre os módulos. Depende da complexidade de interface entre

É uma medida da interdependência relativa entre os módulos.

Depende da complexidade de interface entre os módulos.

Baixo acoplamento é o desejável.

Acoplamento

Acoplamento Acoplamento por imagem (lista de argumentos, p.ex.: struct ) Nenhum acoplamento direto Acoplamento por conteúdo

Acoplamento por imagem (lista de argumentos, p.ex.:

struct)

Nenhum acoplamento direto

Acoplamento Acoplamento por imagem (lista de argumentos, p.ex.: struct ) Nenhum acoplamento direto Acoplamento por conteúdo

Acoplamento por conteúdo (jump em assembly)

Acoplamento

externo Acoplamento por controle
externo
Acoplamento por
controle

Acoplamento por dados (elementos de dados isolados)

Acoplamento comum (variáveis globais)
Acoplamento
comum (variáveis
globais)
Baixo Médio Elevado
Baixo
Médio
Elevado

Acoplamento (Exemplos)

Acoplamento (Exemplos) Baixo Acoplamento Nenhum acoplamento direto Módulo 1 Módulo 3 Estrutura de dados passada por

Baixo Acoplamento

Nenhum

acoplamento direto Módulo 1 Módulo 3
acoplamento
direto
Módulo 1
Módulo 3

Estrutura de dados passada por meio de lista de argumentos (acoplamento por imagem)

Acoplamento (Exemplos) Baixo Acoplamento Nenhum acoplamento direto Módulo 1 Módulo 3 Estrutura de dados passada por
Módulo 2
Módulo 2

Dados passados por meio de listas de argumentos

Acoplamento (Exemplos) Baixo Acoplamento Nenhum acoplamento direto Módulo 1 Módulo 3 Estrutura de dados passada por

(acoplamento por dados)

Módulo 4
Módulo 4

Acoplamento (Exemplos)

Acoplamento (Exemplos) Acoplamento Elevado A Área de dados global L M B C N O Os

Acoplamento Elevado

A Área de dados global L M B C N O Os módulos C, E e
A
Área de dados
global
L
M
B
C
N
O
Os módulos C, E e N
D
E
F
F

exibem acoplamento comum

P
P

Acoplamento por conteúdo (jump)

Atividades de Projeto

Atividades de Projeto Projeto Preliminar Projeto Detalhado Projeto de dados: OK Projeto arquitetural: OK Projeto procedimental:
Projeto Preliminar Projeto Detalhado Projeto de dados: OK Projeto arquitetural: OK Projeto procedimental: OK Projeto de
Projeto Preliminar
Projeto Detalhado
Projeto de dados: OK
Projeto arquitetural: OK
Projeto procedimental: OK
Projeto de interface

Projeto de Interface

Projeto de Interface Especificação da interface homem-máquina. Regras do projeto homem-máquina. Projeto da interface externa: Interface

Especificação da interface homem-máquina. Regras do projeto homem-máquina. Projeto da interface externa:

Interface para dados externos. Interface para sistemas ou dispositivos externos.

Questões a Serem Consideradas

Questões a Serem Consideradas Quem é o usuário? Como ele aprende a interagir com um novo

Quem é o usuário?

Como ele aprende a interagir com um novo sistema baseado em computador?

Como ele interpreta a informação produzida pelo sistema?

Chaves para uma Boa Interface

Chaves para uma Boa Interface Coloque o usuário no controle. Reduza a carga para a memória

Coloque o usuário no controle. Reduza a carga para a memória do usuário. Faça a interface consistente.

Usuário no Controle

Usuário no Controle Depoimento de um possível usuário: “O que eu realmente gostaria, é de um

Depoimento de um possível usuário:

“O que eu realmente gostaria, é de um sistema que lesse a minha mente. Que soubesse o que quero fazer antes que eu precise pedí-lo, e que torne muito mais fácil para mim conseguir que seja feito. Gostaria apenas disso.”

Diretrizes para Manter o Usuário no Controle

Diretrizes para Manter o Usuário no Controle Defina modos de interação de uma forma que não

Defina modos de interação de uma forma que não force o usuário a executar ações desnecessárias ou indesejadas.

Proporcione interação flexível:

Comandos digitadora.

Permita

que

do

teclado,

movimentos

do

mouse,

caneta

a interação

com

o usuário

possa ser

interrompida e desfeita, mesmo em se tratando de uma

seqüência de ações.

Esconda detalhes técnicos dos usuários. A interface deve levar o usuário a um mundo virtual da aplicação.

Projete

da

forma mais real possível

usuários com objetos.

a

interação do

Memória do Usuário

Memória do Usuário Quanto mais um usuário tiver que lembrar, mais sujeito a erros está a

Quanto mais um usuário tiver que lembrar, mais sujeito a erros está a interação com o sistema.

Sempre que possível o sistema deve lembrar de informações que são importantes para o usuário.

Diretrizes para Poupar a Memória do Usuário

Diretrizes para Poupar a Memória do Usuário Redefinição do conjunto inicial ( default ) de parâmetros.

Redefinição do conjunto inicial ( default) de parâmetros. Permitindo a redefinição dos valores iniciais. Os atalhos devem ser intuitivos. O layout visual deve ser baseado no mundo real:

Facilitar a interação do usuário. Por ex.: Pagamento de contas.

Revele a informação de um modo progressivo:

A interface deve ser organizada hierarquicamente.

Primeiramente, um alto nível

de

abstração,

e

depois de um

clique, o detalhamento progressivo do produto.

Interface Consistente

Interface Consistente A informação deve aparecer de um modo consistente: Toda informação visual deve ser organizada

A informação deve aparecer de um modo consistente:

Toda informação visual deve ser organizada de acordo com um padrão de projeto, mantido para todas as telas.

Mecanismos de navegação são consistentemente definidos e implementados.

Diretrizes para Obter uma Interface Consistente

Diretrizes para Obter uma Interface Consistente Permita que o usuário saiba em qual contexto está inserido.

Permita que o usuário saiba em qual contexto está inserido. Utilize títulos de telas, ícones, cores diferenciadas.

Mantenha consistência ao longo de uma família de produtos.

Se aplicações anteriores já utilizavam padrões, não altere os mesmos, a menos que haja uma forte razão para isso.

Modelos de Projeto de Interface

Modelos de Projeto de Interface Modelo do Engenheiro de Software: cria um modelo de software, cria

Modelo do Engenheiro de Software: cria um modelo de software, cria um modelo de produto.

Modelo do Usuário: o usuário desenvolve uma

imagem

mental

do

modelo.

É

também

denominado

modelo

do

ponto

de

vista

do

usuário.

Modelo do Implementador: cria a imagem do sistema.

Tipos de Usuários

Tipos de Usuários Usuários Novatos: nenhum conhecimento sintático e nem semântico. Usuários Esporádicos ou Conhecedores: razoável

Usuários Novatos: nenhum conhecimento sintático e nem semântico.

Usuários Esporádicos ou Conhecedores:

razoável conhecimento semântico, leve lembrança da interface.

Usuários Freqüentes e Conhecedores: Bom conhecimento semântico e sintático, indivíduos que buscam atalhos e modos de interação abreviados.

Projeto de Interface

Projeto de Interface Para um Projeto de Interface com o usuário, é preciso: Análise e modelagem

Para um Projeto de Interface com o usuário, é preciso:

Análise e modelagem do usuário, tarefas e ambiente. Projeto da Interface. Construção da Interface. Validação da Interface.

Cada uma das tarefas vai ocorrer mais de uma vez, até o término da Interface.

Projeto de Interface com DTE

Projeto de Interface com DTE “Esc” Menu Principal “Esc” Opção Pressi- Pressi- Tela onado Opção “Esc”
“Esc” Menu Principal “Esc” Opção Pressi- Pressi- Tela onado Opção “Esc” onado Final Tela Opção “Esc”
“Esc”
Menu Principal
“Esc”
Opção
Pressi-
Pressi-
Tela
onado
Opção
“Esc”
onado
Final
Tela
Opção
“Esc”
Pressi-
Opção
“Esc”
Tratar
Tela
Pressi-
Limpar
onado
Tela
Pressi-
Quarto
Tratar
onado
Limpar
Exibir
Tela
Tratar
onado
Reserva
Tela
Tela
Inicial
Cliente
Final
Final
Exibir
Exibir
Limpar
Limpar
Tela
Exibir
Tela
Tela
Limpar
Tela
Tratar
Tela
Tratar
Tratar
Tela
Tratar
Quarto
Tratar
Reserva
Reserva
Tratar
Quarto
Cliente
Cliente
Tela Tratar
Tela Tratar
Tela
Tela Inicial
Reserva
Cliente
Tratar
Tela Final
Quarto
Opção

Opção

Opção

Tela

Reservar

Quarto

Exibir

Tela

Reservar

Quarto

Tela

 

Reservar

 

Quarto

“Esc”

Pressi-

onado

Limpar

Tela

Reservar

Quarto

Opção

Tela

Inicial

Exibir

Tela

Inicial

Evolução do Projeto: Relação com a Interface

Evolução do Projeto: Relação com a Interface À medida que o projeto evolui, surgem algumas questões:

À medida que o projeto evolui, surgem algumas questões:

Tempo de resposta do sistema:

Duração e variabilidade.

Facilidades de ajuda aos usuários. Manipulação das informações de erro. Rotulação de comandos.

Mensagens de Erro

Mensagens de Erro As mensagens de erros na interface devem seguir as seguintes características: Descrever o

As mensagens de erros na interface devem seguir as seguintes características:

Descrever o problema em uma linguagem que o usuário possa entender.

Fornecer sugestão construtiva para se recuperar do erro. Indicar quaisquer conseqüências negativas causadas pelo erro, como Banco de Dados corrompido.

A mensagem deve ser acompanhada por uma indicação audível ou visual.

A

mensagem deve ser “não-opinativa”, ou seja, nunca deve

colocar a culpa no usuário.

Exercício

Exercício Responda as seguintes perguntas, antes de iniciar o seu projeto de interface: Caracterize o usuário

Responda as seguintes perguntas, antes de iniciar o seu projeto de interface:

Caracterize o usuário do seu sistema: idade, sexo, nível de escolaridade, etc.

Como você classificaria os usuários do seu sistema:

novos, esporádicos ou experientes. Por quê?

O usuário necessita de condições especiais de utilização? Caso a resposta seja sim, quais são as necessidades.

Exercício (continuação)

Exercício (continuação) Faça o Projeto de Interface com DTE para o seu Projeto. Para tanto, utilize

Faça o Projeto de Interface com DTE para o seu Projeto. Para tanto, utilize um modelo hierárquico de representação.

Utilize o padrão ABNT para apresentação de trabalhos. Utilize o editor de textos Word, ou outro que tenha extensão DOC, para confeccionar o exercício.

Indique, no documento a ser entregue, que os exercícios se referem a aula 10.

Entregar até a aula da próxima semana. Estes exercícios devem ser feitos em duplas ou trios.