Buscar

ADS - ENG SW1 - AULA 4 - Conceitos Fundamentais de Projeto


Continue navegando


Prévia do material em texto

- ADS - 
Engenharia de Software I 
 
Princípios e Conceitos de Projeto 
 
 
• Meta: desenvolver uma representação de um produto 
que será implementado 
 
• Fase que evolui com o surgimento de novos métodos e 
tecnologias. 
 
• Durante a processo de projeto os requisitos do software 
são mapeados em modelos de projeto 
• Que descrevem os detalhes da estrutura de dados, arquitetura 
do sistema, interface e componentes. 
 
• Produto: Documento de Especificação do Projeto 
 
• Revisões são importantes! Sempre utilizar!!!! 
Métodos Convencionais para 
Engenharia de Software - Objetivos 
Engenharia de Software 
- Fases 
1- Fase de Definição ("o que") 
– Análise do sistema ou Engenharia de sistema 
– Planejamento do Levantamento 
– Análise de requisitos 
2- Fase de Desenvolvimento ("como") 
– Projeto de software 
– Codificação 
– Realização de testes 
3- Fase de Manutenção ("alterações") 
Análise de Requisitos 
- Visão geral 
ANÁLISE DE 
REQUISITOS 
Engenharia de 
Sistemas de 
Computador 
Projeto de 
Software 
Escopo do Software 
•Primeiro passo técnico 
•Analista de Sistemas 
PONTE 
 1- Reconhecimento do problema 
2- Avaliação do problema e síntese da 
solução 
3- Especificação dos requisitos do software 
 4-Revisão 
Análise de Requisitos 
- Atividades 
Projeto de Software 
 Primeira das 3 atividades técnicas: 
 projeto, 
 geração de código 
 teste 
 
 O projeto é o lugar onde a qualidade é fomentada 
durante o processo de desenvolvimento 
 
 Transforma a informação do modelo de domínio 
(análise) em estruturas que requerem ser 
implementadas no software 
Projeto de Software 
- Importância 
 O projeto fornece representações do 
software que podem ser avaliadas quanto à 
qualidade 
 
 É a única maneira pela qual pode-se traduzir 
com precisão os requisitos de um cliente 
num produto de software acabado 
Importância do Projeto 
- QUALIDADE 
COM projeto 
Implementação 
Projeto 
Manutenção 
Teste 
SEM projeto 
Manutenção 
Implementação 
Teste 
Projeto de Software 
- Modelos de Especificação 
1.MODELO DE DADOS: selecionar representações lógicas 
dos dados identificados na fase de especificação dos 
requisitos (Diagrama de classes e dicionário de dados) 
2.MODELO ARQUITETURAL: desenvolver uma estrutura 
modular do sistema e representar as relações de controle 
entre os módulos (elementos estruturais do software - DFD) 
3.MODELO DE INTERFACE: estabelecer os mecanismos 
de interação e layout para a interação homem-máquina e 
com outros sistemas (diagrama de fluxo de dados e de 
controle) 
4.MODELO EM NÍVEL DE COMPONENTES 
(procedural): especificar os detalhes dos algoritmos 
Projeto de Software 
Processo pelo qual 
os requisitos do 
software são 
traduzidos numa 
representação do 
software que 
permite sua 
realização física 
Projeto 
Codificação 
Teste 
Modelo 
Comportamental 
Modelo 
Funcional 
Modelo de 
Informação 
Outros 
Requisitos 
Projeto de 
Dados 
Projeto 
Procedimental 
Projeto 
Arquitetural 
Projeto de Interface 
Programas 
Software 
Integrado e 
Validado 
Passos do Projeto de Software 
Ponto de Vista Gerencial 
 
 PROJETO PRELIMINAR: preocupa-se com a 
transformação dos requisitos do software numa 
arquitetura de software e de dados. 
 
 PROJETO DETALHADO: concentra-se nos 
aprimoramentos da representação arquitetural que 
levam à estrutura de dados detalhada e às 
representações algorítmicas do software. 
Passos do Projeto de Software 
Ponto de Vista Técnico 
DADOS: o modelo de domínio da informação é 
transformado nas estruturas de dados que serão 
exigidas para implementar o software. 
 
ARQUITETURAL: o relacionamento entre os grandes 
componentes estruturais do programa é definido. 
 
PROCEDIMENTAL: os componentes estruturais são 
transformados numa descrição procedimental do 
software 
 
INTERFACE: os mecanismos de interação e lay-out 
para a interação homem-máquina são 
estabelecidos 
Relação entre os aspectos técnicos e 
gerenciais do Projeto 
Projeto preliminar 
Projeto detalhado 
Projeto de dados (Classes) 
Projeto arquitetural 
Projeto procedimental 
Projeto de interface 
Características comuns dos métodos 
1- Um mecanismo para a tradução da 
representação do domínio de informação numa 
representação de projeto 
 
2- Uma notação para representar os componentes 
funcionais e suas interfaces 
 
3- Heurísticas para refinamento e divisão em 
partições 
 
4- Diretrizes para a avaliação da qualidade 
Guidelines para o Projeto 
 Exibir boa estrutura arquitetural 
 
 Ser modular 
 
 conter representações distintas de dados, 
arquitetura, interface e componentes 
 
 Conduzir a componentes que tem características 
funcionais independentes 
 
Princípios de Projeto 
 Utilizar abordagens alternativas 
 
 Acompanhar os requisitos do modelo de análise 
 
 Não reinventar (utilizar padrões) 
 
 Projetar não é codificar 
 
 Revisar para minimizar erros semânticos 
Conceitos fundamentais de Projeto 
de Software 
1- Abstração 
 
2- refinamento 
 
3- modularidade 
 
4- arquitetura de software 
 
5- hierarquia de controle 
 
6- particionamento estrutural 
 
7- estrutura de dados 
 
8- procedimento de software 
 
9- ocultamento de informações 
Conceitos fundamentais de Projeto 
de Software 
1- ABSTRAÇÃO - possibilita que o projetista 
represente os procedimentos, os dados e 
o controle em vários níveis de detalhes 
A solução é declarada em termos amplos usando-se a 
linguagem do ambiente do problema 
 
A solução é estabelecida usando-se uma terminologia 
orientada à implementação 
 
A solução é estabelecida de uma forma que possa ser 
diretamente implementada 
Conceitos fundamentais de Projeto 
de Software 
Abstração Procedimental: uma seqüência de 
instruções designadas que têm uma função específica e 
limitada 
 
Abstração de Dados: uma coleção designada de 
dados que descreve um objeto de dados 
 
Abstração de Controle: implica um mecanismo de 
controle do programa sem especificar detalhes internos 
Conceitos fundamentais de Projeto 
de Software 
2- REFINAMENTO 
 
O refinamento passo a passo é uma antiga 
estratégia de projeto top-down (1971), a 
arquitetura de um programa é desenvolvida 
refinando-se sucessivamente os níveis de 
detalhes procedimentais 
 
O refinamento é um processo de elaboração. Faz com que o 
projetista elabore a declaração original oferecendo um 
número cada vez maior de detalhes à medida que 
sucessivos refinamentos (elaborações) ocorrem 
Conceitos fundamentais de Projeto 
de Software 
3- MODULARIDADE - software é dividido em 
componentes denominados módulos, que são 
integrados para atender aos requisitos 
ditados pelo problema 
 
Argumento baseado em observações sobre a resolução de problemas humanos: 
 C(x) função que define a complexidade de um 
problema x 
 E(x) função que define o esforço exigido para 
resolver o problema x 
 Sejam 2 problemas p1 e p2 
Conceitos fundamentais de Projeto 
de Software 
Observou-se que: 
 Se C(p1) > C(p2) então E(p1) > E(p2) 
(demora mais para se resolver um problema mais difícil) 
 
 C(p1 + p2) > C(p1) + C(p2) 
(a complexidade de um problema que combine p1 e p2 é maior 
do que a complexidade percebida quando cada problema é 
considerado separadamente) 
 
 E(p1 + p2) > E(p1) + E(p2) 
(é mais fácil resolver um problema complexo quando ele é 
dividido em partes) 
Conceitos fundamentais de Projeto 
de Software 
3- MODULARIDADE - é mais fácil resolver um 
problema complexo quando ele é dividido em partes. 
 
 
Dividir indefinidamente torna o problema 
infinitamente pequeno? NÃO 
Conceitos fundamentais de Projeto 
de Software 
4- ARQUITETURA DE SOFTWARE: 
 
Deriva de um processo de divisão em 
partições que relaciona elementos de 
uma solução de software a partes de 
um problema do mundo real 
Resolvendo Problemas 
25 
Conceitos fundamentaisde Projeto 
de Software 
5- HIERARQUIA DE CONTROLE ou 
ESTRUTURA DO PROGRAMA - representa a 
organização de componentes de programa 
Não representa aspectos procedimentais de 
software (seqüência, decisões ou 
repetições) 
Notação para representar a hierarquia de controle: 
DIAGRAMA EM ÁRVORES 
Conceitos fundamentais de Projeto 
de Software 
5- HIERARQUIA DE CONTROLE 
 
MEDIDAS DA ESTRUTURA 
Profundidade: indica o número de níveis de controle 
Largura: indica o espaço de controle global 
"Fan-Out": indica o número de módulos que são 
diretamente controlados por outro módulo 
"Fan-In": indica quantos módulos controlam diretamente 
determinado módulo 
Conceitos fundamentais de Projeto 
de Software 
5- HIERARQUIA DE CONTROLE 
Relacionamento entre os módulos: 
 um módulo que controla outro módulo é superordenado a ele 
 um módulo controlado por outro modulo é subordinado ao 
controlador. 
 
Outras Características: 
Visibilidade: indica o conjunto de componentes de 
programa que pode ser invocado ou usado como dados 
por determinado componente. 
Conectividade: indica o conjunto de componentes que é 
diretamente invocado ou usado como dados por 
determinado componente. 
Conceitos fundamentais de 
Projeto de Software 
6- ESTRUTURA DE DADOS é uma representação 
do relacionamento lógico entre elementos de 
dados individuais. Determina a organização, 
métodos de acesso, grau de associatividade e 
alternativas de processamento de informação. 
 
Estruturas de Dados clássicas: item escalar, vetor 
sequencial, espaço n-dimensional, lista interligada e 
árvore hierárquica 
 
As estruturas de dados clássicas formam blocos de 
construção para estruturas mais sofisticadas. 
Conceitos fundamentais de 
Projeto de Software 
7- PROCEDIMENTO DE SOFTWARE - focaliza 
os detalhes de processamento de cada 
módulo individualmente 
 
O Procedimento deve oferecer uma 
especificação precisa do processamento 
(seqüência de eventos, pontos de decisão, 
operações repetitivas e até mesmo 
estrutura e organização de dados) 
Conceitos fundamentais de 
Projeto de Software 
8- OCULTAMENTO DE INFORMAÇÕES - o 
conceito de modularidade leva o projetista 
de software a uma questão fundamental: 
 
 "como decompor uma solução de software para 
obter o melhor conjunto de módulos? “ 
 
 O princípio da "ocultação de informações" sugere 
que os módulos sejam "caracterizados pelas 
decisões de projeto que (cada módulo) esconde 
de todos os outros". 
Conceitos fundamentais de 
Projeto de Software 
8- OCULTAMENTO DE INFORMAÇÕES 
 
 Os módulos devem ser especificados e projetados 
de tal forma que as informações (procedimentos 
e dados) contidas num módulo sejam inacessíveis 
a outros módulos que não tenham necessidade 
de tais informações. 
 
 A ocultação implica em uma modularidade aonde 
um conjunto de módulos independentes 
comunicam entre si somente aquelas informações 
que são necessárias para se obter a função do 
software. 
Conceitos fundamentais de 
Projeto de Software 
9- PARTICIONAMENTO ESTRUTURAL 
 
 particionamento horizontal e vertical 
 
 define as três partições - entrada, 
transformação de dados e saída