当前位置:  开发笔记 > 前端 > 正文

如何在保持意大利面条代码的同时保存我的理智

如何解决《如何在保持意大利面条代码的同时保存我的理智》经验,为你挑选了5个好方法。

只是想听听一些建议(和舒适......),这将帮助我控制一些复杂的意大利面条代码 - 这是由多个程序员(通常从不相遇)长时间开发的代码.解决方案的功能只是相互补充.

通常我倾向于看到两种程序员:

    "害怕死亡的程序员" - 那些家伙不会碰任何他们不需要的东西.他们可能会使用快速而肮脏的修复程序完成维护任务,这将使下一个程序员开始寻找他们的家庭地址;-)

    专业人士:
    它有效

    缺点:
    你希望你再也不会看到这个代码..

    "教师" - 那些可能会重写整个代码,同时完全翻新其逻辑.

    专业人士:
    嗯,有人必须做肮脏的工作......

    缺点:
    需要更长的时间,可能其中一个最重要的功能将从产品中神奇地消失

从程序员生活中这个黑暗的一面听到你的个人经历会很高兴.

我特别好奇听到任何理论/实践建议,这将有助于我深入了解意大利面条维护任务而不会感到如此痛苦.



1> dommer..:

在开始之前,我尝试在测试中包装非常糟糕的遗留代码.老实说,我在测试中非常扼杀它!然后我有信心潜入重构我需要的地方.

你可能想读

书籍封面http://ecx.images-amazon.com/images/I/51RCXGPXQ8L._SL500_AA240_.jpg

有效地使用遗留代码


如果代码完全可测试,那不是真正的意大利面;)
关于构建单元测试的好主意,但我想如果你在血汗工厂工作,他们现在想要结果!

2> Steve B...:

虽然最好的建议是,正如本主题的其他每一张海报都指出的那样,编写测试时,我经常遇到这种情况不切实际的情况.如果代码那么糟糕(1000行方法,嵌入和未记录的幻数,代码重复等等),它也可能有另一个问题,即它是深度耦合的,组件几乎不可能被隔离.

(示例 - 在启动时加载并缓存数百个不同数据库对象的代码库.组件假设存在缓存的随机部分,缓存的某些部分假定缓存的其他部分 - 另外,您必须加载整个事物得到任何东西 - 代码依赖于静态和混杂的公共状态变量,在那里无法确定谁设置这些变量,甚至是什么意思)

我能提出的最佳建议:

首先尝试修复简单/明显的事情.硬编码路径,幻数引用,明显的代码重复.也许快速发布可以消除最严重的20%违规行为的风险很低,并使下一步更容易实现.

为refarctoring获得组织支持 - 通常没有意愿或愿意做不会增加直接功能的工作,并且有可能破坏现有代码.当然,重构的理由很多,但不是每个人都会购买它们.如果组织不支持,您可能需要放弃.

让其他开发人员接受相同的观点 - 如果他们有任何好处,他们可能会像你一样对代码库感到不满.如果新代码构建为更好的标准并且人们受到激励,他们将开始修复旧代码,因为需要应用调整.

如果某个特定的子系统真的非常糟糕,并且已达到几乎不可能实现新开发的程度,那么您可以利用这个机会重建它.



3> thedz..:

文献.彻底记录.你做出的每一个改变 - 你发现的每一个警告,你追踪的每一个奇怪的逻辑流程,每次你认为"这可以做得更好" - 记录它.

这是在没有实质性重写的情况下减慢并最终消除系统熵的唯一方法.


即使你从不查看你写的文档,编写它的行为也会帮助你搞清楚.

4> Manrico Cora..:

我知道的唯一方法是:

    写测试

    重构

    运行测试

    修复坏了什么

    为新功能编写测试

    介绍新功能

    运行测试

    修复坏了什么

你可以这样生活.

注意:有时候单位测试意大利面条代码真的很难:生成HTML的3Klines方法,与业务逻辑纠缠在一起的DAO,强耦合类......在这种情况下是一个带有自动重构的好IDE(能够提取方法,到开始)和一些像Selenium这样的测试工具可能非常方便.



5> John Ellinwo..:

充分利用两者.将项目组织成逻辑部分,最好使用反向工程UML类图,并查看互连的位置.任何松散连接的东西都是重构的理想选择.在任何停机时间,也要检查强连接,并查看哪些组可以完全拆分为具有最少更改的单独模块.弄清楚在重写整个事情之前,真正发生了什么.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有