你见过的最糟糕的代码是什么?

最近,一位网友在Hacker News上发布了一个关于“你见过的最糟糕的代码是什么?”的问题,引起了广泛的关注和讨论。评论的数量接近600.其中,ID为“oraguy”的程序员对Oracle数据库代码进行了热烈的讨论。

Oracle 12.2。它有近2500万行C代码。

这有多可怕,很难想象!在不破坏数千个现有测试的情况下,去更改产品中的单行代码。几代程序员已经在有限的项目期间编写了这段代码,而且其中充满了垃圾代码。

非常复杂的逻辑,内存管理,上下文切换等,都由数千个 flag 连接。整个代码充满了神秘的宏命令。如果不取出笔记本并手动展开相关的宏命令,则无法理解这些命令。这可能需要一两天才能真正理解宏命令的作用。

有时您需要理顺20个不同标志的值和效果,以预测代码在不同情况下的行为方式。有时多达数百个 flag!这并不夸张。

这款产品还活着并且仍然可用的唯一原因是数以百万计的测试!

以下是Oracle数据库人员的日常例程:

开始处理新的bug。

花了两个星期的时间才试图理解20种不同的旗帜,这些 flag 以神秘的方式相互作用,导致了这种两难境地。

添加另一个 flag 来处理新的特殊场景。添加几行代码来检查此标志并修复有问题的情况以规避错误。

将更改提交给具有大约100-200台服务器的测试服务器集群,这些服务器将编译代码,构建新的Oracle数据库,并以分布式方式运行数百万个测试。

回到家里。第二天来上班,继续处理其他错误。测试可能需要20-30小时才能完成。

再回家吧。回来工作并检查您的集群测试结果。如果进展顺利,将会有大约100次失败的测试。如果你运气不好,将会有大约1000次失败的测试。随机选择一些测试并尝试找出你的假设出了什么问题。也许您需要考虑超过10个 flag 才能真正理解错误的本质。

添加一些 flag 以尝试解决问题。再次提交您的更改以进行测试。等20-30个小时。

重复两周,直到你得到结合这些 flag 的“神秘咒语”。

有一天,你会成功,不再失败。

为您的新更改添加100多项测试,以确保不幸接触此新代码的下一位开发人员永远不会破坏您的修复。

提交最后一轮测试的结果。然后提交审核。审查本身可能需要2周到2个月。所以继续处理下一个bug。在2周到2个月之后,一切准备就绪,代码最终会合并到主分支中。

以上是对修复Oracle中的错误的程序员的日常生活的描述,并不夸张。现在想象开发新功能是多么可怕。

开发一个小功能需要6个月到1年(添加新的身份验证模式可能需要2年时间,例如支持AD身份验证)。

这个产品本身就是一个奇迹!

我不再为Oracle工作了。永远不要再为Oracle工作!

©我们都爱曹帮主

长按下方二维码关注我们

每一次的突破

都想与你同在

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181120F0G7ZG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券