Melhor maneira de estudar e aprender código novo

Saudações a todos,

Minha dúvida é de certa forma bem geral, apesar de ser sobre um assunto mais avançado.
Estou com um pepino enorme aqui. Iniciamos um novo projeto que utilizará um sistema open-source gigantesco (no total existem 3913 arquivos .java). Este sistema contém diversas funcionalidades, mas inicialmente nosso projeto não utilizará nem 10% do que este sistema oferece. É claro que mesmo estes 10% são de grande valia, e é por isso que foi tomada a decisão de utilizar este sistema.

Como é praticamente impossível estudar o fonte inteiro para ter uma boa noção do que acontece, gostaria de levantar a seguinte questão: Qual é a melhor maneira de se estudar um código novo???
Inicialmente pensei na possibilidade de executar o sistema em modo debug no Eclipse e ir monitorando a dinâmica do código. Seria excelente se tivessemos uma ferramenta que gravasse automaticamente um log do Debug. Alguém conhece alguma ferramenta que faça isto? No caso, mesmo sem setar os break-points esta ferramenta iria gravando todas as classes e métodos pelos quais o código passou.

Uma outra dúvida é a respeito de ferramentas de Engenharia Reversa para gerar documentação, já que este sistema é muito pobre em sua documentação. Alguém sugere alguma ferramenta para isto?

E no mais, se alguém tiver alguma sugestão, ou se alguém já passou por situação parecida, por favor me deem algumas idéias.

Muito obrigado

Você pode verificar quais são as linhas de código que foram executadas em um teste normal com o Emma ( http://emma.sourceforge.net/ ) ou então, se você rodar seu código sob o Eclipse, o EclEmma ( http://www.eclemma.org/ ), que é o Emma adaptado para o Eclipse.

Ok, instalei esta ferramenta no Eclipse. Muito obrigado, vai me ajudar bastante.

Por acaso não existe alguma ferramenta que faça alguma coisa parecida com um Diagrama de Estados, para que su possa visualizar determinados “percursos de código”??

E quanto a ferramentas para engenharia reversa de modelagens, alguma sugestão?

Muito obrigado

Se você não quiser gastar um tostão com ferramentas, pode tentar importar seu projeto no JUDE ( http://jude.change-vision.com/jude-web/product/community.html ). A versão que lhe apontei é de graça; você pode tentar um trial de uma versão paga.

http://jude-users.com/en/modules/xhnewbb/viewtopic.php?topic_id=1053 - acho que ele mostra apenas os diagramas de classes.

Cara, eu acho que gerando diagramas vc num vai conseguir entender muita coisa.
O melhor jeito é metendo a cara no código mesmo e lendo ele.
A idéia do Debug pra entender o fluxo também é uma boa.

Boa sorte.

Seguinte…estou de acordo com as idéias dos camaradas.

Mas vou lhe dar uma dica diferente:

Um sistema GERALMENTE (principalmente estes com esta quantidade incrivel de classes) fazem inclusão, alteração, exclusão, consulta e disponibiliza alguns serviços baseados em parametros configuráveis.

Partindo desta idéia, vc não precisa ler todas as linhas de código do sistema, a não ser que vc queira também entender os detalhes do negócio. O próximo passo é escolher uma funcionalidade supostamente simples e detectar o tipo de arquitetura aplicada. Por exemplo, se vc perceber que foi utilizado EJB 1.2 as chances de terem utilizado aquela estrutura composta pelas camadas de patterns sugerida pela SUN são enormes; se isso se confirmar vc já terá uma idéia geral do funcionamento da arquitetura.
Depois disto, vc faz um esforço para verificar como os padrões foram utilizados, muitas vezes alguns patterns / camadas são eliminadas para simplicar / ferrar as coisas para vc.
Quando vc notar que já está dominando os aspectos arquitetonicos do sistema vc começa a ampliar seu campo de visão buscando detalhes e padrões dos algoritmos e fluxos.

Vc, na minha opinião, não precisa se preocupar com o sistema inteiro inicialmente porque tudo que vc estudar em uma “amostra” do sistema provavelmente irá se repetir pelo sistema inteiro; claro que haverá variações, mas normalmente são poucas e quando ocorrerem vc aplica a velha técnica novamente.

flws

Concordo com a opinião do fantomas. Considerando que o sistema é bem feito tudo o que você precisa realmente conhecer são as interfaces que você vai precisar usar, nada além disso.
Ler o javadoc das mesmas para não cair em armadilhas de métodos com nomes não muito fluentes e coisa do tipo.