你見過的最糟糕的程式碼是什麼?
來自HackerNews的討論,其中一個回答非常有趣:
Oracle資料庫12.2。
它接近2500萬行C程式碼。
多麼難以想象的恐怖!你無法在生產環境下,且需要通過1000次測試的情況下,修改一行程式碼。幾代程式員在困難的期限內卻處理了這些程式碼,並用各種廢話填充了程式碼。
非常複雜的邏輯,記憶體管理,上下文切換等都與數千個標誌一起儲存。整個程式碼都帶有神祕的巨集,如果沒有選擇筆記本並且手動擴充套件相關的巨集,就無法破譯。可能需要一天到兩天才能真正理解巨集的作用。
這個產品仍然存活並且仍然有效的唯一原因是通過了數百萬次測試!
以下是Oracle資料庫開發人員的生活方式:
- 開始處理新的bug。
- 花兩週的時間試圖瞭解20種不同的標誌,這些標誌以神祕的方式相互作用。
- 再新增一個標誌來處理新的特殊情況。新增幾行程式碼來檢查此標誌並解決有問題的情況並避免該錯誤。
- 將更改提交到包含大約100到200臺伺服器的測試伺服器場,這些伺服器將編譯程式碼,構建新的Oracle資料庫,並以分散式方式執行數百萬個測試。
- 回家。第二天來,繼續做其他事情。測試可能需要20小時到30小時才能完成。
- 回家。第二天來,檢查你的農場測試結果。在美好的一天,將有大約100個失敗的測試。在糟糕的一天,將有大約1000個失敗的測試。隨機選擇一些測試並嘗試瞭解您的假設出了什麼問題。也許還有10多個標誌要考慮才能真正理解bug的本質。
- 新增一些標誌以嘗試解決問題。再次提交更改以進行測試。再等20到30個小時。
- 沖洗並重復另外兩週,直到你得到組合標誌的神祕咒語。
- 最後一天,你會成功,0測試失敗。
- 為您的新更改新增一百多個測試,以確保下一個不幸接觸這段新程式碼的開發人員永遠不會破壞您的修復。
- 提交最後一輪測試的工作。然後提交以供稽核。審查本身可能還需要2周到2個月。所以現在繼續討論下一個bug。
- 在2周到2個月之後,當一切都完成後,程式碼將最終合併到主分支中。
以上是對Oracle修復bug的程式設計師生活的非誇張描述。現在想象一下開發新功能會有多麼恐怖。開發一個小功能需要6個月到一年(有時是兩年!)(比如新增一種新的身份驗證模式,比如支援AD身份驗證)。
這款產品即使有效,也是一個奇蹟!
我不再為Oracle工作了。永遠不會再為Oracle工作了!