2009-10-22 15 views
5

我正在接管別人的代碼。什麼是一些很好的方法來儘可能快地瞭解程序員做了什麼?我一直在運行它,逐步瀏覽並查看調用堆棧。我還可以做些什麼?接管別人的代碼

對不起,我忘了提及,但有一點文件,我一直在試圖解決簡單的問題。謝謝!

+0

這應該是社區wiki。這是一個主觀問題。 – Joren 2009-10-22 13:38:56

+0

我會說,如果你必須這樣做;問題並不那麼簡單。祝你好運。 – 2009-10-22 13:52:38

+0

這似乎是我目前工作的標準......你走在正確的道路上。在像這樣的時代,我從來沒有說*是*,對於任何事情,我通常會說我會嘗試。 – 2009-10-22 14:00:17

回答

5

通常最好的方法是開始處理修復小錯誤的代碼。你花更多的時間來學習代碼庫是唯一的方法。沒有什麼神奇的方法來學習代碼庫。這將需要數週,數月甚至數年,具體取決於複雜程度。然而,對於大多數通用業務系統而言,加速時間大約是6個月的代碼知識,6個月的時間將行業知識分開以真正理解全部。

5

在它修正了一個簡單的問題。

編輯: 然後解決更大的問題,並開始編寫文檔和單元測試,瞭解您理解的領域。建立在這些領域上,有一天你可能會理解整個系統。

+0

雖然我同意這可以作爲一個解決方案...我討厭bandaiding的bandaids。 – 2009-10-22 13:34:15

4

文檔?讀取代碼本身,而無需在調試器中運行?

除此之外,你正在做我會做的。

+0

我通常發現,如果代碼不是文檔,那麼文檔可能是錯誤的......但它可能會讓你回到代碼「應該」做的事情。 – 2009-10-22 13:35:49

+1

確實如此,但文檔可能比代碼更高,這至少可以讓您更容易理解X類如何適應更大的圖片。 – jprete 2009-10-22 13:54:10

0

我發現我不會完全學習代碼,直到我開始修復錯誤/修改它。如果原來的程序員仍然在那裏,那麼在實現它們之前討論這些變化會有所幫助。

1

日誌很好地看到代碼的作用。

如果您有版本控制系統,您可以查看程序員對哪些代碼段做了哪些更改,瀏覽一些歷史記錄。

我發現它有時候會嘗試理解程序員的代碼風格,這有助於我理解他如何思考問題並解決問題。

6

開始編寫單元測試,因爲這會讓你使用他的類/方法,並且你會做兩件事,學習它,或者找出錯誤或準備工具以防出現錯誤。

+0

這種方法的問題是他首先必須知道(1)它是如何工作的,(2)它應該如何工作,以及(3)入口點是什麼。他可能還不知道寫出有效的單元測試。 : -/ – 2009-10-22 14:48:24

+3

通過編寫單元測試,他會學習。他將不得不查看代碼並瞭解類是如何設計的。如果沒有文檔,你必須弄清楚,不妨編寫單元測試,在學習的同時做一些有效的工作,並且可能修復過程中的一些錯誤。 – 2009-10-22 14:57:21

+2

對於未設計用於測試的代碼庫,將很難編寫單元測試。考慮爲這個問題寫集成測試。 – 2009-10-22 16:26:05

1

我要做的第一件事就是看看最簡單的對話框及其代碼,主要是分析編碼風格,並看看開發者是如何安排代碼的。一旦你知道了編碼風格,並且粗略地知道文件中所有東西都存在的地方(或者如果東西是隨機放置的 - 即使這有助於知道),它也會更容易地完成其他任何事情。

2

如何快速理解其他人的代碼沒有銀彈。特別是如果它充滿黑客並且沒有文檔可用。

您應該嘗試瞭解類結構,並使用調試器幫助執行軟件的正常流程。

不要跳過太多的代碼段「哦,我想我知道這個部分做什麼」。不,你沒有。您會驚訝於我們可能在代碼中找到哪些「創新」。

1

如果可以的話,與其他人的代碼的用戶交談(最終用戶或其他需要使用他的代碼的開發人員)。這會讓你對其他人的代碼質量有所感知 - 它只是發佈了幾個bug,還是需要6個月的修改才能正確使用?開發人員是否注意製作精美的應用程序,還是一團糟?這應該給你一些想法,你是否需要稍微調整代碼或者開始替換大塊代碼。

+0

用戶界面與其背後的代碼質量之間存在細微的差異。這很像乙烯基壁板。一座房子可能是所有美麗的白色壁板下的絕對殘骸,但佈線一塌糊塗,框架腐爛,管道漏水。但是,該死的,從街上漂亮吧。 – 2009-10-22 14:50:44

+0

這當然有可能。但我發現,一般來說,如果外部看起來不錯,並且建立在對細節的關注和關注的基礎上,那麼假設同一個人都這樣做,框架可能以相同的方式構建。當然,你需要知道誰是誰的責任 - 你不能因爲接線不良而對錯位的人造成錯誤。 – TLiebe 2009-10-22 15:16:05

1

我喜歡開始添加測試代碼的方法,如果他們不在那裏。弄清楚如何覆蓋代碼可以讓你深入瞭解代碼路徑,期望的輸出應該是什麼,等等......

1

其他人都說過的一切都是在學習編碼器所做的準確的事情。

看着它的另一種方法是學習程序本身。像用戶一樣深入地玩這個應用程序,並理解程序本身的功能。一旦你徹底理解了最終的系統,就會更容易地弄清楚它是如何以及爲什麼寫的。

0

記下你對班級,職能等等的瞭解並不會傷害到下一個人(或另一個被僱用來工作的人)。另外,當我這樣做之前,我發現在嘗試理解代碼之前最好使用該程序。可能聽起來很明顯,但更多的你看到之後會有意義的。正如其他人所說,單元測試也可能以同樣的方式提供幫助。 (當你對重構有足夠的自信時,也很有幫助。)

0

有一件事可以幫助我更快地學習系統,我自己編寫文檔。

  • 我得到一個概述
  • 我會看到很多的錯誤/壞的設計決策。這使得它們更容易訂購。 (而不是選擇一個不相關的錯誤並解決它,我會修復那些真正重要的)
  • 我後來有一個文檔。
  • 文檔會更容易證明重構/重寫衣服的
0

我想知道的代碼做什麼,這是寫在一個較高水平,解決問題是一個良好的開端。然後,那個人可以在心理上,在高水平上嘗試設想如何使用所使用的類型工具來解決這樣的問題。

從那時起,查看代碼將具有一些意義,它將有助於使其遵循原始開發人員的想法。另外,當你迷路時,你會很快發現。

我也相信代碼應該記錄下自己,因爲大部分時間都是代碼以外的文檔與代碼不同步,可能會產生誤導。所以在這裏和那裏的一些評論,類頭,方法評論應該也有幫助。

我第一次繼承他人的代碼,兩天後我有偏頭痛,我是一場噩夢。

所以玩得開心。

1

我開始的第一個地方是數據庫。

根據我的經驗,理解數據模型是您在瀏覽代碼時給出上下文的關鍵。 (這裏假定數據模型不是一個通用的鍵值通用實體表)

+0

如果datamodel是一個通用的鍵值表,那麼你知道你有一個問題就在那裏! – HLGEM 2009-10-22 17:21:51

0

我在去年的大部分時間都在處理從其他人那裏繼承的代碼。沒有任何文件和大量的系統意圖要做的事情不是在任何地方寫下來,而是在客戶頭上。對我來說,關鍵在於儘可能多地提問,並從各種可用來源收集信息。我會建議您隨時編譯自己的文檔。

許多人可能會說不重寫代碼,但如果代碼評論不好或編碼不好(通常不是自我記錄),這可能通常是最好的方法。對於我所苦苦掙扎的代碼,往往是最好的解決方案。

在開始之前,另一個有用的東西是某種標準文檔。標準文檔將幫助您破譯代碼或使代碼達到規格並使其更易於理解。

相關問題