Fale sobre como ler o código-fonte

   Este artigo usa a leitura de código-fonte aberto como um exemplo para falar sobre como ler código-fonte, especialmente para sistemas de grande escala, incluindo como começar rapidamente e como lidar com isso de forma eficiente. Pode ser expandido em métodos de leitura de código; métodos de depuração de software e habilidades técnicas; métodos de otimização de software e habilidades técnicas. O conteúdo relacionado será adicionado mais tarde.

   Primeiro, alcance três pontos de compreensão:

   1 A quantidade de informações que o cérebro humano pode processar é limitada e as informações contidas em um programa podem facilmente exceder o limite de processamento do cérebro humano. O famoso ditado de Dijkstra cerca de 10 elevado à 9ª potência.

   2 As pessoas precisam perceber as coisas de diferentes perspectivas de abstração, hierarquia e estrutura. Essa é a característica do cérebro.

   3 As pessoas têm tempo e energia limitados. Os sistemas modernos de grande escala podem facilmente atingir o nível de um milhão de linhas, por isso é necessário dominar os métodos e métodos em vez de usar a força bruta.

 

Um, aprender software de código aberto

   Esta parte usa o aprendizado de software de código aberto como exemplo para apresentar maneiras e meios de lidar com sistemas de grande escala com eficiência.

   <1> Compreender o histórico do desenvolvimento de software

   Entenda o plano de fundo para se concentrar no software. Só então haverá uma meta geral.

   <2> Siga o site oficial do software

   Muitos softwares de código aberto têm sites oficiais que publicam informações oficiais, descrições de interface, precauções, revisões históricas, etc. sobre o software de código aberto. Por meio do site oficial, você pode ter uma compreensão mais abrangente do histórico, da arquitetura de design, das funções atuais e dos planos de melhoria subsequentes do software. Isso é muito importante para "entender" o código.

   <3> A versão mais recente e outras informações

   Apresente a versão atual do software e todas as versões antigas que foram mantidas. A razão para a introdução da versão anterior é porque a versão inicial é geralmente a mais simples, portanto, partir da versão inicial que implementa as funções básicas também é um meio de aprendizado rápido: porque o código dessas versões parece ser mais simples. Seguindo a versão inicial selecionada, e então com base nos dados históricos da evolução da versão, podemos não apenas entender algumas funções estendidas ou funções avançadas mais facilmente, mas também entender o código próximo à versão atual. Se você começar com a versão mais recente desde o início, os recursos são os mais completos. Além disso, também pode ser a mais estável, com menos bugs e o código mais limpo. No entanto, quando confrontado com um grande número de funções estendidas ou funções avançadas, especialmente Logicamente, quando o código para uma função específica não é projetado, mas inserido na implementação à medida que a função evolui, é fácil sentir-se como uma nuvem e também pode afetar o entusiasmo e o interesse de continuar aprendendo porque é muito complicado. Portanto, é necessário entender o processo de evolução de cada versão, e esse é o objetivo.

   <4> Objetivo do software

   Esta parte descreve de forma simples e intuitiva para que o software é usado, como usá-lo e algumas demonstrações do efeito.

   <5> Conhecimento básico

   Apresente o conhecimento básico de campos relacionados envolvidos neste software e prepare-se para as pesquisas e estudos a seguir.

   <6> Arquitetura de software

   Apresente a estrutura geral do software, que pode incluir compreensão oficial e pessoal, mas indicará de onde vem.

   <7> Estrutura de dados central

   Apresente as principais estruturas de dados usadas. Como são o núcleo, não estarão muito envolvidas.

   <8> Processo

   Apresente como o software funciona de acordo com o processo de chamada de função.

   <9> Habilidades de programação e conceitos que valem a pena aprender

   Apresente algumas habilidades de programação e conceitos de design usados ​​no software, aprofunde seu entendimento e melhore suas próprias habilidades.

 

   Em segundo lugar, palavras extras sobre a arquitetura

   A ordem dos pontos acima é basicamente organizada de acordo com o processo normal de compreensão humana, e presume-se que o leitor basicamente não possui nenhum conhecimento básico relevante. Em geral, todo o processo pode ser dividido em três partes: background, software e expansão. O primeiro está relacionado ao histórico, incluindo conhecimento prévio, propósito do software e conhecimento básico. Em primeiro lugar, apresente o conhecimento de base, para que os leitores entendam o fundo de desenvolvimento deste software; em segundo lugar, a finalidade do software, esclarecer para que o software é usado e o processo de uso básico, para que os leitores possam formar um conceito macro ou estrutura em para que a leitura subsequente seja mais objetiva; além disso, conhecimentos básicos, apresentar os conhecimentos básicos necessários para compreender o assunto e o software, incluindo conceitos básicos, o significado de algumas abreviaturas, e assim por diante. Para leitores que têm um bom entendimento deste conhecimento, as primeiras partes podem ser puladas ou apenas uma olhada. A segunda parte inclui arquitetura, estrutura de dados e processo. Desde o início da arquitetura de software, o núcleo do software está envolvido. A primeira é a arquitetura de software, para que os leitores entendam os conhecimentos básicos introduzidos e os objetivos a serem alcançados, como o software está estruturado para atingir esse propósito (função de ponte, conversão completa do espaço de solução, do mundo real para o mundo do software ) Em seguida, vem a estrutura de dados central. Pode-se dizer que a estrutura de dados é o núcleo para compreender e dominar o software de código aberto, portanto, a estrutura de dados central é o núcleo do núcleo. Cada item na estrutura de dados está na verdade relacionado a cada elemento ou parte do elemento introduzido no conhecimento básico. Embora a estrutura de dados seja uma estrutura relativamente solta, relativamente falando, cada elemento em uma estrutura de dados Elementos ainda tem um certo grau de relevância , portanto, o domínio dessas estruturas de dados não é apenas uma compreensão profunda dos conceitos básicos do conhecimento básico, mas também uma certa compreensão da relevância entre esses conceitos básicos. A próxima etapa é o processo. Falamos sobre o programa como um algoritmo mais uma estrutura de dados. Em certo sentido, o processo tem as características de um algoritmo. Combinado com a arquitetura, não veremos apenas como o software conecta essas estruturas de dados, mas o mais importante, o objetivo final é alcançado: como o software funciona. Com as duas partes acima, pode-se dizer que o objetivo é basicamente alcançado. Mas um software de código aberto não só existe, mas também é usado pela maioria das distribuições, incluindo Ubuntu e Fedora O software que é aceito como padrão é selecionado como o software de funções relacionadas quando o sistema é instalado e pode continuar a se desenvolver. Há novas versões sendo lançadas continuamente, que devem ter suas próprias características, e as habilidades de design e design os conceitos são uma das características. Portanto, depois de entender o software, é necessário tirar essas duas partes como uma extensão para discutir separadamente. Esse é o conteúdo da terceira parte da extensão. Para o conteúdo desta parte, ainda é necessário saboreá-la com atenção.Também é uma forma de melhorar rapidamente suas capacidades de design.

 

   Três, pegue o Linphone como exemplo para falar sobre como ler o código-fonte

   Desprezo pessoal, bem-vindo para fazer um tijolo.

   Esta seção usa o Linphone como exemplo para ilustrar como ler o código-fonte de um excelente software de código-fonte aberto. O que é registrado aqui são apenas os sentimentos pessoais durante a leitura do código-fonte do Linphone, não adequado para todos. Cada um tem sua própria maneira de receber coisas novas, e os hábitos aqui também contêm um significado mais rápido. Portanto, todo o conteúdo a seguir é apenas para sua referência no processo de leitura do código-fonte, se puder ajudá-lo, o objetivo será alcançado.

   1 Reconheça as funções do software.

   Antes de aprender um software, acho que é um passo básico entender sua função. Se você não entende as funções do software, de que pesquisa e aprendizado está falando? Claro, isso é apenas para aprendizado de software, não incluindo outras indústrias. Conhecer a função do software mencionado aqui significa que você deve saber o que o software faz.

   2 Execute o software e sinta-o.

   3 Vá para o site oficial para ver as informações relacionadas ao software.

   4 Encontre ou desenhe um diagrama de arquitetura de software basicamente correto.

   Se o site oficial já tem um diagrama de arquitetura do software, você está com sorte. Você pode começar rapidamente entendendo a arquitetura geral do software.

   5 Divida o software em blocos de acordo com os módulos ou funções.

   Mesmo que a tecnologia da informação esteja tão avançada agora, o processo de compreensão das coisas pelas pessoas mudou de simples para complexo, e essa lógica básica nunca mudou. Se você começar a estudar todas as funções do software de uma vez, acho que nem mesmo um gênio pode fazer isso. Portanto, precisamos dividir o software em pequenas partes e aprender parte por parte.Isso é chamado de divisão em partes.

   6 No processo da etapa anterior, adicione a depuração de software, se possível.

   A maneira mais fácil é adicionar algumas informações de impressão ao código e, em seguida, executar o software e examinar a impressão para entender o fluxo do software. Através desta etapa, você terá uma experiência mais específica de todo o processo de software.

   7 Conexão serial integrada.

   Quando você entende os módulos básicos importantes, pode senti-los juntos. Neste momento, você deve ter uma compreensão e compreensão claras de todo o processo de software. Isso é chamado de transformar zero em um todo.

   8 Considere tarefas específicas como ponto de partida e obtenha um entendimento profundo.

   Depois de compreender melhor todo o processo de software, você pode considerar modificar ou adicionar algumas funções para melhorar o software e aprofundar ainda mais sua compreensão do software.

   9 Aplique o que você aprendeu.

   Aprender um software não é apenas entender a função do software, aprender o fluxo do software, mas também aplicar o que você aprendeu e aplicar as excelentes ideias e métodos de codificação em seu próprio desenvolvimento para melhorar.

   10 Esteja totalmente preparado psicologicamente e siga em frente.

   Para aprender um software de código aberto, você precisa ter os pés no chão no final, passo a passo, levar o seu tempo e não ser impaciente. De um modo geral, a menos que seja para implementar um problema de estrutura de algoritmo, um pacote de software com funções práticas não pode ser feito por um arquivo fonte e um arquivo de cabeçalho como fizemos na escola. Existem dezenas de centenas. Este arquivo é normal, mas podemos ' t se intimidar com tantos arquivos, devemos tratá-lo como um tigre de papel, não tenha medo dele. Isso não quer dizer que precisamos examinar cada arquivo um por uma função, mas entender a estrutura geral baseada em módulo por módulo. Por outro lado, os estilos de escrita de muitos softwares de código aberto são mais convencionais e comumente chamados, e há uma certa similaridade. Se você leu mais códigos de software de código aberto, terá uma ideia mais profunda sobre isso. Portanto, para pessoas com uma certa base, geralmente por meio de nomenclatura, layout e outras informações, elas terão uma percepção psicológica preliminar da função. Para os novatos, isso pode ser um pouco difícil, mas não importa, esse é o processo pelo qual você deve passar para aprender o software de código aberto, e também é um processo de digestão e absorção. O método pode fazer com que você evite desvios e tenha uma direção mais correta ou reta, mas o processo de masterização leva tempo para se acumular.

   11 Verificação modular.

   Se possível, você pode executar o teste separadamente dos módulos que podem ser executados. Mesmo que não seja um módulo separado, se esta parte do pacote for relativamente regular, independente, pequena em acoplamento e complexa em lógica, você pode compilá-la separadamente e adicionar informações de depuração para ver o resultado. Desta forma, você pode ver a função da interface de forma relativamente rápida e também é conveniente acompanhar para ver a implementação específica. Por exemplo, quando o autor está trabalhando em um projeto de produto de gateway de mídia, o módulo de firewall está envolvido e há uma interface para julgar o intervalo de endereço IP de entrada. A implementação interna é mais complicada e há operações iterativas. Então, aceitei separadamente para compilação e execução, e descobriu que as funções específicas estão corretas.O intervalo de endereço IP inserido produz todos os endereços IP legais no intervalo. Portanto, para esta etapa, podemos executar um projeto de teste a qualquer momento enquanto examinamos o código-fonte, que é usado para adicionar interfaces lógicas complexas e computacionais para executar testes separadamente. Isso parece levar muito tempo, mas na verdade economiza muito tempo. Olhar diretamente para o código parece ser a maneira mais rápida, mas há problemas como falta de inteligência, confusão, confiança e repetição por um tempo. Na verdade, muito tempo foi perdido.

   12 Leitura orientada por teste.

   Cada módulo deve fornecer uma demonstração de teste, que também é uma grande desvantagem do software livre, ou seja, não existe um programa de teste. Isso está relacionado à geração de software de código aberto, porque o software de código aberto geralmente é executado por uma ou várias pessoas e o foco está na implementação de funções. É claro que fatores externos, como menos desenvolvedores participantes, intermitência e menos tempo, são alguns dos motivos. Além disso, o código aberto e a conexão gratuita e nenhum suporte de acompanhamento são os principais motivos. Para software comercial, geralmente é desenvolvido por várias pessoas, e a divisão do módulo será relativamente clara.Quando o módulo é concluído, uma demonstração também é fornecida, incluindo o próprio teste do módulo. Além disso, como software comercial cobrado, estabilidade e manutenção precisam ser garantidas, suporte de acompanhamento é necessário e até mesmo algumas interfaces podem ser fornecidas aos parceiros para acelerar o progresso do desenvolvimento e reduzir as dificuldades de desenvolvimento. Esses fatores também contribuem para a modularização do software comercial. O teste está relativamente completo. Para o envio de revisão contínua, o teste de regressão também é necessário para reduzir efetivamente a pressão de teste e acelerar o processo de verificação. Em geral, muitos métodos teóricos de engenharia de software não são total e claramente refletidos no software de código aberto. Este ponto requer atenção adicional ao ler e testar o software de código aberto.

Acho que você gosta

Origin blog.csdn.net/wwwyue1985/article/details/112726423
Recomendado
Clasificación