APP下载

基于Jet快速开发平台的科技管理系统构建

2023-03-04陈永光万近况郝亚锋杨树森

陕西科技大学学报 2023年1期
关键词:煤业代码陕西

陈永光,万近况,郝亚锋,赵 鹏,杨树森,赵 聪

(1.陕西煤业股份有限公司 生产技术部,陕西 西安 710076;2.西安交通大学 计算机科学与技术学院,陕西 西安 710049;3.西安交通大学 数学与统计学院,陕西 西安 710049)

0 引言

目前,我国在信息化建设方面对企业的支撑作用已不局限于业务运营范围,更多的是为企业创造新的科技战略竞争机遇[1,2].其中,建立企业信息化科技管理系统来保障信息化建设的顺利推进是提升企业效益和效率的关键因素之一[3,4].总体而言,当前信息化系统的开发过程中存在三个普遍特征:一是信息化系统建设的特点集中体现在涵盖工作面广、功能多样化、性能智能化等方面;二是随着系统开发要求的不断提高,相应的系统建设开发周期反而越来越短,一旦立项,数月内就要完成系统开发、测试及上线运行;三是企业客户往往缺乏一个明确、细致的技术规格,这也是最让开发人员感到困惑的系统业务需求之一[5].由于需求的不明确性和不稳定性,需要根据实际开发过程的中间结果来阶段性地不断调正、修改与完善开发规划.因此,承担系统软件开发任务的开发者既要满足国标GB/T 8566-2007《信息技术软件生存周期过程》规定的诸多环节(如过程实施、需求分析、软件设计、编码和测试、软件验收支持等流程均不可或缺),又要在数月内完成系统软件的开发与上线,匹配当年工作的开展,满足客户需求.其中,开发模型的选择至关重要,选择合适的开发模型会对系统开发工作起到事半功倍的作用[6].

软件开发模型是涵盖整个软件生命周期中系统开发、运行和运维所实施的全部工作和任务的结构框架.瀑布模型作为最早出现的软件开发模型,在软件工程中占据着重要地位[7,8].然而,瀑布模型对客户需求的要求极高,其中软件需求不能频繁变更,且开发人员必须准确理解需求[9,10].这往往导致开发完成的软件项目与客户预期中的效果存在差异,进而导致软件项目无法顺利高效地完成,最终造成巨大的时间和经济损失.为解决这个问题,快速敏捷开发模型应运而生[11].它保持了瀑布模型线性开发的特点,有利于对项目进行有效的管理;与此同时,它侧重于对客户需求的精确捕获,通过建立客户与系统间的交互,使客户对系统进行简单了解,从而提出简要评价,成功细化了客户对软件产品的需求[12].

从上述需求出发,本文认为快速敏捷开发模型是满足企业用户要求的最可靠的开发模型.常见的快速敏捷开发框架包括SCRUM、XP、FDD、DSDM、ASD等[13].本文进一步设计了Jet低代码快速开发平台,选取陕西煤业股份有限公司进行实例验证,基于所提出平台完成了《陕西煤业科技管理信息系统》的开发,验证了其可用性、易用性和高效优质性.实验结果表明,Jet低代码快速开发平台是一种开发效率高、操作简单、实用性非常强的快速敏捷开发工具,对陕西煤业在科技信息管理、效益经营、提高市场竞争力方面均有重要意义.此外,本研究也可为我国广大企业信息化管理提供参考范例,从理论和实践两方面有效推动企业实现信息化和企业战略的融合,提高信息化的投资回报率并降低企业信息化建设风险,对企业信息化发展具有较大的意义和价值.

1 科技管理系统的业务需求和架构设计

从业务角度出发,科技管理系统主要包括项目管理、科技成果评价管理、评奖管理、科技引导资金申请与管理、科技工作考核与评选、科技成果管理、加计扣除管理、科技贡献率计算、政府政策解读、期刊管理、文档管理、报表管理、科技人员管理、系统管理等十数个功能模块,各功能模块又有数个业务功能分支.功能详细分类及功能点见表1所示.下面以陕西煤业股份有限公司为例,详细讨论其科技管理系统在构建过程中的业务需求和架构设计.

表1 科技管理系统主要业务功能列表

1.1 业务需求

陕西煤业科技管理系统的业务需求可从管理架构、性能要求、安全性要求、岗位职能要求和易用性要求等方面分别讨论.首先,科技管理系统在管理架构上由三级组织架构构成,要满足陕西煤业、矿业公司、煤矿企业三层管理架构的数据权限功能,因此,系统必须兼顾三级组织单位使用.之后,在性能要求方面,系统最少支持用户数15万人以上;最少支持并发访问量5 000以上;并发访问量5 000时,单个页面响应时间小于1秒(千兆内部网络环境).其次,在安全性要求方面,系统需满足安全等级保护三级要求:当系统检测到攻击行为时,记录攻击源IP、攻击类型、攻击目标、攻击时间,在发生严重入侵事件时提供报警,系统应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施,系统运行日志保存5年以上,要求每天自动生成一个日志文件,操作日志永久保存.此外,在岗位职能要求方面,登录用户需满足一岗多人、一人兼数职.最后,在易用性要求方面,主要包括系统功能界面整体应具备一致性、系统应支持灵活自定义的查询操作、系统应提供在线帮助功能以方便用户随时查询使用等.

1.2 架构设计和业务实现

基于以上对陕西煤业科技管理系统的业务需求和性能需求分析,可以得出该系统的实现需求具有以下四个方面特点:

(1)业务功能多且开发周期短,即要求快速开发;

(2)运行快,BUG少,即开发质量要有充分保障;

(3)保障运行操作安全、数据安全,即整体架构有安全保障;

(4)可快速应对系统功能的频繁更新,即具有快速运维安全保障.

为此,本文以满足上述需求特点为目标,对系统的业务架构和实现途径做架构设计,同时选择有效的开发工具来实现系统开发.

如图1所示,所设计业务架构自下而上由接口层、数据层、服务层、业务功能层和显示接入层构成,整个过程贯穿着短信收发通知以及贯穿于整体联系的消息总线.

图1 陕西煤业科技管理信息系统业务架构

针对上述业务架构,本文设计了如图2所示的开发实现系统架构.其中,数据层采用开源的PostgreSQL数据库,redis负责整个系统运行中的设备配置、状态管理和各种缓存.业务层由SpringBoot、SpringMVC、JFinal等构成的Jet低代码快速开发平台实现.服务层由mybatis映射、rsbbitMq消息队列、JWT token、Shiro鉴权等中间件实现.

图2 系统架构

对于业务功能的设计,本文首先将系统按照功能属性划分为门户网站、业务和后台管理三个子系统,本文内容主要集中在业务子系统的技术实现上.业务子系统负责整个科技管理系统的业务处理,由庞大且复杂的业务处理细节组成.按照业务属性,将其划分为表1所示的十大功能分类(一级菜单),具体业务功能点见表1.

2 Jet快速开发架构

为了满足陕西煤业科技管理信息系统开发周期短、稳定性要求高、安全性要求高、后期频繁更新运维保障要求高的非技术需求,本文研发了Jet低代码快速开发平台技术.以下分别从Jet快速开发架构、Jet快速开发平台、工程实践技术、多重系统安全防护技术和容器技术等方面详细介绍平台设计与实现.

2.1 Jet快速开发架构

本文所设计Jet快速开发架构基于编译器技术自动生成前后端代码,前端UI通过事件分发实现继承机制,常规增删查改导入导出不用写一行代码,内置资源管理、角色管理、权限管理等11个基础功能,开箱即用实现快速开发;基于工程最佳实践、确保代码质量,统一软件供应链管控,统一项目构建管理,强制代码静态检查、警告零容忍;多种安全举措并用、确保系统安全,通过类型安全SQL,系统SQL注入漏洞为零,通过引入Shiro安全框架,安全管控全局统一处理,基于yubikey实现硬件级双因子认证,支持免密登录;基于Jib自动将Java项目打包成Docker镜像,通过Dcoker-Compose技术自动化部署最新代码,基于容器相关技术实现快速更新部署,达到分钟级部署.

2.2 Jet快速开发平台

2.2.1 基于编译器技术的代码自动生成

针对一个MIS信息系统,传统开发方式即便是开发一个增删改查的CURD模块,也需要逐个编写POJO、ORM映射、DAO、Service、Controller和前端代码.经统计,一个中级工程师开发这样一个CURD模块,需要1~2天时间.本文基于上述Jet框架,通过实现一个编译器直接生成这些增删改查代码,让开发人员只专注于开发除增删改查之外的个性化业务代码.

编译器的实现分为三个阶段:

Step1获取数据库业务表信息,即通过数据库的系统表获得所有业务表的表名、字段名、字段类型、字段注释;

Step2在内存中重建系统业务信息,将这些业务表信息转化为Java对象信息,并在内存中重建依赖关系;

Step3依靠模板技术,通过预先定义的业务模板,将内存中的Java对象直接生成POJO、ORM映射、DAO、Service、Controller和前端代码相关代码,生成的代码可不用修改直接正常运行.

通过编译器代码生成技术,一个中级工程师从设计业务表到生成所有前后端代码只需30 min左右.因此,本文所提出的Jet快速开发平台可将开发一个CURD功能所需时间从传统的1~2天缩短到30 min以内,大幅提升了开发效率.

2.2.2 基于事件分发的前端UI继承机制

代码生成器的优势是可以快速生成代码,生成的后台代码往往通过继承来复用,但是由于业务复杂,前端代码难以复用.因此,如何在前端实现更好的代码复用是一个亟待解决的问题.

本文通过事件派发方式实现了前端继承机制,将事件的产生和事件的执行分开,用户界面操作产生系统事件,Jet前端将系统事件转化为业务事件,再分发到绑定这个业务事件的业务函数上从而实现功能.通过事件机制实现了代码复用,生成的代码继承基类后自动支持增删改查相关操作,通用操作直接绑定到对应的业务事件上,在基类中统一实现,个性化操作只需定义新的事件和新的事件处理即可.

综上所述,基于事件分发在前端实现集成机制,既保证了生成前端的基本CURD操作不用写一行代码,又可以通过轻松扩展来支持复杂功能.

2.3 工程实践技术

2.3.1 软件供应链统一管控

现代软件开发过程通常以开源软件为基础原材料,结合实际业务需求和应用场景补充添加相对独立的业务代码,最后形成一套软件系统.全球最权威的开源软件安全分析报告指出,所调研的系统中99%包含开源组件,49%的开源组件包含高风险漏洞,82%的代码库中包含过期4年的组件,存在安全风险.为了对项目中使用的第三方组件进行统一管控,本文采用POM来集中定义项目的私有Jar包依赖仓库以及相应Jar包的版本号,子模块禁止引入新的Jar依赖,禁止使用Jar包版本号,只允许使用POM中定义的内部依赖,从而达到统一管控依赖的效果.

2.3.2 项目构建统一管理

Java项目自动构建过程复杂,为了统一各个子模块的构建方法,本文定义了parent模块,所有子模块继承自该模块,自动继承在parent中定义的构建方法,包括自动更新版权、自动格式化代码、自动进行代码静态检查、自动打包等.

2.3.3 静态代码检查

静态代码分析[14]是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷.统计表明,在整个软件开发生命周期中,30%至70%的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的.对于软件开发团队而言,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本.本文通过引入PMD静态代码检查工具,可以自动发现以下问题:

(1)潜在的BUG:空的try/catch/finally/switch语句;

(2)未使用的代码:未使用的局部变量、参数、私有方法等;

(3)可选的代码:String/StringBuffer的滥用;

(4)复杂的表达式:不必须的if语句、可以使用while循环完成的for循环;

(5)重复的代码:拷贝/粘贴代码意味着拷贝/粘贴BUG;

(6)循环体创建新对象:尽量不要在for或while循环体内实例化一个新对象;

(7)资源关闭:Connect,Result,Statement等使用之后确保关闭掉.

2.4 多重系统安全防护技术

近年来,信息安全事件层出不穷,信息安全越来越受到重视[15,16].图3展示了2017年、2021年全球排名靠前的安全风险.针对此问题,本文采用多重系统安全防护技术保障系统安全.

图3 十大Web应用程序安全风险[15]

2.4.1 安全SQL技术

本文通过构建类型安全SQL确保系统SQL注入漏洞为零.SQL注入漏洞连续多年排在安全漏洞的前列(如图3所示,2017年排名第一,2021年排名第三).形成SQL注入漏洞的主要原因是在前端的数据传入到后台进行处理时没有经过严格的判断,因此,其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行,从而导致数据库受损(被脱库、被删除、甚至整个服务器权限沦陷).为了解决这个问题,本文构建了类型安全SQL,即用Java语言来描述数据库结构,用Java语言来写各种SQL语句,通过Java编译器在构建期间就自动检查相关代码,在运行期通过动态SQL生成技术实时安全地生成SQL代码,从而从源头上消除了SQL注入漏洞,确保系统SQL注入漏洞为零.

2.4.2 Shiro安全框架

本文通过引入Shiro安全框架[17]实现安全管控全局统一处理.访问控制问题成为2021年排名第一的安全问题[15].由于独自实现一套安全框架工作量过大,本文引入了Apache Shiro,一个功能强大、易于使用的Java安全框架.其可以执行身份验证、授权、加密和会话管理.通过Shiro易于理解的API,可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的web和企业应用程序.本文通过Apache Shiro来支持账号/密码、硬件登录、并对所有的请求进行访问控制,并支持用户-角色-权限的经典权限控制体系.

2.4.3 yubikey硬件级双因子认证

本文支持yubikey硬件级双因子认证,支持WebAuthn免密登录协议,登录系统只需插入yubikey硬件,并触摸安全触点即可实现自动登录系统,省却了输入用户名和密码的麻烦,即简单又安全.

2.5 容器技术

本文所构建的Jet快速开发平台采用目前常用的虚拟机(Virtual Machine,VM)技术与容器技术进行虚拟化与资源隔离,构建应用开发测试与生产的环境.Docker是基于LXC容器技术的开源项目[18,19],可用于打包应用代码及其运行环境和依赖库,构建不可变基础设施.同时,因为其轻便的特性,具有很强的移植能力,如图4所示.

图4 Docker容器与虚拟机架构示意图[18]

2.5.1 基于Jib技术的程序打包

Docker容器的体量要远小于虚拟机,对主机CPU、内存和存储的资源开销也更低,同时由于其轻量特性,更加便于服务迁移与负载均衡的实现.Jib技术在不使用Dockerfile或不安装Docker的情况下构建容器,可以在用于Maven或Gradle的Jib插件中使用Jib技术,也可以使用Jib Java库.本文将Jib技术应用于打包容器镜像的所有步骤,因此,无需了解创建Dockerfile的最佳做法或安装Docker.

具体来说,Jib将应用整理成不同的层、依赖项、资源和类,并且利用Docker镜像层缓存仅通过重建更改来保持构建速度.Jib的层组织和小型基础镜像可使整体镜像尺寸变小,从而提升性能和可携性.传统方式每次打包约需要五分钟,且容易出错,本文采用Jib方式可将打包时间最少缩短到一分钟,且更为可靠、不易出错.

2.5.2 基于Docker-compose的快速部署

Docker-compose技术是用于定义和运行多容器Docker应用程序的工具[20].通过Compose,本文使用YML文件来配置应用程序需要的所有服务.然后,使用一个命令,就可以从YML文件配置中创建并启动所有服务.

传统系统部署方式一般需要1到2天的时间,采用Docker-compose方式,仅需要1到2个小时即可完成部署,且更新时间只需要两分钟.

3 系统实现

基于所提出Jet低代码快速开发平台技术,本文实现了《陕西煤业科技管理信息系统》的具体设计和开发,并在陕西煤业单位全面部署应用.本系统共开发Web程序业务功能点130个,手机App业务功能点37个,完成代码量约30万行.

陕西煤业科技管理信息系统概况如图5、图6所示.图5为系统驾驶舱,其布局有本单位科技进步贡献率、科技项目进度可视化图、科研成果统计图、科研经费支出统计图、重要通知、该当登录角色待办事项、政策解读等内容.陕西煤业账号还有下属矿业公司最新科技项目概况链接.

图5 陕西煤业科技管理信息系统—驾驶舱页面

图6为系统整体页面布局,由一级菜单、二级菜单、数据列表区、数据查询区、数据操作区(三级菜单)等五个功能区构成.系统全体页面的风格、布局、排序等前后一致,使得学会一个页面功能的操作,其他页面随之可用,大大提高了系统的易用性.同时,无论是什么角色,进入哪个环节,其可操作功能、不可操作功能、数据权限限制等,都智能地进行了规制,其目的是防止误操作,只进行当前该处理的业务,从而大大提高了系统的智能性.

图6 陕西煤业科技管理信息系统—页面布局

相对于RAD快速模型将系统功能模块化、独立化,可并行工作、齐头猛进,以大量人力的投入换取开发时间上的短缩等诸多开发手法,本文所提出Jet低代码快速开发平台采用的是代码自动生成和页面复用技术,能够在不增加人工数开支的前提下极大地提高代码编程效率,大大缩减开发周期.

系统采用模块化开发,一方面通过模块划分以便多人合作开发,另一方面通过模块化来降低系统复杂性.项目最多时投入12名开发人员,Git上代码提交了2 177次,数据库表96张,采用代码生成技术Java代码66 765行,截止投稿时间累计开发Java代码100 140行,仅Java代码而言,代码生成占比=66 765/100 140=66.6%,开发效率得到了大幅提升.

4 结论

本文设计并实现了Jet低代码快速开发平台,其优势并不在于将整体化整为零,同时独立开发,而是将共通类的处理自动化,用机器实现60%的代码开发量,使开发团队集中于业务处理,相互搭配以实现快速开发,达到客户认定标准.进一步,本文选取陕西煤业股份有限公司进行实例验证,细致展现了《陕西煤业科技管理信息系统》的总体架构及其业务和功能需求,详细阐述了基于所提出Jet低代码快速开发平台的《陕西煤业科技管理信息系统》的开发过程.结果表明,本文所提出的Jet低代码快速开发平台是一种开发效率高、操作简单、实用性非常强大的快速敏捷开发工具,对陕西煤业在科技信息管理、效益经营、提高市场竞争力等方面具有重要意义.

猜你喜欢

煤业代码陕西
陕西自贸区这四年
Shajiabang:picturesque water town in heaven
省委定调陕西“十四五”
河南平宝煤业有限公司
创世代码
创世代码
创世代码
创世代码
砥砺奋进的五年
——喜迎十九大 追赶超越在陕西
新形势下对煤业安全管理工作的思考