源碼閱讀四步走,這纔是閱讀源碼的正確姿勢

在《15個小技巧,助你源碼閱讀事半功倍》一文中,給出了15個提高源碼閱讀效率的小技巧。
本文是《如何高效閱讀源碼》專題的第三篇,來聊一聊「閱讀源碼的具體步驟」!

在本專題第一篇,我們已經知道了不正確的閱讀源碼的方法,那正確的閱讀源碼的方式是什麼呢?
其實很簡單,我總結爲四步:

  • 建模:基於源碼進行建模

  • 梳理:基於模型進行流程的梳理

  • 歸納:對梳理出的流程進行歸納,再整合進模型中

  • 延伸:在建模、梳理、歸納中觸類旁通,與其它項目或技術點產生關聯,擴大知識面

 

 

這四步又可以細分爲可操作的十個步驟(後面的十篇文章將對每一步進行詳細的講解,保證可操作性):

  • 「通過demo,構建黑盒模型」:一般我們接觸項目的第一步都是編寫一個HelloWorld,我們應該如何看待這個HelloWorld小demo呢?跑起來就ok了嗎?你有沒有想過,你可能小看了這個demo?這個demo可能有你想象不到的大功效?本節將講解如何通過demo構建出黑盒模型,使你對項目有一個最初的瞭解

  • 「閱讀文檔,瞭解概念模型」:完善的開源項目都會有比較完善的文檔,你有沒有好好讀過項目文檔?該怎麼讀項目文檔?你能從項目文檔裏收穫到什麼呢?本節將講解如何閱讀項目文檔,以及如何從項目文檔構建出概念模型

  • 「根據模塊依賴,找出核心模塊」:一般我們在項目的設計階段會繪製架構圖,架構圖一般表示的是模塊之間的關係。那我們在閱讀源碼時能反過來找到這些模塊嗎?又如何確定這些模塊之間的關係呢?本節將詳細講解如何通過源碼反推出模塊依賴,以及找出核心模塊的方法

  • 「根據類依賴,構建抽象模型」:我們在開發設計的時候一直說着建模建模,我們在閱讀源碼的時候有思考過如何找到這些模型嗎?我們該怎麼找到這些模型呢?本節將詳細講解如何找出核心類,並通過核心類構建出抽象模型。這個模型就是項目的核心

  • 「根據抽象模型,梳理核心流程」:如果通過debug的方式不是梳理流程的好方法,那麼什麼樣的方式是梳理流程的好方法呢?本節將詳細講解如何基於核心模型快速的梳理出核心流程

  • 「畫圖加深理解」:我們90%的信息來源於眼睛,畫圖能加深我們對項目的理解,那我們在閱讀源碼的時候該如何畫圖呢?本節將詳細講解如何繪製核心流程圖,並將核心流程圖整合進概念模型中,得到一個更完整的模型

  • 「閱讀擴展模塊,補充執行流程」:核心模塊雖然是一個項目最重要的部分,但是必要的輔助流程也是整個項目流程中不可或缺的一部分。我們該如何梳理這些輔助流程呢?本節將詳細講解如何從核心流程梳理出輔助流程,以完善整個項目流程

  • 「理解核心流程設計」:我們梳理了核心流程,那爲什麼作者要這麼設計呢?這麼設計是基於哪些考量呢?本節將基於核心流程來理解具體的代碼設計

  • 「關聯延伸閱讀」:一個項目可能會和其它的項目有關係,那我們該如何梳理這些關係呢?比如:Spring中使用了JUnit,它們是如何關聯的呢?本節通過Spring使用JUnit的例子來講解如何進行關聯延伸閱讀,使得兩個項目的代碼邏輯串聯起來

  • 「不同版本之間源碼的閱讀」:一個項目會有很多的版本,我們讀了一個版本,其它的版本還需要讀嗎?該如何讀呢?本節通過JUnit3與JUnit4的源碼對比來講解不同版本之間的閱讀方法

注意,上面的流程不一定按順序進行,比如:

  • 有的人是實踐派,那麼可以先「編寫demo,構建黑盒模型」;有的人是概念派,可以先「閱讀文檔,瞭解概念模型」

  • 而「畫圖」則貫穿了源碼閱讀的整個過程

  • 「關聯延伸閱讀」、「不同版本之間源碼的閱讀」則是非必選項

示例說明

專題後續的章節將使用JUnit來演示具體的流程。選擇JUnit來作爲示例,主要基於如下幾個原因:

  • 代碼量相對較少,便於講解:本專欄的目的是講解一種高效閱讀的方法,而不是對某個項目的源碼的具體講解,主要講的是方法。如果選擇代碼量很大的項目,比如Spring,那麼講解代碼本身就要耗費很大的篇幅,而閱讀源碼的方法可能就被代碼給淹沒了。

  • 結構清晰:好的項目,一般都有一個比較好的結構。JUnit自開發出來後,就被稱讚結構清晰,且使用了多種設計模式。在學習源碼的同時,可以理解設計模式在項目中的應用。

  • 文檔齊全:好的項目,也應該是文檔齊全的。JUnit有官方網站,有較完善的文檔。對閱讀源碼有很大的幫助

  • 測試框架事實上的標準:雖然在單元測試裏,還有如TestNG這樣的開源項目,但是一般情況下,使用JUnit進行單元測試的項目更多。JUnit可以說就是測試框架事實上的標準。學習標準項目的收益更高,既學習到了知識,又能在實際工作中使用,加深印象。同時,後面如果要學習同類型項目也會輕鬆很多。

  • 版本迭代:JUnit從JUnit3,JUnit4一直到JUnit5,新版本都對老版本做了兼容。多版本比較閱讀,能理解項目的發展,爲什麼會這麼發展。由於JUnit5已經發展成了測試平臺,這裏不做討論,只討論JUnit3和JUnit4。

總結

本文給出了源碼閱讀的一個整體流程,後面的章節將通過基於JUnit的演示,來詳細的說明每一個步驟的具體做法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章