2500 万行代码的项目,你敢不敢动?

2019 年 1 月 2 日 CPP开发者

(给CPP开发者加星标,提升C/C++技能)


转自:开源中国

最近网友在 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 工作了!



推荐阅读

(点击标题可跳转阅读)

甲骨文要拿 JavaScript 开刀了?

甲骨文解雇所有 Solaris 技术员工

Oracle 被指在开源 JMC 后迅速解雇原开发团队


看完本文有帮助?请分享给更多人

关注「CPP开发者」加星标,提升C/C++技能

喜欢就点一下「好看」呗~

登录查看更多
0

相关内容

Oracle Database(又名 Oracle RDBMS)是甲骨文公司的一款关系数据库管理系统。到目前为止仍在数据库市场上占有主要份额。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
212+阅读 · 2020年2月21日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
160+阅读 · 2019年10月28日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
【教程】如何从零开始构建深度学习项目?
七月在线实验室
7+阅读 · 2018年4月23日
实战 | 40行代码实现人脸识别
七月在线实验室
3+阅读 · 2018年3月7日
GitHub上12月份最热门开源项目
程序猿
4+阅读 · 2018年1月9日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
可怕,40 行代码的人脸识别实践
51CTO博客
3+阅读 · 2017年7月22日
Arxiv
7+阅读 · 2018年6月8日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
10+阅读 · 2018年3月23日
Arxiv
7+阅读 · 2018年3月22日
VIP会员
相关资讯
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
【教程】如何从零开始构建深度学习项目?
七月在线实验室
7+阅读 · 2018年4月23日
实战 | 40行代码实现人脸识别
七月在线实验室
3+阅读 · 2018年3月7日
GitHub上12月份最热门开源项目
程序猿
4+阅读 · 2018年1月9日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
可怕,40 行代码的人脸识别实践
51CTO博客
3+阅读 · 2017年7月22日
相关论文
Arxiv
7+阅读 · 2018年6月8日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
10+阅读 · 2018年3月23日
Arxiv
7+阅读 · 2018年3月22日
Top
微信扫码咨询专知VIP会员