選單

作為軟體工程師,在 除錯 的時候,為確認系統發生的情況,會運用什麼思路?

我有這樣的思路:

1. 時間

依據事件發生的時間,盡可能縮小搜尋 log 的範圍

2. 事務 (Transaction)

看見 log 中的事務,相同事務通常有以下特徵:

  • 相同進程 or 線程 id (多線程系統)
  • 相同 trace_id or uuid (分散式系統)

就是找到事件中一到多個工作單元的開始與結束

3. 關鍵字

事務中有哪些關鍵字,足以代表系統當時進行的是何種行為、交易與異常?

4. 因果關係

  • 行為、交易與異常的上下文關係,結合時間順序,便可推測什麼行為開始有後續這異常的發生
  • 認識系統上下游:對整個系統架構的認識能幫助認清問題

5. 異常訊息的語義

有無異常代號,官方文件對此異常的說明是什麼?異常觸發的條件是什麼?

6. 異常訊息顯示在哪一行程式碼或套件源碼發生?

7. 這行程式碼或套件源碼上下文 (input、output、call tree) 與 log 上下文因果匹配

8. 找到什麼 input,會造成這行程式碼,或套件的源碼報錯

input 可能是動詞或名詞:

  • 如跟後台或 DB 取資料,就是動詞
  • 如前台傳遞參數為空,就是名詞

9. 重現問題

製造發生同樣異常的案例,視情況可規劃為測試案例,避免之後再出錯

10. 解決出現這個 input 的原因

常見原因通常有這幾種:

  • 本身系統程式 BUG (如忘記覆值…)
  • 上游系統的問題 (如資料格式不正確…)
  • 下游系統的問題 (如 DB、Server 無回應…)

11. 最後盡可能地發揮“通靈”的能力

私訊《畫家帽の龍》FB 粉絲專頁“666” 就送給你《轉職軟體工程師攻略圖》,助你朝想要的方向前進。

祝你職涯順利~Go~