Please enable JavaScript.
Coggle requires JavaScript to display documents.
PRESSMAN Engenharia de Software cap. 8 - Conceitos de Projeto (Conceitos…
PRESSMAN
Engenharia de Software
cap. 8 - Conceitos de Projeto
Panorama
geral
Importância: O projeto permite que se
modele o sistema ou produto a ser construído, é o lugar
onde a qualidade do software é estabelecida
Etapas: representação da arquitetura do sistema; modelagem do software aos usuários finais, outros sistemas e a dispositivos, além de seus próprios componentes; projeto dos componentes do software
Quem realiza: Os engenheiros de software
Definição: É o lugar onde a criatividade impera — onde os requisitos dos interessados, as necessidades da aplicação e considerações técnicas se juntam na formulação de um produto ou sistema
Artefato: Um modelo de projeto que engloba representações de arquitetura, interface, no nível de componentes e de utilização é o principal artefato gerado durante o projeto de software
Garantia de realização correta: O projeto é avaliado pela equipe de software para detectar erros, inconsistências ou omissões; se existem alternativas melhores; e se o modelo está adequado às restrições, prazo e orçamento estabelecidos
Projeto no Contexto
da Engenharia
de Software
O projeto de software sempre deve começar levando em consideração os dados — a base para todos os demais elementos do projeto. Após estabelecida a base, a arquitetura tem de ser extraída. Só então devem se realizar outras tarefas de projeto
Modelo
de Projeto
Projeto de interfaces
Projeto arquitetural
Projeto de componentes
Projeto de classes/dados
Modelo
de Análise
Diagramas de fluxo de dados
Elementos baseados em classes
Elementos comportamentais
Elementos baseados
em cenários
O Processo
de Projeto
Diretrizes da
qualidade de software
arquitetura
composta por componentes que apresentam boas características de projeto
possa ser implementada de uma forma evolucionária, facilitando a implementação e os testes
criada usando estilos ou padrões arquiteturais reconhecíveis
modular: logicamente particionado em elementos
ou subsistemas, de modo que seja fácil de testar e manter
conter representações distintas de: dados, arquitetura, interfaces e componentes
estruturas de dados adequadas às classes a ser implementadas e baseadas em padrões de dados reconhecíveis
componentes que apresentem características funcionais independentes (baixo acoplamento)
interfaces que reduzam a complexidade das conexões entre os componentes e o ambiente externo (encapsulamento).
ser obtido usando-se um método repetível, isto é, dirigido por informações obtidas durante a análise de requisitos de software.
ser representado usando-se uma notação que efetivamente comunique seu significado
Atributos da
qualidade
de software
funcionalidade
usabilidade
desempenho
confiabilidade
facilidade
de manutenção
facilidade
de suporte
Métodos de
projeto de
software
um mecanismo para a tradução do
modelo de requisitos em uma representação de projeto
uma notação para representar componentes
funcionais e suas interfaces
heurística para refinamento e particionamento
diretrizes para avaliação da qualidade
Modelo de
Projeto
dimensões
de processo
de abstração
elementos de projetos de dados: modelo de dados e/ou informações que é representado em um nível de abstração elevado (a visão do cliente/usuário dos dados), depois refinado em representações cada vez mais específicas da implementação que podem ser processadas pelo sistema baseado em computador
elementos de projeto de arquitetura: "planta baixa do software", modelo de arquitetura
elementos específicos de modelo de requisitos como os diagramas de fluxo de dados ou as classes de análise, seus relacionamentos e colaborações para o problema em questão
disponibilidade de estilos de arquitetura e padrões
informações sobre o domínio de
aplicação do software a ser construído
elementos de projeto de interfaces: fluxos de informação que entram e saem do sistema e como são transmitidos entre
os componentes definidos como parte da arquitetura
interfaces externas para outros sistemas, dispositivos, redes ou outros produtores
ou consumidores de informação
interfaces internas entre vários componentes de projeto
interface do usuário
elementos de projeto de componentes: descreve completamente os detalhes internos de cada componente de software, define estruturas de dados para todos os objetos de dados locais e detalhes algorítmicos para todo o processamento que ocorre em um componente e uma interface que dá acesso a todas as operações de componentes (comportamentos)
elementos de projeto de implantação: indicam como os subsistemas e a funcionalidade de software serão alocados no ambiente computacional físico que irá suportar o software
Conceitos de
Projeto
abstração
níveis
alto: solução expressa em termos
abrangentes usando a linguagem
do domínio do problema
baixo: descrição mais detalhada
da solução, de maneira que pode
ser diretamente implementada
abstração procedural: sequência de instruções que possuem uma função específica e limitada. O nome de uma abstração procedural implica sua função, porém os detalhes específicos são omitidos
abstração de dados: conjunto de dados com nome que descreve
um objeto de dados
arquitetura
organização geral do software e aos modos pelos quais
disponibiliza integridade conceitual para um sistema
propriedades
estruturais
não estruturais
famílias de sistemas
modelos
estruturais
dinâmicos
de processos
funcionais
padrões
pode ou não ser reutilizado
(e, portanto, poupando tempo)?
pode servir como um guia
para desenvolver um padrão similar,
mas funcional ou estruturalmente diferente?
se aplica ou não ao trabalho em questão?
separação por interesses (afinidades): qualquer problema complexo pode ser tratado mais facilmente se for subdividido em trechos a ser resolvidos e/ ou otimizados independentemente
modularidade: o software é dividido em componentes separadamente especificados e endereçáveis, algumas vezes denominados módulos, que são integrados para satisfazer os requisitos de um problema
encapsulamento de informações: os módulos devem ser especificados e projetados de modo que as informações (algoritmos e dados) contidas em um módulo sejam inacessíveis por parte de outros módulos que não necessitam tais informações, disponibilizando apenas os itens que interessam aos outros módulos
independência funcional: projetar software de modo que cada módulo atenda um subconjunto específico de requisitos e tenha uma interface simples quando vista de outras partes da estrutura do programa
coesão: indica a robustez funcional relativa de um módulo
acoplamento: indica a interdependência
relativa entre os módulos
refinamento (elaboração): um programa é desenvolvido refinando-se sucessivamente níveis de detalhes procedurais
aspectos: representação de um interesse em comum; implementado como um módulo (componente) separado, em vez de fragmentos de software que estão “espalhados” ou “emaranhados” através de vários componentes; a arquitetura de projeto deve oferecer suporte a um mecanismo para definição de aspectos
refatoração: técnica de reorganização que simplifica o projeto (ou código) de um componente sem mudar sua função ou comportamento
conceitos de projeto orientado a objetos
classes de projeto
de processos
persistentes
domínio de negócio
de sistema
interfaces do usuário
características
primitivismo
alta coesão
completa e suficiente
baixo acoplamento