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