CN116450107A - 低代码平台二次开发软件的方法、装置、电子设备 - Google Patents
低代码平台二次开发软件的方法、装置、电子设备 Download PDFInfo
- Publication number
- CN116450107A CN116450107A CN202310349609.9A CN202310349609A CN116450107A CN 116450107 A CN116450107 A CN 116450107A CN 202310349609 A CN202310349609 A CN 202310349609A CN 116450107 A CN116450107 A CN 116450107A
- Authority
- CN
- China
- Prior art keywords
- code
- target
- source code
- source
- software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000011161 development Methods 0.000 title claims description 32
- 238000012360 testing method Methods 0.000 claims abstract description 99
- 238000004806 packaging method and process Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 120
- 230000002159 abnormal effect Effects 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 24
- 238000005516 engineering process Methods 0.000 claims description 20
- 230000001419 dependent effect Effects 0.000 claims description 19
- 230000015654 memory Effects 0.000 claims description 16
- 230000000903 blocking effect Effects 0.000 claims description 15
- 238000003860 storage Methods 0.000 claims description 13
- 238000004458 analytical method Methods 0.000 claims description 10
- 230000008859 change Effects 0.000 claims description 8
- 238000004088 simulation Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 6
- 230000007613 environmental effect Effects 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 5
- 238000012986 modification Methods 0.000 claims description 5
- 230000008878 coupling Effects 0.000 description 12
- 238000010168 coupling process Methods 0.000 description 12
- 238000005859 coupling reaction Methods 0.000 description 12
- 238000013461 design Methods 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000013475 authorization Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 3
- 238000000926 separation method Methods 0.000 description 3
- 230000002411 adverse Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000008092 positive effect Effects 0.000 description 2
- 238000005316 response function Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 1
- 244000046052 Phaseolus vulgaris Species 0.000 description 1
- 230000007488 abnormal function Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 239000011265 semifinished product Substances 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请涉及一种低代码平台二次开发软件的方法、装置、电子设备。该方法包括:获取用户输入的需求指令,所述需求指令中含有需求信息;分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息;根据所述需求信息、所述技术栈、接口信息,生成目标代码;部署并运行所述源代码、所述目标代码;测试所述目标代码的功能是否正常,若是则将所述目标代码与所述源代码一起打包;若否则根据错误日志,修改所述目标代码,并重复进行测试,直至目标代码的功能正常。
Description
技术领域
本申请涉及代码开发技术领域,尤其是涉及一种低代码平台二次开发软件的方法、装置、电子设备。
背景技术
企业在不断发展的过程中,会出现现有的软件的部分功能已不能适应当前的业务需要的情况,如现有软件所对应的部分业务的流程或内容发生了变化、企业出现了现有软件所不能支持的新的业务内容、与现有软件配套的其他系统发生了改变需要更新系统间的接口、企业业务的发展使得现有软件的设计能力已不能满足当前业务需要,而出于费用、时间、转移成本的考虑,企业不会马上选择购买或开发新的软件,而会着重于对软件进行二次开发。
但对于程序员来说,每个人都有自己掌握的技术,编写出的代码使用到的技术栈可能并不相同。二次开发对于他们来说要先看懂别人编写的代码,才能继续下去,可能需要大量时间阅读代码,这样做时间成本很高。
发明内容
本申请提供一种低代码平台二次开发软件的方法、装置、电子设备。应用于低代码平台,用于解决现阶段程序员对软件二次开发时,需要花费大量时间阅读软件的源代码的问题。
第一方面,本申请提供一种低代码平台二次开发软件的方法,包括:
获取用户输入的需求指令,所述需求指令中含有需求信息;
分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息;
根据所述需求信息、所述技术栈、接口信息,生成目标代码;
部署并运行所述源代码、所述目标代码;
测试所述目标代码的功能是否正常,若是则将所述目标代码与所述源代码一起打包;
若否则根据错误日志,修改所述目标代码,并重复进行测试,直至目标代码的功能正常。
通过本方案,结合用户发送的需求指令,和待开发软件的源代码,确定用户所需代码的功能和生成代码用到的技术栈,而后通过部署源代码和目标代码,可以对代码进行功能测试,使得代码出现错误时及时修改,提高了目标代码的正确性,减少了人工开发项目时阅读代码的时间,自动化的完成用户需求的功能。
可选的,所述分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息,包括:
遍历所述源代码中的目录结构,确定所述源代码中的依赖包名称;
根据所述依赖包名称确定所述待开发软件的技术栈;
根据所述技术栈,确定所述待开发软件的技术架构、接口类型;
遍历所述源代码中的代码文件,根据所述接口类型确定所有接口代码文件;
读取所述接口代码文件,确定所述待开发软件的接口信息。
通过本方案遍历查找源代码的目录结构,获取到源代码中所有的依赖包名称,并以此确定出源代码的技术栈进而得到源代码的技术架构,再后遍历读取源代码中接口代码文件,获取源代码中的接口的功能和信息,使得低代码平台可以快速获取源代码的代码逻辑和代码架构,以使后续的开发过程中可以基于源代码的框架和结构,提高新开发代码与源代码的匹配度。
可选的,所述根据所述需求信息、所述技术栈、接口信息,生成目标代码,包括:
分析所述需求信息,确定所述目标代码的实现功能;
判断所述需求信息是否指定技术栈,若是则将指定技术栈设为目标技术栈,若否则根据所述技术栈、所述需求信息,选择目标技术栈;
读取所述接口信息,获取各接口中所有参数的名称;
根据所述实现功能、所述目标技术栈,选定代码模板;
根据所述参数的名称,将所述代码模板中相同参数类型的参数替换,生成目标代码。
通过本方案,分析需求指令得到待实现的功能并通过判断需求指令是否指定了技术栈来确定开发目标代码时的技术栈,使得开发出的目标代码能最大程度上与源代码兼容,而后根据目标技术栈和待实现的功能确定最后使用的代码模板,并且将源代码中的参数替换进入代码模板中,使目标代码能更好的与源代码之间的交互更加紧密。
可选的,所述部署并运行所述源代码、所述目标代码包括:
根据所述依赖包名称,确定所述源代码所连接的数据源类型、环境要求;
遍历所述源代码中的配置文件,获取所述源代码中连接数据源的数据库账户、密码;
配置相应的测试数据源,并根据所述账户、密码连接所述测试数据源;
根据所述环境要求配置测试环境、测试中间件,并部署所述源代码、所述目标代码。
通过本方案,根据依赖包的名称确定源代码的环境要求与数据源要求,并以此为源代码搭建一个更为真实的测试环境,并在测试环境中为源代码链接数据源,进而在测试环境中运行源代码和目标代码,减少环境的变动对测试工作的不利影响,并可以对测试工作的效率和质量的提高产生积极的作用。
可选的,所述需求指令包括:文字输入指令、图形拖拽指令;
所述分析所述需求信息,确定所述目标代码的实现功能,包括:
分析所述文字输入指令中的文字语义信息,获取所述目标代码的实现功能;
分析所述图形拖拽指令中被拖拽的图形,获取所述图形代表的实现功能。
通过本方案,为用户输入需求指令提供了文字描述和图形拖拽的方式,使得用户能更加快速和准确的描述对于软件的二次开发需求,进而提高了低代码平台开发目标代码时的准确度。
可选的,所述测试所述目标代码的功能,包括:
运行所述目标代码过程中,测试所述源代码所有功能,判断所述源代码中各功能是否正常运行,且运行结果是否原设定结果;
运行所述源代码过程中,测试所述目标代码所有功能,判断所述目标代码中各功能是否正常运行,且运行结果是否符合设定结果;
模拟虚拟用户访问所述源代码的任意功能,确定所述源代码的压力等级;
根据所述压力等级,模拟相应数量的模拟用户访问所述目标代码,判断所述目标代码是否正常运行,且运行结果是否符合设定结果。
通过本方案,在测试环境中对源代码和生成的目标代码进行对比运行测试,在一方运行的情况下,测试另一方功能能否正常运行,保证了源代码和目标代码的兼容性,确保在交付时不会出现源代码与目标代码的运行冲突,而后测试目标代码能否承受源代码的用户访问量,来确保目标代码在日后的生产中保持与源代码一致的用户访问量,提高了目标代码的可用性。
可选的,所述根据错误日志,修改所述目标代码,包括:
分析所述错误日志,确定异常代码的行数;
将所述目标代码在所述行数的前后行分别加入阻塞代码;
运行所述目标代码,当所述目标代码运行阻塞时,记录各参数数据;
所述目标代码运行结束后,对比各参数数据的变化情况,确定异常参数;
遍历所述目标代码,修改包含所述异常参数的代码。
通过本方法,利用错误代码定位异常代码的位置,而后利用阻塞代码获取目标代码在运行过程中因为异常代码而产生的参数变化,以此确定目标代码的异常原因,并据此对目标代码进行修改,以此提高对目标代码的异常代码定位能力,和修改异常代码的准确性。
第二方面,本申请提供一种低代码平台二次开发软件的装置,包括:
需求模块,用于获取用户输入的需求指令,所述需求指令中含有需求信息;
分析模块,用于分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息;
生成模块,用于根据所述需求信息、所述技术栈、接口信息,生成目标代码;
部署模块,用于部署并运行所述源代码、所述目标代码;
测试模块,用于测试所述目标代码的功能是否正常,若是则将所述目标代码与所述源代码一起打包;
修改模块,用于若否则根据错误日志,修改所述目标代码,并重复进行测试,直至目标代码的功能正常。
可选的,所述分析模块分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息时,具体用于:
遍历所述源代码中的目录结构,确定所述源代码中的依赖包名称;
根据所述依赖包名称确定所述待开发软件的技术栈;
根据所述技术栈,确定所述待开发软件的技术架构、接口类型;
遍历所述源代码中的代码文件,根据所述接口类型确定所有接口代码文件;
读取所述接口代码文件,确定所述待开发软件的接口信息。
可选的,所述生成模块根据所述需求信息、所述技术栈、接口信息,生成目标代码时,具体用于:
分析所述需求信息,确定所述目标代码的实现功能;
判断所述需求信息是否指定技术栈,若是则将指定技术栈设为目标技术栈,若否则根据所述技术栈、所述需求信息,选择目标技术栈;
读取所述接口信息,获取各接口中所有参数的名称;
根据所述实现功能、所述目标技术栈,选定代码模板;
根据所述参数的名称,将所述代码模板中相同参数类型的参数替换,生成目标代码。
可选的,所述部署模块部署并运行所述源代码、所述目标代码时,具体用于:
根据所述依赖包名称,确定所述源代码所连接的数据源类型、环境要求;
遍历所述源代码中的配置文件,获取所述源代码中连接数据源的数据库账户、密码;
配置相应的测试数据源,并根据所述账户、密码连接所述测试数据源;
根据所述环境要求配置测试环境、测试中间件,并部署所述源代码、所述目标代码。
可选的,所述需求指令包括:文字输入指令、图形拖拽指令;
所述需求模块分析所述需求信息,确定所述目标代码的实现功能时,具体用于:
分析所述文字输入指令中的文字语义信息,获取所述目标代码的实现功能;
分析所述图形拖拽指令中被拖拽的图形,获取所述图形代表的实现功能。
可选的,所述测试模块测试所述目标代码的功能时,具体用于:
运行所述目标代码过程中,测试所述源代码所有功能,判断所述源代码中各功能是否正常运行,且运行结果是否原设定结果;
运行所述源代码过程中,测试所述目标代码所有功能,判断所述目标代码中各功能是否正常运行,且运行结果是否符合设定结果;
模拟虚拟用户访问所述源代码的任意功能,确定所述源代码的压力等级;
根据所述压力等级,模拟相应数量的模拟用户访问所述目标代码,判断所述目标代码是否正常运行,且运行结果是否符合设定结果。
可选的,所述修改模块根据错误日志,修改所述目标代码时,具体用于:
分析所述错误日志,确定异常代码的行数;
将所述目标代码在所述行数的前后行分别加入阻塞代码;
运行所述目标代码,当所述目标代码运行阻塞时,记录各参数数据;
所述目标代码运行结束后,对比各参数数据的变化情况,确定异常参数;
遍历所述目标代码,修改包含所述异常参数的代码。
第三方面,本申请提供一种电子设备,包括:存储器和处理器,所述存储器上存储有能够被处理器加载并执行第一方面的方法的计算机程序。
第四方面,本申请提供一种计算机可读存储介质,存储有能够被处理器加载并执行第一方面的方法的计算机程序。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一实施例提供的一种应用场景示意图;
图2为本申请一实施例提供的一种低代码平台二次开发软件的方法的流程图;
图3为本申请一实施例提供的一种低代码平台二次开发软件的装置的结构示意图;
图4为本申请一实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
下面结合说明书附图对本申请实施例作进一步详细描述。
企业的发展中,现有软件不能满足企业的全部业务需求,需要对现有软件进行二次开发,但对软件二次开发时,常出现程序员不具备该软件所用语言的语言基础,或是不了解该软件的功能和数据结构、代码结构的情况。此时程序员需要学习的新的语言或技术,和阅读软件源代码以了解代码逻辑和文件目录来满足开发需求,这将花费大量的时间成本。
基于此,本申请提供一种低代码平台二次开发软件的方法,如图1所示该方法以功能的形式应用于低代码平台,该低代码平台以页面的形式向外界提供服务,当用户需要对软件进行二次开发时,先在低代码平台页面输入软件的开发需求,而后将软件的源代码上传至低代码平台,低代码平台会自动分析上传的待开发软件的源代码,获取源代码使用的技术栈和代码逻辑,并以此生成代码最后对生成的代码进行测试,测试完成后,将二次开发后的软件打包返回给用户。具体的实现方式可以参考以下实施例。
图2为本申请一实施例提供的一种低代码平台二次开发软件的方法的流程图,本实施例的方法可以应用于以上场景中的服务器。如图2所示的,该方法包括:
S201、获取用户输入的需求指令,所述需求指令中含有需求信息。
其中,需求指令为用户表明自己需求意图发出的指令。需求信息为用户对二次开发的功能描述。
具体的,低代码平台获取到需求指令后,因为需求指令的形式不同,采用不同的分析方式进行分析,获取需求指令中的需求信息,再由需求信息中确定待开发软件的功能需求。
S202、分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息;
其中,源代码为编写待开发软件的最原始程序的代码,包括由程序员自己编写的代码,运行代码需要的包、文件。
技术栈为编写源代码所使用的框架、中间件。框架为是某种应用的半成品,就是一组组件,供你选用完成你自己的系统,中间件为是一种独立的系统软件或服务程序,连接两个独立应用程序或独立系统的软件,不需要和用户代码交替执行。
接口信息为接口代码文件中的信息,信息包括接口代码文件的功能、接口代码文件中每个参数的名称、功能。接口代码文件为将自己功能提供给外界的一种代码文件,用以由内部操作分离出外部交互方法,使其能被内部修改而不影响外界其他代码文件与其交互的方法。
具体的,用户通过低代码平台上传想要二次开发的待开发软件源代码,低代码平台对源代码进行扫描,获取源代码中的依赖包,再通过判断依赖包的功能,确定源代码使用的技术栈。其中,依赖包为待开发软件运行时必要的包。
而后,通过读取源代码中的接口代码文件,确定出每个接口代码文件中的参数名称、功能,和每个接口代码文件对外提供的整体功能。
S203、根据所述需求信息、所述技术栈、接口信息,生成目标代码。
其中,目标代码为由低代码平台为待开发软件生成的代码,该代码能够实现用户提出的需求信息中的功能,且能与待开发软件进行集成。
具体的,获取到用户需求指令中的需求信息后,根据需求信息中的需求功能,匹配实现该功能的所有模板,再筛选出使用了待开发软件原有技术栈的模板。
在从接口信息中获取和需求功能有交互的参数名称,而后在模板中确定有交互的参数,将模板中的参数名称改为接口信息中的参数名称。
S204、部署并运行所述源代码、所述目标代码。
在一些实现方式中,低代码平台按照源代码原有的生产环境,部署一个相同的测试环境,并在测试环境中将目标代码放入源代码中一起运行。
S205、测试所述目标代码的功能是否正常,若是则将所述目标代码与所述源代码一起打包。
在一些实现方式中,将源代码、目标代码放入测试环境运行后,先测试源代码与目标代码一起运行时,是否会互相产生影响,如一方运行时,另一方出现不能运行,或功能异常的情况。
而后测试目标代码的性能是否和源代码的性能一致,如模拟源代码的应用场景,测试得出源代码的能承受多少模拟用户的使用,而后测试目标代码是否能在源代码的应用场景中,承受与源代码相同模拟用户的使用,使得目标代码在真实使用中,能够符合源代码使得使用标准。
当目标代码测试完成后,目标代码能够实现上述需求功能,且符合源代码的使用标准,则将含有目标代码的文件放入源代码目录下,并对源代码进行打包,生成新的源代码。
其中,将同一个程序所有的文件组成一个文件夹的过程叫打包。
S206、若否则根据错误日志,修改所述目标代码,并重复进行测试,直至目标代码的功能正常。
其中,错误日志为运行代码过程中记录出错信息的文本文件。
具体的,当上述测试时,出现了不能实现功能、目标代码与源代码之间不能同时运行,目标代码在模拟场景中不能正常运行的情况,先查看错误日志,定位错误的代码、和错误类型。
在一些实现方式中,低代码平台具有一个错误代码库,其中存有每种错误类型的原因和解决方式,再通过错误日志定位错误类型,将错误类型放入错误代码库中进行搜索,得到对应的解决方式。而后查找到错误的代码后,根据解决方式修改代码。
最后将修改后的目标代码与源代码继续重复上述的测试,直到修改后的目标代码在测试后功能正常,停止测试。
通过本方案,结合用户发送的需求指令,和待开发软件的源代码,确定用户所需代码的功能和生成代码用到的技术栈,而后通过部署源代码和目标代码,可以对代码进行功能测试,使得代码出现错误时,及时修改,提高了目标代码的正确性,减少了人工开发项目时阅读代码的时间,自动化的完成用户需求的功能。
在一些实施例中,分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息,包括:遍历所述源代码中的目录结构,确定所述源代码中的依赖包名称;根据所述依赖包名称确定所述待开发软件的技术栈;根据所述技术栈,确定所述待开发软件的技术架构、接口类型;遍历所述源代码中的代码文件,根据所述接口类型确定所有接口代码文件;读取所述接口代码文件,确定所述待开发软件的接口信息。
其中,技术架构为应用于软件的设计方式,通过功能上的划分使得软件的结构更清晰。而在后续开发中,针对软件每一个层都会使用一个框架进行开发,最后完成软件的功能,如软件主要分为用户界面、业务逻辑、数据访问层、数据库,四个层次,针对每个层次都会有专有技术栈来开发。
具体的,将源代码的文件夹进行读取,若文件夹内含有文件,则判断文件的后缀名,并根据后缀名确定文件的类型,将属于依赖包的文件记录位置和全名,若文件夹内含有文件夹则逐一进入每个文件,继续判断,直到将源代码的文件夹全部读取完毕,确定源代码中所有的依赖包的名称。
因为每个依赖包的名称都有唯一性,所以根据每个依赖包的名称可以确定每个依赖包的功能,和确定每个依赖包代表的技术栈,将源代码具有的依赖包一一确定功能和代表的技术栈后,即为得到了源代码所使用的技术栈。
低代码平台中根据源代码每一个技术栈的功能,得到待开发软件的技术架构。如源代码中具有“spring-webmvc-4.0.0.RELEASE.jar”的依赖包,则确定待开发软件使用了“SpringMVC”的技术栈,且“SpringMVC”负责的为用户界面,具有“mysql-connector-java-8.0.30.jar”的依赖包,则确定待开发软件使用了的数据库使用的是“mysql”。
并且使用每个技术栈时,接口代码文件中都有独特记录,将具有同一独特记录的接口代码文件,都划分为一类。例如,若源代码中使用了“SpringMVC”的技术栈,则使用该技术栈的接口代码文件中都会含有以下代码:
“import org.springframework.web.servlet.mvc.controller”
遍历所有代码文件,将使用技术栈的代码全部选出,作为接口代码文件,并且对该接口代码文件进行读取,对接口代码文件每一个引入的参数名称、和功能做记录,生成接口信息。
通过本方案遍历查找源代码的目录结构,获取到源代码中所有的依赖包名称,并以此确定出源代码的技术栈进而得到源代码的技术架构,再后遍历读取源代码中接口代码文件,获取源代码中的接口的功能和信息,使得低代码平台可以快速获取源代码的代码逻辑和代码架构,以使后续的开发过程中可以基于源代码的框架和结构,提高新开发代码与源代码的匹配度。
在一些实施例中,根据所述需求信息、所述技术栈、接口信息,生成目标代码,包括:分析所述需求信息,确定所述目标代码的实现功能;判断所述需求信息是否指定技术栈,若是则将指定技术栈设为目标技术栈,若否则根据所述技术栈、所述需求信息,选择目标技术栈;读取所述接口信息,获取各接口中所有参数的名称;根据所述实现功能、所述目标技术栈,选定代码模板;根据所述参数的名称,将所述代码模板中相同参数类型的参数替换,生成目标代码。
具体的,通过需求信息,确定待开发软件上是需要新增功能还是对已有功能进行修改,并且读取需求信息后确定需求信息中是否指定了生成目标代码时低代码平台使用的技术栈,指定后按照指定技术栈开发目标代码,如果需求信息中没有指定需要使用的技术栈,则使用源代码中已有的技术栈开发目标代码。
而后在低代码平台中的所有代码模板中选取能够开发出需求信息中实现功能的模板,而后利用目标技术栈进一步筛选模板,选出最后用于开发的代码模板。
再读取接口信息中各接口中的参数名称与类型,将选定的代码模板中的参数类型一一与接口信息中的参数匹配,将同一类型的参数名称设定为原接口信息中的参数名称。
通过本方案,分析需求指令得到待实现的功能并通过判断需求指令是否指定了技术栈来确定开发目标代码时的技术栈,使得开发出的目标代码能最大程度上与源代码兼容,而后根据目标技术栈和待实现的功能确定最后使用的代码模板,并且将源代码中的参数替换进入代码模板中,使目标代码能更好的与源代码之间的交互更加紧密。
在一些实施例中,部署并运行所述源代码、所述目标代码包括:根据所述依赖包名称,确定所述源代码所连接的数据源类型、环境要求;遍历所述源代码中的配置文件,获取所述源代码中连接数据源的数据库账户、密码;配置相应的测试数据源,并根据所述账户、密码连接所述测试数据源;根据所述环境要求配置测试环境、测试中间件,并部署所述源代码、所述目标代码。
其中,测试环境为一台用于测试源代码功能的服务器,其中搭载了运行代码所需的语言版本和内存。测试中间件,包括运行代码所需的中间件。例如,运行的源代码为JAVA项目,测试环境则需要安装“JDK”,测试中间件为运行本项目的“tomcat”。
具体的,获取源代码中所有依赖包名称后,匹配依赖包对应的技术栈,而后将属于数据源的技术栈选择出来,确定源代码连接的数据源是哪种数据库,再确定源代码使用的语言版本和使用的中间件版本。
而后遍历源代码的文件夹,将所有文件中后缀名为“.ini;.conf;.config;.xml;.data”的文件选出,得到源代码中的所有配置文件,再将该配置文件一一读取,确定源代码用于连接数据库的账号和密码。
将上述确定的数据库在测试环境中进行安装,并且将账号密码设为上述源代码中配置文件的账号密码,并且在测试环境安装源代码使用的语言版本,和语言版本相对应web中间件,再利用账户密码连接数据库,判断是否能够连接成功,连接成功后向该数据库中存入一定的假数据,最后将源代码与目标代码部署在web中间件中,并启动该web中间件。
通过本方案,根据依赖包的名称确定源代码的环境要求与数据源要求,并以此为源代码搭建一个更为真实的测试环境,并在测试环境中为源代码链接数据源,进而在测试环境中运行源代码和目标代码,减少环境的变动对测试工作的不利影响,并可以对测试工作的效率和质量的提高产生积极的作用。
在一些实施例中,需求指令包括:文字输入指令、图形拖拽指令;所述分析所述需求信息,确定所述目标代码的实现功能,包括:分析所述文字输入指令中的文字语义信息,获取所述目标代码的实现功能;分析所述图形拖拽指令中被拖拽的图形,获取所述图形代表的实现功能。
其中,文字输入指令为通过低代码平台的输入框输入文字描述的功能需求指令。图形拖拽指令为用户在低代码界面拖动需要的功能模块或点击需要的功能组件的指令。
具体的,若需求指令为文字输入指令,则基于GPT(Generative Pre-trainingTransformer)算法和自然语言处理方法,识别文本中的关键信息,生成功能摘要。
若需求指令为图形拖拽指令,在用户操作图形后,低代码平台自动跳转至功能详情页,由用户继续在详情页面继续勾选需要的功能,进而获取到完整的功能需求。
通过本方案,为用户输入需求指令提供了文字描述和图形拖拽的方式,使得用户能更加快速和准确的描述对于软件的二次开发需求,进而提高了低代码平台开发目标代码时的准确度。
在一些实施例中,测试所述目标代码的功能,包括:运行所述目标代码过程中,测试所述源代码所有功能,判断所述源代码中各功能是否正常运行,且运行结果是否原设定结果;运行所述源代码过程中,测试所述目标代码所有功能,判断所述目标代码中各功能是否正常运行,且运行结果是否符合设定结果;模拟虚拟用户访问所述源代码的任意功能,确定所述源代码的压力等级;根据所述压力等级,模拟相应数量的模拟用户访问所述目标代码,判断所述目标代码是否正常运行,且运行结果是否符合设定结果。
其中,虚拟用户为利用低代码平台根据真实用户访问过程模拟出的用户,每一个虚拟用户都可以模拟一个真实用户的访问情况。压力等级为根据同时被访问虚拟用户的多少划分的,以一千模拟用户同时访问为第一级,一万模拟用户同时访问为第二级,以此类推。
一些实现方式中,整个测试过程中分为几个阶段,其一为在测试环境中,同时运行目标代码和源代码,但只测试源代码的各项功能,具体为调用源代码的各项接口代码,调用后先行查看日志内容,查看调用过程中是否有异常出现,若无异常日志出现,则获取调用接口的响应功能,与接口信息中记录的接口功能做比对,判断源代码各功能是否正常。
其二为在同时运行目标代码和源代码时,只测试目标代码的功能,具体测试过程与上述步骤类似。
其三为模拟大量的虚拟用户同时访问源代码的某一个功能,模拟的虚拟用户数量逐步增加,直到源代码响应时间超出预定时间,并根据此时的虚拟用户数量确定源代码的压力等级,其中,预定时间可以根据源代码的应用场景随机设定。
而后根据该压力等级,模拟出相应的虚拟用户访问目标代码的功能,测试此时目标代码的响应时间是否超出预定时间,如果没有则判断目标代码的功能正常。其中,此时预定时间与源代码的预定时间相同。
通过本方案,在测试环境中对源代码和生成的目标代码进行对比运行测试,在一方运行的情况下,测试另一方功能能否正常运行,保证了源代码和目标代码的兼容性,确保在交付时不会出现源代码与目标代码的运行冲突,而后测试目标代码能否承受源代码的用户访问量,来确保目标代码在日后的生产中保持与源代码一致的用户访问量,提高了目标代码的可用性。
在一些实施例中,根据错误日志,修改所述目标代码,包括:分析所述错误日志,确定异常代码的行数;将所述目标代码在所述行数的前后行分别加入阻塞代码;运行所述目标代码,当所述目标代码运行阻塞时,记录各参数数据;所述目标代码运行结束后,对比各参数数据的变化情况,确定异常参数;遍历所述目标代码,修改包含所述异常参数的代码。
其中,阻塞代码用于在代码运行中执行到阻塞代码时代码会停止执行,等待阻塞代码的阻塞时间到达才会继续执行代码。
一些实现方式中,当目标代码功能异常时,首先查找错误日志,定位本次目标代码运行过程中,出现异常的代码对应行数,之后在异常代码的前一行和后一行分别加入阻塞时长为1分钟的阻塞代码,而后重新运行加入阻塞代码的新目标代码。
当新目标代码第一次出现阻塞时,获取当前新目标代码中各参数的数据,之后等待代码继续执行,在异常代码执行后进入第二次阻塞时,重新获取新目标代码中各参数的数据,对比两次参数的变化,确定异常参数。
最后遍历目标代码,将涉及异常参数的代码都进行修改,而后重新在测试环境中按上述步骤进行测试,直至修改后的目标代码的功能正常,结束测试。
通过本方法,利用错误代码定位异常代码的位置,而后利用阻塞代码获取目标代码在运行过程中因为异常代码而产生的参数变化,以此确定目标代码的异常原因,并据此对目标代码进行修改,以此提高对目标代码的异常代码定位能力和修改异常代码的准确性。
一些其他实施例中,整个平台基于多账户、多模块的设计,不同的账户拥有不同的扩展权限。在数据库方面根据不同的账户进行数据存储,企业级账户使用独享数据库、小微企业账户分表存储、普通账户共享数据库。性能无瓶颈可扩展:因为合理的进行了分库,所以在性能上并没有什么瓶颈,并且数据库可以放到不同的服务器上。
私有部署流程
1.设置服务器
添加服务器节点 配置好服务器公务IP和服务器用户名密码,添加数据库服务器信息 包括IP地址/用户名/密码。
配置阿里云AccessKeyID 和 AccessKey Secret。
2.配置所购买服务器Java运行环境
获取平台服务器公钥并复制到服务器上。
3. 勾选应用部署模块
通过git clone 命令 拉取模块源码,同时根据用户配置修改数据库及中间价配置文件。
4.编译打包应用:mvn clean install 生成模块运行jar文件。
5.上传打包文件服务器节点:scp -r jar文件 远程服务器。
6.远程运行服务 ssh 远程服务器 “sh 远程服务器端服务运行脚本”。
分库的方式;
一、数据库瓶颈
不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。(并发量、吞吐量、崩溃)
1、IO瓶颈
第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。
第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 -> 分库。
2、CPU瓶颈
第一种:SQL问题,如SQL中包含join,group by,order by,非索引字段条件查询等,增加CPU运算的操作 -> SQL优化,建立合适的索引,在业务Service层进行业务计算。
第二种:单表数据量太大,查询时扫描的行太多,SQL效率低,CPU率先出现瓶颈 -> 水平分表。
当数据量大到一定程度的时候,都会导致处理性能的不足,这个时候就没有办法了,只能进行分表处理。也就是把数据库当中数据根据按照分库原则分到多个数据表当中,这样,就可以把大表变成多个小表,不同的分表中数据不重复,从而提高处理效率。
1.水平分表: 以字段为依据,按照一定策略(hash、range等),将一个表中的数据拆分到多个表中。系统绝对并发量并没有上来,只是单表的数据量太多,影响了SQL效率,加重了CPU负担,以至于成为瓶颈。分表之后,每个表的数据量少了,单次SQL执行效率高,自然减轻了CPU的负担。
2.在用户学情分析中,采用水平分表的方式对用户记录表进行分表,以userId 对10取模运算,对user_recod表拆分成10张表,依次user_recode0,user_recode1,......,user_code9,这样吧user_recod表的数据降低了十倍,提升了sql对查询效率,在对user_code 设计对时候要避免join的操作,所以在user_code冗余一些必要的字段,如用户名称/头像等,避免大表之间的关联查询,同时在分表的基础上,我们对 user_id,couse_id 创建了联合所以,进一步提出了数据库对查询效率。
模块扩展权限
手动授权:
管理员登录权限中心为用户授权,根据在哪个页面授权分为两种方式:给用户添加角色,给角色添加用户。
给用户添加角色就是在用户管理页面,点击某个用户去授予角色,可以一次为用户添加多个角色;给角色添加用户就是在角色管理页面,点击某个角色,选择多个用户,实现了给批量用户授予角色的目的。
审批授权:
即用户申请某个职位角色,那么用户通过 OA 流程申请该角色,然后由上级审批,该用户即可拥有该角色,不需要系统管理员手动授予。
(1)基础信息库
该数据库主要存租户、权限、日志、配置信息等公共信息,因为基础信息库是共享的,所以使用redis进行数据缓存以提高高频访问,可将redis与mysql进行分开部署,这样可极大提高系统的响应速度。基础库中主要是以租户为主账户信息,租户内可建立独享的二级账户、组织架构、功能权限等。每个租户在创建的时候会自动分配相应的数据库链接及表权限,具体业务模块可以进行动态的数据库结构创建以节省数据库开销。
(2)业务库
所有的分库分表都是基于业务库进行,业务库可根据实际业务及用户量进行多个服务器的部署,通过租户的信息拿到该租户的数据库访问链接及唯一id,实现多库多表跨服务器的数据访问。数据库的所有主键id均采用guid的形式进行生成,确保每个id的唯一性;所有的业务表根据功能业务的不同进行明显区分,保证各个业务之间低耦合,不进行强制关联,建立中间关系表来表达业务之间的联系。
数据库由很多表组成 每个表对应着不同的业务,垂直切分,按照业务将表进行分类,分布到不同的数据库上面,专库专用,系统中数据库(shopping)中主要包含商品(goods)、订单(order)和用户(user)相关的表格,同时还包括各个地区表(area),将整个数据库中的表格按照goods、order和user拆分到不同的数据库服务中,area中的数据较少并且不会变动,就不使用单独的数据库服务器了,将area和user存到一起。这样也就把压力分担到不同的库上面。
耦合度很高的情况下,维护代码时修改一个地方会牵连到很多地方,如果修改时没有理清这些耦合关系,那么带来的后果可能会是灾难性的,特别是对于需求变化较多以及多人协作开发维护的项目,修改一个地方会引起本来已经运行稳定的模块错误,严重时会导致恶性循环,问题永远改不完,开发和测试都在各种问题之间奔波劳累,最后导致项目延期,用户满意度降低,成本也增加了。为了预防这些问题的发生,其中一个重要手段就是降低代码的耦合度。
1、一般情况下,下层的包内代码依赖上层的包内代码,好处是把下层代码移除,而上层代码不受影响。但是部分上层代码也是可以依赖下层代码。
2、接口是提高系统之间松耦合的有力手段。例如电视机像遥控器公开了红外线接收器接口,使得电视机和遥控器之间相互独立,当电视机的内部实现发生变化时,比如由电子显示器改为液晶显示器,只要它的红外线接收器接口不变,就不会影响遥控器的实现。
3、封装有助于建立各个系统之间的松耦合关系,提高系统的独立性。当某一个系统的实现发生变化时,只要它的接口不变,就不会影响到其他的系统。
4、抽象机制和动态绑定能公共提高系统之间的松耦合性。
5、模块功能尽量单一。功能单一的模块供其他模块调用的机会就少。
6、遵循一个定义只在一个地方出现。
7、少使用全局变量。
8、类属性和方法的声明少用public,多用private关键字。
9、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合性。
10、尽量不用“硬代码”的方式写程序,同时也避免直接用SQL语句操作数据库。
11、最后避免直接操作或调用其他模板或类(内容耦合);如果模块之间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合。
(1)统一API接口封装,保证各模块间的数据规则一致,方便互通、整合、分析、展示。实现远程数据源的定义,包括字段和访问验证的定义,以及数据表或者数据源和表单的数据字段的匹配。
(2)技术架构,前端使用react/vue设计,后台使用spring boot微服务框架,及一个强大的工作流引擎。
(3)组件管理,在一个管理对象上,多种业务操作被抽象化、做出一个个的组件,比如:数据版本管理组件、操作日志组件,这些组件可以解决重复造轮子的问题。通过codefirst的形式进行动态的数据库逻辑建立,并且可以在平台上直接进行二次开发然后发布业务模块,发布之后,其他企业通过购买模块服务进行业务的共享,以业务领域模型来驱动平台。
内置模板
轻量级的代码生成工具。根据模板进行生成,支持任意模板代码的生成、以原生MySQL语句为基础,获取如数据库列表、表详情和列详情等信息,结合Freemarker模板生成Java代码。
可定制模板是集成Freemarker模板,只要是遵循Freemarker开发的模板都可以自动生成对应的Java代码。
1.1 代码结构
|-- biz
| |-- dto
| | `-- ${table.className}Dto.java
| |-- service
| | |-- ${table.className}Service.java
| | `-- impl
| | `-- ${table.className}ServiceImpl.java
| `-- vo
| `-- ${table.className}ConditionVO.java
|-- controller
| |-- Rest${table.className}Controller.java
| `-- render
| `-- Render${table.className}Controller.java
|-- persistence
| |-- beans
| | `-- ${table.className}.java
| |-- mapper
| | `-- ${table.className}Mapper.java
| `-- xml
| `-- ${table.className}Mapper.xml
|-- sql
|-- view
| `-- ${table.className}
|-- annotation.include
|-- java_copyright.include
`-- macro.include
1.2 定制模板
模板配置项
| 配置项 | 类型 | 示例 | 解释 | 备注 |
|:---------------------------|:---------|:---------|:---------||:---------|
| classPrefix | String | Light | 生成的类前缀,先去除 clearClassPrefix再添加 classPrefix | |
| clearClassPrefix | String | Light | 需要去除的类前缀,先去除clearClassPrefix 再添加 classPrefix | |
| driver | String | com.mysql.cj.jdbc.Driver | | |
| url | String | jdbc:mysql://127.0.0.1:3306/light | | |
| db | String | light | 选择的数据库,非必填,如果为空会从url中解析 | |
| username | String | root | 数据库用户名 | |
| password | String | root | 数据库密码 | |
| basePackage | String | me.zhyd.xx.core | 根包名 | |
| beansPackage | String | me.zhyd.light.core.db.persistence.beans |beans包名 | |
| mapperPackage | String | me.zhyd.xx.core.db.persistence.mapper |mapper接口包名 | |
| outRootDir | String | D:\project\generator\generator-output | 文件输出路径 | |
| templatePath | String | template/ | 模板路径,基于当前项目路径 | |
| table | JSONObject | object | 表信息 | |
table 配置项
| 配置项 | 类型 | 示例 | 解释 | 备注 |
|:---------------------------|:---------|:---------|:---------||:---------|
| type | String | BASE TABLE | 数据表类型 | |
| db | String | light | 数据库名 | |
| tableName | String | links | 数据表名 | |
| coding | String | utf8mb4_general_ci | 数据表编码 | |
| createTime | String | 2020-04-26 13:25:37 | 数据表创建时间 | |
| engine | String | InnoDB | 数据表引擎 | |
| remark | String | | 数据表注释 | |
| className | String | LightLinks | 待生成的类名 | |
| classNameFirstLower | String | lightLinks | 首字母小写的类名 | |
| classNameFirstUpper | String | LightLinks | 首字母大写的类名 | |
| columns | JSONArray | array | 列信息 | |
table.columns 配置项
| 配置项 | 类型 | 示例 | 解释 | 备注 |
|:---------------------------|:---------|:---------|:---------||:---------|
| tableName | String | links | 表名 | |
| keyType | String | PRI | 键类型(PRI 主键) | |
| columnName | String | id | 列名 | |
| columnNameFirstLower | String | id | 列名首字母小写 | |
| columnNameFirstUpper | String | Id | 列名首字母大写 | |
| notNull | Boolean | true | 是否允许为空 | |
| length | Integer | 0 | 长度 | |
| scale | Integer | 0 | 精度,当为浮点数字类型时可用 | |
| remark | String | | 列注释 | |
| columnType | String | bigint | 列对应的数据库数据类型 | |
| jdbcType | String | BIGINT | 列对应的JDBC数据类型 | |
| javaType | String | java.lang.String | 列对应的Java数据类型 | |
| possibleShortJavaType | String | String | | |
| extra | String | auto_increment | 额外参数,auto_increment表自增 | |
1.3使用方式
Generator.java对外提供了四个接口:
Generator#deleteOutRootDir(): 删除输出目录的文件,一般在generate之前调用,清空旧的输出文件。
Generator#printAllTableInfo(): 打印所有表信息。
Generator#generateAll(): 将所有表生成java文件。
Generator#generate(String[]): 指定表名生成java文件,入参为可变参数,如果为空则调用Generator#generateAll()方法。
图3为本申请一实施例提供的一种低代码平台二次开发软件的装置的结构示意图,如图3所示的,低代码平台二次开发软件的装置300包括:
需求模块301,用于获取用户输入的需求指令,所述需求指令中含有需求信息;
分析模块302,用于分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息;
生成模块303,用于根据所述需求信息、所述技术栈、接口信息,生成目标代码;
部署模块304,用于部署并运行所述源代码、所述目标代码;
测试模块305,用于测试所述目标代码的功能是否正常,若是则将所述目标代码与所述源代码一起打包;
修改模块306,用于若否则根据错误日志,修改所述目标代码,并重复进行测试,直至目标代码的功能正常。
可选的,所述分析模块302分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息时,具体用于:
遍历所述源代码中的目录结构,确定所述源代码中的依赖包名称;
根据所述依赖包名称确定所述待开发软件的技术栈;
根据所述技术栈,确定所述待开发软件的技术架构、接口类型;
遍历所述源代码中的代码文件,根据所述接口类型确定所有接口代码文件;
读取所述接口代码文件,确定所述待开发软件的接口信息。
可选的,所述生成模块303根据所述需求信息、所述技术栈、接口信息,生成目标代码时,具体用于:
分析所述需求信息,确定所述目标代码的实现功能;
判断所述需求信息是否指定技术栈,若是则将指定技术栈设为目标技术栈,若否则根据所述技术栈、所述需求信息,选择目标技术栈;
读取所述接口信息,获取各接口中所有参数的名称;
根据所述实现功能、所述目标技术栈,选定代码模板;
根据所述参数的名称,将所述代码模板中相同参数类型的参数替换,生成目标代码。
可选的,所述部署模块304部署并运行所述源代码、所述目标代码时,具体用于:
根据所述依赖包名称,确定所述源代码所连接的数据源类型、环境要求;
遍历所述源代码中的配置文件,获取所述源代码中连接数据源的数据库账户、密码;
配置相应的测试数据源,并根据所述账户、密码连接所述测试数据源;
根据所述环境要求配置测试环境、测试中间件,并部署所述源代码、所述目标代码。
可选的,所述需求指令包括:文字输入指令、图形拖拽指令;
所述需求模块301分析所述需求信息,确定所述目标代码的实现功能时,具体用于:
分析所述文字输入指令中的文字语义信息,获取所述目标代码的实现功能;
分析所述图形拖拽指令中被拖拽的图形,获取所述图形代表的实现功能。
可选的,所述测试模块305测试所述目标代码的功能时,具体用于:
运行所述目标代码过程中,测试所述源代码所有功能,判断所述源代码中各功能是否正常运行,且运行结果是否原设定结果;
运行所述源代码过程中,测试所述目标代码所有功能,判断所述目标代码中各功能是否正常运行,且运行结果是否符合设定结果;
模拟虚拟用户访问所述源代码的任意功能,确定所述源代码的压力等级;
根据所述压力等级,模拟相应数量的模拟用户访问所述目标代码,判断所述目标代码是否正常运行,且运行结果是否符合设定结果。
可选的,所述修改模块306根据错误日志,修改所述目标代码时,具体用于:
分析所述错误日志,确定异常代码的行数;
将所述目标代码在所述行数的前后行分别加入阻塞代码;
运行所述目标代码,当所述目标代码运行阻塞时,记录各参数数据;
所述目标代码运行结束后,对比各参数数据的变化情况,确定异常参数;
遍历所述目标代码,修改包含所述异常参数的代码。
本实施例的装置,可以用于执行上述任一实施例的方法,其实现原理和技术效果类似,此处不再赘述。
图4为本申请一实施例提供的一种电子设备的结构示意图,如图4所示,本实施例的电子设备400可以包括:存储器401和处理器402。
存储器401上存储有能够被处理器402加载并执行上述实施例中方法的计算机程序。
其中,处理器402和存储器401相连,如通过总线相连。
可选地,电子设备400还可以包括收发器。需要说明的是,实际应用中收发器不限于一个,该电子设备400的结构并不构成对本申请实施例的限定。
处理器402可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器402也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线可包括一通路,在上述组件之间传送信息。总线可以是PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器401可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器401用于存储执行本申请方案的应用程序代码,并由处理器402来控制执行。处理器402用于执行存储器401中存储的应用程序代码,以实现前述方法实施例所示的内容。
其中,电子设备包括但不限于:移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。还可以为服务器等。图4示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
本实施例的电子设备,可以用于执行上述任一实施例的方法,其实现原理和技术效果类似,此处不再赘述。
本申请还提供一种计算机可读存储介质,存储有能够被处理器加载并执行如上实施例中的方法的计算机程序。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (10)
1.一种低代码平台二次开发软件的方法,其特征在于,包括:
获取用户输入的需求指令,所述需求指令中含有需求信息;
分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息;
根据所述需求信息、所述技术栈、接口信息,生成目标代码;
部署并运行所述源代码、所述目标代码;
测试所述目标代码的功能是否正常,若是则将所述目标代码与所述源代码一起打包;
若否则根据错误日志,修改所述目标代码,并重复进行测试,直至目标代码的功能正常。
2.根据权利要求1所述的方法,其特征在于,所述分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息,包括:
遍历所述源代码中的目录结构,确定所述源代码中的依赖包名称;
根据所述依赖包名称确定所述待开发软件的技术栈;
根据所述技术栈,确定所述待开发软件的技术架构、接口类型;
遍历所述源代码中的代码文件,根据所述接口类型确定所有接口代码文件;
读取所述接口代码文件,确定所述待开发软件的接口信息。
3.根据权利要求2所述的方法,其特征在于,所述根据所述需求信息、所述技术栈、接口信息,生成目标代码,包括:
分析所述需求信息,确定所述目标代码的实现功能;
判断所述需求信息是否指定技术栈,若是则将指定技术栈设为目标技术栈,若否则根据所述技术栈、所述需求信息,选择目标技术栈;
读取所述接口信息,获取各接口中所有参数的名称;
根据所述实现功能、所述目标技术栈,选定代码模板;
根据所述参数的名称,将所述代码模板中相同参数类型的参数替换,生成目标代码。
4.根据权利要求3所述的方法,其特征在于,所述部署并运行所述源代码、所述目标代码包括:
根据所述依赖包名称,确定所述源代码所连接的数据源类型、环境要求;
遍历所述源代码中的配置文件,获取所述源代码中连接数据源的数据库账户、密码;
配置相应的测试数据源,并根据所述账户、密码连接所述测试数据源;
根据所述环境要求配置测试环境、测试中间件,并部署所述源代码、所述目标代码。
5.根据权利要求3或4所述的方法,其特征在于,所述需求指令包括:文字输入指令、图形拖拽指令;
所述分析所述需求信息,确定所述目标代码的实现功能,包括:
分析所述文字输入指令中的文字语义信息,获取所述目标代码的实现功能;
分析所述图形拖拽指令中被拖拽的图形,获取所述图形代表的实现功能。
6.根据权利要求4所述的方法,其特征在于,所述测试所述目标代码的功能,包括:
运行所述目标代码过程中,测试所述源代码所有功能,判断所述源代码中各功能是否正常运行,且运行结果是否原设定结果;
运行所述源代码过程中,测试所述目标代码所有功能,判断所述目标代码中各功能是否正常运行,且运行结果是否符合设定结果;
模拟虚拟用户访问所述源代码的任意功能,确定所述源代码的压力等级;
根据所述压力等级,模拟相应数量的模拟用户访问所述目标代码,判断所述目标代码是否正常运行,且运行结果是否符合设定结果。
7.根据权利要求5所述的方法,其特征在于,所述根据错误日志,修改所述目标代码,包括:
分析所述错误日志,确定异常代码的行数;
将所述目标代码在所述行数的前后行分别加入阻塞代码;
运行所述目标代码,当所述目标代码运行阻塞时,记录各参数数据;
所述目标代码运行结束后,对比各参数数据的变化情况,确定异常参数;
遍历所述目标代码,修改包含所述异常参数的代码。
8.一种低代码平台二次开发软件的装置,其特征在于,包括:
需求模块,用于获取用户输入的需求指令,所述需求指令中含有需求信息;
分析模块,用于分析待开发软件的源代码,获取所述源代码使用的技术栈、接口信息;
生成模块,用于根据所述需求信息、所述技术栈、接口信息,生成目标代码;
部署模块,用于部署并运行所述源代码、所述目标代码;
测试模块,用于测试所述目标代码的功能是否正常,若是则将所述目标代码与所述源代码一起打包;
修改模块,用于若否则根据错误日志,修改所述目标代码,并重复进行测试,直至目标代码的功能正常。
9.一种电子设备,其特征在于,包括:存储器和处理器;
所述存储器,用于存储程序指令;
所述处理器,用于调用并执行所述存储器中的程序指令,执行如权利要求1-7任一项所述的低代码平台二次开发软件的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序;所述计算机程序被处理器执行时,实现如权利要求1-7任一项所述的低代码平台二次开发软件的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310349609.9A CN116450107B (zh) | 2023-04-04 | 2023-04-04 | 低代码平台二次开发软件的方法、装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310349609.9A CN116450107B (zh) | 2023-04-04 | 2023-04-04 | 低代码平台二次开发软件的方法、装置、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116450107A true CN116450107A (zh) | 2023-07-18 |
CN116450107B CN116450107B (zh) | 2023-12-01 |
Family
ID=87131443
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310349609.9A Active CN116450107B (zh) | 2023-04-04 | 2023-04-04 | 低代码平台二次开发软件的方法、装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116450107B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117150515A (zh) * | 2023-10-31 | 2023-12-01 | 上海合见工业软件集团有限公司 | Eda二次开发源代码的安全保护方法、电子设备及存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976761A (zh) * | 2019-02-27 | 2019-07-05 | 平安科技(深圳)有限公司 | 软件开发工具包的生成方法、装置及终端设备 |
CN111443944A (zh) * | 2020-06-12 | 2020-07-24 | 支付宝(杭州)信息技术有限公司 | 一种程序构建方法、装置及设备 |
CN112748914A (zh) * | 2020-03-18 | 2021-05-04 | 腾讯科技(深圳)有限公司 | 一种应用程序开发方法、装置、电子设备和存储介质 |
CN113626128A (zh) * | 2021-10-08 | 2021-11-09 | 中国传媒大学 | 视听媒体微服务第三方模块接入方法、系统、电子设备 |
KR20210156365A (ko) * | 2020-06-17 | 2021-12-27 | 주식회사 이스트웨이텍 | 타입별 코드 자동 생성 소프트웨어 개발 장치 |
CN114168183A (zh) * | 2021-11-17 | 2022-03-11 | 北京五八信息技术有限公司 | 前端资源信息处理方法、装置、设备及存储介质 |
CN114296737A (zh) * | 2021-12-27 | 2022-04-08 | 中国建设银行股份有限公司 | 业务代码生成方法、装置、设备及存储介质 |
CN114840191A (zh) * | 2022-04-12 | 2022-08-02 | 阿尔特汽车技术股份有限公司 | 软件代码自动生成方法、装置、设备及可读存储介质 |
CN115113859A (zh) * | 2022-08-26 | 2022-09-27 | 平安银行股份有限公司 | 一种代码生成方法及装置 |
CN115543419A (zh) * | 2022-10-18 | 2022-12-30 | 康键信息技术(深圳)有限公司 | 一种软件开发工具包的生成方法、装置、设备及存储介质 |
CN115857946A (zh) * | 2022-12-12 | 2023-03-28 | 招联消费金融有限公司 | 代码生成的方法及装置、电子设备及计算机存储介质 |
-
2023
- 2023-04-04 CN CN202310349609.9A patent/CN116450107B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976761A (zh) * | 2019-02-27 | 2019-07-05 | 平安科技(深圳)有限公司 | 软件开发工具包的生成方法、装置及终端设备 |
CN112748914A (zh) * | 2020-03-18 | 2021-05-04 | 腾讯科技(深圳)有限公司 | 一种应用程序开发方法、装置、电子设备和存储介质 |
CN111443944A (zh) * | 2020-06-12 | 2020-07-24 | 支付宝(杭州)信息技术有限公司 | 一种程序构建方法、装置及设备 |
KR20210156365A (ko) * | 2020-06-17 | 2021-12-27 | 주식회사 이스트웨이텍 | 타입별 코드 자동 생성 소프트웨어 개발 장치 |
CN113626128A (zh) * | 2021-10-08 | 2021-11-09 | 中国传媒大学 | 视听媒体微服务第三方模块接入方法、系统、电子设备 |
CN114168183A (zh) * | 2021-11-17 | 2022-03-11 | 北京五八信息技术有限公司 | 前端资源信息处理方法、装置、设备及存储介质 |
CN114296737A (zh) * | 2021-12-27 | 2022-04-08 | 中国建设银行股份有限公司 | 业务代码生成方法、装置、设备及存储介质 |
CN114840191A (zh) * | 2022-04-12 | 2022-08-02 | 阿尔特汽车技术股份有限公司 | 软件代码自动生成方法、装置、设备及可读存储介质 |
CN115113859A (zh) * | 2022-08-26 | 2022-09-27 | 平安银行股份有限公司 | 一种代码生成方法及装置 |
CN115543419A (zh) * | 2022-10-18 | 2022-12-30 | 康键信息技术(深圳)有限公司 | 一种软件开发工具包的生成方法、装置、设备及存储介质 |
CN115857946A (zh) * | 2022-12-12 | 2023-03-28 | 招联消费金融有限公司 | 代码生成的方法及装置、电子设备及计算机存储介质 |
Non-Patent Citations (3)
Title |
---|
MYAPPS低代码平台: "低代码平台王牌优势之二次开发能力", Retrieved from the Internet <URL:https://me.mbd.baidu.com/r/1519ow78YXm?f=cp&u=20705f31deaddf21> * |
张明: "一种SAP低代码开发平台的设计与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》, no. 12 * |
杨攀飞等: "流版软件网页二次开发接口测试技术研究", 《信息技术与信息化》, no. 02 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117150515A (zh) * | 2023-10-31 | 2023-12-01 | 上海合见工业软件集团有限公司 | Eda二次开发源代码的安全保护方法、电子设备及存储介质 |
CN117150515B (zh) * | 2023-10-31 | 2024-01-26 | 上海合见工业软件集团有限公司 | Eda二次开发源代码的安全保护方法、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116450107B (zh) | 2023-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11789715B2 (en) | Systems and methods for transformation of reporting schema | |
JP5162094B2 (ja) | メタデータ駆動型ビジネス・ロジック(metadatadrivenbusinesslogic)処理のための方法および装置 | |
US10877938B2 (en) | Dynamically synching elements in file | |
US8327351B2 (en) | Application modification framework | |
US20070043956A1 (en) | System and methods that facilitate third party code test development | |
US8402119B2 (en) | Real-load tuning of database applications | |
US10445675B2 (en) | Confirming enforcement of business rules specified in a data access tier of a multi-tier application | |
US11922146B2 (en) | Systems and method for creating enterprise software | |
US11126503B2 (en) | Pre-filtering of join execution over multi-column range summaries and other synopses | |
CN103914290A (zh) | 一种操作命令处理方法及装置 | |
CN116450107B (zh) | 低代码平台二次开发软件的方法、装置、电子设备 | |
US11704114B2 (en) | Data structures for managing configuration versions of cloud-based applications | |
CN106990974B (zh) | 一种app应用更新方法、装置及电子设备 | |
US20180239787A1 (en) | Configurable provider for layered repository | |
CN114546563A (zh) | 一种多租户页面访问控制方法和系统 | |
US10680901B2 (en) | Configuration management in a multisystem environment | |
CN117112060A (zh) | 组件库构建方法、装置、电子设备及存储介质 | |
Aven | Apache Spark in 24 Hours, Sams Teach Yourself | |
US11888937B2 (en) | Domain specific provider contracts for core data services | |
US20210382711A1 (en) | Data structures for managing configuration versions of cloud-based applications | |
Kumar | Microservices Architecture with Springboot | |
Mishra et al. | Web Application using Spring Boot | |
CN116909545A (zh) | 一种基于微服务架构的低代码mom平台 | |
CN116701545A (zh) | 审计数据分析方法、装置、存储介质及处理器 | |
CN115203027A (zh) | 基于数据集成模型的测试方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |