开发小组在极短的时间内规划了项目实施路径,即“三步走”:第一步是根据“四精准”的要求做好师生分布情况和健康数据的采集工作;第二步是对采集的数据进行分析和研判,为防控领导小组做出科学决策提供数据支持;第三步是扩展到师生返校管理、日常晨检管理和其他扩展应用。
敏捷开发方法实践
该项目以师生用户为核心,不追求前期完美设计、完美编码,力求在很短的周期内开发出产品的核心功能,先解决基础应用,尽早发布可用版本,然后在后续的开发周期内逐步迭代升级、循序渐进地形成功能较完善的校园信息化系统生态。因此,适合采用敏捷开发方法。
需求管理
敏捷开发的核心要求是做好需求管理。开发团队在与学校人事部门、学工部门沟通后,对照上级各主管单位的文件要求,以共同认可的会议纪要的方式确定了前期需求:
(1)采集程序简便,避免“填表抗疫”,无形中增加业务部门的工作负担;
(2)数据完整,满足省、市和属地地方政府部门的日报要求;
(3)数据支持师生返校条件的判定,能衔接返校后的日常晨检工作;
(4)要确保信息安全,杜绝数据泄露和被越权访问。
选择开发工具
(1)项目管理工具
在明确需求后,开发小组开始分工,并借助“码云”工具实施任务管理、文档管理和代码管理。
任务管理主要将开发人员分成前端和后端两种角色,协商好前后端数据的接口。大家明确各自任务,同时借助工具可以了解团队其他成员的进展情况,什么时候开始,什么时候结束,最终交付的模块代码在哪里,实现团队成员之间互相监督、互相激励。
工具提供的文档管理功能可以让团队所有成员共享记录文档,也可以有各自独立的文档,最后合并形成统一的开发文档,避免文档版本不一致和无法溯源等问题。
极限编程作为敏捷开发的重要实现方式,侧重于实践,并力求把实践做到极限。针对本次任务,团队采用极限编程中的结对编程方式,最终成果都是软件代码和对软件代码的集成测试,所以归根结底还是要落实到代码管理上。团队选用的工具提供了完整的git代码库管理功能。
(2)前端开发工具
开发小组评估了APP、网站和小程序数据采集的优劣,并基于下述理由,决定使用微信小程序作为数据采集的终端:
无需安装。小程序扫码或搜索即用,免除了师生用户对APP占用手机空间和安装过程过度授权的反感;
位置采集简便。因疫情防控需要掌握师生的分布情况,同时考虑保护师生隐私信息,在经得用户授权后使用小程序的定位功能实时将坐标转换为只到区县一级的位置名称保存,且非防控重点地区不调取;
原有小程序平台和用户基础。由信息与网络中心自主研发的“iXH信息服务平台”小程序,自2018年起已经成功应用于迎新服务、校园卡查询、成绩查询、水电查询、课程表查询、图书馆藏查询、晨读打卡、“每日8000步”打卡等,不仅有了统一的平台界面,而且有用户基础,大多数师生用户无需再做绑定即可使用,少数未绑定的用户也只需作一次绑定即可。
为此,前端小程序开发采用微信开发者工具。
(3)后端开发工具
使用Intell JIDEA作为开发工具实现后端的业务逻辑,采用开源的Java轻量级框架SpringBoot快速构建业务接口。为减少开发团队在短时间内进行复杂的环境配置工作和依赖包的管理工作,将主要精力集中在业务逻辑的实现上,使用SpringBoot框架在MAVEN项目的pom文件中添加相关的依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期,简化了搭建和开发过程,而且不需要担心依赖包版本冲突和引用不稳定等问题。
第一阶段成效
团队很快上线了测试版本,并将小程序应用命名为“报平安”。系统以小程序为采集终端,使用nginx软负载将HTTPS请求分发在两台虚拟采集服务器上,利用Redis缓存鉴权信息。为确保数据安全,热备了数据库(如图1所示)。
图1 “报平安”小程序系统整体拓扑
系统上线次日就全面掌握全校近2.4万名学生和教职工的分布情况和基本健康状况。开发小组从数据库直接分类导出异常数据,并由人事部门和学工部门分别对这部分教职工和学生进行跟进和记录。地方政府和上级主管单位需要的报表数据不尽相同,但都可以从采集到的数据中通过构建查询视图自动生成,不仅可以确保数据的准确性,而且大大减轻学校工作人员收集、统计、上报数据的工作量。
后续与其他单位采集师生员工健康信息的APP、公众号、小程序、问卷等同类业务比较,“报平安”小程序具有如下优势:
(1)上线时间早。采用敏捷开发方法,产品前期需求确定,无需多步迭代,因此开发周期短,上线更早;
(2)无需重复登录。许多同类应用每次需要重新认证,“报平安”小程序在首次鉴权绑定学校信息后,用户无需再做绑定或登录操作,而是直接从微信服务器验证确认其来自微信小程序,并根据返回的OpenID自动拉取用户身份信息;
(3)采集数据的问卷设计更简洁。“报平安”小程序对后台已有的静态信息(如姓名、手机号码、身份证号码、部门或专业等)不作采集,仅采集需要关注的动态变化信息(如当天接触人群、本人或家庭成员身体健康状态等),以及通过用户授权获取的城市区县信息,师生用户10秒内即可完成“报平安”操作。
数据可视化与功能扩展
完成了第一阶段的数据采集,开发团队按原实施路径继续进行数据分析与可视化,并完善后续功能。
数据可视化
开发团队从不同维度对实时数据作统计分析,选用了基于Bootstrap的gentelella管理后台模板,使用Chart.js插件图表化结果,为全校科学决策提供直观依据。
选用不同色块的“甜甜圈”(doughnut)图分别展示了师生在广东省内各城市、全国除广东省以外各省(含港澳台)及在国外的分布情况。经过开发团队二次改造后的色块过渡自然,鼠标经过时以对比色展示动态效果,数值标签和图例清晰(如图2所示)。
图2 师生目前位置分布情况
同样的,采用水平柱状图展示防控重点地区师生在各年级、各院系的分布情况(如图3所示)。为了解每日需要重点关注师生的变化情况,用4张曲线图分别展示了确认或疑似病例、需重点关护师生、按规定自我观察或医学观察、本人或家庭成员身体不适人群近14天的变化情况(如图4所示)。
图3 防控重点地区师生按年级、院系分布情况统计
图4 重点关注信息统计
打卡自动提醒功能扩展
为准确掌握瞬息万变的动态数据,学校决定启动“天天报平安”工作,要求师生每天一报。为配合这项工作的开展,开发团队采取了两项措施。
一是利用微信小程序消息订阅功能,在前端提示师生用户授权,在后台代码中建立一个监听器(Listener)和自动发送模块,每天上午9时到10时向未“报平安”的师生用户推送打卡提醒消息。
二是在后台增加各二级院系“报平安”人数统计图和未“报平安”师生名单及联系方式,每天下午13时各二级院系管理员可登录后台查看,并根据名单个别提醒未填报师生完成填报,确保摸查工作全覆盖。
关护记录功能扩展
学校根据疫情防控工作需要,利用首轮采集到的数据,立即部署对身处防控重点地区、本人或家人身体不适,以及接触疑似或确诊病例师生的重点关护工作。为落实这项“人盯人”精准关护工作,开发团队在管理后台新增了关护工作记录功能,使各院系可以了解学生近14天的行程情况、接触史及身体健康状况,并将对学生的关爱跟踪情况记录下来,准确了解变化过程,确保了这项工作的延续性和可控性。
师生返校健康码功能扩展
根据教育部“五个一律”的工作要求及师生返校的需要,学校希望校园门禁系统除传统的身份识别功能外,增加与疫情管控数据联动的功能。
在分析参考了各地的健康码后,开发团队选取了对称加密算法,将师生身份信息连同时间戳一起加密生成不同底色的二维码,作为学校的健康码,当用户打开健康码页面时自动从后台获取并展示在小程序端。校园门岗扫描健康码再传送到后台,后台解密后先是核对时间戳,如果当前时间与二维码生成时间间隔超过60秒,则认为是无效二维码,需要重新刷新获取;如果在有效时间内,则与采集的数据和学校设置的入园条件进行对比判断,再向门岗返回是否允许进入的结果,并以不同底色区别(如图5所示)。
图5 健康码识别流程
入园条件的设置支持白名单和黑名单两种策略。白名单策略是在未允许师生提前返校的情况下,确实因为工作需要进校的教职工可向学校相关部门申请,在后台自动检测其满足入校条件后列入白名单,允许其进入校园;在允许师生返校后,为防止按规定需要隔离或医学观察的部分师生提前返校,系统将其列入管控名单,以确保其他在校师生的安全,降低被感染的风险。
后台报表一目了然,解决了原有的校园门岗难以人工核实入园人员健康信息和手工登记的问题。
在师生全部返校后,计划在日常晨检工作中将授权特定人员使用健康码获取异常情况师生近14日行程及健康状况,并扩展使用在图书馆入口、课堂点名、实验室预约等场景。
保障措施
性能保障
通过使用VisualVM对系统性能的监测,发现每天晚上0时后的5分钟访问人数暴增,服务器高峰期并发启动线程数量达1590个。通过逐步对代码和容器调优,采取防死锁和临时增加带宽等机制,目前使用JMeter压力测试,在发送5000个并发线程的情况下系统仍能保持较好的性能。
根据微信开发者文档中限定的规则,微信小程序用户登录凭证校验有1分钟100次的临界值限制。为解决并发量高时这一限制问题,在服务器调用此接口完成登录流程后使用Redis技术缓存凭证信息,在高峰期直接从Redis数据库中验证用户身份,以保障服务器的高可用性。
安全保障
保障数据安全是用户最初确定的需求,也是始终贯穿系统实施全过程的重中之重。技术上,为防止数据丢失和被篡改,采用异地双机热备和每天定时执行自动备份脚本任务的冷备方案来保障数据库的安全;数据采用HTTPS传输,确保了数据的保密性、完整性和身份校验的安全性。对操作系统和插件,及时更新补丁。管理上,执行严格的用户授权管理,按人事、学工、后勤、保卫分角色、按院系、分领域对用户身份和业务权限进行双重验证,用户密码等敏感信息采用不可逆加密算法并加盐处理后再保存。
作为学校自有团队力量应需而动开发的系统,不仅上线周期短,运行成效快,而且功能订制灵活。例如,师生一开始经常出现错填错报的情况,同类产品一般不允许修改或重报,但该系统允许本人重复填报,在后台设置定时自动甄选机制,以最后一次正确填报的结果为准。后续运维和扩展具有更大的主动权,例如正在筹划中的与无感体温监测设备的对接、食堂用餐人群分流、实验室开放预约审批等。
高校管理信息化既需要专业的商业软件供应商提供大型产品化软件的服务支持,更需要有应需而动的自有技术团队,以敏捷开发方法快速解决高校管理中多变和不确定的临时性需求,充分发挥新一代信息技术在高校管理中的作用,增强高校管理信息化活力。
(本文刊载于《中国教育网络》杂志2020年4月刊,作者为李伟林、刘德嘉,作者单位为中山大学新华学院信息与网络中心)
中国教育网络:https://news.xhsysu.edu.cn/info/1036/19580.htm