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

发布时间 :2023-11-29 09:36:51
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工作了,以后也不会再回去了!

网页链接

热门评论

朝鳥
朝鳥

世界就是个草台班子[doge]

骑马拉弓
骑马拉弓

我就是来评论区找这句话的,找到了就爽了[doge]感谢

ivanary
ivanary

你能搭个草台班子吗?

i奎师那
i奎师那

GPT能对这样的代码进行优化吗[疑问][疑问]

吃瓜群众路易斯
吃瓜群众路易斯

Gpt表示:我自己的代码都已经是屎山了。

上了岸的鱼19821
上了岸的鱼19821

ai创造性的不敢说这种大批量重复测试的工作最合适了[二哈]

l-rl-r
l-rl-r

这个系统是工作生活平衡的保障

getbusyliving1
getbusyliving1

[允悲],那么问题来了,有哪些大型软件是以代码质量高而著称的吗?

等着退休吧
等着退休吧

开源中新的流行的都比较好看一些。

sydchn
sydchn

质量高约等于把规模降下去

blueatwind
blueatwind

有代码重构的机会吗

想不出昵称的Rudy
想不出昵称的Rudy

巨型项目最怕年轻气盛的新成员有这种冲动……每次我看到小同事跃跃欲试想重构,我都会给他按下去

_走路草
_走路草

哈哈哈哈哈哈哈哈我羡慕你能问出来这个问题

老张评论
老张评论

著名的化学工程模拟软件aspenplus,核心代码是创业者当年读博士时熬夜的fortran代码。估计后来他自己也看不完全明白。谁也不敢动。再谁也不明白核心的基础上开发,可不是就是穷举一切可能。

34伍陆
34伍陆

大厂动辄几万几十万的员工数,不就是专业打补丁的蚂蚁大军吗?

轱辘猫
轱辘猫

现实中多少屎山是建立在Oracle数据库上的[二哈]

小康早睡
小康早睡

想起来之前的项目,用户进入一个界面后立即点返回就偶尔崩,然后前辈的patch,刚进入页面先禁止触摸屏,等超时两秒后,才使能触摸。

思维凌乱
思维凌乱

回避问题也是解决问题的一种方法[doge]

shawyf
shawyf

没事,这也算是优化用户体验了。

一切皆有可萌
一切皆有可萌

举个例子:Excel算闰年的方法是错的,1900年在Excel里是闰年。你拉日期的时候,能拉出1900-2-29,但是2100年就会正确判定为平年。微软不是不知道这个错误,而是为了确保产品向下兼容,能正确打开先前版本的文档,必须得让1900年判定为闰年。

一切皆有可萌
一切皆有可萌

更悲催的是,1900年判定为闰年这个错误,甚至不是Excel的,而是更早的一款电子表格软件lotus-1-2-3的。但是微软为了占领电子表格软件的市场,必须要兼容lotus-1-2-3的文档格式,结果就必须把它的bug也兼容进来。[苦涩]

威哥伯威
威哥伯威

威武。[good]试了下Excel2010确实如此。

凌乱风中独自美丽
凌乱风中独自美丽

突然释然了,任何一个大点的新型项目,就没有不冗余的吧,没有经验的情况下,不可能不踩坑。

L10N31
L10N31

此程序依靠bug运行,请勿随意改动[doge]

川栗
川栗

现实生活中的大型组织机构也是一样的,凡是想去理一理,都要付出几倍于建造的时间并且冒着崩塌的风险。

皮特叶
皮特叶

💩山上面打补丁,补丁漏了再盖被子。

DeProfundis
DeProfundis

别说是别人写的代码了,那天整理硬盘发现自己08-09年写的代码给我整郁闷了……我简直怀疑现在的我是被夺舍了的人格,脑子里全是“这个地方我为啥要这样写?这段代码起什么作用?”[允悲]….

忘了一个舒
忘了一个舒

带我入行老乡[doge]

2049年的世界
2049年的世界

接手别人的代码确实是一件比较痛苦的事情,尤其是代码文件多行数多,结构不清晰,注释还不完整的情况。看他这几行代码,不知道他是一个什么实现思路,想看看设计文档又没有,就很头疼。

十楼之上
十楼之上

二十出头的时候,接手一套软件时,对里面大量使用标志控制逻辑分支的做法,大肆批评。维护几年后,对标志系统用的不亦乐乎,再也不批评了。人总是要向现实妥协

NARUTO_SAI_
NARUTO_SAI_

世界本来就是大型草台班子

Lucki七七
Lucki七七

之前看到代码的注释时间比我年纪还大,反正我是不敢动。

InAndOutOfLove1
InAndOutOfLove1

想象一下20年以后

网上冲浪手_
网上冲浪手_

以后软件开发不如直接让AI写汇编,人类专门来搞测试农场得了()

新齐谐者
新齐谐者

滴滴:严重怀疑你同时在内涵我

今日热门