1. 程式人生 > >如何閱讀別人的原始碼

如何閱讀別人的原始碼

        網上搜到的一篇介紹閱讀別人原始碼的方法,放在這裡,有空可以檢視。

        閱讀別人的程式碼作為開發人員是一件經常要做的事情。一個是學習新的程式語言的時候通過閱讀別人的程式碼是一個最好的學習方法,另外是積累程式設計經驗。如果你有機會閱讀一些作業系統的程式碼會幫助你理解一些基本的原理。還有就是在你作為一個質量保證人員或一個小領導的時候如果你要做白盒測試的時候沒有閱讀程式碼的能力是不能完成相應的任務。最後一個就是如果你中途接手一個專案的時候或給一個專案做售後服務的時候是要有閱讀程式碼的能力的。

  收集所有可能收集的材料

  閱讀程式碼要做的第一件事情是收集所有和專案相關的資料。比如你要做一個專案的售後服務,那麼你首先要搞明白專案做什麼用的,那麼調研文件、概要設計文件、詳細設計文件、測試文件、使用手冊都是你要最先搞到手的。如果你是為了學習那麼儘量收集和你的學習有關的資料,比如你想學習linux的檔案系統的程式碼,那最好要找到linux的使用手冊、以及檔案系統設計的方法、資料結構的說明。(這些資料在書店裡都可以找到)。

  材料的種類分為幾種型別

  1.基礎資料。

  比如你閱讀turbo c2的原始碼你要有turbo c2的函式手冊,使用手冊等專業書籍,msc 6.0或者java 的話不但要有函式手冊,還要有類庫函式手冊。這些資料都是你的基礎資料。另外你要有一些關於uml的資料可以作為查詢手冊也是一個不錯的選擇

  2.和程式相關的專業資料。

  每一個程式都是和相關行業相關的。比如我閱讀過一個關於氣象分析方面的程式碼,因為裡邊用到了一個複雜的資料轉換公式,所以不得不把自己的大學時候課本 找出來來複習一下高等數學的內容。如果你想閱讀linux的檔案管理的程式碼,那麼找一本講解linux檔案系統的書對你的幫助會很大。

  3.相關專案的文件資料

  這一部分的資料分為兩種,一個相關行業的資料,比如你要閱讀一個稅務系統的程式碼那麼有一些財務/稅務系統的專業資料和國家的相關的法律、法規的資料是 必不可少的。此外就是關於這個專案的需求分析報告、概要設計報告、詳細設計報告,使用手冊、測試報告等,儘量多收集對你以後的程式碼閱讀是很重要的

  知識準備

  瞭解基礎知識,不要上來就閱讀程式碼,打好基礎可以做到事半功倍的效果

  留備份,構造可執行的環境

  程式碼拿到手之後的第一件事情是先做備份,最好是刻在一個光碟上,在程式碼閱讀的時候一點不動程式碼是很困難的一件事情,特別是你要做一些修改性或增強性維護的時候。而一旦做修改就可能發生問題,到時候要恢復是經常發生的事情,如果你不能很好的使用版本控制軟體那麼先留一個備份是一個最起碼的要求了。

  在做完備份之後最好給自己構造一個可執行的環境,當然可能會很麻煩,但可執行程式碼和不可執行的程式碼閱讀起來難度會差很多的。所以多用一點時間搭建一個環境是很值得的,而且我們閱讀程式碼主要是為了修改其中的問題或做移植操作。不能執行的程式碼除了可以學到一些技術以外,用處有限。
  找開始的地方

  做什麼事情都要知道從那裡開始,讀程式也不例外。在c語言裡,首先要找到main()函式,然後逐層去閱讀,其他的程式無論是vb、delphi都要首先找到程式頭,否則你是很難分析清楚程式的層次關係。

  分層次閱讀

  在閱讀程式碼的時候不要一頭就紮下去,這樣往往容易只見樹木不見森林,閱讀程式碼比較好的方法有一點象二叉樹的廣度優先的遍歷。在程式主體一般會比較簡 單,呼叫的函式會比較少,根據函式的名字以及層次關係一般可以確定每一個函式的大致用途,將你的理解作為註解寫在這些函式的邊上。當然很難一次就將全部注 解都寫正確,有時候甚至可能是你猜測的結果,不過沒有關係這些註解在閱讀過程是不斷修正的,直到你全部理解了程式碼為止。一般來說採用逐層閱讀的方法可以是 你係統的理解保持在一個正確的方向上。避免一下子扎入到細節的問題上。在分層次閱讀的時候要注意一個問題,就是將系統的函式和開發人員編寫程式碼區分開。在 c, c++,java ,delphi中都有自己的系統函式,不要去閱讀這些系統函式,除非你要學習他們的程式設計方法,否則只會浪費你的時間。將系統函式表示出來,註明它們的作用 即可,區分系統函式和自編函式有幾個方法,一個是系統函式的程式設計風格一般會比較好,而自編的函式的程式設計風格一般比較會比較差。從變數名、行之間的縮排、注 解等方面一般可以分辨出來,另外一個是象ms c6++會在你程式設計的時候給你生成一大堆檔案出來,其中有很多檔案是你用不到了,可以根據檔名來區分一下時候是系統函式,最後如果你實在確定不了,那就 用開發系統的幫助系統去查一下函式名,對一下引數等來確定即可。

  寫註解

  寫註解是在閱讀程式碼中最重要的一個步驟,在我們閱讀的原始碼一般來說是我們不熟悉的系統,閱讀別人的程式碼一般會有幾個問題,1搞明白別人的程式設計思想不 是一件很容易的事情,即使你知道這段程式的思路的時候也是一樣。2閱讀程式碼的時候程式碼量一般會比較大,如果不及時寫註解往往會造成讀明白了後邊忘了前邊的 現象。3閱讀程式碼的時候難免會出現理解錯誤,如果沒有及時的寫註解很難及時的發現這些錯誤。4不寫註解有時候你發生你很難確定一個函式你時候閱讀過,它的功能是什麼,經常會發生重複閱讀、理解的現象。

  好了,說一些寫註解的基本方法:1猜測的去寫,剛開始閱讀一個程式碼的時候,你很難一下子就確定所有的函式的功能,不妨採用採用猜測的方法去寫註解,根 據函式的名字、位置寫一個大致的註解,當然一般會有錯誤,但你的註解實際是不但調整的,直到最後你理解了全部程式碼。2按功能去寫,別把註解寫成語法說明 書,千萬別看到fopen就寫開啟檔案,看到fread就寫讀資料,這樣的註解一點用處都沒有,而應該寫在此處開發引數配置檔案(****。dat)讀出 系統初始化引數。。。。。,這樣才是有用的註解。3在寫註解的使用另外要注意的一個問題是分清楚系統自動生成的程式碼和使用者自 己開發的程式碼,一般來說沒有必要寫系統自動生成的程式碼。象delphi的程式碼,我們往往要自己編寫一些自己的程式碼段,還要對一些系統自動生成的程式碼段進行 修改,這些程式碼在閱讀過程是要寫註解的,但有一些沒有修改過的自動生成的程式碼就沒有必要寫註解了。4在主要程式碼段要寫較為詳細的註解。有一些函式或類在程 序中起關鍵的作用,那麼要寫比較詳細的註解。這樣對你理解程式碼有很大的幫助。5對你理解起來比較困難的地方要寫詳細的註解,在這些地方往往會有一些程式設計的技巧。不理解這些程式設計技巧對你以後的理解或移植會有問題。6寫中文註解。如果你的英文足夠的好,不用看這條了,但很多的人英文實在不怎麼樣,那就寫中文註解吧,我們寫註解是為了加快自己的理解速度。中文在大多數的時候比英文更適應中國人。與其寫一些誰也看不懂的英文註解還不如不寫。

  重複閱讀

  一次就可以將所有的程式碼都閱讀明白的人是沒有的。至少我還沒有遇到過。反覆的去閱讀同一段程式碼有助於得程式碼的理解。一般來說,在第一次閱讀程式碼的時候 你可以跳過很多一時不明白的程式碼段,只寫一些簡單的註解,在以後的重複閱讀過程用,你對程式碼的理解會比上一次理解的更深刻,這樣你可以修改那些註解錯誤的 地方和上一次沒有理解的對方。一般來說,對程式碼閱讀3,4次基本可以理解程式碼的含義和作用。

  執行並修改程式碼

  如果你的程式碼是可執行的,那麼先讓它執行起來,用單步跟蹤的方法來閱讀程式碼,會提高你的程式碼速度。程式碼通過看中間變量了解程式碼的含義,而且對 以後的修改會提供很大的幫助

  用自己的程式碼代替原有程式碼,看效果,但在之前要保留原始碼

  600行的一個函式,閱讀起來很困難,程式設計的人不是一個好的習慣。在閱讀這個程式碼的時候將程式碼進行修改,變成了14個函式。每一個大約是40-50 行左右.

相關推薦

Android-->閱讀別人的專案原始碼

上一篇,我們成功匯入並運行了 貝殼單詞 專案. 這篇文章, 帶大家一起讀一讀原始碼. 開啟 貝殼單詞 專案,定位到檔案 AndroidManifest.xml 我們今天的一切,都從這裡開始;(這個檔案是專案的入口) 1–>首先注意到的是許可

如何閱讀別人原始碼

        網上搜到的一篇介紹閱讀別人原始碼的方法,放在這裡,有空可以檢視。         閱讀別人的程式碼作為開發人員是一件經常要做的事情。一個是學習新的程式語言的時候通過閱讀別人的程式碼是一個最好的學習方法,另外是積累程式設計經驗。如果你有機會閱讀一些作業系統的程

如何匯入和匯出Maven專案(分享給別人原始碼

一、    Maven專案匯入 1、File -> Import 2、選擇 Maven -> ExistingMaven Projects -> Next 3、選擇解壓後的檔案 4、等待一段時間,匯入完成後,將圖中三個檔案

逐行閱讀redux原始碼(一) createStore

寫在最前面 本文面對有redux使用經驗,熟知redux用法且想了解redux到底是什麼樣的一個工具的讀者,so,希望你有一定的: 工程結構基礎 redux(react-redux)使用基礎 這會幫助你更快的理解。 redux是什麼 Redux是一個應用狀態管理工具,其工作流程可以參照

閱讀HBase原始碼的正確姿勢建議

引用:https://mp.weixin.qq.com/s/x4QV-wEvAkJXMGp8kd0yBQ 感覺這篇文章實在太好,轉載一下。 關於如何閱讀開源社群原始碼,最近陸續有同學過來問我這個問題。前段時間,在HBase技術交流群裡,大家也討論過一些零散的方法,但都不繫統。藉著這個問題,我也認真回顧了一下

如何閱讀java原始碼

剛才在論壇不經意間,看到有關原始碼閱讀的帖子。回想自己前幾年,閱讀原始碼那種興奮和成就感(1),不禁又有一種激動。 原始碼閱讀,我覺得最核心有三點:技術基礎+強烈的求知慾+耐心。 說到技術基礎,我打個比方吧,如果你從來沒有學過Java,或是任何一門程式語言如C++,一開始去啃《Core Java》,

逐行閱讀redux原始碼(二)combineReducers

前情提要 逐行閱讀redux原始碼(一)createStore 認識reducers 在我們開始學習原始碼之前,我們不妨先來看看何謂reducers: 如圖所見,我們可以明白, reducer 是用來對初始的狀態樹進行一些處理從而獲得一個新的狀態樹的,我們可以繼續從其使用方

初步閱讀EPOLL原始碼

資料結構 函式 epoll_create epoll_ctl ep_insert epoll_wait 資料結構 //

閱讀JDK原始碼的看法

說到技術基礎,我打個比方吧,如果你從來沒有學過Java,或是任何一門程式語言如C++,一開始去啃《Core Java》,你是很難從中吸收到營養的,特別是《深入Java虛擬機器》這類書,別人覺得好,未必適合現在的你。 雖然Tomcat的原始碼很漂亮,但我絕不建議

【JAVA,ArrayList原始碼閱讀ArrayList原始碼個人理解

閱讀ArrayList原始碼個人理解 近期閱讀了java.util.ArrayList.java的原始碼 ArrayList介紹 從貼出程式碼不難看出,ArrayList是繼承了AbstractList,並且實現了List,RandomAccess,Cloneable,

【一套程式碼小程式&Native&Web階段總結篇】可以這樣閱讀Vue原始碼

前言 在實際程式碼過程中我們發現,我們可能又要做H5站又要做小程式同時還要做個APP,這裡會造成很大的資源浪費,如果設定一個規則,讓我們可以先寫H5程式碼,然後將小程式以及APP的業務差異程式碼做掉,豈不快哉?但小程式的web框架並不開源,不然也用不著我們在此費力了,經過研究,小程式web端框架是一套自

「Do.016」AS不用編譯,閱讀Android原始碼

首發公眾號:Android程式設計師日記 作者:賢榆的榆 如果你覺得有幫助歡迎關注、讚賞、轉發 閱讀時間:2616字 6分鐘 寫在前面 很早就像自己搭一個Android原始碼閱讀環境,折騰了幾次無果,就擱置了。最近有點閒暇時間,再加上也覺得是時候更深刻的認

閱讀ArrayList原始碼的一些記錄

ArrayList的底層是基於陣列實現的,但是我們知道陣列的長度一旦確定就不能夠再次變化,ArrayList的長度是可以變化的,其實就是在需要擴容的時候,重新生成一個數組,並把原陣列中的元素放到新的陣列中,用新的陣列替代就得陣列,就完成了ArrayList的擴容

閱讀Vector原始碼記錄的一些筆記

在多執行緒的情況下,ArrayList和LinkedList都是執行緒不安全的,Vector是執行緒安全的,ArrayList是基於陣列實現的,LinkedList是基於雙向連結串列實現,而Vector的實現也是基於陣列的,從資料結構來看,Vector和Arra

閱讀開源原始碼的正確姿勢建議

關於如何閱讀開源社群原始碼,最近陸續有同學過來問我這個問題。前段時間,在HBase技術交流群裡,大家也討論過一些零散的方法,但都不繫統。藉著這個問題,我也認真回顧了一下自己所用過的一些方法,覺的有必要整理出來,供大家參考。 先選擇合適的原始碼版本 因為不同的版本間

閱讀jdk原始碼

                1.首先介紹下如何匯入jdk原始碼,需要下載jdk(不是jre),jdk包中會有一個src.zip,這個就是原始碼包2.用idea新建一個普通java專案,把解壓後的src所有檔案拷到對應idea新建的java專案中,如下圖:java.* java SE的標準庫,是java標準

如何閱讀別人的程式碼?

經過這幾年的程式設計學習,我認為想要提升編碼水平的最佳途徑就是多看、多寫,然而閱讀別人的程式碼也確實是快速提升程式碼水平的一個技巧。在今天的文章中,我將與大家探討如何閱讀別人編寫的程式碼。 我要明確地表述這種方式的好處: 1.如果大家希望能顯著提升程式設計技

獻給新手,如何閱讀Linux原始碼(轉)

常常有人問:我想學習核心,需要什麼基礎嗎?Linus Torvalds本人是這樣回答的:你必須使用過Linux。 這個……還是有點太泛了吧,我想下面幾個基礎可能還是需要的,儘管不一定必需:    1, 關於作業系統理論的最初級的知識。不需要通讀並理解《作業系統概念》《現代作業系統》等鉅

線上閱讀android原始碼

一直在尋找android系統的原始碼,網上有不少帖子介紹如何下載android原始碼,包括在linux系統,windows系列和mac os系統。但是本人經過測試,並沒有發現哪些帖子是切實可行的。這些帖子的內容多因連結過期或者含糊不清而不可用。同時,由於android系統程式碼量龐大,所以就萌生了線

如何有效的閱讀原始碼

一、初步瞭解 1.在下載原始碼之後,先看下程式碼目錄組織結構,如base代表基礎庫,net代表網路庫等我 2.開始閱讀框架的原始碼之前,先去google蒐集下資料: 這個框架是解決了什麼問題?都是用了什麼技術? 分為多少個模組,每個模組之間有什麼聯絡? 儘量看官網英文的資料,