← 回到文章列表

接手一套沒人懂的系統,第一週該做什麼

原作者走了、文件沒了、沒人敢動。第一週不是拿來改程式的,是拿來把「看不見」變成「看得見」。這是一份可以照著做的順序。

你被指派接手一套系統。它跑了十幾年,還在替公司賺錢,但原本寫它的人早就離職了,文件不是沒有就是過期,交接會議只有四十分鐘,講的都是「這邊不要動」。

第一週你會很想做兩件事:一件是打開編輯器開始讀程式碼,另一件是跟主管說「這個應該要重寫」。這兩件事都不要做。

讀程式碼從第一行讀起,是把一套十萬行的系統當成一本書。你會在第三天迷路,而且不會比第一天更懂它。至於重寫——你現在連它有哪些功能都還不知道,憑什麼估得出重寫要多久?

第一週要做的只有一件事:把「看不見」變成「看得見」。下面是可以照著做的順序。

第一、二天:先讓它跑起來

在你理解任何一行程式碼之前,先確認你能重現它。

這件事聽起來很基本,但在老系統上往往是最花時間的一關:某個套件的版本已經下架、資料庫要特定版本、有一支排程工作連到一台沒人記得的伺服器、建置腳本裡寫死了某個離職同事的路徑。

把每一個卡住的點記下來。 那份清單本身就是第一份交付物——它告訴你這套系統對環境的隱性依賴有哪些,而那正是日後遷移會爆炸的地方。

如果兩天之後還是跑不起來,不要硬撐。去問還在公司的人:誰最近一次成功部署過?那次做了什麼?這個問題通常會挖出一份沒人提過的手寫筆記。

第二、三天:畫出誰呼叫誰

跑得起來之後,下一個問題是:這套系統由哪些部分組成,它們怎麼互相依賴。

不要用猜的,也不要靠資料夾名稱。 老系統的目錄結構通常反映的是十年前的組織架構,不是現在的程式結構。

要看的是三件事:模組之間的呼叫關係、跨專案或跨儲存庫的引用、以及資料庫的表被誰讀、被誰寫。第三項特別重要——很多老系統真正的耦合不在程式裡,在資料庫裡。兩個看起來毫無關係的模組,可能同時在寫同一張表。

這一步的產出是一張圖。不必漂亮,但要能讓你指著它說「我如果改這裡,會牽動這三個地方」。

第三、四天:找出動態呼叫點

這是最容易被跳過、也最會害死你的一步。

靜態的呼叫關係好找:A 呼叫 B,程式碼裡寫得清清楚楚。麻煩的是執行時才決定要呼叫誰的地方——反射、設定檔決定的類別名稱、字串拼出來的 SQL、事件匯流排、外掛機制。

這些地方在任何一張呼叫圖上都是斷的。你看圖會以為某個模組沒人用,於是把它刪了,然後下個月的月結跑不出來。

怎麼找?找這幾種痕跡:從設定檔讀出類別或方法名稱的程式碼、用字串組出來的查詢、任何叫做 plugin、handler、processor 而且是動態載入的東西。找到就標起來,標成「這裡的呼叫關係看不出來,要人去確認」。

第一週的目標不是解開它們,是知道它們存在。

第四、五天:把風險寫成可以派工的清單

到這裡你已經知道系統長什麼樣。最後一步是把你看到的東西,變成別人可以接手處理的東西。

關鍵是分級。如果你交出一份七十條的清單,每一條看起來都一樣重要,那等於沒有一條重要。分級不是按技術難度分,是按要交給誰、多快處理分:

  • 今天就要處理的:寫死在程式碼裡的密碼與金鑰、明顯的注入風險。這些找資安,不用討論。
  • 這一季要處理的:已經停止支援的框架版本、會擋住升級的相依套件、沒有任何測試覆蓋的核心邏輯。這些要排進計畫,找開發主管。
  • 要找人問清楚的:看不懂用途的模組、動態呼叫點、註解寫著「暫時」但已經五年的程式碼。這些不急,但每一條都要有人認領。

每一條都要指到檔案與行號。沒有行號的風險清單,下一個人還是得重找一遍。

第一週結束,你手上該有三樣東西

一份環境重現筆記(怎麼把它跑起來,卡在哪些地方)。一張相依圖(誰呼叫誰,哪些地方看不出來)。一份分級的風險清單(指到檔案與行號,每條都有人可以接手)。

有了這三樣,你就可以回答主管那個問題了——不是「這個系統很爛」,而是「這套系統有這些風險,其中三項這週就該處理,換掉它大概要分四個階段,第一階段可以先動這裡」。

那是一個可以拿去開會的答案。

什麼時候該找工具

上面每一步你都可以純手工做。差別只在時間:一個五萬行的單一系統,一個人大概兩到三週;如果有多個系統、多種語言混在一起,那就不是一個人的第一週做得完的事了。

我們做 ForgeHelm 的原因就在這裡。它把第二、三步自動化——從程式碼直接產出架構圖與呼叫圖、把缺失指到檔案與行號、標出動態呼叫點,然後把結果留下來,下次改動時可以比對。深入的規則檢查目前以 .NET 家族為主,COBOL、Delphi、PowerBuilder、Visual FoxPro、VB6、Pro*C、SAP ABAP 這些老技術則是做語法解析與呼叫關係盤點。

但工具做不了第四步。把一堆發現變成一張可以派工的清單,那一步需要判斷,判斷來自經驗。 所以我們也接健檢:帶著分析引擎到你的環境跑一次,跑完由我逐項看過,再交一份你可以直接拿去開會的報告。

想知道它掃得動你那套系統嗎?接手沒有文件的系統這一頁把支援範圍與不支援的部分都寫出來了。想直接找人做,導入與顧問服務那頁有健檢的範圍、工期與價格。