Estruturando o Comportamento do Sistema: Um Guia Prático para Relacionamentos de Casos de Uso UML
Introdução
Na engenharia de software moderna, os diagramas de casos de uso são frequentemente mal compreendidos como meras listas de recursos ou mapas de projeto de alto nível. Na realidade, eles servem como estrutura de sustentação arquitetônica. Quando aplicados corretamente, os relacionamentos de casos de uso não simplesmente listam o que um sistema deve fazer; eles decompõem ativamente comportamentos complexos em módulos gerenciáveis, reutilizáveis e logicamente coerentes. Essa clareza estrutural fecha a lacuna entre as expectativas dos interessados e a execução do desenvolvimento, garantindo que a documentação de design detalhada permaneça mantida, inequívoca e alinhada ao comportamento real em tempo de execução.
Este estudo de caso explora como aproveitar os três relacionamentos principais de casos de uso UML 2.0—<<incluir>>, Generalização e <<estender>>—para arquitetar uma plataforma empresarial escalável. Através de exemplos práticos, mapeamentos de documentação textual e diretrizes comprovadas pela indústria, demonstraremos como esses relacionamentos transformam documentos de requisitos extensos em plantas detalhadas e prontas para desenvolvedores.

Contexto do Estudo de Caso: A Plataforma Horizon
Para fundamentar esses conceitos na realidade, analisaremos o design arquitetônico da Plataforma Horizon, um sistema de nível empresarial responsável por gerenciar contas de usuários, fluxos de trabalho de criação de conteúdo e verificação de identidade externa. À medida que os requisitos cresceram, a equipe de engenharia enfrentou dois desafios críticos:
-
Bloat na documentação: Passos repetitivos de validação e tratamento de erros foram copiados e colados em dezenas de especificações funcionais.
-
Variações ambíguas: Tipos especializados de contas e caminhos condicionais de falha foram misturados, causando expansão de escopo e implementação inconsistente.
Ao aplicar os relacionamentos de casos de uso UML de forma estratégica, a equipe resolveu ambos os problemas. As seções a seguir detalham como cada relacionamento foi aplicado, visualizado e documentado.
1. O relacionamento <<incluir>> Relacionamento: Forçando a Reutilização de Comportamento
Propósito e Mecanismo
O relacionamento <<incluir>> existe para eliminar redundâncias. Quando múltiplos casos de uso compartilham etapas procedimentais idênticas, essas etapas são extraídas para um sub-caso de uso independente. O caso de uso base incorpora explicitamente esse comportamento compartilhado, garantindo que as etapas incluídas sejam sempre executadas como parte do fluxo principal.
Crucialmente, o caso de uso incluído não exige uma associação direta com um ator. Ele herda automaticamente a conexão contextual do caso de uso base que o invoca, mantendo o diagrama limpo e focado em objetivos de negócios, em vez de detalhes de implementação.
Visualização em PlantUML
No PlantUML, uma seta de dependência tracejada aponta do caso de uso base para o caso de uso incluído.

@startuml
skinparam theme plain
skinparam packageStyle rectangle
ator Administrador como admin
ator :Banco de Dados de Credenciais do Autor: como db
retângulo "Sistema de Gerenciamento de Conteúdo (CMS)" {
' Exemplo de Inclusão
caso de uso "Criar uma nova Conta de Blog" como UC_Blog
caso de uso "Criar uma nova Wiki Pessoal" como UC_Wiki
caso de uso "Verificar Identidade" como UC_Check
UC_Blog ..> UC_Check : <<incluir>>
UC_Wiki ..> UC_Check : <<incluir>>
' Exemplo de Extensão
caso de uso "Registrar Falha na Aplicação" como UC_Fail
UC_Fail ..> UC_Blog : <<extender>>
UC_Fail ..> UC_Wiki : <<extender>>
}
admin --> UC_Blog
admin --> UC_Wiki
UC_Check --> db
@enduml
Mapeamento de Documentação Textual
Em vez de reescrever os passos de validação de identidade em múltiplas especificações, a equipe adotou uma sintaxe padronizada de inclusão no fluxo principal de sucesso:
| Campo de Caso de Uso | Valor / Passos do Fluxo |
|---|---|
| Nome do Caso de Uso | Criar uma nova Conta de Blog |
| Fluxo Principal de Sucesso | 1. O Administrador seleciona o tipo de conta.
2. O Administrador insere os detalhes do autor. 3. incluir::Verificar Identidade para verificar o autor. 4. O sistema cria a nova conta de blog. |
2. Generalização de Caso de Uso (Herança): Gerenciando Variações Especializadas
Propósito e Mecanismo
A generalização é aplicada quando um caso de uso base define um fluxo principal que se aplica a múltos contextos especializados, cada um exigindo apenas pequenas variações. Um caso de uso filho herda todos comportamentos, objetivos e relacionamentos de seu pai. Apenas os passos únicos ou sobrescritos precisam ser documentados no filho.
A Regra do “Tudo ou Nada”: A herança em casos de uso é rígida. Cada passo definido no pai deve executar logicamente no filho. Se um cenário especializado exigir pular ou alterar fundamentalmente um passo do pai, a generalização é a ferramenta incorreta.
Visualização no PlantUML
A generalização utiliza uma linha sólida com uma ponta de seta vazia, apontando do filho para o pai.

@startuml
skinparam theme plain
skinparam packageStyle rectangle
ator Administrador como admin
retângulo "Gerenciamento de Conta" {
usecase "Criar uma nova Conta de Blog" como UC_Parent
usecase "Criar uma nova Conta Regular" como UC_Regular
usecase "Criar uma nova Conta de Blog Editorial" como UC_Editorial
' Setas de generalização apontando para Parent
UC_Parent <|-- UC_Regular
UC_Parent <|-- UC_Editorial
}
admin --> UC_Parent
@enduml
3. O <<extend>> Relação: Captura de Fluxos Condicionais e Opcionais
Propósito e Mecanismo
Diferentemente de <<include>>, que representa reutilização obrigatória, <<extend>> modela comportamento opcional ou condicional que só é acionado sob circunstâncias específicas de tempo de execução. O caso de uso base permanece totalmente funcional por si só; o caso de uso estendido atua como um “gancho” em tempo de execução que injeta etapas adicionais quando condições pré-definidas são atendidas.
Arquitetonicamente, isso separa os caminhos principais de sucesso do tratamento de exceções, roteamento alternativo ou complementos opcionais, evitando fluxos principais excessivamente complexos.
Mapeamento da Documentação Textual
As extensões são geralmente mapeadas diretamente a partir dos fluxos alternativos ou de exceção na especificação textual:
| Campo do Caso de Uso | Valor / Etapas do Fluxo |
|---|---|
| Nome do Caso de Uso | Criar uma nova Conta de Blog |
| Condição de Fim Falha | O pedido para uma nova conta de blog é rejeitado. |
| Seção de Extensões | Passo 3.1: O Banco de Dados de Credenciais do Autor não verifica os detalhes.
Passo 3.2: estendido por::Registrar Falha no Pedido. |
4. Diretrizes Arquitetônicas e Melhores Práticas
Aplicar com sucesso essas relações exige disciplina. As seguintes diretrizes surgiram de refinamentos iterativos durante o lançamento da plataforma Horizon:
-
Evite o supermodelamento (“Sopa de Setas”):As relações de caso de uso são projetadas para combater a redundância na documentação, e não para micromanagement de interações da interface. Se uma etapa não representa um sub-objetivo independente com critérios claros de sucesso/falha do negócio, mantenha-a como texto inline. Clicar em um botão ou navegar por um menu raramente justifica um caso de uso dedicado.
-
A “Armadilha do Programador” com
<<extend>>:Desenvolvedores com formação em orientação a objetos frequentemente confundem erroneamente<<extend>>com herança de classes. Isso não é verdade.A herança de casos de uso é exclusivamente gerenciada pela relação de generalização. Trate<<extend>>estrictamente como um plugin opcional em tempo de execução ou um gancho condicional. -
Verifique novamente as dependências de generalização: Antes de desenhar uma seta de generalização, verifique rigorosamente se o caso de uso filho realmente exige cada etapa individual do pai. Se um filho precisar ignorar, pular ou alterar fundamentalmente etapas do pai, substitua a generalização por
<<include>>ou<<extend>>. -
Isolamento de Atores Externos em Módulos Reutilizáveis: Quando extrair uma rotina compartilhada para um caso de uso incluído (por exemplo,
Verificar Identidade), migre a conexão com o subsistema de suporte externo (por exemplo,Banco de Dados de Credenciais do Autor) diretamente para esse sub-caso de uso. Isso esclarece instantaneamente os limites de dependência e mantém os diagramas de nível superior focados em interações de negócios, e não em detalhes de infraestrutura.
Conclusão
As relações de caso de uso UML são muito mais do que convenções de diagramação; sãodecisões de design estrutural que afetam diretamente a manutenibilidade do sistema, a clareza da documentação e a velocidade de desenvolvimento. Ao aplicar estrategicamente<<include>> para reutilização obrigatória, Generalização para variações especializadas e<<extend>> para fluxos condicionais, arquitetos podem transformar conjuntos de requisitos extensos em plantas modulares e logicamente sólidas.
O verdadeiro valor dessas relações reside na sua consistência entre diagramas visuais e especificações textuais. Quando diagramas e narrativas funcionais estão alinhados, as equipes eliminam ambiguidades, reduzem a documentação redundante e estabelecem uma única fonte de verdade que escala junto com o sistema. À medida que as plataformas crescem em complexidade, dominar essas relações continua sendo uma das formas mais eficazes de garantir que a intenção arquitetônica se traduza de forma fluida em software funcional.














