Oracle 程序員吐槽:永遠不會再為 Oracle 工作了!

Oracle 程序員吐槽:永遠不會再為 Oracle 工作了!

一位Oracle程序員在Hacker News上吐槽自己的工作,引起了熱議,內容如下:

Oracle數據庫12.2。它有近2500萬行C代碼。

這實在太恐怖了,簡直難以想象!你做不到在不破壞成千上萬個現有測試的情況下更改產品中的單單一行代碼。好幾代程序員在很緊的項目期限內編寫了這些代碼,代碼中充斥著各種各樣的垃圾內容。


非常複雜的邏輯、內存管理和上下文切換等等,一切都用數千個標誌(flag)連接起來。整個代碼充斥著神秘的宏命令,要是不掏出筆記本,手動展開宏命令的相關部分,你就無法搞清楚這些宏命令。可能要花一兩天才能真正搞明白某個宏命令的作用。


有時你需要搞明白20個不同標誌的值和效果,以預測代碼在不同的情況下會如何運行。有時多達數百個標誌!我一點也不誇張。


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


下面是Oracle數據庫開發人員平常的一天:

  • 開始處理一個新的bug。
Oracle 程序員吐槽:永遠不會再為 Oracle 工作了!


  • 花兩週的時間試圖搞清楚20個不同的標誌,這些標誌以神秘的方式相互交互、導致這個困境。


  • 再添加一個標誌以處理新的特殊場景。再添加幾行代碼來檢查該標誌,避開有問題的情況,並避免該bug。


  • 將更改提交到含有大約100臺到200臺服務器的測試服務器集群,這些服務器將編譯代碼,構建新的Oracle數據庫,並以分佈式方式運行數百萬個測試。


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


  • 下班回家。第二天來上班,檢查你的服務器集群測試結果。順利的話,會有大約100個失敗的測試。倒黴的話,會有大約1000個失敗的測試。隨機選擇一些測試,並試圖搞清楚你的假設出了什麼問題。也許另有10來個標誌要考慮,才能真正搞清楚bug的本質。


  • 再添加幾個標誌,試圖解決問題。再次提交變更進行測試。再等20小時到30小時。


  • 另外重複沖洗兩週,直到你確保神秘的標誌組合無誤。


  • 終有一天你會成功,沒有一次測試失敗。


  • 添加針對你更改的100多個測試,確保下一個不幸接觸這段新代碼的開發人員永遠不會破壞你的修復程序。


  • 為最後一輪測試提交工作。然後提交以供審查。審查本身可能另外需要2周到2個月。所以現在改而搞下一個bug。


  • 2周到2個月後,一切都已完成,代碼最終合併到主分支中。


以上就是在Oracle修復bug的程序員日常工作的客觀描述,一點也不誇張。現在想象一下開發新功能會有多麼恐怖。開發一項小小的功能就需要一年半載(有時甚至長達兩年!)(比如說添加一種新的身份驗證模式,比如支持AD身份驗證)。

這款產品可以用這本身簡直就是個奇蹟!

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

原文鏈接:https://news.ycombinator.com/item?id=18442941

喜歡這篇文章記得收藏,轉發哦!更多相關資訊可以關注xabdqn,免費獲得java零基礎教程!額外附送excel教程!


分享到:


相關文章: