Análise e Modelagem

Diagrama de Sequência: o que é, como funciona e como criar

O diagrama de sequência mostra quem conversa com quem, em qual ordem e com qual resposta. Ele transforma um fluxo descrito em texto em uma linha do tempo fácil de revisar.

Modelo visual representando análise e interação entre partes de um sistema de software.

Introdução

Imagine alguém descrevendo um cadastro: “a pessoa preenche o formulário, o sistema confere os dados, grava as informações e mostra uma mensagem”. Parece simples, mas surgem perguntas logo em seguida. Quem valida os dados? O que acontece se a gravação falhar? Quem avisa o usuário?

O diagrama de sequência ajuda a responder essas perguntas com clareza. Ele desenha a conversa entre as partes envolvidas em um fluxo, passo a passo, de cima para baixo. Neste artigo, você vai entender seus elementos, aprender a ler e a criar um diagrama e ver como ele se conecta a requisitos, casos de uso, classes e código.

O que é um Diagrama de Sequência?

Um diagrama de sequência é uma representação visual de como participantes trocam mensagens ao longo do tempo para realizar uma tarefa. Participantes podem ser pessoas, sistemas, componentes ou objetos. As mensagens são chamadas, pedidos ou respostas entre eles.

Ele serve para:

  • entender a ordem exata das ações em um fluxo;
  • descobrir quem é responsável por cada etapa;
  • revelar respostas, erros e dependências que o texto esconde;
  • conversar com a equipe antes de escrever ou alterar código.

Em vez de mostrar tudo o que o sistema faz, o diagrama de sequência foca um cenário por vez, como “cadastrar membro” ou “emitir documento”. Esse recorte é o que o torna útil.

Relação entre UML e Diagrama de Sequência

O diagrama de sequência faz parte da UML, a linguagem visual padronizada para modelar sistemas. A UML separa seus diagramas em dois grandes grupos: os estruturais, que mostram como o sistema é organizado, e os comportamentais, que mostram o que acontece quando ele funciona.

O diagrama de sequência é comportamental. Mais especificamente, é um diagrama de interação: sua pergunta central é “como essas partes colaboram, e em que ordem?”. Por usar a notação da UML, pessoas diferentes conseguem ler o mesmo desenho da mesma forma.

Principais elementos

Um diagrama de sequência usa poucos símbolos. Conhecendo os principais, você já consegue ler a maioria dos exemplos:

Principais elementos de um diagrama de sequência UML
ElementoO que representaExemplo
AtorAlguém ou algo de fora do sistema que inicia a interação. Aparece como um boneco.Usuário da secretaria
ObjetoParticipante do sistema que recebe e envia mensagens. Aparece como um retângulo no topo.Sistema, Banco de Dados
Linha de vidaLinha tracejada vertical que mostra a existência do participante durante o fluxo.Linha abaixo de “Sistema”
MensagemPedido de um participante para outro. Seta contínua com ponta cheia.cadastrar(dados)
RetornoResposta a uma mensagem. Seta tracejada com ponta aberta.confirmação
AtivaçãoRetângulo fino sobre a linha de vida, indicando o período em que o participante está trabalhando.Sistema processando o cadastro

Existem ainda dois elementos que aparecem em alguns diagramas. A criação de objeto é uma mensagem que faz surgir um novo participante no meio do fluxo; o retângulo dele fica na altura dessa mensagem, e não no topo. A destruição indica que um participante deixa de existir, e é desenhada com um “X” no fim da linha de vida. Para modelos iniciais, é comum omitir os dois e deixar o foco nas mensagens.

Ordem temporal e como interpretar

A regra mais importante é esta: o tempo corre de cima para baixo. Uma mensagem desenhada mais acima acontece antes de outra desenhada mais abaixo. A distância horizontal não tem significado de tempo; ela só separa os participantes. Por isso, muitas equipes numeram as mensagens (1, 2, 3…) para reforçar a ordem.

Para interpretar qualquer diagrama de sequência, siga este roteiro:

  1. Leia os participantes no topo, da esquerda para a direita.
  2. Encontre a primeira mensagem, geralmente enviada por um ator.
  3. Desça a página seguindo as setas, uma de cada vez.
  4. Observe quem responde e quando cada retorno volta.
  5. Veja as barras de ativação para saber quem está trabalhando em cada momento.

Exemplo completo: cadastro de membro

O exemplo a seguir usa o contexto de um cadastro de membros. É um cenário educacional, com três participantes: o usuário, o sistema e o banco de dados.

Diagrama de sequência educacional para cadastro de membroTrês participantes: o ator Usuário, o objeto Sistema e o objeto Banco de Dados, cada um com sua linha de vida tracejada. Em ordem, de cima para baixo: 1, o Usuário envia cadastrar(dados) ao Sistema; 2, o Sistema envia validar() a si mesmo; 3, o Sistema envia salvar(membro) ao Banco de Dados; 4, o Banco de Dados retorna confirmação ao Sistema; 5, o Sistema retorna o resultado ao Usuário. Barras de ativação mostram quando Sistema e Banco de Dados estão trabalhando. Uma seta à esquerda indica que o tempo corre de cima para baixo.UsuárioSistemaBanco de Dados1: cadastrar(dados)2: validar()3: salvar(membro)4: confirmação5: resultadotempomensagemretornoativaçãoExemplo educacional, não baseado em um sistema real.
Legenda: o boneco é o ator; os retângulos no topo são objetos; as linhas tracejadas verticais são linhas de vida; setas contínuas com ponta cheia são mensagens; setas tracejadas com ponta aberta são retornos; as barras estreitas indicam ativação. O tempo avança de cima para baixo.

Passo a passo do fluxo

  1. cadastrar(dados): o usuário preenche o formulário e pede o cadastro. É a mensagem que inicia tudo, e a barra de ativação do sistema começa aqui.
  2. validar(): o sistema envia uma mensagem para si mesmo para conferir os dados, por exemplo se o nome foi preenchido. Uma seta que sai e volta para a mesma linha de vida é chamada de automensagem.
  3. salvar(membro): com os dados válidos, o sistema pede ao banco de dados que armazene o novo membro. O banco entra em ativação.
  4. confirmação: o banco responde que a gravação terminou. A seta tracejada mostra que é um retorno, não um novo pedido.
  5. resultado: o sistema informa ao usuário que o cadastro foi concluído, e sua ativação termina.

O tema lembra um sistema de gestão de membros, como o SIGM, mas o diagrama é apenas didático. Ele não descreve a arquitetura, o banco de dados nem as regras internas de nenhum sistema real.

Como criar a partir de um caso de uso

Um bom ponto de partida é um caso de uso já descrito. No diagrama de casos de uso, “Cadastrar membro” aparece como um objetivo do usuário. O diagrama de sequência detalha como esse objetivo é atingido. Um roteiro prático:

  1. Escolha um cenário: comece pelo caminho principal, em que tudo dá certo.
  2. Liste os participantes: quem inicia (o ator) e quais partes do sistema precisam agir.
  3. Escreva os passos em texto: uma frase curta por ação, na ordem em que acontecem.
  4. Transforme cada passo em mensagem: defina quem envia, quem recebe e se há resposta.
  5. Adicione ativações e retornos: mostre quem está trabalhando e o que volta para quem.
  6. Revise com outra pessoa: peça que ela leia o diagrama em voz alta. Se a história fizer sentido, o modelo está no caminho certo.

Depois do caminho principal, você pode criar diagramas separados para cenários alternativos, como “dados inválidos” ou “falha ao salvar”. Separar cenários costuma ser mais claro do que colocar todas as exceções em um único desenho.

Requisitos, casos de uso, classes e sequência

Esses artefatos não competem entre si. Cada um responde a uma pergunta diferente sobre o mesmo sistema:

Comparação entre requisitos, diagrama de casos de uso, diagrama de classes e diagrama de sequência
ArtefatoPergunta que respondeNo exemplo de cadastro
RequisitosO que o sistema precisa fazer e com qual qualidade?“O sistema deve permitir cadastrar membros.”
Caso de usoO que o sistema deve fazer do ponto de vista do usuário?O usuário tem o objetivo “Cadastrar membro”.
Diagrama de classesQual é a estrutura estática: classes, atributos e relações?A classe Membro tem nome e e-mail.
Diagrama de sequênciaComo os participantes interagem ao longo do tempo?Usuário, Sistema e Banco trocam mensagens em ordem.

Na prática, o caminho costuma ser: os requisitos definem a necessidade; o caso de uso organiza os objetivos; o diagrama de classes mostra quais conceitos existem; e o diagrama de sequência mostra esses conceitos em ação. Requisitos não funcionais também aparecem aqui: um limite de tempo de resposta, por exemplo, pode ser discutido olhando quantas mensagens um fluxo precisa. Veja mais em requisitos funcionais e não funcionais.

Um detalhe útil: cada mensagem recebida por um objeto costuma virar um método da classe correspondente. Se o diagrama de sequência mostra salvar(membro) chegando ao banco, o diagrama de classes deveria ter uma operação equivalente. Quando os dois não combinam, vale revisar. Se um único participante concentra quase todas as mensagens, também vale rever a distribuição de responsabilidades, tema do artigo sobre coesão, acoplamento e responsabilidades.

Relação com código: exemplo em Python

O código abaixo é uma representação didática do fluxo do diagrama. Ele não é uma implementação do SIGM e usa uma lista em memória no lugar de um banco de dados real.

class BancoDeDados:
    def __init__(self):
        self.registros = []

    def salvar(self, membro):
        self.registros.append(membro)
        return True  # 4: confirmação


class Sistema:
    def __init__(self, banco):
        self.banco = banco

    def validar(self, dados):
        return bool(dados.get("nome"))

    def cadastrar(self, dados):
        if not self.validar(dados):  # 2: validar()
            return "Dados inválidos."
        salvo = self.banco.salvar(dados)  # 3: salvar(membro)
        if salvo:
            return "Cadastro realizado com sucesso."  # 5: resultado
        return "Não foi possível salvar."


sistema = Sistema(BancoDeDados())
resposta = sistema.cadastrar({"nome": "Maria Silva"})  # 1: cadastrar(dados)
print(resposta)

Cada participante do diagrama virou uma classe: Sistema e BancoDeDados. O usuário é representado pelas últimas linhas do código, que chamam cadastrar(). Dentro desse método, a chamada a validar() é a automensagem, a chamada a salvar() é a mensagem para o banco, e cada return corresponde a uma seta de retorno. Os comentários numerados ligam cada linha ao passo equivalente no diagrama.

Repare também no caminho “Dados inválidos.”: ele não aparece no diagrama principal. Esse é um bom exemplo de cenário alternativo que poderia ganhar seu próprio diagrama.

Erros comuns ao criar Diagramas de Sequência

  • Tentar mostrar todos os cenários e exceções em um único diagrama.
  • Incluir participantes demais, até o desenho ficar ilegível.
  • Esquecer os retornos e deixar sem resposta quem pediu algo.
  • Desenhar mensagens fora de ordem, contrariando a leitura de cima para baixo.
  • Usar nomes vagos como “processar” ou “fazer coisa”, que não explicam a ação.
  • Detalhar cada linha de código, transformando o diagrama em um programa desenhado.
  • Criar mensagens que não combinam com as operações do diagrama de classes.

Quando usar e quando não é necessário

Use um diagrama de sequência quando um fluxo envolve várias partes, quando a ordem das ações importa ou quando a equipe discorda sobre quem faz o quê. Ele também ajuda a entender integrações entre sistemas, investigar erros difíceis de reproduzir e documentar fluxos críticos, como pagamentos ou autenticação. Para decisões estruturais mais amplas, leia também o que é arquitetura de software.

Ele não é necessário para fluxos triviais, como abrir uma página estática, nem quando uma lista numerada de passos já resolve a dúvida. Se desenhar o diagrama der mais trabalho do que entender o fluxo, prefira algo mais simples.

Resumo

O diagrama de sequência é um diagrama comportamental da UML que mostra como participantes trocam mensagens ao longo do tempo. Seus elementos principais são atores, objetos, linhas de vida, mensagens, retornos e ativações, e sua leitura sempre segue de cima para baixo.

Para criar o seu, parta de um caso de uso, escolha um cenário, liste os participantes e transforme cada passo em uma mensagem. Mantenha o foco em um fluxo por vez e confira se ele combina com o diagrama de classes. Assim, o desenho vira uma ponte clara entre o que o usuário precisa e o que o código faz.

Leia também

Voltar à Engenharia de Software