代码阅读是技术人的必备技能之一,高效地梳理代码能够极大程度上提高开发人员的工作效率,进一步为业务创造新价值。
谈起代码阅读,大部分技术人员都不会陌生。无论是刚开始学习代码的小白还是久经沙场的代码大神,不管是学习优秀的开源项目还是做老项目的重构,代码阅读都是技术人的必备技能之一。在目前业务迭代迅速的环境下,高效地梳理代码能够极大程度上提高开发人员的工作效率,进一步为业务创造新价值。
笔者搜罗了几种业内常用的代码阅读方案,并从效率,易用,成本以及是否可调试四个角度进行对比,读者可以根据自己的喜好选择合适的代码阅读方案,也可以在评论区留下代码梳理的经验,欢迎讨论。> 评分仅代表个人观点
效率:⭐️
易用:⭐️⭐️⭐️
成本:⭐️⭐️(部分IDE需要收费使用)
是否可调试:是
IDE(Integrated Development Environment)应该是每个技术人员每天工作中接触时间最长的一类软件,尽管不同语言有不同的IDE,但殊途同归,IDE的核心功能是用来做代码编辑,很多IDE也在代码编辑层面做了性能上的优化。
尽管各类IDE都通过各种方式实现了代码阅读以及代码梳理的功能,但由于其作为编辑器的本质属性,从代码阅读的角度来讲面对很多大型项目易用性和效率比较低,难以快速阅读代码。
以Java为例,目前业界比较常见的IDE包括IntelliJ IDEA和Eclipse等,笔者比较熟悉IDEA,即以IDEA举例。
就IDEA而言,除了通过鼠标点击追踪(Tips: mac下默认快捷键Command+B,windows下默认快捷键Ctrl+B)的方式阅读代码外,还有很多辅助阅读代码的插件,包括RainbowBrackets(多彩括号,多重嵌套代码分析),Statistic(代码行数统计),SequenceDiagram(时序图绘制)等。
用SequenceDiagram自动化分析fastjson(1.2.84)中核心链路JSON.parseObject方法,可以看到大致的链路情况,但由于lambda表达式等比较难以解析,链路显示不够直观。
尽管IDE能够覆盖日常工作中的大部分场景,但面对大型项目的分析(如Android源码或者linux源码)就捉襟见肘,其效率及易用性较低的原因主要有以下几点:
微软的VSCode面世后,很多开源作者陆续推出了代码阅读的魔法级插件(CodeRunner,PartialDiff,TODOTree等等)以提升代码阅读体验,相信在各路大神的努力下,IDE阅读法终将成为最好的代码梳理方法。
效率:⭐️⭐️⭐️⭐️⭐️
易用:⭐️⭐️
成本:⭐️⭐️⭐️⭐️⭐️
是否可调试:支持第三方命令
官方网站(地址:https://www.sourceinsight.com/)
世界上只有两种人,用过SI的人和没用过SI的人,SI的出现让很多开发人员第一次感受到了代码阅读的快乐(相信很多Android开发者都用这个神器阅读过Android源码)。如果说IDE是专注于代码编写的平台,那么SI就是专注于代码分析的神器。SI为开发人员提供了以下核心功能:
SI几乎能够完成代码链路分析中的全部工作,但它也有着不容忽视的缺点:
效率:⭐️⭐️⭐️⭐️
易用:⭐️⭐️⭐️⭐️⭐️
成本:⭐️⭐️⭐️⭐️⭐️
是否可调试:支持第三方命令
官网网站(https://www.scitools.com/)
Understand是一款小众的代码阅读工具,国内的使用人群不多(主要原因是太贵了,并且没有Souce Insight那么多魔法可用),但有很多外国公司利用该软件进行日常的代码分析以及缺陷查找工作。Understand的核心功能和Source Insight比较类似,包括:
利用Understand通过代码直接生成流程图,相比较而言个人更喜欢Understand生成的各类图形,样式而言比Source Insight更为优雅
相比Source Insight,Understand支持在Mac平台及Linux平台上运行,但从用户的反馈看在进行代码分析时存在着一定的资源消耗过多的现象。与Source Insight一样,Understand也是需要付费的,而且没有免费试用版本,同时也不支持中文。
效率:⭐️⭐️⭐️
易用:⭐️
成本:无(开源)
是否可调试:否
官网网站(https://oracle.github.io/opengrok/)
OpenGrok是一款用 Java 编写的高效源代码搜索和交叉引用查询引擎,能够帮助开发人员深入了解代码,主要具有以下几个核心功能:
OpenGrok对代码管理工具做了特化性的支持,能够便捷快速地看到对应代码行的提交信息以及提交历史。
相对而言,OpenGrok在同类产品中具备一定的优势,其搜索速度以及文件加载速度较快,但其使用方法比较复杂,学习成本相对较高,并且也没有强大的可视化能力。由于OpenGrok核心依赖于Tomcat或其他web容器服务,需要用户根据系统环境自行配置(官方配置文档,地址:https://github.com/oracle/opengrok/wiki/How-to-setup-OpenGrok),整体而言易用性较低,应根据实际需要谨慎使用。
效率:⭐️⭐️⭐️
易用:⭐️⭐️⭐️⭐️
成本:无(开源)
是否可调试:支持IDE调试
官网网站(https://github.com/CoatiSoftware/Sourcetrail)
和OpenGrok一样,Sourcetrail也是一款开源的代码分析工具,并支持跨平台代码分析。Soucetrail提供了以下几个功能:
Sourcetrail是一款非常强大的代码分析工具,使用起来非常简单灵活,而且还可以关联IDE。但是其对软件拓扑的分析存在一定局限性,并且作者已经宣布不再更新,需要根据使用场景谨慎选用。
在该模块,我们将针对一款开源软件的核心链路分别采用上述几种代码阅读方案进行分析,以对比各类工具在实际操作中的效果。由于Source Insight和Understand均需要收费,本次仅采用IDE阅读法,OpenGrok以及Sourcetrail进行核心链路的简要分析。
由于阅读的目标是java代码,拟采用IntelliJ IDEA进行代码阅读。
我们在阅读代码时常常通过一个核心方法入手,接着逐层进行代码分析。针对本次代码阅读,以JSON.parseObject方法作为入口进行代码分析。JSON.parseObject方法主要功能在于将一个JSON的字符串解析成JSONObject的形式,JSONObject相当于fastjson中的基本运行单元,代表了一个具体的JSON块。
可以看到,parseObject存在很多重载方法,为了找到核心方法,需要逐级查找,过程比较繁琐。
在链路分析层面,首先可以分析核心类对应的继承关系,以初步分析各个类之间的关联关系。
接着可以借助各类插件实现初步的代码分析,绘制时序图,UML图等等,但想要深入了解代码结构还需要深入源码进行阅读,可视化支持程度不高。
OpenGrok的安装过程比较繁琐,有web开发经验的同学推荐根据官方文档的安装方式进行安装及配置。
OpenGrok有着强大的代码搜索功能,支持正则以及各类多条件表达式,并且由于预先进行了索引分析,代码搜索的速度比常规IDE迅速了很多,能够快速定位核心代码。
OpenGrok的一大缺点在于其不支持代码的可视化分析,在进行代码阅读时需要开发人员手动梳理链路。但其对代码中的各类标识符(symbol)均增加了支持快速查找的链接,相比ide而言,在阅读依赖关系比较复杂的代码过程中能够起到比较显著的提效作用。
Sourcetrail官方提供了支持各类平台的二进制安装包,支持一键安装,非常快捷。
Sourcetrail同样集成了高效的代码搜索功能,用户可以在搜索栏全局搜索代码。相比OpenGrok,Sourcetrail的界面设计更为清晰,但建立索引的速度相对较慢,且不能查看代码的历史提交信息。
该工具的一大优点在于利用脑图的形式展示了各类方法之间的调用关系,链路梳理比较清晰,能够让用户快速找到核心代码所在位置。
在代码链路分析上,Sourcetrail没有进行代码的拓扑关系分析,但能够通过点击脑图的形式结合代码阅读对代码链路进行梳理。通过IDE插件的形式可以将Sourcetrail与IDE关联,有效提高我们代码阅读的效率。
方法 | 效率 | 易用 | 成本 | 是否可调试 |
---|---|---|---|---|
IDE阅读 | ⭐️ | ⭐️⭐️⭐️ | ⭐️⭐️ | 是 |
Source Insight | ⭐️⭐️⭐️⭐️⭐️ | ⭐️⭐️ | ⭐️⭐️⭐️⭐️⭐️ | 支持第三方命令 |
Understand | ⭐️⭐️⭐️⭐️ | ⭐️⭐️⭐️⭐️⭐️ | ⭐️⭐️⭐️⭐️⭐️ | 支持第三方命令 |
OpenGrok | ⭐️⭐️⭐️ | ⭐️ | 无 | 否 |
Sourcetrail | ⭐️⭐️⭐️ | ⭐️⭐️⭐️⭐️ | 无 | 支持IDE调试 |
技术学习是一个不断积累和沉淀的过程,优秀的代码阅读工具能够提高我们学习和积累的效率,相信每个技术人内心都有一套自己学习技术的方法,希望笔者的文章能够帮助你在今后的学习与工作中提高效率,勇攀高峰。
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/ZCZAqut92HW5vOIMEhkiYQ
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。