资讯专栏INFORMATION COLUMN

Java代码分析器(六): 大规模自动重构经验谈

Caizhenhao / 1649人阅读

摘要:接口级行为不变,内部行为尽量不变,类结构尽量不变为代码模式和场景确立一组明确的前提条件,重构必须满足前提条件才能进行。但是大规模难以完美做到这三点。因此自动重构是革命性的技术。

另载于 http://www.qingjingjie.com/blogs/7

最后再啰嗦一篇吧,分享些宏观经验,供需要做类似事情的人参考

技术示例在前篇! 伸手党绕行!

大规模系统重构,不可避免要触到各个团队/模块的很多代码,很可能破坏功能,到时候你就成众矢之的了,tickets扑面而来,到处灭火。

怎么确保不破坏功能呢?就要做安全重构。(2016/4/16做了补充,以方括号[]标出)

充分了解系统架构,调查各种代码模式和场景(争取发现corner case),手工重构几个试试。

[然后把手工过程给自动化]

尽量做等价变换,把代码改成等价形式,一般都是安全的。(注意:涉及反射的代码无法等价变换。)

[改变类结构,对非反射代码是等价的,对反射代码是不等价的]

绝不能改变代码语义(重构本来就不该改变语义)。

[接口级行为不变,内部行为尽量不变,类结构尽量不变]

为代码模式和场景确立一组明确的前提条件,重构必须满足前提条件才能进行。

[分类处理,列出计划再行动]

如果完美做到以上三点,新代码基本上是不需要测试的(抽样测试即可),否则要做针对性的测试。但是大规模难以完美做到这三点。

[TraceSonar辅助确立测试范围 https://github.com/sorra/TraceSonar]

简单重构只需要语法分析,复杂重构可能需要语义分析。该做的工作要做足,别出篓子。

[实践发现Most Valuable Product只够用来demo]

难以自动判断的场景,可以作标记(例如在该位置造成编译错误或插入注释)。自动重构结束后,找到标记(例如编译一遍),然后人工处理。

[注释无法直接插入,如果你想知道解决办法,请评论]

尽可能自动化。一来节约人力,二来机械重复的人工操作极易出错,而机器是不会犯错的。因此自动重构是革命性的技术。

[还可以自动生成改动列表, 相关文档, etc.]

补充:如果资源允许,当然要做好测试。

是不是写得太抽象?大家给点反馈。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65297.html

相关文章

  • 【译】 13简单的优秀编码规则(从我15年的经验

    摘要:记住,带有严格测试的代码可能比没有测试的代码更有害。保持简单,极度简单不要编写复杂的代码。并且它将是全球代码文档的良好开端。使用这样的迭代来部署质量更新,而不是腰部时间和资源对不合理的愿望和牺牲与质量。 原文地址:https://hackernoon.com/few-si... showImg(https://segmentfault.com/img/bVJdkG?w=1000&h=2...

    Eidesen 评论0 收藏0
  • 【译】 13简单的优秀编码规则(从我15年的经验

    摘要:记住,带有严格测试的代码可能比没有测试的代码更有害。保持简单,极度简单不要编写复杂的代码。并且它将是全球代码文档的良好开端。使用这样的迭代来部署质量更新,而不是腰部时间和资源对不合理的愿望和牺牲与质量。 原文地址:https://hackernoon.com/few-si... showImg(https://segmentfault.com/img/bVJdkG?w=1000&h=2...

    zhunjiee 评论0 收藏0
  • 【译】 13简单的优秀编码规则(从我15年的经验

    摘要:记住,带有严格测试的代码可能比没有测试的代码更有害。保持简单,极度简单不要编写复杂的代码。并且它将是全球代码文档的良好开端。使用这样的迭代来部署质量更新,而不是腰部时间和资源对不合理的愿望和牺牲与质量。 原文地址:https://hackernoon.com/few-si... showImg(https://segmentfault.com/img/bVJdkG?w=1000&h=2...

    aisuhua 评论0 收藏0
  • 【译】 13简单的优秀编码规则(从我15年的经验

    摘要:记住,带有严格测试的代码可能比没有测试的代码更有害。保持简单,极度简单不要编写复杂的代码。并且它将是全球代码文档的良好开端。使用这样的迭代来部署质量更新,而不是腰部时间和资源对不合理的愿望和牺牲与质量。 原文地址:https://hackernoon.com/few-si... showImg(https://segmentfault.com/img/bVJdkG?w=1000&h=2...

    KunMinX 评论0 收藏0
  • 朱晔的互联网架构实践心得S1E1:Pilot

    摘要:架构团队的人是不是很轻松,业务团队天天加班搞项目,架构团队貌似都是在喝茶聊天研究一些不实用的东西。架构团队的架构师最好是在业务团队深耕过,知道痛点所在的,这样研发出来的系统和工具能够和公司目前的项目所匹配发挥最大的作用,让大家爱不释手。 最近几年写博客确实写得少了,初出茅庐的时候什么都愿意去写,现在写一点东西之前会反复斟酌是否有价值。工作十几年了,做了N多个互联网系统,业务涉及教育、游...

    CoderBear 评论0 收藏0

发表评论

0条评论

Caizhenhao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<