Compreender a Grande, indocumentado Conjunto de código-fonte? [fechadas]

StackOverflow https://stackoverflow.com/questions/684251

  •  22-08-2019
  •  | 
  •  

Pergunta

Eu sempre fui surpreendido pelo Wine . Às vezes eu quero cortar nele, corrigir pequenas coisas e geralmente entender como ele funciona. Então, eu baixar o código fonte Vinho e logo depois que eu sentir-se oprimido. A base de código é enorme e - ao contrário do Kernel Linux -. Quase não há guias sobre o código

Quais são as melhores práticas para a compreensão de uma enorme base de código tal?

Foi útil?

Solução

Com uma base de código complexo o maior erro que você pode fazer é tentar ser um computador. Obter o computador para executar o código e usar um depurador para ajudar a descobrir o que está acontecendo.

  1. descobrir como compilar, instalar e executar sua própria versão de vinho a partir do código fonte existente.

  2. Saiba como depuração (por exemplo, uso GDB) em uma instância em execução de sua versão do Wine.

  3. Executar Wine sob o depurador e fazer porque é para demonstrar o comportamento indesejado.

  4. A parte divertida:. Encontrar onde o caminho de execução de código vai e começar a aprender como tudo vai junto

Sim, lendo lotes e lotes de vontade código ajuda, mas o compilador / depurador / computador pode executar um código muito mais rápido do que você.

Outras dicas

Um professor uma vez disse-nos para comparar tal situação com escalar uma montanha. Você pode estar ouvindo alguém que fez isso e diz-lhe como é que olhar para fora para o país. E você acredita sem hesitação que isso é uma visão espetacular.

No entanto, você tem que começar a subir-se para a compreensão real o que a vista do topo é como.

E não é tão importante para subir todo o caminho até o topo. Pode ser perfeitamente suficient apenas para atingir uma altura justo acima do nível do chão.

Mas não tenha medo de escalada início. A vista é sempre a pena qualquer esforço.


Esta sempre foi uma boa analogia para mim. Eu sei que esta pergunta era mais sobre dicas específicas sobre como lidar de forma eficiente com bases de código, uma vez que começou a subir. Mas, no entanto, ele imediatamente me fez lembrar de nossas aulas de física naquela época.

(Esta é uma resposta que eu postei a uma pergunta um tempo atrás. Eu modifiquei um pouco para se ajustar a esta pergunta.)

A experiência tem me mostrado que há 3 grandes objetivos que você tem quando aprendendo um sistema legado:

  1. Saiba o que o código é suposto fazer.
  2. Saiba como ela faz.
  3. (crucialmente) Saiba por que deles faz da maneira que faz.

Todos os três dessas peças são muito importantes, e há alguns truques para ajudá-lo a começar.

Em primeiro lugar, resistir à tentação de apenas ctrl-clique (ou o que quer que seus usos IDE) o seu caminho em torno do código para entender tudo. Você provavelmente não será capaz de manter tudo em perspectiva em sua mente dessa forma, especialmente quando cada linha de força você a olhar para várias outras classes, a fim de entender o que é, então você precisa ser capaz de realizar vários níveis da empilhar em sua cabeça.

documentação Leia sempre que possível; que normalmente ajuda a obter rapidamente um quadro mental, sobre a qual construir tudo o que se segue.

casos de execução de teste sempre que possível.

Do não tenha medo de perguntar a alguém que sabe se você tem uma pergunta. Concedido, você não deve desperdiçar o tempo dos outros com consultas inane, mas se há algo que você simplesmente não entendo (isso é especialmente verdadeiro com perguntas mais conceituais como: "Não faria muito mais sentido para implementar isso como um ___" ou algo assim), é provavelmente vale a pena encontrar a resposta antes de estragar algo e não sei porquê.

Quando você finalmente começar a leitura do código, começam em um lugar lógico "principal" e de lá ir. Não basta ler o topo código para baixo, ou em ordem alfabética, ou qualquer coisa (esta é provavelmente óbvio).

A melhor maneira de se familiarizar com uma grande base de código é mergulhar em. Muitos projetos têm uma lista de tarefas fáceis que precisa ser feito, e eles são geralmente reservados para ajudar a aliviar as pessoas em. Você deve encontrar e trabalhar em Alguns desses; você vai aprender muito sobre o contorno código geral e estrutura, contribuir com o projeto, e obter um retorno fácil que vai ajudar a incentivá-lo a assumir tarefas maiores.

Como a maioria dos projetos, o vinho tem bons recursos disponíveis para seus desenvolvedores; IRC, wiki, lista de discussão, e guias / súmulas. Com a maioria das bases de código assustadores, não é tão assustador após as primeiras correções. VINHO é verdadeiramente grande, e muito parecido com o kernel, eu duvido que haja qualquer perito em todos os sistemas; não me sinto como você precisa ser. Começar a trabalhar em algo que importa para você e levá-la de lá.

Eu comecei alguns remendos ao vinho eu mesmo, e é uma comunidade boa e boa estrutura. Há muitas mensagens de depuração muito útil, e é um projeto muito legal para trabalhar, de modo que ajuda você atingi-lo mais tempo também.

Todos nós apreciamos sua coragem e vontade de ajudar com WINE (ele precisa). Obrigado e boa sorte.

Dig em. Pense em uma pergunta que você gostaria de ter respondido, e tentar encontrar a resposta. Quando você se cansar de ler código, vá ler a lista dev mailing, a href="http://www.winehq.org/site/docs/winedev-guide/index" rel="nofollow guia do desenvolvedor , ou o wiki .

Infelizmente, não há nenhuma estrada real para a compreensão de uma grande base de código. Se você gosta desse tipo de coisa (eu) você está em algum divertimento. Se não, livros guia não irão realmente ajudar, para que não são realmente muito pior.

Procure uma característica peculiar você estiver interessado em melhorar. Procurar sua implementação. Uma vez que você encontrou, puxar que a palha e todo o resto irá seguir.

A melhor maneira é através de comentários. Eu estou sendo irônico, como você entender minúsculos pedaços dos comentários besta add para que possa seguir seu rastro. Os outros desenvolvedores também vai se divertir se você adicionar as guias ausentes no código.

Tente implementar alguma pequena mudança pequena no código, algo que será visível para você. Isso pode ser descobrir uma forma viável para a saída de depuração declarações (e descobrir onde aparece a saída), pode-se alterar o tamanho padrão de janelas ou cor de desktop, ou algo assim. Uma vez que você pode fazer algo acontecer na base de código, você arranhou a superfície de compreender e pode começar a se mover em direção as coisas mais complicadas. Nesse ponto, selecione uma meta de algo um pouco mais útil que você gostaria que o código para fazer, e implementar isso. Ou confira bug tracker do projeto e olhar para algo pequeno para começar.

Documento como você vai, e testes de unidade de gravação que você vá, e refatorar que você vá. Quando você descobrir o que uma rotina faz, comentá-lo !!

Como já foi sugerido, cavar! Leia toda a documentação disponível que possa absorver. Então veja se você pode encontrar outras pessoas que estão interessadas ou conhecedor e aprender com / delas. Ela ajuda a ter pessoas para trocar idéias de e fazer perguntas.

Para código-fonte C, uma vez que você começar uma sensação para o que áreas do código que você gostaria de trabalhar, gerar ctags e cscope bancos de dados para esse código. Estas ferramentas tornam muito mais fácil para saltar ao redor e entender o código. Muitos editores de texto (um exemplo é gvim ) tem suporte para ctags e cscope para que possa saltar facilmente.

(aviso: sem vergonha de marketing à frente)

Para os desenvolvedores Java usando Eclipse, há nWire . É um plugin do Eclipse para navegar e visualizar grandes bases de código.

Uma boa maneira de entender um grande sistema é dividi-la em suas partes constituintes e foco em caminhos específicos através da aplicação.

O depurador é seu amigo aqui, defina um ponto de interrupção no fio você deseja investigar, em seguida, passo através de linha por linha olhando para o que cada parte faz ... espero que ajude ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top