重构屎山的痛。我已经坚持了三四天了,必须要在这里发泄下,不然会炸。

291 天前
 villivateur

因产品整合需求,要把一个 C++ Qt 写的上位机软件重构到 PyQt 中。主管不同意用现有框架直接包装原有的 Qt 程序,要我直接按需求重构。(可能主管也早就意识到了这个屎山迟早会炸)

这个屎山有多屎呢:

  1. 十年前的老代码,经手过无数人
  2. 编译一下,平均一个文件十个 warning ,不乏长度为 9 的数组访问第 9 个变量这种奇葩事
  3. 变量名潇潇洒洒,驼峰的,下划线的,大写的,小写的,混合的
  4. 真正实现了“低内聚,高耦合”,三个线程,几十个函数,共用一个一百多行的结构体……
  5. 有个功能是初始化两个设备(互相独立),两个设备各要执行几个函数,结果代码里面,是 A 设备先执行两个函数,B 再执行两个,再执行 A 的……不懂的人还以为这两个设备有啥奇妙的联系。
  6. 驱动模块和业务模块居然用 extern 来共享一个变量……

还有很多……

给大家欣赏一下屎山的一角:

scanThreadData->mcuFirmWare_path = "";    //清空 mcu 固件路径
scanThreadData->mcuFirmWare_path = ScanFirewareBin(IS_NGFDFILE, ProductCodeStr);

这个 mcuFirmWare_path 是个 string 类型的数据,我 TM 谢谢他先给我清空,还煞有其事地写个注释。

看这个代码,每看一行我都要理一下自己的脾气。

12011 次点击
所在节点    程序员
102 条回复
codeself
291 天前
试试分模块 or 分方法,让 ai 帮你重构
sundev
291 天前
说实话,能重构成功的可能性真的很小。
我这边维护的一个 asp 的代码,十八年的代码,一个文件几万行代码,一个函数几千行常有,看都看不来。我也曾尝试过用新语言重写,后来放弃了。
shangwuli
291 天前
你们会定期做代码评审吗?
tyzandhr
291 天前
低内聚,高耦合,有点绷不住
putyy
291 天前
屎山一角属实厉害
ygtq
291 天前
主管不同意用现有框架直接包装原有的 Qt 程序,要我直接按需求重构
那就直接回复说,重构需要 x 个工作日( x 算进自己的从屎山代码恢复的时间)
greatbody
291 天前
@sundev 这个可以考虑使用绞杀者模式。
mightybruce
291 天前
PyQt 也没多好吧, 那你自己不要写屎山就行。
txhwind
291 天前
对能工作的老代码,以包装为主,尽量别改动内部。实在要大改,建议重写。
villivateur
291 天前
@sundev 已经重构了一部分了,还是有可能重构成功的,毕竟代码量也就几千行
daimubai
291 天前
十多年的代码如果重构,是不是也需要完整的测试一次呢
zjj19950716
291 天前
这时候心态很重要 能跑就行 不管是人还是代码
tool2d
291 天前
我前几天刚写了一堆"屎山", 主要是业务需求太复杂,一大堆电子表格的复合查询 SQL ,加上一堆数据透视表。

需求太杂,代码就开始放飞自我了。

等着空了重构一下,要不然几个月后,我自己都看不懂。
k9982874
291 天前
慢慢来呗,反正给钱干啥不是干。另外重构的时候别太梗直,新代码争取也搞成屎山,以后你就是唯一懂这坨屎的人,在公司就稳了。
Chad0000
291 天前
我重构两年了,国外电信公司。在这边就是躺平吃老本儿的行业,我带着团队重构。把代码一点点转移出来。
shyrock
291 天前
你现在的吐槽都没有在点上。
实际上代码难看、结构混乱根本不是问题。
真正的问题是缺少关键信息:
这座屎山还在被外界使用的功能到底有哪些?
有哪些你看上去是依托答辩的代码其实改掉就会在不确定的时间导致业务崩溃?
HackerTerry
291 天前
@Chad0000 羡慕国外程序员,请问您在哪个国家工作?
Chad0000
291 天前
@HackerTerry #17
新西兰
dog82
291 天前
为啥要重构,直接在屎山上拉新屎呗
dif
291 天前
屎山的精髓就是一代又一代人源源不断往上拉。所以重构啥,一堆人拉的屎才好看。只要不塌接着拉

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/973749

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX