Qual é a melhor maneira de gerar um diagrama UML a partir do código fonte do Python? [fechadas]

258

Um colega está procurando gerar diagramas de classe UML a partir de pilhas de código-fonte Python. Ele está interessado principalmente nos relacionamentos de herança e levemente interessado nos relacionamentos de composição, e não se importa muito com os atributos de classe que são apenas primitivos do Python.

O código fonte é bem direto e não é tremendamente mau - ele não faz nenhuma mágica metaclasse, por exemplo. (É principalmente dos dias do Python 1.5.2, com algumas aspersões de coisas 2.3ish "modernas".)

Qual é a melhor solução existente para recomendar?

Mike Pirnat
fonte
29
Os mods não acharam essa pergunta construtiva. Eu (e muitos outros que gostamos disso) achei útil. E daí? isso não é um negócio maior do que isso não ser "construtivo"!
yati sagade
13
Não construtivo, pois solicitará debates, argumentos, discussões ?????? Não é isso que queremos? Esta é uma questão muito relevante ..
Bhushan
2
@yatisagade se você notar que foi fechado, não foi excluído (e com isso muitos upvotes provavelmente nunca poderão ser excluídos). Fechar significa apenas que não é possível obter novas respostas.
precisa saber é o seguinte
7
@Bhushan Não, não queremos discussão, queremos pares de perguntas e respostas que tenham respostas claras. Não se trata de uma questão interessante ou útil, é uma questão de estar no tópico para SO. Certamente você concorda que "Qual é o melhor editor?" (obs emacs) não é uma pergunta construtiva, essa pergunta é exatamente do mesmo molde.
tacaswell
@tacaswell Algumas discussões são muito relevantes quando se trata de refinar perguntas para um formato de perguntas e respostas.
user32882

Respostas:

129

Você já deve ter ouvido falar do Pylint, que ajuda a verificar estaticamente o código Python. Poucas pessoas sabem que ele vem com uma ferramenta chamada Pyreverse que desenha diagramas UML a partir do código python que lê. O Pyreverse usa o graphviz como back-end.

Nicolas Chauvat
fonte
você sabe como visualizar métodos privados que começam com "_"
gustavz
1
Infelizmente, os diagramas de pacotes pireversos são enormes, pois tudo é colocado horizontalmente (mais uma limitação do graphviz, mas ainda assim). Não é útil para inclusão em documentos.
oarfish
@oarfish como solução alternativa, você pode escolher os módulos que deseja incluir e criar vários gráficos separados.
Jjmontes # 11/19
95

O Epydoc é uma ferramenta para gerar documentação da API a partir do código fonte do Python. Ele também gera diagramas de classes UML, usando o Graphviz de maneiras sofisticadas. Aqui está um exemplo de diagrama gerado a partir do código fonte do Epydoc.

Como o Epydoc realiza a introspecção de objetos e a análise de fontes, ele pode reunir mais informações sobre analisadores de código estático, como o Doxygen: ele pode inspecionar uma quantidade razoável de classes e funções geradas dinamicamente, mas também pode usar comentários ou seqüências de caracteres não atribuídas como fonte de documentação, por exemplo para variáveis ​​e atributos públicos de classe.

piro
fonte
Existe alguma maneira de exibir gráficos vetoriais em vez de gifs? Não encontrei nenhuma documentação sobre isso e os gráficos são bastante inúteis para outra coisa senão o documento html.
oarfish
3
Atualmente, epydocparece incapaz de gerar gráficos. Confira este relatório de bug .
Luís de Sousa
14
não funciona com python 3
tomsv 15/03/17
23

Verifique esta lista de sete ferramentas uml para python

Jordi Cabot
fonte
2
Minha ferramenta UML de código aberto Pynsource pynsource.com mencionada na página acima sofreu muitas alterações de versão desde que foi mencionada. Agora ele analisa Python 3, tem zoom, layout, suporte a renderização ASCII UML e PlantUML. Pynsource também é, até onde eu sei, a única ferramenta UML que reconhece atributos de instância do Python (não apenas atributos de classe). Isso significa que expressões como self.myattr resultarão em um atributo apropriado "myattr" na classe UML resultante. Binários prontos para execução estão disponíveis para Mac, Windows, Ubuntu 18 e 16 - assim como um repositório Github de código aberto.
abulka
8

Certas classes de programas bem comportados podem ser esquematizadas, mas no caso geral, isso não pode ser feito. Objetos Python podem ser estendidos em tempo de execução e objetos de qualquer tipo podem ser atribuídos a qualquer variável de instância. Descobrir para quais classes um objeto pode conter ponteiros (composição) exigiria uma compreensão completa do comportamento em tempo de execução do programa.

Os recursos de metaclasse do Python significam que o raciocínio sobre a estrutura de herança também exigiria uma compreensão completa do comportamento em tempo de execução do programa.

Para provar que isso é impossível, você argumenta que, se esse diagramador da UML existisse, você poderia usar um programa arbitrário, converter instruções "halt" em declarações que impactariam o diagrama da UML e usar o diagramador da UML para resolver o problema da parada, o que, como sabemos, é impossível.

Andru Luvisi
fonte
8
Algumas coisas boas, mas a renúncia à mão para resolver as ruínas. Casos patológicos não são o problema aqui. Bem-comportado é suficiente.
Ddaa 03/11/08
O que você quer dizer com "renúncia à mão"? Não escrevi as provas completas, mas forneci informações suficientes para que qualquer pessoa que tivesse visto provas semelhantes pudesse criá-las, uma para composição e outra para herança.
Andru Luvisi
14
Aqui está uma analogia: diff / patch pode falhar de várias maneiras diferentes, algumas delas triviais. Ainda é muito útil em muitos casos do mundo real. Em casos razoáveis, a diagramação de herança é trivial. A delegação é mais complicada, mas possível por inferência de tipo dentro dos limites de um pacote.
Ddaa 03/11/08
7

Se você usa eclipse, talvez PyUML . Ainda não usei.

David Arcos
fonte
1
Essa é uma sugestão muito boa, mas, no site do projeto PyUML, noto que eles ainda não oferecem suporte ao Eclipse 3.4 (Ganymede). Estou ansioso para tentar quando eles resolverem isso.
Bill Karwin
Você conseguiu trabalhar com o PyUML com 3.4?
precisa saber é o seguinte
2
O último confirmado para este projeto data de 2009. Ele não aparece no Marketplace e o Eclipse não pode instalá-lo a partir do .ziparchive.
Luís de Sousa
7

Vale mencionar Gaphor . Uma ferramenta de modelagem / UML em Python.

Ali Afshar
fonte
5

Umbrello também faz isso. no menu, vá para Código -> importar projeto e aponte para o diretório principal do seu projeto. então ele reverte o código para você ...

Hosane
fonte
você sabe de uma maneira de fazer Umbrello gerar o diagramm classe completa (e as relações entre eles, e não apenas as classes por si - não me lembro como esse diagrama é chamado)
Vlad-ardelean
2
AAhh, você precisa importar os arquivos e, quando você arrasta e solta classes na área de desenho, as conexões são adicionadas automaticamente.
Hosane
5

O vipera é um pequeno designer de aplicativos e uml está incluído. Você pode vê-lo em:

vipera

Cumprimentos.

Ángel Luis
fonte
4

A SPE IDE do possui um criador UML integrado. Basta abrir os arquivos no SPE e clicar na guia UML.

Não sei o quão abrangente é para suas necessidades, mas não requer downloads ou configurações adicionais para usar.

crystalattice
fonte
infelizmente ele parou de se desenvolver, mas ainda funciona aqui! (2013)
Abdelouahab
4

O Enterprise Architect da Sparx realiza uma ida e volta do código Python. Eles têm uma edição de teste gratuita por tempo limitado.

chimpanzé
fonte