西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)其它知識(shí) → 如何精讀或泛讀別人編寫的程序源代碼?

如何精讀或泛讀別人編寫的程序源代碼?

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2013/1/7 11:22:01字體大。A-A+

作者:西西點(diǎn)擊:0次評(píng)論:2次標(biāo)簽: 源代碼

  • 類型:源碼相關(guān)大小:15.9M語言:中文 評(píng)分:3.6
  • 標(biāo)簽:
立即下載

讀代碼這事,先要分是精讀還是泛讀。

從學(xué)習(xí)的目的來看,一定要精讀一定量的經(jīng)典代碼。而精讀是指每行都讀懂,不看代碼腦子里就能勾畫出程序的基本結(jié)構(gòu)。

這里有個(gè)很形象的狀態(tài),精讀代碼時(shí)會(huì)滿腦子都是代碼,放不下,甚至睡覺前腦子里也是代碼。

但這一篇里主要不是關(guān)注如何精讀代碼的,而是關(guān)于如何在工作中掌握既有代碼的,等價(jià)于泛讀。

現(xiàn)存的很多系統(tǒng)往往很大,幾十萬行的可能也只算普通。

這時(shí)候一旦加入了這樣一個(gè)項(xiàng)目,那么如何去讀代碼?

下面說點(diǎn)個(gè)人體會(huì)。

讀這類代碼前,先得把規(guī)格大致弄清楚,而不能上來就讀,比如:對(duì)于應(yīng)用型程序,你要先大致整清楚它的使用方法。

如果其中有涉及到領(lǐng)域知識(shí),比如:流程、財(cái)會(huì)等,那也最好預(yù)先有些認(rèn)識(shí)。這類東西從代碼里反推回來是不太可能的。

我個(gè)人感覺這對(duì)讀程序是個(gè)很大的障礙,你不知道編碼規(guī)則,卻去讀編碼的程序,總是會(huì)云里霧里,這時(shí)候反倒不是因?yàn)槌绦螂y,

而是因?yàn)椴恢莱绦蛑兴膶I(yè)知識(shí)。

在這一步里,最好能抽取出來幾個(gè)典型的應(yīng)用場(chǎng)景,這在后面有用。

一旦開始接觸代碼,那要先弄清楚代碼的基本靜態(tài)結(jié)構(gòu)。如:包構(gòu)成、類構(gòu)成等。

這里涉及一個(gè)層次問題。一下子把層次探的太深,就容易盯在細(xì)節(jié)上出不來。

有設(shè)計(jì)文檔的項(xiàng)目,大致上可以通過包來界定這個(gè)層次。

沒設(shè)計(jì)文檔的就可怕了,只能靠自己劃分,最好不要超過10個(gè),超過了真記不住。

在靜態(tài)結(jié)構(gòu)這步,要弄清楚每個(gè)部分的核心職責(zé),可以簡(jiǎn)單,最好能記住。

接下來就要用到上面的典型場(chǎng)景了。

要在典型場(chǎng)景下考察上面的靜態(tài)結(jié)構(gòu)是如何發(fā)揮作用的。

典型場(chǎng)景下用到的接口往往就是關(guān)鍵的接口,要整清楚,他們的定義和作用。

也要整清楚,典型場(chǎng)景下數(shù)據(jù)流的變遷。

這步驟算是弄清楚代碼的時(shí)序。很像UML里的Sequence圖。

但牽涉到數(shù)據(jù)的時(shí)候,一般需要對(duì)數(shù)據(jù)的規(guī)格有所了解。

接下來要關(guān)注進(jìn)程、線程的結(jié)構(gòu)。比如:都是什么時(shí)候開始、什么時(shí)候結(jié)束的,在上述典型場(chǎng)景下都負(fù)責(zé)干什么。

上述四步(規(guī)格、靜態(tài)結(jié)構(gòu)、典型場(chǎng)景、進(jìn)程線程)完成后,對(duì)程序的第一次泛讀完成。

檢驗(yàn)標(biāo)準(zhǔn)很簡(jiǎn)單,這時(shí)應(yīng)該能夠單靠紙筆描述出程序典型場(chǎng)景的Sequence圖。

干這事兒的時(shí)候,要抑制自己的求知欲,因?yàn)榭偸呛芟朐谡{(diào)試器里通過call stack把一個(gè)功能的實(shí)現(xiàn)細(xì)節(jié)整清楚,

但至少在第一個(gè)層次里,可以先不要這樣。

第一次泛讀后,就要進(jìn)入深掘的過程,針對(duì)的對(duì)象應(yīng)該是自己會(huì)負(fù)責(zé)的部分。這部分功能往往會(huì)隱藏在某個(gè)接口之下。

這時(shí)候一般來講可以放過功能型的模塊,比如:XML解析的模塊等。其他部分可以認(rèn)為是需要把之前所說的四個(gè)步驟再重復(fù)一下。

但這時(shí)候要關(guān)注細(xì)節(jié)和調(diào)用堆棧了。

不管是在那個(gè)讀代碼的層次,有兩個(gè)基本技巧總是需要的,一個(gè)是要掌握具體程序里內(nèi)嵌的Log機(jī)制,要能看Log,必要時(shí)可能還得加Log;一個(gè)是基本調(diào)試方法。

調(diào)試很難展開,《軟件調(diào)試》一書寫了1000多頁。

但只停留在設(shè)個(gè)斷點(diǎn)等他停下來這個(gè)層次上還是會(huì)有點(diǎn)欠缺的。條件斷點(diǎn)、多線程調(diào)試、多進(jìn)程時(shí)的調(diào)試還是要知道一點(diǎn)的。

程序類型太多,因此估計(jì)讀程序的方法也很多。上面只是個(gè)人的一點(diǎn)經(jīng)驗(yàn),歡迎補(bǔ)充。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(2)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)