【前言】

最近刚接手维护一个老并大的项目,项目目前功能基本完成;我们的目标是将其打造成为一款稳定云产品平台,当然功能实现远远不够,还需要相应的优化;说到优化不得不提是对系统的代码分析,代码分析不仅可以指导开发如何改造代码,而且可以监测改造的成果。

【研究之路】

 一、基本情况:

1、需分析项目情况:

项目比较大,结构复杂,相互之间调用关系不明确,问题排查困难;

2、实现分析,和相关负责人交流后有三种思路及其优缺点:

(1)手工查看所有代码,分析依赖关系;

①优点:实现方式简单;

②缺点:工作量大;且代码改造后再次分析还需相应的工作量;

(2)去网上找相关代码分析工具;

①优点:站在巨人肩膀上;

②缺点:需要花费精力去网上找并根据现有做相关的实验;根据实际环境做相应的扩展困难;

(3)动手写个代码分析的程序;

①优点:根据场景做扩展容易;一次开发永久分析;增加开发人员的相关能力;

②缺点:需要花费精力分析代码和相应的实现;

 二、实现目标:

1、分析代码的粒度:

(1)类级别

(2)方法级别

2、图形化展示;

3、代码改变后可根据代码动态绘制出图而无需做修改;

 三、探索之路:

1、根据基本情况中的三种方式的利弊以及项目现在的实际情况,做出决定:

(1)优先去网上找工具;

(2)若找的工具不能满足需要则自己编程实现;

(3)上述两种都走不通则采取最保底的人工实现方式

2、相关探索:

(1)去网上找相应的代码间依赖关系分析工具发现Idea可以分析效果图但是很可惜尝试后不能满足我们针对分析的需要;

(2)根据项目进度以及探索结果后我们最终权衡一下决定自己写代码去实现。

 四、代码分析实现过程:

1、框架:FreeMark+SpringBoot+MySQL

2、实现思路:通过从SVN上将源码拉下来,然后读取其中的java文件按照import关键字等进行相互间关系的调用分析。

3、实现方式:

项目地址:https://github.com/dangnianchuntian/Analysis

4、效果展示:

(1)列表展示

(2)点对点展示

 五、展望:

1、如何自动化的出关系图:

(1)现状:

分析的时候需要手动先将SVN的代码最新代码down到本地然后放到指定目录下,然后运行代码分析工具将代码关系展示出来。

(2)自动化思路:

①利用SVN的钩子,当有人提交代码时,钩子来触发脚本更新代码到指定目录并调用代码分析程序进行分析;

②利用定时任务,比如每天从SVN上拉最新代码到指定目录并触发代码分析程序对代码进行分析;

2、目前版本分析的是类之间的依赖关系,下一步将继续深入细化到方法级别;

【总结】

1、需求推动技术的发展,技术保障需求的实现;

2、不断优化自己的系统,条件允许情况下尽量让机器去多做事情,将人释放出来去做更有价值的事情。

智能一代云平台(八):代码依赖分析系统相关推荐

  1. 智能一代云平台(三十一):mybatis加入分页

    [前言] 在<智能一代云平台(三十):逆向工程生成mybatis>已经将mybatis的逆向工程搞定了:但是美中不足的是mybatis的分页查询:接下来一起来探索一下分页查询. [分页查询 ...

  2. 智能一代云平台(三十):逆向工程生成mybatis

    [前言] 最近在研究mybatis逆向工程的一些东西:通过研究Mybatis+通用mapper.逆向工程生成mybatis.Hibernate+mybatis:最终综合这些优点实现了一个我们自己的逆向 ...

  3. 智能一代云平台(二十九):通用mapper的改造

    [前言] 最近研究一下Mybatis的通用mapper,然后对其进行了一些改造以适合我们的系统,接下来为大家分享一下我的研究思路以及研究成果. [研究之路]      一.ORM框架选型: 1.我们最 ...

  4. 智能一代云平台(五):移动开发之环境搭建

    [前言] 谣传最近IT领域异常火热,而IT中的移动端领域更是如日中天. 做为一名程序猿的我,也不甘Out:于是雄心勃勃参加一个智能一代云平台移动端项目开发:之前有人做了第一版,现在我们需要重构. [基 ...

  5. 微信小程序 运行报错已被代码依赖分析忽略

    如何解决"Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用"报错? 这问题我找了好久,官网还推荐了解决办法 大家也可以看看↓ 如何解决"Error: ...

  6. 基于JAVA智能外包管理平台计算机毕业设计源码+系统+lw文档+部署

    基于JAVA智能外包管理平台计算机毕业设计源码+系统+lw文档+部署 基于JAVA智能外包管理平台计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  7. 八、日志分析系统Nginx,Beats,Kibana和Logstash

    @Author : By Runsen @Date : 2020/6/19 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  8. 智能一代云平台(三十八):单元测试推动开发,如何避免服务之间依赖拖了工期

    [前言] 在开发过程中,会涉及到调用别人的服务,这时候由于别的服务的工期确实排的比较紧张,自己需要等,下面我们采用了写mock数据的方式来有效的避免了这种情况,提高开发速度. [如何提高速度] 一.针 ...

  9. 智能一代云平台(三十六):项目中如何做到避免传递依赖

    [前言] 现在Maven项目风靡全球,不可否认的是Maven在解决项目依赖关系十分的给力:不过传递依赖也会有很多坑:接下来给大家分享一下我们项目中是如何解决传递依赖. [传递依赖中哪些事儿]     ...

最新文章

  1. Linux Centos 7 安装配置nginx
  2. centos6.2部署jdk+tomcat+mysql总结
  3. java嵌入式db_Java DB嵌入式模式
  4. 晚上美容护肤10要诀 - 健康程序员,至尚生活!
  5. python tkinter frame加入窗口_Python ---(五)Tkinter窗口组件:LabelFrame
  6. java发牌程序_求解,用JAVA写洗牌与发牌模拟程序
  7. 自动驾驶_产品象限图_清洁机器人场景
  8. 阴阳师服务器维护6,《阴阳师》手游6月24日维护更新公告
  9. 【rf】robotframework自动化测试环境搭建
  10. 第三届全国大学生算法设计与编程挑战赛---K题 真假英雄
  11. C++ Builder ADO数据库连接与保存
  12. 全网最新最全的 HDFS 文件纠删码技术分析
  13. Python 实现MeanShift算法
  14. 26.菊花厂员工泄密事件(Qt5文件及磁盘处理)--- OpenCV从零开始到图像(人脸 + 物体)识别系列
  15. 经济学考研笔记2:需求供给与市场均衡
  16. java多媒体工具软件吗_多媒体和图像软件列表
  17. 场景检测:Audio Listener、RigidBody和Prefab连接
  18. 配置华为防火墙将默认的安全策略放行
  19. 前向渲染和延迟渲染基本概念
  20. 王淮Harry – 致景投资, 高调给力, 低调给钱

热门文章

  1. 程序员崩溃了,想拿的年终奖怎么说黄就黄?!
  2. 如何快速构建一个 Spring Boot 工程?
  3. 又一百度杰出科学家离职,百度研究院成中国AI的黄埔军校?
  4. java语法基础总结,顺利拿到offer
  5. 211学校计算机报考人数信息,速查!这些985 211学校已发布考研调剂信息
  6. unzip命令找不到
  7. 湖北师范大学计算机应用基础,2019年湖北师范大学911计算机应用基础考研大纲...
  8. linux chmod命令数字,菜鸟学Linux命令:chmod命令和数字文件权限
  9. 表达式 jsp_[JSTL表达式] -JSTL中的所有,都在这
  10. 给mysql salve从库复制授权_MySQL主从复制