Erros Típicos em Diagramas de UML Fernando Brito e Abreu
(fba@di.fct.unl.pt)
Dezembro de 2005
Introdução
Este documento tem como objectivo descrever e classificar os erros mais comuns cometidos na construção de modelos com UML. Coligiu-se este tipo de informação com base na correcção de várias centenas de exames e trabalhos de alunos da Universidade Nova de Lisboa e da Academia da Força Aérea.
Tipos de Erro
TIPO GRAU DESIGNAÇÃO DESCRIÇÃO / EXEMPLIFICAÇÃO CF 1 Erro de Convenção ou
Formatação
O modelo é válido e a notação correcta, mas são violados princípios básicos de modelação cujo intuito é a legibilidade dos diagramas.
ES 2 Erros Semânticos O segmento do UoD modelado não corresponde à realidade, isto é, o modelo não é válido.
MI 3 Modelação Incompleta ou Inadequada
As abstracções de modelação usadas são correctas mas não são usadas de forma completa e/ou adequada.
VM 4 Violação do Metamodelo Abstracções de modelação usadas incorrectamente, ou seja, violando o metamodelo.
Erros em todos os diagramas
TIPO CÓD DESIGNAÇÃO DESCRIÇÃO / EXEMPLIFICAÇÃO
CF DS Diagrama Sobrecarregado O diagrama está exageradamente sobrecarregado, dificultando assim a sua compreensão (vide regra de Miller). Sugere-se a sua partição em sub-diagramas.
CF IS Identificador sem Semântica Um identificador deve ter uma semântica adequada à abstracção que identifica.
CF IF Falta Identificador
CF I I Identificador Incorrecto Para permitir a geração de código, um identificador deve ser constituído por uma palavra só, ou por uma composição de palavras sem espaços entre si ou interligados com algum elemento de ligação (ex: “_”).
CF CL Cruzamento de Linhas O cruzamento de linhas dificulta a legibilidade dos diagramas.
CF FD Falta Descrição textual do diagrama
O diagrama deve ser acompanhado de uma pequena descrição textual
Erros em Diagramas de Casos de Utilização
TIPO CÓD DESIGNAÇÃO DESCRIÇÃO / EXEMPLIFICAÇÃO
CF IC Identificador não Convencional • O nome de um caso de utilização é um identificador de uma acção (dever conter um verbo no infinitivo); este último identificador é geralmente composto de várias palavras (2 ou 3) mas não deve substituir a descrição textual do caso (esta última deve fazer-se à parte)
• O identificador de um actor deve ser no singular porque um caso é activado apenas por uma instância de um actor.
MI FF Fronteira em Falta Os actores devem ser claramente colocados fora do sistema.
ES AF Actor em Falta
ES AI Actor Injustificado A especificação de requisitos não o requer explicitamente.
MI AN Actor Não activo Um actor deve ser capaz de activar pelo menos 1 caso de utilização que o diferencie de outro actor.
MI AE Actor Errado O actor identificado não é externo ao sistema.
ES CF Caso em Falta Não devem existir casos que manipulam informação que ninguém insere no sistema.
ES CI Caso Injustificado A especificação de requisitos não o requer explicitamente.
MI CE Caso Errado O caso corresponde a actividades humanas em vez de computacionais
CF CR Caso Repetido O mesmo caso de utilização não deve aparecer repetido no mesmo diagrama
CF CA Caso Agregado A granularidade é superior ao desejável. O caso deveria ser desagregado.
CF CD Caso Desagregado A granularidade é inferior ao desejável (detalhe exagerado). A representação resulta da desagregação de um caso.
VM GE Generalização Errada Só se podem representar heranças entre actores e entre casos de utilização.
ES GI Generalização Injustificada A especificação de requisitos não o requer explicitamente.
MI GF Generalização em Falta Podem dar-se duas situações:
• Actores generalizáveis – Há actores que partilham os mesmos casos;
• Casos Generalizáveis – Há casos de utilização que têm grande parte do(s) seu(s) cenário(s) semelhantes.
VM VE actiVação Errada Podem dar-se duas situações:
• Actor activa outro actor – Só os casos de utilização podem ser activados
• Caso activa caso - Um caso de utilização ou é activado por um actor (casos passivos) ou é auto-activado (casos activos);
• Caso activa actor humano – Os casos activos apenas podem activar actores não humanos (outros programas ou sistemas).
ES VI actiVação Injustificada A especificação de requisitos não o requer explicitamente.
ES VF actiVação em Falta Se o caso de utilização é passivo e não é abstracto, então tem de ser activado pelo menos por um actor
MI VS actiVação sem Sentido Os casos activos devem indicar o sentido de activação (do caso para o actor), porque por omissão a activação é iniciada pelo actor.
VM XE eXtensão Errada Actor estendendo ou sendo estendido por um caso de uso ES XI eXtensão Injustificada A especificação de requisitos não o requer explicitamente.
ES XF eXtensão em Falta
MI XS eXtensão com Sentido errado O sentido é do que estende para o que é estendido
VM IE Inclusão Errada Actor usando ou sendo usado por um caso de uso ES II Inclusão Injustificada A especificação de requisitos não o requer explicitamente.
ES IF Inclusão em Falta
MI IS Inclusão com Sentido errado O sentido é do que usa para o que é usado
MI EI Estereótipo Incorrecto Troca de estereótipos (<<includes>> trocado por um <<extends>> ou vice-versa)
VM EF Estereótipo em Falta Não foi indicado qual o tipo de ligação entre dois casos de utilização.
MI PF Ponto de extensão em Falta O ponto de extensão deve ser indicado no caso que é estendido MI PN Ponto de extensão Não
utilizado
O ponto de extensão deve ser referenciado na descrição do caso de utilização para indicar quando ocorre a situação de extensão
VM PM Ponto de extensão Mal inserido Não se coloca o ponto de extensão no caso de utilização que estende, mas sim no que é estendido.
Erros em Diagramas de Classes
TIPO CÓD DESIGNAÇÃO DESCRIÇÃO
CF IC Identificador não Convencional Um identificador de uma classe deve ser escrito no singular.
ES CI Classe Injustificada A especificação de requisitos não a requer explicitamente.
MI CD Classe Dispensável Uma classe é dispensável se:
• Não tem atributos, nem operações, nem associações;
• Tem atributos, operações e/ou associações, mas estas deviam estar incluídas em outra classe (atenção a associações de 1 para 1) MI CAD Classe Associativa Dispensável Quando ocorre uma cardinalidade não múltipla (i.e. 0-1 ou 0..1) de uma
classe participante numa associação, então não se justifica a existência de uma classe associativa.
MI GF Generalização em Falta Quando um conjunto de classes tiver atributos, operações e/ou associações comuns, então deve criar-se uma classe que generalize as anteriores.
MI GE Generalização Errada
MI EI Especialização Injustificada As classes descendentes devem conter atributos, operações e/ou associações que as distingam das classes ascendentes.
MI EE Especialização Errada Uma subclasse tem de ser compatível com a(s) superclasse(s). Por outras palavras, devemos poder utilizar um objecto da subclasse onde fosse esperado um objecto da(s) classe(s) ascendente(s)
MI HC Especialização Circular A classe A herda, directa ou indirectamente de outra classe B e vice- versa.
ES CE Cardinalidade Errada A cardinalidade da associação está errada
MI CF Cardinalidade em Falta A cardinalidade da associação não foi indicada; note-se que a omissão equivale a cardinalidade “1”.
MI PF Papéis em Falta Os papéis (roles) de cada classe na associação não foram indicados.
MI OF Operações em Falta Uma classe que não tem operações não tem as suas responsabilidades bem definidas.
MI AF Atributos em Falta Os objectos de uma classe que não têm (e que não herdam) atributos não têm estado.
MI AD Atributo Derivado O atributo é redundante porque o seu valor pode ser determinado a partir de informação já existente. As redundâncias levam à inconsistência de informação. Um atributo derivado deve ser substituído por uma operação.
MI AR Atributo Redundante O atributo é redundante porque:
i) já existe uma associação que permite obter o seu valor
ii) existe um atributo com o mesmo nome numa classe ascendente.
MI AA Atributo em vez de Associação Em vez do atributo deveria existir uma ligação com uma classe existente no modelo (de N para 1, provavelmente)..
MI AC Atributo do tipo Conjunto Um atributo destina-se a representar uma porção elementar de informação, não um conjunto de informação do mesmo tipo.
Provavelmente a classe necessita de ser factorizada numa agregação ou composição.
Erros em Diagramas de Estados
TIPO CÓD DESIGNAÇÃO DESCRIÇÃO
MI CD Classe Desconhecida O diagrama representa os estados dos objectos de que classe?
MI AD Atributo(s) Desconhecido(s) Que atributo(s) guarda(m) o estado modelado?
ES EI Estado Injustificado A especificação de requisitos não o requer explicitamente.
VM EIF Estado Inicial em Falta - VM EID Estado Inicial Duplicado - VM EFF Estado Final em Falta - VM EFD Estado Final Duplicado - MI ECF Estado Composto em Falta - MI ECE Estado Composto Errado -
MI VRF eVento Recebido em Falta Falta a causa do despoletar da transição MI CF Condição de Guarda em Falta
MI AF Acção em Falta
MI VEF eVento Enviado em Falta A transição despoleta um outro evento (provavelmente em outra classe)
MI AEF Acção de Entrada em Falta Deve-se usar nos casos em que todos os eventos que chegam a um estado fazem uma determinada acção
MI ASF Acção de Saída em Falta Deve-se usar nos casos em que todos os eventos que abandonam um estado fazem uma determinada acção
VM AI Acção Errada A acção não corresponde a uma operação disponibilizada na interface da classe. Este é um erro de rastreabilidade.
Erros em Diagramas de Sequência (S) e de Colaboração (C)
TIPO CÓD DESIGNAÇÃO DESCRIÇÃO DIAG
VM CD Caso de utilização / Cenário Desconhecido
O diagrama não explicita qual o cenário que pretende descrever
S/C
ES GS Granularidade Superior ao desejável
Falta detalhe na descrição do cenário S/C
VM AD Actor Desconhecido S/C
VM CD Classe Desconhecida A classe não existe no diagrama de classes S/C MI FF Fluxo de controlo em Falta Uma mensagem despoleta a execução de uma operação, a
qual tem um fluxo de controlo
S
MI RF Retorno em Falta S/C
MI RI Retorno Errado S/C
VM OD Operação Desconhecida A operação não está definida no diagrama de classes S/C
MI PF Parâmetros em Falta S/C
MI MF Mensagem em Falta S/C
VM AA Actor interage com Actor Não se representam mensagens trocadas entre actores S/C VM OR Objectos Repetidos Cada objecto deve ter um identificador único S/C
MI NF Numeração das mensagens em Falta
Num diagrama de colaboração sem a numeração das mensagens, perde-se a componente temporal
C
MI NI Numeração Incorrecta das mensagens
C
MI AF Aninhamento das mensagens em Falta
C
MI OF Objecto em Falta S/C
MI SI Sequência Incorrecta A sequência temporal é incorrecta S/C