Escolar Documentos
Profissional Documentos
Cultura Documentos
Swebok v3 Cap 2 Traduzido
Swebok v3 Cap 2 Traduzido
CAPÍTULO 2
DESIGN 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
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
• 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
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.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
[16]. Embora os estilos arquitetônicos possam ser vistos como máquina proporcione uma operação eficaz
Machine Translated by Google
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
• 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
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.
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
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]
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
chave no design de
software
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
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-
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.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
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.2. Design
Orientado à c13
Função (Estruturado)
c19,
7.6. Outros métodos
c21
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
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
[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.
[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.