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

2023-09-14 14:32:13 +08:00
 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 谢谢他先给我清空,还煞有其事地写个注释。

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

13191 次点击
所在节点    程序员
102 条回复
Kenmin
2023-09-15 11:34:14 +08:00
我现在是重构屎山的第三个礼拜
理顺需求后发现原有代码五成以上是废弃物,不如按照需求重写
问题在于得先理顺需求……
unco020511
2023-09-15 11:39:19 +08:00
我只能说重构要谨慎
darkengine
2023-09-15 11:49:18 +08:00
这个项目不适合重构,适合重写,根据需求重新用 PyQt 开发,还不用看原来的屎山代码。
opentrade
2023-09-15 11:55:07 +08:00
多么完美的注释
moyupoi10
2023-09-15 12:01:10 +08:00
我们公司也是,之前刚入职的时候给我丢了 5 个屎山项目,有的项目一页 1 万多行代码,函数重复、命名名称相同并大小写不同,项目有的 5~6 年,有的 1~3 年,让我一周内重构,当时脑子就翁一下,仿佛觉得我一周可以完成别人团队 5 年完成的项目
franswish
2023-09-15 12:03:42 +08:00
领导分配工时,让你重构还不好啊(前提是工时合理)
领导说,就在屎山上继续开发不是更崩溃
bclerdx
2023-09-15 12:15:18 +08:00
@moyupoi10 让你一周完成,因为你是大拿。
NutChocHoney
2023-09-15 13:26:16 +08:00
既然领导知道是屎山,重构有难度,就直接把问题抛出来,多分几个人一起做,别自己闷头干啊
bzsh
2023-09-15 14:16:07 +08:00
@sundev 这不是屎山,这是金山,这是饭碗的加固器
xieren58
2023-09-15 14:21:37 +08:00
拿钱办事...
kkk9
2023-09-15 14:32:25 +08:00
@bzsh #89 饭碗加固器?那必然是另一座屎山。
debuggeeker
2023-09-15 15:53:15 +08:00
这有啥,证明你心态不行,我已经内心毫无波动
nebulabox
2023-09-15 16:30:09 +08:00
自以为是的人很多,总觉得自己的代码能比别人写的好,瞎几把折腾,最后一点用没有,还导致很多 bug 。

比如你说的例子,你如果第一行的清空去掉,多线程环境完全可能出现直接 core dump 。因为后续的 ScanFirewareBin 执行可能在在另一个线程,里面代码很有可能还会访问 mcuFirmWare_path 的值,结果就上了以前的垃圾数值。即使不是多线程,也可能出错。

还有各种可能你根本无法预知。也可能那个前任只是随手写了一行没用的代码,但是没副作用,但是你就不应该瞎几把改。
yxzblue
2023-09-15 17:17:32 +08:00
还有各种可能你根本无法预知。也可能那个前任只是随手写了一行没用的代码,但是没副作用,但是你就不应该瞎几把改。

---
可能也不是没用的代码,写的时候有他的原因,就是三个月之后 问他,他也不记得了。然后少了那行代码,特殊情况就会出问题。为什么会在某个情况出问题,那还不是前前前任留下的屎山导致的咯
dwzfuck
2023-09-15 17:30:27 +08:00
韩信带净化, 能跑就行, 千万别做铲屎人。
flyqie
2023-09-15 17:41:28 +08:00
@dwzfuck #95

前面老哥说得好,要么人能跑要么代码能跑。
kongkong23
2023-09-15 17:41:52 +08:00
没有 KPI ,不重构能跑和重构后能跑,是一件事;
如果真的不能跑了,那又是另一件事;

有 KPI ,不重构能跑和重构后能不能跑,是两件事;
jinsongzhao
2023-09-15 18:13:05 +08:00
我就经常重构,甚至重写,乐在其中,不过基本都是自己的,别人的少。
HowToMakeLove
2023-09-15 18:16:54 +08:00
先画图吧
easteast123
2023-09-15 20:48:49 +08:00
以前听过合作方做财务软件,他们的代码用了 6 种语言,都是一茬一茬的人在给自己做试验

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

https://ex.noerr.eu.org/t/973749

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

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

© 2021 V2EX