当前位置: 首页 > 后端技术 > Java

2个动作,让研发效率提升120%,代码减少50%

时间:2023-04-01 17:25:05 Java

2个动作可提升研发效率120%,代码减少50%业务场景解决方案交流社区。社区致力于传播AIOps技术,旨在与各行业的客户、用户、研究人员和开发者共同解决智能运维行业的技术问题,推动AIOps技术在企业的落地,构建健康共赢的生态环境。AIOps开发者生态系统。简介本文以云智能数字化运维数据平台DODB产品为例。云智能研发团队通过分析对比分析对比Java代码行数、Java文件数、代码注释比例、发布包大小、产品新版本等。通过组件依赖等关键数据,找出历史版本开发过程中存在的代码、项目管理、开发人员等方面的问题,最终梳理总结出修改代码、制定公式等提高研发效率的有效方法规格。1.数据对比从下图数据可以看出,在新版本中,代码注释比例下降了近150%,项目分支数下降了近100%,其他数据也有所下降显着改变。统计过去代码行数和代码注释比例过去和现在Sonar扫描过去和现在数据汇总和对比指标过去和现在对比结果模块数128和代码数量减少了33%。总代码行数174252136484,Java代码行数减少22%。代码注释比例减少41%3%7%增加133%sonar-bugs数量920减少100%外部http接口数量160100减少37.5%外部dubbo接口数量10025减少75%发布包大小226M170M减少25%项目分支数量300(参考)20写入性能降低93%(单10K)88W/min187W/min提升113%组件依赖ignite,vertx删除ignite,vertx5.3.1用redis替换ignite,完全删除vertx微服务135.3.1支持服务存储模块或非存储模块可以独立运行2.历史问题回顾通过以上数据的对比分析,本章回顾分析在开发过程中代码、项目管理、开发人员等方面存在的问题历史版本。具体可以参考如下:代码端的问题项目中模块较多,一些不再使用的模块仍然存在;每个模块module没有统一的包名区分,导致存在大量完全限定名相同的类,加载顺序不一致导致各种问题;重复使用的代码块增加了新人的学习成本和排错的难度;比如对外只使用了25个dubbo接口,对外提供了100个;项目中重复代码较多,类似业务复制粘贴现象比较严重,造成维护成本。更高;有很多重复的轮子,比如HttpclientUtil等;评论率不够,大量代码没有评论,也没有测试用例;Vertx框架并没有完全转型为SpringBoot容器,还有很多与Springboot共存的Vertx逻辑;添加新模块需要大量编写sql,需要手动编写Controller、Service、Dao层的“基础”代码;项目依赖ignitegroup集群,导致服务有状态,大多数人对ignite不熟悉,导致问题难以解决;项目管理端问题不规范,无法支持更多成员更高效的协同开发;分支机构管理不规范,造成分支机构多,活跃分支机构少,数百家分支机构维护困难;投递采用分支形式,投递后分支仍然提交,导致跟踪版本发布困难;代码管理规范不规范,功能遗漏多,功能多等导致分支回滚;没有代码审查制度,代码质量无法保证,冲突被强行解决不时发生;大部分开发人员不熟悉代码,或者只熟悉部分代码;很多会员都不敢修改代码,更别提删除代码了;打着不影响其他功能的旗号,复制粘贴大量重复代码和逻辑,维护困难;早期代码设计比较合理,随着人员不断增多,很多代码强调copyover设计,只完成功能,没有考虑可维护性和扩展性,根本没有设计;部分人员git不熟练,导致远程分支强制覆盖的情况时有发生,没有权限控制;一些问题示例具有完全相同的完全限定名称,类重复轮子。3、问题解决方案针对产品历史版本开发过程中存在的代码、项目管理等问题,云智研发团队制定了开发、接口等相关规范;同时,通过限制代码仓库等操作的权限,也保证了规范的严格执行。没有规章制度。实用的规格是保证团队战斗力的前提。规范的制定应以提高团队水平为目标,不限制成员的积极性。开发规范DODB接口规范开发规范实施方案DODB版本标签命名规范开发设计模板提案测试模板会议规范保证规范严格实施要想做好,必先利其器。规范提供了相应的工具,可以达到事半功倍的效果。目的;同时,有相关的提交程序来保证规范的实施,规范不能流于形式。设置gitlab权限以确保强制代码审查。任何人都不得向受保护的分支提交代码。您必须完成合并过程。合并列表界面合并。详情接口完成后,强制删除远程分支,并通过tag跟踪生产交付。要求送试时必须有吊牌。禁止删除标签。Tag标签列表Tag标签详情4.如何修改现有代码修改的原则是不影响现有的开发和交付进度,并且一定不能互相影响,类似于空中加油机,需要加油,但是飞机停不下了;保证兼容性升级,改造后不影响原有数据和业务;原则上不能修改外部接口(如dubbo),保证调用方功能正常,特殊情况可以通信协作(如dubbo方法重载必须修改);不需要的代码会被删除,以后需要从历史版本中找回,禁止批量注释掉代码;代码设计必须遵循高内聚低耦合的原则,保证可重用性和可移植性;目标一致,改造循序渐进,全面测试有保障。部分改造逻辑直接删除不再使用的代码,在gitlog中可以查看历史记录,如bdp-plugin-sdk、bdp-plugin-zabbix等模块直接删除;重点解决重复造轮的问题,对于一些通用的逻辑,比如HttpClientUtils、db操作等,都用已有的工具进行替换;写数据库代码比较麻烦,引入mybatis-plus操作mysqlcom.baomidoumybatis-plus${mybatis-plus.version}外部dubbo接口bdp-rpc和bdp-rpc-model合并为bdp-rpc-core对外提供,通过编译各个调用者项目,删除不用的接口,彻底删除vertx和ignite依赖,统一规范各个模块的功能和命名,对原有代码进行统一修改调整模块名功能包名前缀bdp-apiRestfulAPI和业务逻辑实现,只能是依赖于bdp-standalonecom.cloudwise.bdp.apibdp-base业务对象和接口定义com.cloudwise.bdp.basebdp-commons通用工具common.cloudwise.bdp.commonsbdp-pipeline管道数据处理实现com.cloudwise.bdp。pipelinebdp-rpc-corerpc接口声明和rpc实体类定义,不能依赖其他模块,外部rpc接口请谨慎修改com.cloudwise.bdpbdp-standalone主工程,DODB主入口类为DodbServiceApplicationcom.cloudwise.bdp.standalonebdp-store-ckClickHouse接入实现com.cloudwise.bdp.store.ckbdp-store-公共数据层存储接口声明com.cloudwise.bdp.store.common调用gitlab-api集中清理和备份长期不活跃的分支/***github-api*https://github.com/help/api/api_resources.md*/privatestaticfinalStringGITLAB_URL="https://github.com/api/v4/projects/2393/repository”;privatestaticfinalStringPRIVATE_PARAM="******************";/***清理分支,已经合并的分支直接删除,其余在删除前以标签的形式备份*/@TestpublicvoidcleanBranches(){MapparamMap=Maps.newHashMap();paramMap.put("private_token",PRIVATE_PARAM);paramMap.put("每页",10086);Stringbody=HttpUtil.get(GITLAB_URL+"/branches",paramMap);Listbranches=JSON.parseArray(body,Branche.class);//按最后提交时间排序排列到大branches.sort(Comparator.comparingLong(o->o.getCommit().getCommitted_date().getTime()));log.error("分支数:{}",branches.size());分支.forEach(item->log.info("{}",item));//清理长期不活跃的分支.....}发布包瘦身先了解一下发布包是怎么构建的,看assembly.xml如果配置发布包里面有什么,不要重复把配置文件打进jar包org.apache.maven.pluginsmaven-jar-plugincom/cloudwise/bdp/**true${start-class}../lib/关注lib包。可以从以下几个方面检查项目是否需要超大包存在重复依赖。比如netty-all是很多netty-*的集合,不要重复依赖,版本不一致会出问题;batik-all是batik-*的集合,排除各个子包后,通过相关插件源查看依赖,精确排除org.apache.maven.pluginsmaven-dependency-plugin${maven.dependency.version}1、开发者要清楚依赖包有什么用,不要在乎依赖一堆无用的包,那样会无谓地增加发布包的体积,也会带来隐患;2、审查代码时,依赖文件(maven项目的pom.xml文件)的修改需要重点关注,禁止随意引入和修改依赖;3、各产品线可以在统一依赖版本的基础上调整构建方式,大大降低集成包的体积,目标明确;复杂性是所有问题的根源,一行代码就能解决的问题不需要两行代码;所有的功能都是通过代码来实现的,写出好的代码很重要,写出好的代码也不能看成是小事,为了完成需要的功能就堆代码很容易,但是要写的清晰明了并不简单可以完成所需功能的可理解代码;你永远不会写出“完美”的代码,你需要使用工具和流程规范来确保这一切都必须经过充分测试;写在最后近年来,在AIOps领域高速发展的背景下,各行业对IT工具、平台能力、解决方案、AI场景、可用数据集的迫切需求呈爆发式增长。基于此,云智于2021年8月发布了AIOps社区,旨在竖起开源大旗,为各行业的客户、用户、研究人员和开发者打造一个活跃的用户和开发者社区,共同贡献和解决行业问题。问题,促进该领域的技术发展。社区先后开源了数据可视化与编排平台——FlyFish、运维管理平台OMP、云服务管理平台——Moore平台、Hours算法等产品。视觉编排平台-FlyFish:项目介绍:https://www.cloudwise.ai/flyF...Github地址:https://github.com/CloudWise-...Gitee地址:https://gitee.com/CloudWise/f...行业案例:https://www.bilibili.com/vide...部分大屏案例:可添加小助手(xiaoyuerwie)注:飞鱼。加入开发者交流群,与行业大咖1V1交流!您还可以通过小助手获取云智慧AIOps信息,了解飞鱼的最新进展!