acoplamento e coesão
TRANSCRIPT
Engenharia de Software
Aspectos Fundamentais do Projeto de Software
Prof. Laudelino Cordeiro Bastos
Considerações Iniciais
�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
Projeto
Modelo de informaçãoModelo
funcional
Modelo
Comportamental
Outros requisitos
Projeto de dados
Projeto interfaces
Projeto procedimental
Projeto arquitetural
Módulos doPrograma
Código
Teste
Produto
Características de Bom Projeto
�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
�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
�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
�1 Abstração: apresentação em diferentes níveis de detalhes:�Abstração procedimental.�Abstração de dados.
Conceitos Fundamentais de Projeto
�2 Refinamento: processo de elaboração:�Refinamento passo a passo: antiga estratégia de
projeto top-down.
Conceitos Fundamentais de Projeto
�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
�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
�4 Arquitetura de Software (continuação):
P1 P2
P3 P4P5
S1 S2
S3 S4
S5
Problema a ser resolvido Solução de Software
Conceitos Fundamentais de Projeto
�4 Arquitetura de Software (continuação):
Formas diferentes de estruturação
S1 S2 S3 S4 S5
S1 S4 S5
S3
S2
P
ProblemaInterface
Interface
Conceitos Fundamentais de Projeto�5 Hierarquia de Controle:
M
a b c
d e
f g h
i j
k l m
n o p q
r
Largura
Profundidade
Fan-out
Fan-in
Conceitos Fundamentais de Projeto
�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
�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
�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
�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
�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
�É 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
Baixa • • • • • • • • • • Espectro de coesão • • • • • • • • • • Elevada
coincidental
Lógicotemporal
procedimental
comunicacional
sequencial
funcional
Acoplamento
�É 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
Baixo Médio Elevado
Nenhum acoplamento direto
Acoplamento por dados (elementos de dados isolados)
Acoplamento por imagem (lista de argumentos, p.ex.: struct)
Acoplamento por controle
Acoplamento externo
Acoplamento comum (variáveis globais)
Acoplamento por conteúdo (jumpem assembly)
Acoplamento (Exemplos)
Módulo 1
Módulo 4 Módulo 3
Módulo 2
Estrutura de dados passada por meio de lista de
argumentos (acoplamento por imagem)
Nenhum acoplamento
direto
Dados passados por meio de listas de
argumentos (acoplamento por
dados)
Baixo Acoplamento
Acoplamento (Exemplos)
Acoplamento Elevado
CB
FED
PON
MLA
Acoplamento por conteúdo
(jump)
Área de dados global
Os módulos C, E e N exibem acoplamento
comum
Atividades de Projeto
Projeto de dados: OK
Projeto arquitetural: OK
Projeto procedimental: OK
Projeto de interface
Projeto Preliminar
Projeto Detalhado
Projeto de 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
�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
�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
�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
�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 do teclado, movimentos do mouse, caneta
digitadora.�Permita que 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 a interação do usuários com objetos.
Memória do Usuário
�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
�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
�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
�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
�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
�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
�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 DTEMenu Principal
Tela InicialTela Tratar
ReservaTela Tratar
ClienteTela
TratarQuarto
Tela Final
OpçãoTelaInicial
ExibirTelaInicial
“Esc”Pressi-onado
LimparTelaInicial
“Esc”Pressi-onado
LimparTelaTratarReserva
OpçãoTelaTratarReserva
ExibirTelaTratarReserva
OpçãoTelaTratarCliente
ExibirTelaTratarCliente
OpçãoTelaTratarQuarto
ExibirTelaTratarQuarto
“Esc”Pressi-onado
LimparTelaTratarCliente
OpçãoTelaFinal
ExibirTelaFinal
“Esc”Pressi-onado
LimparTelaFinal
“Esc”Pressi-onado
LimparTelaTratarQuarto
Tela ReservarQuarto
OpçãoTelaReservarQuarto
ExibirTelaReservarQuarto
“Esc”Pressi-onado
LimparTelaReservarQuarto
Evolução do Projeto: Relação com a Interface
�À 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
�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
�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)
�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 osexercícios se referem a aula 10.
�Entregar até a aula da próxima semana. Estes exercícios devem ser feitos em duplas ou trios.