2020年1月,抗擊新型冠狀病毒的戰「疫」打響,包括廣東省在內的全國多個省份進入一級應急響應狀態。廣東省教育廳《關於全力防控疫情確保開學安全的通知》要求各類學校要對師生的健康和分布情況做到「四精準」。學校信息化部門成立開發小組,決定藉助信息化手段組織防控工作,確保全覆蓋、無遺漏地掌握和使用防控數據。
開發小組在極短的時間內規劃了項目實施路徑,即「三步走」:第一步是根據「四精準」的要求做好師生分布情況和健康數據的採集工作;第二步是對採集的數據進行分析和研判,為防控領導小組做出科學決策提供數據支持;第三步是擴展到師生返校管理、日常晨檢管理和其他擴展應用。
敏捷開發方法實踐
該項目以師生用戶為核心,不追求前期完美設計、完美編碼,力求在很短的周期內開發出產品的核心功能,先解決基礎應用,儘早發布可用版本,然後在後續的開發周期內逐步迭代升級、循序漸進地形成功能較完善的校園信息化系統生態。因此,適合採用敏捷開發方法。
需求管理
敏捷開發的核心要求是做好需求管理。開發團隊在與學校人事部門、學工部門溝通後,對照上級各主管單位的文件要求,以共同認可的會議紀要的方式確定了前期需求:
(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月刊,作者為李偉林、劉德嘉,作者單位為中山大學新華學院信息與網絡中心)