Você está na página 1de 16

Machine Translated by Google

CAPÍTULO 2

DESIGN DE SOFTWARE

ACRÔNIMOS Também podemos examinar e avaliar soluções alternativas e


compensações. Finalmente, podemos usar os modelos
Descrição da Arquitetura
AVD resultantes para planejar atividades de desenvolvimento
Linguagem
subsequentes, como verificação e validação do sistema, além
Projeto Baseado em Componentes CBD de usá-los como entradas e como ponto de partida para
CRC Colaborador de Responsabilidade de Classe construção e teste.
Em uma lista padrão de processos de ciclo de vida de
Diagrama de fluxo de dados DFD
software, como a ISO/IEC/IEEE Std. 12207, Processos de
Diagrama de Relacionamento de Entidade ERD
Ciclo de Vida de Software [2], o projeto de software consiste
IDL Linguagem de descrição da interface em duas atividades que se encaixam entre a análise de
Controlador de exibição de modelo MVC requisitos de software e a construção de software:

OO Orientado a Objeto
• Projeto de arquitetura de software (às vezes chamado de
PDL Linguagem de design do programa
projeto de alto nível): desenvolve a estrutura e a
organização de nível superior do software e identifica os
vários componentes.
INTRODUÇÃO • Projeto detalhado de software: especifica cada componente
com detalhes suficientes para facilitar sua construção.
Design é definido como “o processo de definir a arquitetura,
componentes, interfaces e outras características de um sistema
ou componente” e “o resultado desse processo” [1]. Visto como Esta área de conhecimento de Design de Software (KA)
um processo, o projeto de software é a atividade do ciclo de não discute todos os tópicos que incluem a palavra “design”.
vida da engenharia de software na qual os requisitos de Na terminologia de Tom DeMarco [3], os tópicos discutidos
software são analisados para produzir uma descrição da neste KA tratam principalmente de D-design (decomposition
estrutura interna do software que servirá de base para sua design), cujo objetivo é mapear software em partes
construção. Um projeto de software (o resultado) descreve a componentes. No entanto, devido à sua importância no campo
arquitetura de software – isto é, como o software é decomposto da arquitetura de software, também abordaremos o FP-design
e organizado em componentes – e as interfaces entre esses (family pattern design), cujo objetivo é estabelecer semelhanças
componentes. Deve também descrever os componentes com exploráveis em uma família de produtos de software. Este KA
um nível de detalhe que permita a sua construção. não aborda o I-design (design de invenção), que geralmente é
realizado durante o processo de requisitos de software com o
objetivo de conceituar e especificar o software para satisfazer
as necessidades e requisitos descobertos, uma vez que este
O design de software desempenha um papel importante no tópico é considerado parte dos requisitos processo (consulte
desenvolvimento de software: durante o design de software, os Requisitos de Software KA).
os engenheiros de software produzem vários modelos que
formam uma espécie de blueprint da solução a ser
implementada. Podemos analisar e avaliar esses modelos
para determinar se eles nos permitirão ou não cumprir os Esta KA de Design de Software está relacionada
vários requisitos. especificamente aos Requisitos de Software, Software

2-1
Machine Translated by Google

2-2 Guia SWEBOK® V3.0

Figura 2.1. Detalhamento de tópicos para o KA de Design de Software

Construção, Gerenciamento de Engenharia de Software, compreender os limites do design. Várias outras noções e
Modelos e Métodos de Engenharia de Software, Qualidade de conceitos também são de interesse para entender o design em
Software e Fundamentos de Computação KAs. seu sentido geral: objetivos, restrições, alternativas,
representações e soluções (consulte Técnicas de resolução de
problemas no Computing Foundations KA).
DESCRIÇÃO DOS TÓPICOS PARA
DESIGN DE SOFTWARE

1.2. Contexto do Design de Software


A divisão dos tópicos para o Software Design KA é mostrada [4*, c3]
na Figura 2.1.
O design de software é uma parte importante do processo de
1. Fundamentos de Design de Software desenvolvimento de software. Para entender o papel do design
de software, devemos ver como ele se encaixa no ciclo de vida
Os conceitos, noções e terminologia aqui apresentados do desenvolvimento de software. Assim, é importante entender
formam uma base subjacente para a compreensão do papel as principais características da análise de requisitos de
e do escopo do projeto de software. software, projeto de software, construção de software, teste de
software e manutenção de software.
1.1. Conceitos Gerais de Design
[4*, c1]
1.3. Processo de Design de Software
No sentido geral, o design pode ser visto como uma forma de [4*, c2]
resolução de problemas. Por exemplo, o conceito de um
problema perverso – um problema sem solução definitiva – é O projeto de software é geralmente considerado um processo
interessante em termos de de duas etapas:
Machine Translated by Google

Projeto de Software 2-3

• Projeto de arquitetura (também conhecido como projeto o software é dividido em vários componentes menores
de alto nível e projeto de alto nível) descreve como o nomeados com interfaces bem definidas que descrevem
software é organizado em componentes. as interações dos componentes. Normalmente, o objetivo
• O projeto detalhado descreve o comportamento desejado é colocar diferentes funcionalidades e responsabilidades
ior desses componentes. em diferentes componentes. • Encapsulamento e
ocultação de informações significa agrupar e empacotar
A saída desses dois processos é um conjunto de modelos e os detalhes internos de uma abstração e tornar esses
artefatos que registram as principais decisões tomadas, detalhes inacessíveis a entidades externas.
juntamente com uma explicação da justificativa para cada
decisão não trivial.
Ao registrar a lógica, a capacidade de manutenção de longo • Separação de interface e implementação.
prazo do produto de software é aprimorada. Separar interface e implementação envolve definir um
componente especificando uma interface pública
1.4. Princípios de Design de Software (conhecida pelos clientes) que é separada dos detalhes
[4*] [5*, c6, c7, c21] [6*, c1, c8, c9] de como o componente é realizado (veja encapsulamento
e ocultação de informações acima). • Suficiência,
Um princípio é “uma lei, doutrina ou suposição abrangente e completude e primitivismo.
fundamental” [7]. Os princípios de design de software são
noções-chave que fornecem a base para muitas abordagens e Alcançar suficiência e completude
conceitos diferentes de design de software. Os princípios de significa garantir que um componente de software capture
design de software incluem abstração; acoplamento e coesão; todas as características importantes de uma abstração e
decomposição e modularização; encapsulamento/ocultação de nada mais. Primitividade significa que o design deve ser
informações; separação de interface e implementação; baseado em padrões que são fáceis de implementar.
suficiência, completude e primitivismo; e separação de
preocupações. • Separação de interesses. Uma preocupação é uma “área
de interesse em relação a um projeto de software” [8].
Uma preocupação de design é uma área de design que
• Abstração é “uma visão de um objeto que se concentra na é relevante para um ou mais de seus stakeholders. Cada
informação relevante para um propósito particular e visão de arquitetura enquadra uma ou mais preocupações.
ignora o restante da informação” [1] (veja Abstração no Separar as preocupações por pontos de vista permite
Computing Foundations KA). No contexto do projeto de que as partes interessadas se concentrem em algumas
software, dois mecanismos-chave de abstração são a coisas de cada vez e oferece um meio de gerenciar a
parametrização e a especificação. A abstração por complexidade [9].
parametrização abstrai os detalhes das representações
de dados representando os dados como parâmetros 2. Questões-chave no design de software
nomeados. A abstração por especificação leva a três
tipos principais de abstração: abstração procedural, Uma série de questões-chave devem ser tratadas ao projetar
abstração de dados e abstração de controle (iteração). • software. Algumas são preocupações de qualidade que todo
Acoplamento e Coesão. O acoplamento é definido como software deve abordar – por exemplo, desempenho, segurança,
“uma medida da interdependência entre os módulos em confiabilidade, usabilidade, etc.
um programa de computador”, enquanto a coesão é Outra questão importante é como decompor, organizar e
definida como “uma medida da força de associação dos empacotar componentes de software.
elementos dentro de um módulo” [1]. Isso é tão fundamental que todas as abordagens de design
abordam isso de uma forma ou de outra (consulte a seção 1.4,
Princípios de design de software e o tópico 7, Estratégias e
métodos de design de software). Em contraste, outras questões
“tratam de algum aspecto do comportamento do software que
• Decomposição e modularização. A decomposição e a não está no domínio da aplicação, mas que aborda alguns dos
modularização significam que grandes
Machine Translated by Google

2-4 Guia SWEBOK® V3.0

domínios” [10]. Tais questões, que muitas vezes atravessam 2.6. Interação e Apresentação
a funcionalidade do sistema, têm sido chamadas de aspectos, [5*, c16]
que “tendem a não ser unidades de decomposição funcional
do software, mas propriedades que afetam o desempenho ou Esta questão de design está preocupada com como estruturar
a semântica dos componentes de maneira sistêmica” [ 11]. e organizar interações com usuários, bem como a apresentação
de informações (por exemplo, separação de apresentação e
Várias dessas questões-chave e transversais são discutidas lógica de negócios usando a abordagem Model-View-
nas seções a seguir (apresentadas em ordem alfabética). Controller).
Observe que este tópico não especifica os detalhes da interface
do usuário, que é a tarefa do design da interface do usuário
2.1. Simultaneidade (consulte o tópico 4, Design da interface do usuário).
[5*, c18]
2.7. Segurança
O design para simultaneidade está preocupado em decompor [5*, c12, c18] [13*, c4]
o software em processos, tarefas e threads e lidar com
questões relacionadas de eficiência, atomicidade, sincronização O design para segurança está preocupado em como evitar
e agendamento. divulgação não autorizada, criação, alteração, exclusão ou
negação de acesso a informações e outros recursos. Também
2.2. Controle e Tratamento de Eventos se preocupa em como tolerar ataques ou violações
[5*, c21] relacionados à segurança, limitando danos, serviço contínuo,
acelerando o reparo e a recuperação e falhando e recuperando
Esse problema de design está relacionado a como organizar com segurança. O controle de acesso é um conceito
dados e fluxo de controle, bem como lidar com eventos fundamental de segurança, devendo também garantir o uso
reativos e temporais por meio de vários mecanismos, como adequado da criptologia.
invocação implícita e retornos de chamada.

3. Estrutura e Arquitetura de Software


2.3. Persistência de dados
[12*, c9] Em seu sentido estrito, uma arquitetura de software é “o
conjunto de estruturas necessárias para raciocinar sobre o
Esse problema de design está relacionado a como lidar com sistema, que compreende elementos de software, relações
dados de longa duração. entre eles e propriedades de ambos”
[14*]. Em meados da década de 1990, no entanto, a
2.4. Distribuição de Componentes arquitetura de software começou a emergir como uma
[5*, c18] disciplina mais ampla que envolvia o estudo de estruturas e
arquiteturas de software de maneira mais genérica. Isso deu
Essa questão de design está relacionada a como distribuir o origem a vários conceitos interessantes sobre design de
software pelo hardware (incluindo hardware de computador software em diferentes níveis de abstração. Alguns desses
e hardware de rede), como os componentes se comunicam e conceitos podem ser úteis durante o projeto arquitetônico (por
como o middleware pode ser usado para lidar com software exemplo, estilos arquitetônicos), bem como durante o projeto
heterogêneo. detalhado (por exemplo, padrões de projeto). Esses conceitos
de design também podem ser usados para projetar famílias
de programas (também conhecidas como linhas de produtos).
2.5. Tratamento de Erros e Exceções e Falhas Curiosamente, a maioria desses conceitos pode ser vista
Tolerância como tentativas de descrever e, assim, reutilizar o
[5*, c18] conhecimento de design.

Esta questão de projeto está relacionada a como prevenir,


tolerar e processar erros e lidar com condições excepcionais.
Machine Translated by Google

Projeto de Software 2-5

3.1. Estruturas arquitetônicas e pontos de vista padrões que descrevem a organização de alto nível do software,
[14*, c1] outros padrões de projeto podem ser usados para descrever
detalhes em um nível inferior. Esses padrões de design de nível

Diferentes facetas de alto nível de um projeto de software podem inferior incluem o seguinte:
ser descritas e documentadas. Essas facetas são frequentemente

chamadas de visualizações: “Uma visualização representa um • Padrões de criação (por exemplo, construtor, fábrica,
aspecto parcial de uma arquitetura de software que mostra protótipo, singleton)
propriedades específicas de um sistema de software” [14*]. As • Padrões estruturais (por exemplo, adaptador, ponte,
visões pertencem a questões distintas associadas ao design de composto, decorador, fachada, peso de mosca, proxy)
software - por exemplo, a visão lógica (satisfação dos requisitos
funcionais) versus a visão do processo (problemas de • Padrões comportamentais (por exemplo, comando,
simultaneidade) versus a visão física (problemas de distribuição) intérprete, iterador, mediador, memento, observador,
versus a visão de desenvolvimento (como o projeto é dividido estado, estratégia, modelo, visitante).
em unidades de implementação com representação explícita
das dependências entre as unidades). Vários autores usam 3.4. Decisões de Design de Arquitetura
terminologias diferentes, como visões comportamentais vs. [5*, c6]
funcionais vs. estruturais vs. modelagem de dados. Em resumo,
um projeto de software é um artefato multifacetado produzido O projeto arquitetônico é um processo criativo. Durante o
pelo processo de projeto e geralmente composto por visões processo de projeto, os projetistas de software precisam tomar
relativamente independentes e ortogonais. uma série de decisões fundamentais que afetam profundamente

o software e o processo de desenvolvimento. É útil pensar no


processo de projeto arquitetônico a partir de uma perspectiva de
3.2. Estilos arquitetônicos tomada de decisão e não de uma perspectiva de atividade.
[14*, c1, c2, c3, c4, c5] Muitas vezes, o impacto nos atributos de qualidade e as
compensações entre os atributos de qualidade concorrentes são
Um estilo arquitetônico é “uma especialização de tipos de a base para as decisões de projeto.
elementos e relações, juntamente com um conjunto de restrições
sobre como eles podem ser usados” [14*]. Um estilo de
arquitetura pode ser visto como fornecendo a organização de 3.5. Famílias de Programas e Estruturas
alto nível do software. Vários autores identificaram uma série de [5*, c6, c7, c16]
estilos arquitetônicos principais:
Uma abordagem para fornecer a reutilização de projetos e
componentes de software é projetar famílias de programas,
• Estruturas gerais (por exemplo, camadas, tubos também conhecidas como linhas de produtos de software.
e filtros, quadro-negro) Isso pode ser feito identificando as semelhanças entre os
• Sistemas distribuídos (por exemplo, servidor cliente, três membros dessas famílias e projetando componentes reutilizáveis
camadas, corretor) e personalizáveis para levar em conta a variabilidade entre os
• Sistemas interativos (por exemplo, Model-View membros da família.
Controlador, Apresentação-Abstração-Controle) Na programação orientada a objetos (OO), uma noção chave
• Sistemas adaptáveis (por exemplo, microker nel, reflexão) relacionada é a de um framework: um sistema de software
parcialmente completo que pode ser estendido instanciando
• Outros (por exemplo, lote, intérpretes, profissionais apropriadamente extensões específicas (como plug-ins).
controle de acesso, baseado em regras).

3.3. Padrões de design 4. Design da Interface do Usuário


[15*, c3, c4, c5]
O design da interface do usuário é uma parte essencial do
Descrita sucintamente, um padrão é “uma solução comum para processo de design de software. O design da interface do
um problema comum em um determinado contexto” usuário deve garantir que a interação entre o humano e a

[16]. Embora os estilos arquitetônicos possam ser vistos como máquina proporcione uma operação eficaz
Machine Translated by Google

2-6 Guia SWEBOK® V3.0

e controle da máquina. Para que o software atinja todo o e apresentação do software, o histórico e a experiência dos
seu potencial, a interface do usuário deve ser projetada usuários do software e os dispositivos disponíveis.
para corresponder às habilidades, experiência e expectativas
de seus usuários previstos.
4.3. O Design de Modalidades de Interação do Usuário
4.1. Princípios gerais de design da interface do usuário [5*, c29-web] [17*, c2]
[5*, c29-web] [17*, c2]1
A interação do usuário envolve a emissão de comandos e
• Aprendizagem. O software deve ser fácil de aprender o fornecimento de dados associados ao software. Os estilos
para que o usuário possa começar a trabalhar de interação do usuário podem ser classificados nos
rapidamente com o software. seguintes estilos primários:
• Familiaridade do usuário. A interface deve usar termos
e conceitos extraídos das experiências das pessoas • Pergunta-resposta. A interação é essencialmente
que usarão o software. restrita a uma única troca de perguntas e respostas
• Consistência. A interface deve ser consistente para entre o usuário e o software.
que operações comparáveis sejam ativadas da O usuário emite uma pergunta para o software e o
mesma maneira. software retorna a resposta para a pergunta. •
• Surpresa mínima. O comportamento do software Manipulação direta. Os usuários interagem com
não deve surpreender os usuários. objetos na tela do computador. A manipulação direta
• Recuperabilidade. A interface deve fornecer mecanismos geralmente inclui um dispositivo apontador (como um
que permitam aos usuários recuperar mouse, trackball ou um dedo em telas sensíveis ao
erros. toque) que manipula um objeto e invoca ações que
• Orientação do usuário. A interface deve fornecer especificam o que deve ser feito com esse objeto.
feedback significativo quando ocorrerem erros e
fornecer ajuda relacionada ao contexto aos usuários.
• Diversidade de usuários. A interface deve fornecer • Seleção de menus. O usuário seleciona um comando
mecanismos de interação apropriados para diversos a partir de uma lista de comandos do menu.

tipos de usuários e para usuários com diferentes • Preenchimento de formulário. O usuário preenche os
capacidades (cegos, deficientes visuais, surdos, campos de um formulário. Às vezes, os campos
daltônicos, etc.). incluem menus, nesse caso o formulário possui botões
de ação para o usuário iniciar a ação.
4.2. Problemas de design da interface do usuário • Linguagem de comando. O usuário emite um comando
[5*, c29-web] [17*, c2] e fornece parâmetros relacionados para orientar o
software sobre o que fazer.
O design da interface do usuário deve resolver dois problemas principais: • Linguagem natural. O usuário emite um comando em
linguagem natural. Ou seja, a linguagem natural é um
• Como o usuário deve interagir com o software? front-end para uma linguagem de comando e é
analisada e traduzida em comandos de software.
• Como as informações do software devem
ser apresentado ao usuário?
4.4. O Design da Apresentação da Informação
O design da interface do usuário deve integrar a interação [5*, c29-web] [17*, c2]
do usuário e a apresentação de informações. O design da
interface do usuário deve considerar um compromisso entre A apresentação da informação pode ser de natureza
os estilos de interação mais apropriados textual ou gráfica. Um bom design mantém a apresentação
da informação separada da própria informação.
A abordagem MVC (Model-View-Controller) é uma maneira
1 Capítulo 29 é um capítulo baseado na web
eficaz de manter a apresentação da informação separada
disponível em http://ifs.host.cs.st-andrews.ac.uk/Books/SE9/
da informação que está sendo apresentada.
WebChapters/.
Machine Translated by Google

Projeto de Software 2-7

Os engenheiros de software também consideram o tempo de 4.6. Localização e Internacionalização


resposta do software e o feedback no design da apresentação das [17*, c8, c9]
informações. O tempo de resposta geralmente é medido a partir do
ponto em que um usuário executa uma determinada ação de controle O design da interface do usuário geralmente precisa considerar a
até que o software responda com uma resposta. Uma indicação de internacionalização e a localização, que são meios de adaptar o
progresso é desejável enquanto o software está preparando a software aos diferentes idiomas, diferenças regionais e requisitos
resposta. técnicos de um mercado-alvo. A internacionalização é o processo de
O feedback pode ser fornecido reafirmando a entrada do usuário projetar um aplicativo de software para que possa ser adaptado a
enquanto o processamento está sendo concluído. vários idiomas e regiões sem grandes alterações de engenharia.
Visualizações abstratas podem ser usadas quando grandes Localização é o processo de adaptação de software internacionalizado
quantidades de informações devem ser apresentadas. para uma região ou idioma específico, adicionando componentes
De acordo com o estilo de apresentação das informações, os específicos de localidade e traduzindo o texto. A localização e a
designers também podem usar cores para aprimorar a interface. internacionalização devem considerar fatores como símbolos,
Existem várias orientações importantes: números, moeda, hora e unidades de medida.

• Limite o número de cores usadas.

• Use a mudança de cor para mostrar a mudança de


estado dos utensílios.

• Use codificação de cores para dar suporte à tarefa do usuário. 4.7. Metáforas e Modelos Conceituais
• Use a codificação por cores de forma ponderada e consistente. [17*, c5]

• Use cores para facilitar o acesso de pessoas com daltonismo Os designers de interface do usuário podem usar metáforas e
ou deficiência de cor (por exemplo, use a mudança de modelos conceituais para estabelecer mapeamentos entre o software
saturação de cor e brilho de cor, tente evitar combinações de e algum sistema de referência conhecido pelos usuários no mundo
azul e vermelho). real, o que pode ajudar os usuários a aprender e usar a interface
com mais facilidade. Por exemplo, a operação “excluir arquivo” pode
• Não dependa apenas da cor para transmitir informações ser transformada em metáfora usando o ícone de uma lixeira.
importantes a usuários com diferentes capacidades (cegueira,
deficiência visual, daltonismo, etc.). Ao projetar uma interface de usuário, os engenheiros de software
devem ter cuidado para não usar mais de uma metáfora para cada

conceito. As metáforas também apresentam problemas potenciais


4.5. Processo de design da interface do usuário com respeito à internacionalização, uma vez que nem todas as
[5*, c29-web] [17*, c2] metáforas são significativas ou são aplicadas da mesma forma em
todas as culturas.
O design da interface do usuário é um processo iterativo; protótipos
de interface são frequentemente usados para determinar os recursos, 5. Análise e Avaliação da Qualidade do Projeto de
organização e aparência da interface do usuário do software. Este Software

processo inclui três atividades principais:


Esta seção inclui vários tópicos de análise e avaliação de qualidade
especificamente relacionados ao design de software. (Veja também
• Análise do usuário. Nesta fase, o designer analisa as tarefas o Software Quality KA.)
dos usuários, o ambiente de trabalho, outros softwares e
como os usuários interagem com outras pessoas. •
Prototipagem de software. O desenvolvimento de software 5.1. Atributos de qualidade
protótipo ajuda os usuários a orientar a evolução da interface. [4*, c4]

Vários atributos contribuem para a qualidade de um projeto de


• Avaliação de interfaces. Os designers podem observar as software, incluindo várias “-ilities” (manutenção, portabilidade,
experiências dos usuários com a interface em evolução. testabilidade, usabilidade)
Machine Translated by Google

2-8 Guia SWEBOK® V3.0

e “-nesses” (correção, robustez). Há uma distinção 5.3. Medidas


interessante entre atributos de qualidade discerníveis em [4*, c4] [5*, c24]
tempo de execução (por exemplo, desempenho,
segurança, disponibilidade, funcionalidade, usabilidade), As medidas podem ser usadas para avaliar ou estimar
aqueles não discerníveis em tempo de execução (por quantitativamente vários aspectos de um projeto de
exemplo, modificabilidade, portabilidade, reusabilidade, software; por exemplo, tamanho, estrutura ou qualidade.
testabilidade) e aqueles relacionados a as qualidades A maioria das medidas propostas depende da abordagem
intrínsecas da arquitetura (por exemplo, integridade utilizada para a produção do projeto.
conceitual, correção, completude). (Veja também o Essas medidas são classificadas em duas grandes
Software Quality KA.) categorias:

5.2. Técnicas de Análise e Avaliação da Qualidade • Medidas de projeto baseadas em funções


[4*, c4] [5*, c24] (estruturadas): medidas obtidas pela análise da
decomposição funcional; geralmente representado
Várias ferramentas e técnicas podem ajudar na análise usando um gráfico de estrutura (às vezes chamado
e avaliação da qualidade do projeto de software. de diagrama hierárquico) no qual várias medidas
podem ser calculadas.
• Revisões de design de software: técnicas informais • Medidas de projeto orientadas a objetos: a estrutura
e formalizadas para determinar a qualidade de de projeto é normalmente representada como um
artefatos de design (por exemplo, revisões de diagrama de classes, no qual várias medidas podem
arquitetura, revisões de design e inspeções; técnicas ser calculadas. Medidas sobre as propriedades do
baseadas em cenários; rastreamento de requisitos). conteúdo interno de cada classe também podem ser
As revisões de design de software também podem calculadas.
avaliar a segurança. Auxílios para instalação,
operação e uso (por exemplo, manuais e arquivos 6. Notações de Design de Software
de ajuda) podem ser revisados.
• Análise estática: análise estática formal ou semiformal Existem muitas notações para representar artefatos de
(não executável) que pode ser usada para avaliar design de software. Alguns são usados para descrever a
um projeto (por exemplo, análise de árvore de falhas organização estrutural de um projeto, outros para
ou verificação cruzada automatizada). representar o comportamento do software. Certas
A análise de vulnerabilidades de design (por notações são usadas principalmente durante o projeto
exemplo, análise estática para pontos fracos de arquitetônico e outras principalmente durante o projeto
segurança) pode ser realizada se a segurança for detalhado, embora algumas notações possam ser usadas
uma preocupação. A análise formal de projeto usa para ambos os propósitos. Além disso, algumas notações
modelos matemáticos que permitem aos projetistas são usadas principalmente no contexto de métodos de
prever o comportamento e validar o desempenho do projeto específicos (consulte o tópico 7, Estratégias e
software em vez de depender inteiramente de testes. métodos de projeto de software). Observe que o design
A análise formal de projeto pode ser usada para de software geralmente é realizado usando várias
detectar erros residuais de especificação e projeto notações. Aqui, eles são categorizados em notações para
(talvez causados por imprecisão, ambiguidade e, às descrever a visão estrutural (estática) versus a visão comportamental (dinâm
vezes, outros tipos de erros). (Consulte também os
Modelos e Métodos de Engenharia de Software KA.) 6.1. Descrições Estruturais (Vista Estática)
[4*, c7] [5*, c6, c7] [6*, c4, c5, c6, c7] [12*,
• Simulação e prototipagem: técnicas dinâmicas para c7] [14*, c7]
avaliar um projeto (por exemplo, simulação de
desempenho ou protótipos de viabilidade). As seguintes notações, em sua maioria, mas nem sempre
gráficas, descrevem e representam os aspectos estruturais
de um projeto de software - ou seja, são
Machine Translated by Google

Projeto de Software 2-9

usado para descrever os principais componentes e como eles • Diagramas de atividades: usados para mostrar o fluxo de
estão interconectados (visão estática): controle de atividade para atividade. Pode ser usado para
representar atividades simultâneas.

• Linguagens de descrição de arquitetura (ADLs): linguagens • Diagramas de comunicação: usados para mostrar as
textuais, muitas vezes formais, usadas para descrever a interações que ocorrem entre um grupo de objetos; a
arquitetura de software em termos de componentes e ênfase está nos objetos, seus links e nas mensagens que
conectores. eles trocam nesses links.
• Diagramas de classes e objetos: usados para representar
um conjunto de classes (e objetos) e suas inter-relações. • Diagramas de fluxo de dados (DFDs): usados para mostrar
o fluxo de dados entre os elementos. Um diagrama de
• Diagramas de componentes: usados para representar um fluxo de dados fornece “uma descrição baseada na
conjunto de componentes (“partes físicas e substituíveis modelagem do fluxo de informações em torno de uma
de um sistema que [se conformam] e [fornecem] a rede de elementos operacionais, com cada elemento
realização de um conjunto de interfaces” [18]) e suas inter- fazendo uso ou modificando a informação que flui para
relações. aquele elemento” [4*]. Os fluxos de dados (e, portanto, os
• Cartões de colaborador de responsabilidade de classe diagramas de fluxo de dados) podem ser usados para
(CRCs): usados para denotar os nomes dos componentes análise de segurança, pois oferecem a identificação de
(classe), suas responsabilidades e os nomes dos possíveis caminhos para ataques e divulgação de
componentes colaboradores. informações confidenciais.

• Diagramas de implantação: usados para representar um • Tabelas e diagramas de decisão: usados para representar
conjunto de nós (físicos) e suas inter-relações e, assim, combinações complexas de condições e ações.
modelar os aspectos físicos do software.
• Fluxogramas: utilizados para representar o fluxo de controle
• Diagramas entidade-relacionamento (ERDs): utilizados e as ações associadas a serem realizadas.

para representar modelos conceituais de dados


armazenados em repositórios de informações. • Diagramas de sequência: usados para mostrar as
• Linguagens de descrição de interface (IDLs): linguagens interações entre um grupo de objetos, com ênfase na
do tipo programação usadas para definir as interfaces ordenação temporal das mensagens passadas entre os
(nomes e tipos de operações exportadas) de componentes objetos.
de software. • Diagramas de transição de estado e gráfico de estado:
• Gráficos de estrutura: usados para descrever a estrutura usados para mostrar o fluxo de controle de estado para

de chamada dos programas (quais módulos chamam e estado e como o comportamento de um componente
são chamados por quais outros módulos). muda com base em seu estado atual em uma máquina
de estado.

6.2. Descrições Comportamentais (Visão Dinâmica) • Linguagens de especificação formal: linguagens textuais
[4*, c7, c13] [5*, c6, c7] [6*, c4, c5, c6, c7] [14*, c8] que usam noções básicas da matemática matemática
(por exemplo, lógica, conjunto, sequência) para definir de
forma rigorosa e abstrata as interfaces e o comportamento
As seguintes notações e linguagens, algumas gráficas e outras dos componentes de software, geralmente em termos de
textuais, são usadas para descrever o comportamento dinâmico pré e pós-condições. (Consulte também os Modelos e
de sistemas e componentes de software. Muitas dessas Métodos de Engenharia de Software KA.)
notações são úteis principalmente, mas não exclusivamente,
durante o projeto detalhado. Além disso, as descrições • Pseudocódigo e linguagens de projeto de programa (PDLs):
comportamentais podem incluir uma justificativa para a decisão linguagens estruturadas do tipo programação usadas
de design, como como um design atenderá aos requisitos de para descrever, geralmente na fase de projeto detalhado,
segurança. o comportamento de um procedimento ou método.
Machine Translated by Google

2-10 Guia SWEBOK® V3.0

7. Estratégias e Métodos de Design de Software design de meados da década de 1980 (substantivo = objeto;
verbo = método; adjetivo = atributo), onde herança e
Existem várias estratégias gerais para ajudar a orientar o polimorfismo desempenham um papel fundamental, para o
processo de design. Em contraste com as estratégias gerais, campo do design baseado em componentes, onde a
os métodos são mais específicos, pois geralmente fornecem formação de metain pode ser definida e acessada (através
um conjunto de notações a serem usadas com o método, da reflexão , por exemplo). Embora as raízes do design OO
uma descrição do processo a ser usado ao seguir o método tenham origem no conceito de abstração de dados, o design
e um conjunto de diretrizes para usar o método. Esses orientado por responsabilidade foi proposto como uma
métodos são úteis como uma estrutura comum para equipes abordagem alternativa ao design OO.
de engenheiros de software. (Consulte também os Modelos
e Métodos de Engenharia de Software KA). 7.4. Design centrado na estrutura de dados
[4*, c14, c15]

7.1. Estratégias Gerais O design centrado na estrutura de dados começa a partir


[4*, c8, c9, c10] [12*, c7] das estruturas de dados que um programa manipula, e não
da função que ele executa. O engenheiro de software
Alguns exemplos frequentemente citados de estratégias primeiro descreve as estruturas de dados de entrada e saída
gerais úteis no processo de design incluem as estratégias e, em seguida, desenvolve a estrutura de controle do
de divisão e conquista e refinamento passo a passo, programa com base nesses diagramas de estrutura de
estratégias de cima para baixo vs. de baixo para cima e dados. Várias heurísticas foram propostas para lidar com
estratégias que fazem uso de heurísticas, uso de padrões e casos especiais - por exemplo, quando há uma
linguagens de padrões e uso de uma abordagem iterativa e incompatibilidade entre as estruturas de entrada e saída.
incremental.
7.5. Projeto Baseado em Componentes (CBD)
7.2. Design Orientado à Função (Estruturado) [4*, c17]
[4*, c13]
Um componente de software é uma unidade independente,
Este é um dos métodos clássicos de projeto de software, com interfaces e dependências bem definidas que podem
onde a decomposição se concentra na identificação das ser compostas e implantadas independentemente. O design
principais funções do software e, em seguida, elaborá-las e baseado em componentes aborda questões relacionadas ao
refiná-las de forma hierárquica de cima para baixo. O design fornecimento, desenvolvimento e integração de tais
estruturado geralmente é usado após a análise estruturada, componentes para melhorar a reutilização. Os componentes
produzindo assim (entre outras coisas) diagramas de fluxo de software reutilizados e prontos para uso devem atender
de dados e descrições de processos associados. Os aos mesmos requisitos de segurança que o novo software.
pesquisadores propuseram várias estratégias (por exemplo, O gerenciamento de confiança é uma preocupação de
análise de transformação, análise de transação) e heurísticas design; componentes tratados como tendo um certo grau de
(por exemplo, fan-in/fan-out, escopo de efeito vs. escopo de confiabilidade não devem depender de componentes ou
controle) para transformar um DFD em uma arquitetura de serviços menos confiáveis.
software geralmente representada como um gráfico de
estrutura.
7.6. Outros métodos
[5*, c19, c21]
7.3. Design Orientado a Objetos
[4*, c16] Outras abordagens interessantes também existem (veja a
KA Modelos e Métodos de Engenharia de Software).
Vários métodos de projeto de software baseados em objetos Métodos iterativos e adaptativos implementam incrementos
têm sido propostos. O campo evoluiu desde o início da de software e reduzem a ênfase em requisitos e projetos de
orientação a objetos (OO) software rigorosos.
Machine Translated by Google

Projeto de Software 2-11

O projeto orientado a aspectos é um método pelo qual o 8. Ferramentas de Design de Software


software é construído usando aspectos para implementar as [14*, c10, Apêndice A]
preocupações e extensões transversais que são identificadas
durante o processo de requisitos de software. A arquitetura As ferramentas de design de software podem ser usadas
orientada a serviços é uma maneira de construir software para dar suporte à criação dos artefatos de design de software
distribuído usando serviços da Web executados em durante o processo de desenvolvimento de software. Eles
computadores distribuídos. Os sistemas de software podem apoiar parte ou a totalidade das seguintes atividades:
geralmente são construídos usando serviços de diferentes
provedores porque protocolos padrão (como HTTP, HTTPS, • traduzir o modelo de requisitos em uma representação
SOAP) foram projetados para oferecer suporte à comunicação de projeto; • fornecer suporte para a representação de
de serviço e troca de informações de serviço. componentes funcionais e sua(s) interface(s); • implementar
refinamento e particionamento de heurísticas; • fornecer
diretrizes para avaliação de qualidade.
Machine Translated by Google

2-12 Guia SWEBOK® V3.0

MATRIZ DE TÓPICOS VS. MATERIAL DE REFERÊNCIA

[4*] [5*] [6*] [12*] [13*] [14*] [15*] [17*]

Allen
2008

Nielsen
1993
Orçamento
2003

Jones
Page
1999
Brookshear
2008
Sommerville
2011

Gama
1994
ai.
et
Clementes
2010
ai.
et

1. Fundamentos de
Design de Software

1.1. Conceitos Gerais


c1
de Design
1.2. O Contexto do
c3
Design de Software
1.3. O Processo de
c2
Design de Software

1.4. Princípios de design c6, c7, c1, c8,


c1
de software 2. Questões- c21 c9

chave no design de
software

2.1. Simultaneidade c18

2.2. Controle e
c21
Tratamento de Eventos
2.3. Persistência de dados c9

2.4. Distribuição de
c18
Componentes
2.5. Tratamento
de Erros e Exceções e c18
Tolerância a Falhas

2.6. Interação e
c16
Apresentação

c12,
2.7. Segurança c4
c18

3. Estrutura e Arquitetura
de Software

3.1. Estruturas
arquitetônicas e c1
pontos de vista

c1, c2,
3.2. Estilos
c3, c4,
arquitetônicos
c5

c3, c4,
3.3. Padrões de design
c5
Machine Translated by Google

Projeto de Software 2-13

[4*] [5*] [6*] [12*] [13*] [14*] [15*] [17*]

Allen
2008

Nielsen
1993
Orçamento
2003

Jones
Page
1999
Brookshear
2008
Sommerville
2011

Gama
1994
ai.
et
Clementes
2010
ai.
et

3.4. Decisões de
c6
Design de Arquitetura
3.5. Famílias de
c6, c7,
Programas e
c16
Estruturas

4. Interface do usuário

Projeto
4.1. Princípio geral
c29-
de design da interface c2
rede
do usuário
4.2. Problemas de design c29-

da interface do usuário rede

4.3. O Design de
c29-
Modalidades de
rede
Interação do Usuário

4.4. O Design da
c29-
Apresentação da
rede
Informação

4.5. Processo de design c29-

da interface do usuário rede

4.6. Localização e
c8, c9
Internacionalização

4.7. Metáforas e
c5
Modelos Conceituais

5. Análise e Avaliação
da Qualidade do Projeto
de Software

5.1. Atributos
c4
de qualidade

5.2. Técnicas
de Análise e
c4 c24
Avaliação da

Qualidade
5.3. Medidas c4 c24
Machine Translated by Google

2-14 Guia SWEBOK® V3.0

[4*] [5*] [6*] [12*] [13*] [14*] [15*] [17*]

Allen
2008

Nielsen
1993
Orçamento
2003

Jones
Page
1999
Brookshear
2008
Sommerville
2011

Gama
1994
ai.
et
Clementes
2010
ai.
et

6. Notações de Design
de Software

6.1. Descrições
c4, c5,
Estruturais (Vista Estática) c7 c6, c7 c7 c7
c6, c7

6.2. Descrições
c7, c13, c4, c5,
Comportamentais c6, c7 c8
c18 c6, c7
(Visão Dinâmica)

7. Estratégias e
Métodos de Design de
Software

7.1. Estratégias c8, c9,


c7
Gerais c10

7.2. Design
Orientado à c13

Função (Estruturado)

7.3. Design Orientado a


c16
Objetos
7.4. Design centrado c14,
na estrutura de dados c15

7.5. Design Baseado


c17
em Componentes (CBD)

c19,
7.6. Outros métodos
c21

8. Ferramentas de Design c10,


de Software Ap. UMA
Machine Translated by Google

Projeto de Software 2-15

LEITURAS ADICIONAIS REFERÊNCIAS

Roger Pressman, Engenharia de Software: A [1] Sistemas ISO/ IEC/ IEEE 24765:2010 e
Abordagem do Praticante (Sétima Edição) Engenharia de Software—Vocabulário, ISO/
[19]. IEC/IEEE, 2010.

Por cerca de três décadas, Roger Pressman's Software [2] Padrão IEEE 12207-2008 (também conhecido como ISO/ IEC

Engineering: A Practitioner's Approach 12207:2008) Norma para Sistemas e


tem sido um dos principais livros didáticos do mundo em Engenharia de Software—Ciclo de Vida de Software
engenharia de software. Notavelmente, este livro Processos, IEEE, 2008.
complementar a [5*] apresenta de forma abrangente o
design de software — incluindo conceitos de design, [3] T. DeMarco, “O Paradoxo do Software
design arquitetônico, design em nível de componente, Arquitetura e Design”, Palestra do Prêmio
design de interface do usuário, design baseado em Stevens, 1999.
padrões e design de aplicativos da web.
[4*] D. Budgen, Design de Software, 2ª ed.,
“O Modelo de Arquitetura 4+1 Vista” [20]. Addison-Wesley, 2003.

O artigo seminal “The 4+1 View Model” organiza uma [5*] I. Sommerville, Engenharia de Software, 9ª ed.,
descrição de uma arquitetura de software usando cinco Addison-Wesley, 2011.
visualizações simultâneas. As quatro visões do modelo
são a visão lógica, a visão de desenvolvimento, a visão de [6*] M. Page-Jones, Fundamentos do Objeto
processo e a visão física. Design Orientado em UML, 1ª ed., Addison Wesley,
Além disso, casos de uso ou cenários selecionados são 1999.
utilizados para ilustrar a arquitetura. Portanto, o modelo
contém 4+1 visualizações. As visualizações são usadas [7] Dicionário Collegiate de Merriam-Webster, 11ª ed.,
para descrever o software conforme imaginado por 2003.
diferentes partes interessadas, como usuários finais,
desenvolvedores e gerentes de projeto. [8] Padrão IEEE. 1069-2009 Norma para
Tecnologia da Informação—Sistemas
Len Bass, Paul Clements e Rick Kazman, Arquitetura Design—Descrições de Design de Software,
de Software na Prática [21]. IEEE, 2009.

Este livro apresenta os conceitos e as melhores práticas [9] Sistemas e Software ISO/ IEC 42010:2011
de arquitetura de software, ou seja, como o software é Engenharia—Prática Recomendada para
estruturado e como os componentes do software Descrição Arquitetural de Sistemas Intensivos
interagem. Com base em sua própria experiência, os de Software, ISO/IEC, 2011.
autores cobrem os tópicos técnicos essenciais para
projetar, especificar e validar arquiteturas de software. [10] J. Bosch, Design e Uso de Software
Eles também enfatizam a importância do contexto de Arquiteturas: Adotando e evoluindo uma
negócios no qual o software de grande porte é projetado. Abordagem da linha de produtos, ACM Press, 2000.
Seu objetivo é apresentar a arquitetura de software em
um cenário do mundo real, refletindo tanto as oportunidades [11] G. Kiczales et al., “Orientação a Aspectos
quanto as restrições que as organizações encontram. Este Programação”, Proc. 11º Congresso Europeu
é um dos melhores livros atualmente disponíveis sobre Programação Orientada a Objetos (ECOOP 97),
arquitetura de software. Springer, 1997.
Machine Translated by Google

2-16 Guia SWEBOK® V3.0

[12*] JG Brookshear, Ciência da Computação: Um [17*] J. Nielsen, Engenharia de Usabilidade, Morgan


Visão geral, 10ª ed., Addison-Wesley, 2008. Kaufmann, 1993.

[13*] JH Allen et al., Software Security [18] G. Booch, J. Rumbaugh e I. Jacobson, The Unified
Engenharia: um guia para o projeto Modeling Language User Guide, Addison-Wesley,
Gerentes, Addison-Wesley, 2008. 1999.

[14*] P. Clements et al., Software de Documentação [19] RS Pressman, Engenharia de Software: A


Architectures: Views and Beyond, 2ª ed., Pearson Abordagem do Praticante, 7ª ed., McGraw Hill, 2010.
Education, 2010.

[15*] E. Gamma et al., Padrões de Projeto: [20] PB Kruchten, “The 4+1 View Model of Architecture,”
Elementos de Orientação a Objetos Reutilizáveis IEEE Software, vol. 12, não. 6, 1995, pp. 42-55.
Software, 1ª ed., Addison-Wesley
Professional, 1994.
[21] L. Bass, P. Clements e R. Kazman,
[16] I. Jacobson, G. Booch e J. Rumbaugh, O Arquitetura de software na prática, 3ª ed., Addison-
Desenvolvimento Unificado de Software Wesley Professional, 2013.
Processo, Addison-Wesley Professional, 1999.

Você também pode gostar