宝玉xp 23-11-29 09:36
微博认证:前微软Asp.Net最有价值专家 2025微博年度新知博主 科技博主

18年的一条对 Oracle 屎山代码的吐槽:

Oracle数据库 12.2 版本竟然包含了将近2500万行的C语言代码。

想想都觉得可怕!在这个产品里,改动哪怕一行代码,都有可能导致成千上万的测试失败。历经数代程序员在紧迫的截止日期中辛勤编写,结果却是代码变得杂乱无章。

Oracle中复杂的逻辑、内存管理、上下文切换等功能,竟然是靠成千上万个标志(flags)来维系的。整个代码中充斥着神秘的宏,要理解这些宏的含义,常常需要亲手扩展、一天甚至两天的时间去研究。

有时候,为了预测代码在不同情境下的表现,你需要理解多达20个甚至100个不同的标志值及其影响。我这可不是夸张。

这个产品之所以还能运行,全靠着无数的测试!

Oracle数据库开发者的日常是这样的:

- 开始修复一个新的bug。

- 花上两周时间去弄懂那20个相互作用神秘的标志,这些标志造成了bug。

- 为了应对新的特殊情况,增加一个新标志。再写几行代码,检查这个标志,尽量绕过问题,避免bug。

- 把修改提交到一个由100至200台服务器组成的测试农场。这些服务器会编译代码,构建新的Oracle数据库,并分布式地运行数百万个测试。

- 回家,第二天再来处理其他事务。测试可能要跑20到30小时。

- 回家,第二天再来查看测试结果。运气好的时候,大约有100个测试失败。运气差时,可能有1000个。随机挑选几个测试,试图理解你的假设出了什么错。可能还得考虑另外大约10个标志,才能真正弄明白bug的本质。

- 为了解决问题,增加一些新的标志,再次提交测试。又等20到30小时。

- 接下来的两周,不断重复这个过程,直到找到正确的标志组合。

- 终于有一天,你成功了,没有一个测试失败。

- 为你的更改新增上百个测试,以确保下一个不幸碰到这段代码的开发者不会破坏你的成果。

- 为最终版本的测试提交工作,然后提交审查。审查过程可能又要花费2周到2个月。与此同时,继续修复下一个bug。

- 两周到两个月后,一切完成后,你的代码终于能合并到主分支了。

以上是Oracle程序员修复bug的真实写照。想象一下开发新功能得有多艰难。开发一个小功能,比如增加新的认证方式(例如对AD认证的支持),竟然需要半年到一年,有时甚至两年!

这个产品居然还能运行,真是个奇迹!

我已经不在Oracle工作了,以后也不会再回去了!

http://t.cn/E2z8frt

发布于 美国