2008-12-02 150 views
8

假設你想開始貢獻一個具有數千LOC的開源項目。我對你如何開始學習/黑客入侵新系統的方式/建議感興趣。如何閱讀源代碼學習如何使用大型系統?

+1

是: 第1步:將代碼導入一個體面的IDE 太瑣碎了? – 2008-12-02 14:16:56

+11

伊恩你能在這個問題的答案中發佈這個,我想投票給你。 – 2008-12-02 14:24:01

回答

6

通過代碼瀏覽,尋找你認爲你知道發生了什麼的地方。仔細閱讀這些部分,看看你最初的想法是否成立,然後嘗試修改它,看看你是否可以改變它來做別的事情。

我建議稍微引導一下項目路線圖,以便您可以繼續發現新功能和錯誤修復的位置,以便您能夠以有意義的方式提供幫助。

此外,請閱讀文檔以及可能存在的任何旋轉文檔(功能規格,要求規格等)。這可以進一步幫助您更快地學習代碼繩索:)

2

找到一個您感覺舒適並且改變它的小地方。忽略其餘;你會在需要時瞭解它。不要因爲尺碼而感到不知所措;每個程序都是從第一行開始的,如果它不是以小的,獨立的位組織的,就不可能維護。所以你總是有一個利基。

8

學習的目的。我認爲如果你考慮到一些目標,你會學得最好 - 解決這個問題或者增加這個功能。開始尋找您需要進行更改的可能位置。向後跟隨控制線程以找出如何在代碼中達到該點。此外,對代碼進行「鳥瞰」視圖 - 查看佈局和結構。良好的代碼將具有描述性的名稱,告訴您需要每個類和方法。看看您是否可以識別實施模式並查看它們在何處/如何使用。不要在文檔中放置過多的文檔 - 文檔可能非常好,但它們通常與代碼實際上不同步。讓代碼本身成爲最好的文檔。

0

如果您對該項目非常熟悉,並且對您想要貢獻的內容有一些瞭解,那麼請獲取最新版本的代碼並進行您想要進行的更改。不要試圖一次消化全部代碼。尋找正在使用的模式和慣例並儘可能地遵守它們。

3

我更喜歡在IDE調試器中逐行執行代碼。嘗試訪問大型系統中的所有代碼是不現實的,但是我首先調試應用程序的啓動,然後轉到其他對應用程序來說很有意義/重要的代碼區域。

3

我將運行DOxygen對源代碼,所以我有一個可瀏覽的,可讀的,類級別的源視圖。它非常適合幫助你穿越龐大的代碼庫

2

我會建議找到一個功能,真的想補充。

我以前只是真的看過別人的代碼,因爲我想添加的功能是我真正需要的。我認爲這是大多數開源項目開始的原因;填補需求。

羅布

2
  1. 獲取代碼建設和您的開發機器上運行。
  2. 找出如何使用該系統並熟悉所使用的庫。 (例如,如果您看到調用某些OpenGL庫的代碼,請熟悉該庫)請閱讀系統文檔。
  3. 然後我會找到一個基於某些輸入的代碼點。假設系統根據某些輸入生成輸出。我會找到啓動過程的方法。現在嘗試一步一步完成(可能會很痛苦),或者只是閱讀代碼,並嘗試獲得關於發生的事情的高級概述。

我發現第3步通常會變得非常複雜,這就是我如何閱讀代碼和學習系統如何工作的方向。

添加一個特徵可能是一個好主意,但是在一個大系統中,甚至可以弄清楚這個特徵是什麼會很痛苦。不僅如此,你編寫的任何學習系統的功能很可能最終會看起來像垃圾,因爲你不知道系統在哪裏以及如何運行。你想添加的功能當然可以引導你在#3的正確點,所以不要打折。

-s

3

謝謝你的回答。 Lot是有用的信息。

一些工具,我能想到的是:

  • grep的
  • CTAGS
  • cscope的
  • 的javadoc(JAVA)
  • doxygen的(C,C++)
  • LXR(軟件工具集索引和呈現源代碼庫)

有關有用工具的更多建議?

5
  • 不要花太多時間在小細節上。
  • 不要試圖在開始時瞭解整個系統。
  • 重點是嘗試理解一個相對「獨立」的模塊或組件,它在過去被添加爲一個實體(功能)。這通常在您的大腦能力可以應付的大小限制內,因爲它是由其他人一次完成的一個模塊。
  • 將更多零件或「零件」消化並組裝在一起後,您對整個系統的理解將會得到改善。
  • 工具是非常有益的:使用Doxygen + GraphViz的,或如「理解」,呼叫和來電圖在Visual Studio中,「查找全部」和「查找所有引用」等
1

嘗試軟件對類圖進行反向工程。有一個功能可以從A到B的斷點,調試,逐步瀏覽並觀察通信,在紙上繪製鏈接和繼承。您也可以使用序列圖。這有助於我理解系統的特定功能。