了解其原理-代码可视化的深度解析-优势和通常 (了解其原理)
作者|京东云开发者-京东科技谢骁
原文链接:
1.什么是代码可视化?
Codevisualizationistheprocessofcreatinggraphicalrepresentationsofsourcecodetohelpunderstandandanalyzeit.代码可视化是创立源代码的图形示意以协助了解和剖析它的环节。
团体了解:经过经常使用图形化手腕(架构图、依赖图、散布式追踪、类图、火焰图、CallGraph等)使代码在某些特色上变得可观测,用于辅佐开发人员了解剖析名目或树立一些智能化工具。
2.为什么须要代码可视化?场景1:代码逻辑了解艰巨
名目代码量很大且需求迭代快,每次梳理的文档很快就过期了。新同窗入手艰巨苦不堪言,新手也很难对名目全体的业务逻辑有一个片面的认知,经常须要从新梳理逻辑。
场景2:改动影响面难以评价
需求的诉求是修正A页面的逻辑,但因为后端代码很多专用逻辑且调用层级很深,上线才后发现影响了B页面的逻辑,形成了线上意外。
场景3:名目重构缺少抓手
老旧名目经过长期间迭代和屡次改换团队,造成外部代码逻辑十分凌乱且没人能齐全讲明确一切逻辑。但新的业务迭代需求源源不时,在原有名目上修正老本越来越高,亟需重构以取得更洼地研发效率。
其余场景:智能化case回归经常笼罩不到新增逻辑;线上疑问排查艰巨,难以极速定位到出错代码......
3.怎样实现代码可视化?
CallGraph是程序中不同函数调用之间相关的图形示意。它显示了程序中的函数如何相互作用,使开发人员能够了解程序的流程并识别潜在的性能疑问。
以下解说代码可视化的一种方式CallGraph的生成打算,可以分为静态和灵活剖析:
3.1静态程序剖析1)基于源码生成
在解说经常使用源码生成CallGraph的流程前咱们先温习一下编译原理的相关常识。
其中编译器前端局部关键是与源言语相关,关键蕴含:
词法剖析:也叫扫描(scanning),他的关键义务是从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型,将识别出的单词转换成一致的机内示意——词法单元(token)方式。可以类比英语字母分解单词的环节。
语法剖析:也叫解析(parsing)。语法剖析器(parser)从词法剖析器输入的token序列中识别出各类短语,从而结构语法剖析树(syntaxtree),并判别源程序在结构上能否正确。可以类比为英语单词组分解句子。
语义剖析:经常使用语法树和符号表中的消息来审核源程序能否和言语定义的语义分歧,如:类型审核、高低文相关剖析等。可以类比为审核英语句子能否有意义(如:Dogiscat,这种句子语法上没疑问但语义上是不对的)。它同时也搜集标识符的属性消息,并把这些消息寄存在语法树或符号表中,以便在前面两边代码生成环节中经常使用。
两边代码:一种两边示意方式,所含消息可以推导出有关程序的所有理想。同一种两边代码可以复用优化器逻辑,并间接经常使用相关的编译器后端配置,使得各环节更独立更利于裁减。从结构上有图IR、线性IR和混合IR。
编译器后端局部关键是与目的言语相关,蕴含代码优化器和目的代码生成器,这局部和生成CG相关不大不作更多原通常述,有兴味的同窗可以了解一下LLVM、Graalvm。
有了基本的编译原理常识后,来看看经过源码消费CG的环节:
可以发现剖析其实就是编译器前端流程的复现,其中AST、CFG和CG都算作是图IR。现成的源码剖析工具备Antlr/parser/soot等。上方以javaparser工具为例简明说明生成流程:
步骤一:导入须要剖析名目的源码和依赖包,并经常使用工具解析
步骤二:经常使用visit形式失掉一切方法和调用方法消息
步骤三:选定一个起始方法,基于方法和调用相关生成CG
优势:言语有关,裁减性强。缺陷:精度较差须要调优;剖析速度较慢;非java言语工具把握有必定难度。
2)基于字节码生成
针对言语个性启动定制开发能够更快失掉成绩。Java的字节码其实也可以看做一种线性IR,剖析的流程也是相似的,同时java有少量的字节码操作工具(ASM、Javaassit、bcel等),使得字节码解析变得很容易。
基本思绪是从.class文件中失掉类、方法签名消息,再从字节码中找到invoke指令失掉调用方法签名,基于这两个消息就可以构建出CG。同时因为字节码中蕴含了方法的完整签名,因此不用像源码剖析那样须要要引入依赖jar一并剖析,因此在剖析效率上会快很多。
上方用bcel工具为例简明说明生成流程:
步骤一:解析目的名目,可以间接经常使用打包好的jar包
步骤二:经常使用visit形式失掉一切方法和调用方法消息
步骤三:选定一个起始方法,基于方法和调用相关生成CG
优势:剖析准确度高;解析速度快。缺陷:言语相关,裁减性差。
PS:介绍一个idea插件callgraph,基于idea的psi才干成功,在名目代码量不大的状况下剖析还是挺准确的。
3.2灵活程序剖析
也称运转时程序剖析,普通基于agent方式成功,这里暂不开展解说,后续无时机再独自写一篇文章讲述原理。有兴味的同窗可以试用一下Map。
4.有哪些运行场景? 场景1:变卦危险识别
背景:识别基础设备变卦、系统外部变卦以及系统外部变卦带来的危险。
场景2:精准测试
背景:精准测试定义为应用技术手腕对测试环节发生的数据启动采集存储,计算,汇总,可视化最终协助团队优化软件测试的效率、并对名目全体品质启动改良和优化的这一系列操作。具体的解释可以阅读精准测试二三谈。
场景3:架构守护
背景:在架构控制上,咱们面对诸多应战
1)设计与成功不婚配。设计的软件架构与真正实施后的架构,存在着渺小的差异。而这个差异,往往须要编码上线、乃至一段期间之后才干发现;
2)没有规范/不遵守规范。作为一个资深的开发人员,咱们制订了一系列的规范,但是没有多少团队人员情愿遵守;
3)代码量渺小,难以识别疑问。一个由十几个或许几十个微服务创立的系统,往往难以极速发现它们之间盘根错节的相关;
4)架构模型的每个层级都或许出错。如服务间API耦合、代码间耦合、数据库耦合等等;
5)架构师、开发人员自身不足丰盛的阅历。知道有疑问,但是说不进去哪有疑问,也不知道如何改良。
因此,咱们须要一个平台/工具,来协助咱们处置这些疑问。
案例:ArchGuard
提供了基于C4模型(高低文、容器、组件和代码)的可视化剖析,并提供了一些架构肥壮监测目的。
5.拓展阅读
什么是低代码开发?低代码开发有何优势?
通过低代码平台,业务人员也能更容易理解开发流程,结合实际业务操作角度提出符合其工作习惯与开发逻辑的需求,从而降低两者的沟通成本。
低代码平台能代替程序员开发数千行具有复杂代码和语法的行。它的作用是让开发人员以及业务人员,通过“拖拉拽”的方式使用平台,来创建完整的应用程序。同时突破了传统业务之间沟通的复杂度和交付时间周期长的特点,能够持续进行开发。
![优势和通常](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
(1)适合开发人员
JNPF不仅支持可视化拖拉拽的平台操作模式,还可以基于代码生成器,代码自动生成后可以下载本地,进行二次开发,满足企业开发个性化的业务场景需求。在企业进行二次开发后,允许企业申请基于二开的软件著作权。
(2)适合业务人员
可视化界面和拖拉拽的应用搭建赋能开发者和业务人员。通过JNPF平台业务人员可以自定义编辑,最终交付开发团队技术实现,减少业务团队与IT部门的沟通成本。开箱即用降低软件开发门槛,普惠支持企业数字化升级。
左侧是拖拽组件,中间是花边,有侧是编辑属性。通过左侧拖拽表单将事件排列在上面,进行简单的数据收集。右边是对表单进行数据处理,比如标题、宽度、对齐方式等设置。适合业务人员去操作填写数据表格,快速生成自己想要的数据收集,这是表单驱动的一种方式。
低代码的优缺点?
优点:
1. 提高了开发效率,加速业务敏捷创新,帮助企业适应快速发展的市场
低代码开发平台以模型驱动设计,在一定程度上改变了传统开发工具的开发方式。使用低代码开发平台将一个传统方式开发需要耗时一,二年的项目,缩短到几个月,甚至更短的时间,对于企业发展来说是非常大的优势。
有些应用系统的开发,时间比成本要素更重要,市场机会稍纵即逝,低代码平台可以实现大部分功能的快速搭建,完善的应用打包、部署、升级能力,高效的团队协同开发能力,极大缩短业务创新周期,可以及时应对市场的竞争压力。
快速发展的企业需要与不断变化的市场趋势保持一致。在这种环境下,低代码开发平台可以成为企业快速打入市场的利器。低代码平台所具有的优势使它能够影响新软件的交付速度,而可视化开发是促进这种无与伦比的速度的关键功能。尤其是企业数字化转型,意味着企业必须在短时间内开发出信息化系统,这对于低代码平台的快速开发特性最为合适。
2.满足企业的多样化需求
随着企业不断发展扩大,标准化的产品软件已经难以满足企业的需求,在这种情况下,低代码平台的灵活性就显得十分重要。低代码平台凭借可视化开发模式,降低了应用软件的开发难度,让用户无需从传统代码编译起,而且所有的开发工作都能在web端配置生成,用户可以在线轻松完成OA、CRM、KM等流程管理软件的配置开发。
3. 沉淀行业知识,快速复制
无论是简单的任务还是复杂的工作流程,用户可使用低代码开发平台快速在多个项目间复用和灵活扩展,解决产品与交付之间的矛盾,快速实现批量复制。由于能够在更短的时间内构建更多的应用程序,成本会自动降低。它还减少了对更多开发人员的需求,降低了招聘成本,并减轻了已经紧张的开发团队的负担。
4.为企业实现降本增效
传统开发模式主要是成本来自于技术人员,再加上购买系统软件,综合成本比较高,低代码开发平台不需要专业代码开发,80%以上的功能都可以通过可视化拖拽模式搭建,只有少量的特殊功能需要使用纯代码进行开发,省去大量人工成本,降低了应用开发成本。
低代码开发工具缩短了软件的开发时间。因为降低了开发人员的要求,所以企业可以节省聘用专业的开发人员的高昂费用。
5.增强客户体验
使用低代码制作应用程序,客户可以在几周甚至几天内获得功能齐全的应用程序,同时也不会担心应用界面粗糙,低代码平台自身出色的UI定制完全可以解出这些疑虑。不得不说,低代码平台提高了整个团队的理解力和响应能力,有效而有效地利用节省的时间来提供更丰富的客户体验。
缺点:
1.使用门槛高
低代码开发仍需要编写代码,开发者必须具备数据库和代码编写的专业知识。要求业务人员掌握编程语言的相关知识,不适合作为业务人员自助构建应用。
2. 多数是提供功能,而非解决方案
其实市场上各家提供的功能已经相当完备,但缺解决方案。与C端市场相比,B端需求更非标,这需要平台具备完整的能将其沉淀成解决方案的系统,再将这些作为供给侧的产出去服务需求端。厂商想提供的功能,并非就是客户真正想要,要从“我觉得”转为“客户觉得”。
3. 只能释放部分日常高频重复需求的生产力
B端强调底层通用性,容易发生底层结构问题,而低代码的认知和竞争出发点,多是关注企业日常重复高频需求,距离核心业务较远。虽能够满足非IT人士的大部分需求,但在关键节点,使用者很可能要付出更大的成本去补全它。
4. 功能过于简单,缺乏与业务结合的纵深能力
大部分低代码厂商是将研发精力前置在数据建模和可视化表单层面,普遍是提供较简单的表单功能,缺数仓、仪表盘这类和业务结合更纵深的复杂应用能力。当客户成长到需要去做深度的加工聚合时,厂商满足不了这种需求,会丢失客户。
5.可靠性和安全性存在风险
将支持转移到构建低代码平台的公司可以节省大量的金钱和时间,但不能保证稳定性。如果低代码开发平台的组件存在质量或安全漏洞问题,开发出的应用程序的稳定性和安全性就会受到影响,而且是无法控制的。低代码开发工具交给普通开发人员使用,意味着企业冒着一定的风险。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。