Include E Extend Caso De Uso
Entendendo include e extend caso de uso
Quando você está modelando sistemas com diagramas de caso de uso em UML, há duas relações que todo mundo confunde: include e extend caso de uso. Elas parecem simples, mas na prática causam bastante dor de cabeça quando não são aplicadas corretamente. A diferença fundamental está no controle de fluxo e na obrigatoriedade da interação entre os casos. O include representa uma relação onde o caso de uso base SEMPRE invoca o caso incluído. É uma dependência obrigatória. Já o extend é opcional e condicional. O caso estendido só é executado se uma condição específica for satisfeita. Volker Marquardt, que criou a notação UML, especificou isso nas regras semânticas do padrão. No include, o caso base controla totalmente quando a extensão acontece. No extend, é o contrário: a extensão decide se vai ou não executar, baseada numa condição guardada. Isso define a direção da seta no diagrama também. Include vai do caso base para o incluído. Extend vai do caso estendido para o estender.
Um exemplo claro seria um sistema de e-commerce. O caso "Finalizar Compra" sempre inclui "Processar Pagamento". Isso é obrigatório, então usa include. Já "Aplicar Cupom de Desconto" é um extend, porque só acontece se o cliente realmente inserir um cupom válido na etapa anterior.
Como identificar qual usar na prática
A primeira coisa que eu faço é perguntar: esse comportamento é essencial ou opcional? Se não existir, o caso principal quebra completamente, então é include. Se o sistema funcionar perfeitamente bem sem ele, mas quiser adicionar funcionalidade extra sob certas condições, é extend. Outro sinal é a direção do fluxo. No include, o caso de uso invocador carrega o comportamento do incluído. No extend, o caso de uso base fica cego sobre a existência do estendido. Isso é importante para manter baixo acoplamento entre os casos. Eu vejo muita gente invertendo isso no início, o que gera diagramas inconsistentes que confundem toda a equipe. Também preste atenção na cardinalidade. Um mesmo caso pode ser includido por vários outros casos diferentes. O "Autenticar Usuário", por exemplo, pode ser includido em "Acessar Sistema", "Alterar Senha" e "Recuperar Conta". Já um extend, normalmente, tem um ponto de extensão específico dentro de um caso base.
O ponto de extensão é definido pela ação de extensão e pela condição de execução. Sem esses dois elementos definidos claramente, o extend perde o sentido. O analista precisa documentar exatamente qual ação dispara o comportamento extra e qual cenário permite que isso ocorra.
Problema real que encontrei no campo
Em um projeto de sistema bancário para concessionárias de veículos, tivemos um caso "Calcular Financiamento" que precisava lidar com múltiplos tipos de avaliação de crédito. No início, modelamos cada tipo como um extend separado do caso principal. Isso gerou uma explosão de relacionamentos que tornou o diagrama ilegível. A solução foi transformar os extends em includes quando identificamos que os fluxos alternativos eram, na verdade, necessários para todos os cenários de financiamento. Só mantivemos extends para casos realmente opcionais, como "Aplicar Desconto para Clientes Premium", que só acontecia sob condição específica. Isso reduziu a complexidade visual em cerca de 60 por cento e facilitou a comunicação com a equipe de desenvolvimento. O problema principal era que estávamos tratando comportamentos obrigatórios como opcionais. A distinção entre include e extend caso de uso ficou mais clara quando paramos de pensar em termos de herança e passamos a pensar em termos de dependência e controle de fluxo.
Pegadinhas comuns e como evitar
Uma armadilha frequente é criar extends que na prática são obrigatórios. Se você verificar que um extend quase sempre é executado, provavelmente deveria ser um include. O mesmo vale para includes que raramente acontecem. Se a obrigatoriedade não é real, o modelo está errado. Outro erro é usar include quando a intenção é apenas recomendar um comportamento, não obrigá-lo. O include é uma relação forte. Se o caso base não funciona sem o incluído, use include. Se pode funcionar sozinho, considere se um extend não é mais adequado, ou se nem precisa dessa relação. Também vejo gente adicionando extends desnecessários para inflar o número de elementos no diagrama. Isso não agrega valor e só aumenta o custo de manutenção. Cada extend precisa de um ponto de extensão, uma ação de extensão e uma condição guardada bem definidos. Se não consegue especificar esses três elementos com clareza, talvez o extend não deva existir.

A consistência visual também importa. Setas tracejadas com «include» e «extend» devem ter direções opostas. Se as flechas apontarem na mesma direção, está errado. Esse é um erro fácil de cometer e difícil de detectar durante revisões apressadas. Sempre confira a direção antes de apresentar o diagrama para stakeholders.
Limitações e cenários onde a abordagem falha
O modelo include e extend caso de uso tem limitações sérias quando aplicado a sistemas altamente dinâmicos ou orientados a eventos. Casos de uso são estáticos por natureza, então flutuações de comportamento em tempo de execução ficam fora do escopo. Se seu sistema muda frequentemente de lógica, talvez uma abordagem baseada em histórias de usuário seja mais produtiva. Também não escala bem para sistemas com centenas de casos de uso. O diagrama vira uma bagunça indecifrável e a relação entre include e extend caso de uso perde significado prático. Nesses cenários, recomendo quebrar o sistema em subsistemas separados e modelar cada um individualmente. Há ainda o problema da ambiguidade conceitual. Diferentes analistas podem interpretar o mesmo comportamento de formas distintas. Um pode ver um extend onde outro vê um include. Sem um glossário de negócio bem definido e regras de nomenclatura claras, o modelo rapidamente perde utilidade. Estabeleça convenções no início do projeto e documente-as.
Para equipes ágeis, diagramas detalhados de include e extend caso de uso podem tornar-se rapidamente obsoletos. Recomendo usá-los apenas para módulos estáveis do sistema, mantendo o restante modelado de forma mais leve ou abandonando a técnica completamente em favor de user stories com critérios de aceitação claros.

Galeria
-
Como fazer um caso de uso: exemplos de Caso de Uso -
PPT - Diagrama de Caso de Uso PowerPoint Presentation, free download ...