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

查看 128|回复 10
作者:villivateur   
因产品整合需求,要把一个 C++ Qt 写的上位机软件重构到 PyQt 中。主管不同意用现有框架直接包装原有的 Qt 程序,要我直接按需求重构。(可能主管也早就意识到了这个屎山迟早会炸)
这个屎山有多屎呢:
[ol]
  • 十年前的老代码,经手过无数人
  • 编译一下,平均一个文件十个 warning ,不乏长度为 9 的数组访问第 9 个变量这种奇葩事
  • 变量名潇潇洒洒,驼峰的,下划线的,大写的,小写的,混合的
  • 真正实现了“低内聚,高耦合”,三个线程,几十个函数,共用一个一百多行的结构体……
  • 有个功能是初始化两个设备(互相独立),两个设备各要执行几个函数,结果代码里面,是 A 设备先执行两个函数,B 再执行两个,再执行 A 的……不懂的人还以为这两个设备有啥奇妙的联系。
  • 驱动模块和业务模块居然用 extern 来共享一个变量……
    [/ol]
    还有很多……
    给大家欣赏一下屎山的一角:
    scanThreadData->mcuFirmWare_path = "";    //清空 mcu 固件路径
    scanThreadData->mcuFirmWare_path = ScanFirewareBin(IS_NGFDFILE, ProductCodeStr);
    这个 mcuFirmWare_path 是个 string 类型的数据,我 TM 谢谢他先给我清空,还煞有其事地写个注释。
    看这个代码,每看一行我都要理一下自己的脾气。

    屎山, 函数, 重构, 变量

  • codeself   
    试试分模块 or 分方法,让 ai 帮你重构
    sundev   
    说实话,能重构成功的可能性真的很小。
    我这边维护的一个 asp 的代码,十八年的代码,一个文件几万行代码,一个函数几千行常有,看都看不来。我也曾尝试过用新语言重写,后来放弃了。
    shangwuli   
    你们会定期做代码评审吗?
    tyzandhr   
    低内聚,高耦合,有点绷不住
    putyy   
    屎山一角属实厉害
    ygtq   
    主管不同意用现有框架直接包装原有的 Qt 程序,要我直接按需求重构
    那就直接回复说,重构需要 x 个工作日( x 算进自己的从屎山代码恢复的时间)
    greatbody   
    @sundev 这个可以考虑使用绞杀者模式。
    mightybruce   
    PyQt 也没多好吧, 那你自己不要写屎山就行。
    txhwind   
    对能工作的老代码,以包装为主,尽量别改动内部。实在要大改,建议重写。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部