1. 程式人生 > >國外程式設計師吐槽:永不再為 Oracle 工作了 !

國外程式設計師吐槽:永不再為 Oracle 工作了 !

來自:開源中國社群

連結:https://www.oschina.net/news/101928/about-oracle-database-code

近日,某網友在 Hacker News 上發起了一個 “你見過的最糟糕的程式碼是什麼?” 的問題,引起了廣泛關注和討論,評論數已接近600條。其中,一位 ID 為“oraguy”的程式設計師對 Oracle 資料庫程式碼的吐槽,更是引發熱議。內容大意如下:

Oracle 資料庫 12.2。它有近 2500 萬行 C 程式碼。

這有多恐怖,簡直難以想象!你無法在不破壞成千上萬個現有測試的情況下更改產品中的單行程式碼。好幾代程式設計師在有限的專案期限內編寫了這些程式碼,其中充斥著大量的垃圾程式碼。

非常複雜的邏輯、記憶體管理、上下文切換等,這些都用數千個 flag 連線起來。整個程式碼充斥著神祕的巨集命令,如果不拿出筆記本,並且手動去展開相關的巨集命令,就無法理清楚這些命令。甚至可能需要一兩天才能真正理解某個巨集命令的作用。

有時你需要理順 20 個不同 flag 的值和效果來預測程式碼在不同情況下的行為方式。有時多達數百個 flag !這一點也不誇張。

這個產品仍然存活並且仍然可用的唯一原因是數百萬次的測試!

以下是 Oracle 資料庫開發人員的日常:

  • 開始處理一個新的 bug 。

  • 花兩週的時間試圖理解 20 個不同的 flag ,這些 flag 以神祕的方式相互互動,導致這個困境。

  • 再新增一個 flag 來處理新的特殊場景。新增幾行程式碼來檢查此 flag ,並解決有問題的情況,規避該 bug 。

  • 將更改提交到包含大約100-200臺伺服器的測試伺服器叢集,這些伺服器將編譯程式碼,構建新的 Oracle 資料庫,並以分散式方式執行數百萬個測試。

  • 回家。第二天來上班,繼續處理別的 bug 。測試可能需要20-30個小時才能完成。

  • 再回家。再來上班,檢查你的叢集測試結果。順利的話,會有大約100個失敗的測試。倒黴的話,將有大約1000個失敗的測試。隨機選擇一些測試並試圖搞清楚你的假設出了什麼問題。或許還需要考慮10多個 flag 才能真正理解 bug 的本質。

  • 再新增一些 flag 以嘗試解決問題。再次提交更改以進行測試。再等20-30個小時。

  • 來來回回重複兩週,直到你得到了將這些 flag 組合起來的“神祕咒語”。

  • 終有一天,你會成功,不再出現測試失敗。

  • 為你的新更改新增100多個測試,以確保下一個不幸接觸這段新程式碼的開發人員永遠不會破壞你的修復。

  • 提交最後一輪測試的成果。然後提交以供稽核。審查本身可能還需要2周到2個月。所以接下來繼續去處理下一個 bug 。

  • 在2周到2個月之後,一切已就緒,程式碼將最終合併到主分支中。

以上就是對在 Oracle 修復 bug 的程式設計師日常生活的描述,一點也不誇張。現在想象一下開發新功能會有多麼恐怖。開發一個小功能需要6個月到1年的時間(如果是新增一種新的身份驗證模式,比如支援 AD 身份驗證,可能需要2年)。

這款產品本身就是一個奇蹟!

我不再為 Oracle 工作了。永遠不會再為 Oracle 工作了!

精彩回顧

640?wx_fmt=gif