SchemaSpy - Ferramenta para Modelagem Literária

No post anterior Vimperator, comportamente do Vim no Firefox eu tinha mensionado que:

Parece radical, mas a produtividade aumenta, de certo modo. Não só na hora de programar e testar, sempre que edito arquivos no Vim, tento não usar o mouse. Claro que sempre vai ter alguma aplicação que vai te obrigar a usar o mouse, mas se pudermos evitar, melhor!

Eu continuo com esta idéia. Coisinha bonita é para cliente final. Desenvolvedores devem trabalhar com ferramentas que proporcionam o melhor uso do tempo possível, pois o bom profissional é aquele que esbanja do ócio, eis o fluxo:

  • Concluir as atividades rapidamente com eficácia e eficiência está diretamente ligado ao ócio, pois se ele tivesse feito algo mal feito, estaria corrigindo os bugs e não vendo vídeos no youtube.
  • Com tempo livre, o cérebro humano fica mais descansado e mais propício a receber insights/intuições para resolver problemas difíceis, que - e estes merecem - precisam de mais tempo e necessitam ser bem planejados.
  • Resolvendo problemas de forma criativa - talvez até inovadora -, faz com que se evite problemas futuros. Logo, se poupa tempo. Se poupando tempo, voltamos a cláusula anterior.

Parece utópico, mas eu acredito nisso. Eu acho que é possível. Basta saber onde conseguir ganhar tempo em atividades, automatizando com scripts, programas e etc, o tempo é consequência.

Todo Desenvolvedor Web já foi ou ainda é DBA. É impossível aprender a utilizar banco de dados sem modelar os dados. Geralmente, para isso, é utilizado alguma ferramente gráfica que auxilia na visão do modelo. Não vou citar, mas existem várias para isso.

Porém, há um detalhe que muitos não se atinaram ainda. Me dei conta disso assistindo uma palestra no FISL10, na palestra do Leandro Dutra chamada O elefante ilustrado: modelagem literária e documentação automática em PostgreSQL e outros SGBDs livres.

SchemaSpy

O que é?

É uma ferramente que varre um banco de dados e gera um documentação em HTML nevegável. Ela gera gráfico de chaves estrangeiras utilizando o GraphViz (.dot), como se fosse uma dessas ferramentas que terminam com Designer.

Esses gráficos gerados, são visivelmente bonitos e dispostos. Ou seja, não é mais necessário sofrer arrastando caixinhas de modo com que fique bem arrumado. O programa tem um bom algoritmo para organizar. O que possibilita que o DBA, ou o desenvolvedor mesmo, use este tempo para repensar uma constraint, uma foreign key, etc.

O HTML gerado também tem abas que diferenciam os conteúdos: abas para relacionamentos, abas para tabelas auxiliares, abas para listagem de colunas/tabelas, etc. Mostra os campos, o tipo dos campos, os comentários, valores em comum e as CONSTRAINTS. Ou seja, uma solução completa para documentação de bancos de dados e modelos de ER. Vem junto o jQuery, que da uns efeitos e toggleia algumas colunas das tabelas de exibição.

Onde conseguir?

O site oficial deles é http://schemaspy.sourceforge.net. Pode ser baixado de lá. Apenas o driver jdbc para o banco de dados que for ser usado deve ser encontrado separadamente.

Quem usa ArchLinux, pode baixar os repositórios do AUR. Eu mesmo sou o mantenedor do pacote, então, qualquer dúvida ou problema, comente lá que tentarei responder/resolver o mais rápido possível. O link do repositório é http://aur.archlinux.org/packages.php?ID=28022

Como usar?

Para usar é muito simples. Depois de baixar o .jar, apenas execute

$ java -jar /path/to/schemaSpy.jar --help

Ou, se você instalou o do repositório do ArchLinux, basta usar:

$ schemaspy --help

Ele vai listar os parâmetros, é bem simples. Não vou me deter a isso. Qualquer dúvida comente no post abaixo.

Um exemplo de output pode ser encontrado na própria página do SchemaSpy: http://schemaspy.sourceforge.net/sample/

Sugestoẽs

Se existe algum defeito nele, com certeza é o template. O HTML gerado não é o mais bonito. Não obstante, me parece que o template não é customizável, para isso seria necessário hackear a classe que gera o template. Mas, quem sabe não é implementado algo nas próximas versões? Quem sabe VOCÊ não implementa?

Mas bem, falando em sugestões, aqui vai algumas:

  • Integrar com a documentação do phpDocumentor, javaDoc ou outro similar.
  • Versionar a documentação gerada para avaliação de crescimento da aplicação: poder comparar como era há certo tempo atrás e como está hoje.
  • Programar os SQL's utilizando algum editor de texto, fazendo você ganhar desempenho e analisar mais facilmente para comentários, constraints, triggers, procedures e views, que são geralmente mais complexas de serem vistas em programas gráficos.

Mais alguma sugestão? Críticas? Deixem nos posts abaixo!

Comentários

[...] See the rest here: SchemaSpy – Ferramenta para Modelagem Literária [...]

[...] nisso e no comentário que recebi recentemente e inspirado pelo post de um amigo, vou fazer uma lista de coisas que proponho. São coisas simples, [...]

Gustavo, Você é foda. Entenda como elogio e verifique que grafei "você" com maiúsculas.
Gostaria de ver um "post" feito por Você com os seguintes tópicos:

1) Aprenda a programar (Nesse ítem, você escolheria a linguagem mais simples e apresentaria os fundamentos da programação, inclusive abordando a questão da afinidade mental necessária a esse tipo de atividade; convém incluir dados comprovados sobre a incapacidade de alguns para programar, caso essa incapacidade seja real.

2) Características de um programador (Aqui, Você faria um perfil completo do cara que pode pensar em ser programador. Pode elencar tudo e pode inclusive criar um teste de avaliação prévia. Trata-se de completar o que Você sinalizou no final do tópico anterior)

3) Pronto, agora Você vai criar um "beabá" da programação. Tem que ser uma coisa bem primária mesmo, um verdadeiro teste para verificar sua capacidade de adaptação a viver no subsolo do conhecimento. Pense num símio, ainda bebê. É a esse que Você está ensinando. Parta da idéia de que esse bebê sabe ler e conhece as chamadas 4 operações.

Nota: Esse pedido tem a finalidade de atender à enorme massa de retardados mentais, entre os quais me incluo, que não consegue programar e que quase foram levados ao suicídio quanto tentaram Java, entre os quais me incluo de novo.
E finalmente, ufa, significará uma colaboração sua para a sociedade dos burros, mercê de sua já comprovada capacidade, a qual pude verificar na forma sintética e enxuta do seu "post" acima. Sinal inquestionável de inteligência.
Aguardo Você e forte abraço.

Oi, Miguel.

Bom, obrigado pelo elogio, de qualquer forma. Porém não entendi muito bem o intúito do seu comentário.

Eu geralmente posto no meu blog coisas que eu julgo úteis. Ferramentas ou dicas que eu precisei ou usei em algum momento. Acredito que não caberia a mim, muito menos é a idéia do blog, postar sobre estes temas que tu propusestes.

Mas se quiser uma opinião minha: sim, existe pessoas que realmente têm alguns problemas com lógica e não conseguem ir a fundo. Mas todos são capazes e aptos a aprender uma linguagem de programação, desde que motivados e dispostos para tal.

"Sempre existirá alguém para te chamar de noob em alguma coisa", é o que reza a lenda. Eu acredito nela, é ela que me motiva a estudar.