大型 Android 系统重构实战
黄俊彬
Thoughtworks 资深咨询师
2840 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
大型 Android 系统重构实战
15
15
1.0x
00:00/00:00
登录|注册

06|分析工具:几百万行规模的遗留系统怎么分析?

你好,我是黄俊彬。上节课我们分析了 Sharing 项目旧架构的痛点,同时也对新的架构做了规划,接下来我们就开始落地改造。不过在动手之前,我们要先设想一下如何计划整个重构的工作。
首先,我们已经设计了未来的架构,那怎么把现在的代码变成未来架构的样子呢?这是个关键问题。其次,我们还得对重构的复杂度有一个整体的评估,这样才能合理安排任务,因为架构的改造没办法一蹴而就,只能分而治之。最后是怎么验收,也就是如何确保重构后的代码符合未来的架构设计?
总结一下,就是这三个方面的问题。
1. 怎么评估工作量?从旧的架构重构到新的架构,我们总共需要调整哪些代码?
2. 怎么制定优先级?哪些代码先重构,哪些代码后重构?
3. 怎么进行度量?如何确定阶段性成果和最终成果?
这些问题都是我们在落地改造之前要先搞清楚的,不然最终的架构重构结果,大概率很难像设计的那样落地。我们这个课程中的 Sharing 项目由于做了简化,代码量不多,分析起来相对容易。但在实际的项目中,我们往往面对的是几百万行规模的遗留系统,如果仅靠人工分析,效率肯定是非常低的,而且还容易出错。
所以,这里建议的做法是采用自动化工具来辅助分析遗留系统。而分析遗留系统的整体思路就是,借助自动化的工具,分析现有架构与未来架构设计的差距,梳理出需要重构的代码。然后就可以制定优先级,分阶段重构改造了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何分析大规模遗留系统并计划整个重构工作。作者提到了评估工作量、制定优先级和进行度量这三个关键问题,并介绍了两种常见的遗留系统重构分析工具:ArchUnit和Android Studio的Dependencies依赖分析工具。作者详细介绍了这两种工具的使用方法和优缺点,并建议在实际项目中结合使用。通过这些工具,读者可以更好地规划和实施系统重构工作。文章还提出了思考题,鼓励读者分享项目中的架构守护经验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大型 Android 系统重构实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • zenk
    老师,业务组件的优先级,是不是复杂度低的优先? 我理解这样重构以后可能会降低复杂度高的业务组件

    作者回复: Hi,zenk。如果这里指的是重构的优先级。通常情况下得结合业务需求的迭代情况以及本身组件的耦合情况来综合判定。

    2023-02-22归属地:上海
    1
  • 稻草人的忧桑
    dependency的依赖分析,单例是不是分析不出来

    作者回复: Hi,何敬。dependency分析工具主要是分析依赖的,如果想扫描单例可以考虑用其他的代码扫描工具。

    2023-03-26归属地:安徽
    2
  • 永远年轻
    答案是使用 Dependency Validation 功能检查代码。具体来讲就是点击 Edit Rule,使用正则表达式配置约束条件,从而扫描代码中不符合规则的异常依赖。就像后面图里展示的这样,我们配置消息组件不能依赖文件和账户组件。 ====== 能详细讲下上述提到「正则表达式」吗

    作者回复: Hi,评论这里不好放截图。通常来说都是在IDE使用界面直接操作定义的。在.idea目录下会生成对应的配置文件。下面我贴一下示例。 文件模块Scope定义: <component name="DependencyValidationManager"> <scope name="file" pattern="src[Sharing.app.main]:com.jkb.junbin.sharing.feature.file.*" /> </component> 约束规则: <component name="DependencyValidationManager"> <state> <deny_rule from_scope="file" to_scope="message" is_deny="true" /> </state> </component>

    2023-03-18归属地:浙江
  • MrsLEO
    archunit支持kotlin项目么

    作者回复: Hi,MrsLEO。支持的,后续的重构改造也会有kotlin代码。

    2023-03-03归属地:广东
  • 3.141516
    老师好,ArchUnit只能找到当前module的包吗,其他module可以找到吗

    作者回复: 可以找到的,下一篇会有详细的使用介绍,你可以参考一下具体的用法。

    2023-02-23归属地:上海
  • peter
    请教老师几个问题: Q1:“层”、“片”是什么? ArchUnit部分,提到“还可以检查包和类、层和片之间的依赖关系”,这里的“层”和“片”是什么?“层”可能是指分层,那么“片”是什么? Q2:类依赖分析API的例子中,为什么只有一个类的名字X? 类依赖,必然有两个类,应该有两个名字,但此处为什么只有一个名字X? Q3:Jekens也能用于移动端吗? 我了解一点后端,印象中Jekens是用于后端的,安卓端也可以用吗? Q4:找不到Dependency Validation. AS2021,code - Analyze code - Dependencies,没有找到配置规则的界面。文中说“点击EditRule”,但我这里没有发现。 我是win10下用AS2021,

    作者回复: Hi,Peter。 Q1:层和片对应的是ArchUnit里面的Layer 及slices的api,具体的用法可以查看官网的介绍,https://www.archunit.org/use-cases。 Q2:这里是对的,应该还有另外一个类的名字Y,感谢反馈。 Q3:可以用于移动端。Jenkins只是一个构建的平台工具,与具体的语言及平台无关。 Q4:在Dependencies扫描结果上有一个小扳手🔧的图标就是EditRule。 期待你的再次留言🤝

    2023-02-22归属地:北京
  • Geek_6061ea
    如果模块太多,添加了非常多的 xxx.xml 文件到 Scopes 文件夹下,这些 xml 都会展示在 Android Studio 最左边的 Project/Android 切换菜单栏里面,影响每个同学切换 Project/Android 的体验。有什么方法可以不展示在 Project/Android 切换菜单栏吗?
    2023-04-20归属地:北京
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部