首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉勾
V2EX  ›  程序员

实在忍不住了,接手的代码太 shi 了

  •  1
     
  •   zycpp · 11 天前用 iPhone 发布 · 6218 次点击
    语言 C++

    0、变量命名随意,驼峰、下划线混用。
    1、函数、变量没注释,意思全靠猜
    2、单个函数极长,四五百行的函数随处可见。
    3、c style 和 c++ style 混用
    4、源文件编码混乱,有 u8,u8+bom,gbk 都有
    5、代码冗余,一样功能的函数重复实现好几次,只是换了个名字…
    6、不明意义的数字满天飞,你猜我这里的 128 跟那边的 128 是不是同一个意思?

    溜了溜了
    60 回复  |  直到 2019-03-18 08:39:26 +08:00
        1
    hellowmykami   11 天前
    打扰了告辞
        2
    mokain   11 天前
    花一个月跟头儿说重构代码吧!
        3
    zycpp   11 天前 via iPhone   ♥ 8
    @mokain 有一部分就是头儿写的😩
        4
    ifxo   11 天前
    只要结果,不管过程
        5
    yoke123   11 天前
    爽啊
        6
    javaWeber   11 天前
    我刚进某公司,唉。。
    变量名有拼音,拼音首字母缩写。
    方法名有的大写,甚至还有下划线。
    有的函数居然长达 400 行。
    虽然代码很不规范,但是我没有其他更好的公司选择。
    我之前接触的都是小项目。现在做的项目大了点,有十多个服务模块。
    有点担心需求没法及时完成 。
        7
    learnshare   11 天前
    正常的,而且领导通常不让你优化
        8
    archxm   11 天前
    你行的
        9
    finab   11 天前   ♥ 1
    不知道为什么,感觉你说的这些问题还不算太 shi ,我完全扛得住
        10
    cookbook   11 天前
    处理这种代码是我的强项,梳理的过程很爽
        11
    TingHaiJamiE   11 天前   ♥ 5
    “能跑的线上代码不要动”
        12
    Kirscheis   11 天前 via Android
    小问题。。去年刚参与了某行业一个著名软件的开发,里面上千行的函数随处可见,还有各种早期 C,Fortran 代码的残留。。照样可以硬着头皮写下去。。。
        13
    ily433664   11 天前
    应该是很多人接手过
        14
    983081882   11 天前
    我也差不多 把老代码 Java 和 C++都有 翻译成 Java 还不能随心所欲 老代码日志随便打 111 222 333 随处可见 魔法值没注释 简直头大 最可气的看着老代码有的的地有逻辑问题 这是翻译还是不翻译 好挣扎
        15
    ODD10   11 天前 via iPhone
    @zycpp #3 妙哉妙哉
        16
    tcdh   11 天前 via Android   ♥ 2
    曾经接受过一个内核模块,两千多个全局变量,一个函数最长 3000 行。花了 6 个月才改完。
        17
    across   11 天前
    不是封装太差我就扛得住,上面几个大部分都是风格问题。
    算法或者 MagicNumber,如果没有点注释说明倒是读起来比较累····
        18
    jmc891205   11 天前
    是 c++的项目的话可以理解
    应该有一段不短的历史了
    说不定还是由一段古老的纯 c 代码发展而来
        19
    Leigg   10 天前 via iPhone
    别乱动,出问题了跑不脱
        20
    dinjufen   10 天前
    可能是很多人接手过的,都不想改罢了
        21
    l00t   10 天前
    能用就行。接手这种状态的代码也是正常情况,用不着惊讶。
        22
    Justin13   10 天前 via Android
    见过 1500 行的类,也见过 1800 行函数(数据引擎)
        23
    iceheart   10 天前 via Android
    这都小问题,到处是全局变量静态变量的才是真的有问题,头文件里静态变量声明才是问题
        24
    w01230   10 天前
    换个角度想想,有不少公司代码规范也是不同情况下命名规则不同。
        25
    anyele   10 天前 via Android
    这种代码不是正常操作?
        26
    guokeke   10 天前 via Android
    如果向老大吐槽,只会让老大觉得你不够专业。要么硬着头皮搞,要么走。
        27
    zmxnv123   10 天前 via Android
    有本书叫程序员的呐喊,提到当接手一个复杂的 c++项目时的解决方法..







    看到 c++想都不用想,赶紧跑路就对了。
        28
    lepig   10 天前
    稍微截点图给兄弟们开开眼呐
        29
    AngryMagikarp   10 天前
    这个应该是好多代程序员的结果。
        30
    chinese_zmm   10 天前 via iPhone
    是维护还是添加新功能继续二次开发?维护建议不要改,针对 issue 解决就是
        31
    noe132   10 天前
    我见过 200 多行的 if 套 if,各种重叠 if,里面各种 magic number

    溜了溜了
        32
    timetolo   10 天前 via Android
    感觉像是我刚写完的代码
        33
    timetolo   10 天前 via Android
    @noe132 我见过九级嵌套 if,并且还画流程图了
        34
    jim1002   10 天前
    理解烂代码也是一门技术
        35
    lhr_lovehoney   10 天前
    祖传代码 hhhh
        36
    xiaottt   10 天前
    传家包,不要乱动

    if it works, don't fix it!
        37
    fvckDaybyte2   10 天前 via iPhone
    5000 行的 h 头文件路过……
        38
    harde   10 天前   ♥ 1
    说点恶心的,我们去公共厕所,厕所里很多屎,气味也很臭,但是我们并不是来吃屎的,我们只要解决自己的,为屎山再贡献一点高度就可以了。。。

    靠。。。我都写不下去了。。。
        39
    Lighfer   10 天前
    和我去年入职情况一样,画了一个月理清逻辑后像头儿申请重构了,可以看看这个片段:
    https://www.zhihu.com/question/20402322/answer/389075475
        40
    ymcj001   10 天前
    @timetolo 这算是很良心的了。感谢他吧。
        41
    zwy100e72   10 天前
    有耐心留下来重构,没想法换地方也行
    我这边有个 4k 行的 if 了解一下
        42
    DesertCamel   10 天前 via Android
    楼主,我跟你的情况一模一样。刚进公司,java 后端,发现接手的代码太烂,而且有一部分烂的就是上级写的。代码随便拷贝,混乱的耦合。第一想法是溜之大吉,但目前福利给到位了,外面也很冷,还在观望,并一步步整理重构
        43
    lvxiang119   10 天前
    以前接受一个项目,入口文件 3000+行,优化到 500 行。最后发现无法运行,于是移除了该模块。求夸。
        44
    Moming   10 天前 via Android
    我也遇到了,第一次强忍着改了点交差了,第二次还给我这种任务我就直接不干了,看着脑壳疼。。。
        45
    uyhyygyug1234   10 天前
    那你是没看过丰田的

    软件设计的基本要求是模块尽量简单化,因为这样可以一来更易于阅读二来更易于维护。但丰田的工程师显然没有遵循这原则。Barr 使用一种工具自动根据代码的可能分支数量评估函数的复杂度,结果是丰田的软件中至少有 67 条函数复杂度超过 50,意味着运行这个函数可能出现超过 50 种不同的执行结果,属于“非可测”级别。因为为了测试这 50 个不同的结果,必须准备至少 50 条不同的测试用例以及相应的文档,在生产环境中一般是不现实的。作为比较,Barr 表示他自己的公司严格执行的其中一条规定就是任何代码复杂度不能超过 30,否则不合格。而在这 67 条函数中还有 12 条复杂度超过 100,达到“非可维护”级别,意味着一旦发现缺陷( Bug )也无法修复,因为实在太复杂,修复缺陷的过程中会产生新的缺陷。其中最复杂的一条函数有超过 1300 行代码,146 个可能执行路径——正好用于根据各传感器数值计算节气门开关角度

    还有一些别的匪夷所思的发现。比如丰田的软件包含了超过一万一千个全局变量。如果你不知道什么是全局变量,那么只需要知道软件设计的一般原则是要尽量少使用全局变量,因为有可能带来无法预测的结果。这里的“少”的意思是“尽量接近零”,绝对不会是一万一千个。
        46
    suzic   10 天前 via Android
    0,1,2,5 我接手的项目也存在…
        47
    srt180   10 天前
    没有代码审查环节吧……做个代码审查,慢慢改起来……
        48
    heber2211   10 天前
    你大概没有见过把入参反复从 map 里取出来放到 list
        49
    ymj123   10 天前 via Android
    你列的这些还好吧。主要是业务逻辑清不清晰,我以前接手的项目,你说的这些全有,并且还是 shell+Java+Python+groovy 的。业务也复杂。出差去客户那里搞了一个月勉强吃透。
        50
    loryyang   10 天前
    最好的处理办法就是:新需求就膏药贴起来,然后代码质量可以成为各种线上问题、开发效率的无赖挡箭牌
    然后长远就是:开辟新战场,把垃圾交给后来人
        51
    dearxe2v   10 天前
    根本原因,钱到位了,si 也是香的
        52
    turi   10 天前
    溜了 才是正道,吃屎是人吃的吗
        53
    GeruzoniAnsasu   10 天前
    其实太正常了,会有这样的代码仅仅是因为维护周期太长了而已,并没有什么真的很屎的地方

    风格不统一大不了全 refactor->rename 成顺眼的,别改了一半算了够了不改了就行——上一个人可能就这么想的

    C/C++混用 也太正常了,项目开始之初一半都会想着“啊 C++运行库太臃肿了我们 pure C 吧”然后几个版本之后“啊 C 写起来太慢了移植到 C++吧反正性能不会掉多少”,然后前面那些 C style 的代码还工作得好好的没必要改就留着了

    单函数长有些是没办法,特别是 IO 操作,各种移位拆结构拼指令读写协议字段,或者涉及复杂状态转移而当初又没好好设计状态机模型的,都会变得又长又看不懂,其实个人觉得箭头形 for if for if 都算很好看的了,起码逻辑还是很清晰的,嵌套得再深也说不上复杂,模式是很单一的。那种 reinterpret<uint8_t>(data << 3 | data2>>5&0x3)+(cmd<<16)什么的才比较令人崩溃

    编码混用完全不是问题,甚至源码仓库进去出来就能统一的事,觉得这个是问题倒是暴露了整体水平



    个人觉得就可读性程度来说最难入手的就是上面说的迷之协议的 IO
    bug 可维护程度来说最难的是各种原始无高级封装的多线程代码,那个调起来,最高目标很可能是“两个小时之内不会崩”
        54
    SyncWorld   10 天前
    不要说代码 shi 有可能你们的老板和我老板一样 早上定需求 中午出 UI 晚上功能上线呢~~~ 同行理解下
        55
    wd   10 天前 via iPhone
    先别急骂人 自己想想为什么会进这样的公司 是不是自己也不行
        56
    vevlins   10 天前
    @timetolo 五百行组件 38 个 if,一边抓头发一边写
        57
    Fisonglin   10 天前
    随手看了一眼,函数就有 3000 行,二十多年的老项目没办法啊
        58
    conwey   9 天前
    @mokain 好巧,前面那哥们也是重构的。
        59
    alikesi   9 天前
    @SyncWorld 头皮发麻
        60
    TingHaiJamiE   8 天前
    @harde 话糙的有点厉害...
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3267 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 10:21 · PVG 18:21 · LAX 03:21 · JFK 06:21
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1