【摘要】
2022 年 7月,我作為項目負貴人,參加了某銀行的統計數據發布系統建設項目。該項目合同金額230 萬元,合同工期為半年。統計數據發布系統的主要目標是為該行建設一個企業級的數據統計、分析、發布平臺,實現定制化的數據應用、分析、展示功能;實現靈活的綜合查詢分析、明細數據查詢、固定報表展示、移動設備數據展示、風險分析、自助取數等功能,達到“統一數據來源、統一數據口徑、統一數據出口”的數據管理目標。
本文結合本人在該項目中的實踐,分別討論了單元測試、功能測試、集成測試和性能測試各階段測試的特點,詳細閘述了各階段所采用的具體測試措施和策咯。其中,重點討論了性能測試的類型和如何在項目中實踐各種性能測試。項目最終成功實施完成并順利驗收,得到了客戶高層領導的高度認可。
【正文】
某銀行在各項經營活動中積累了大量的數據資源,這些數據除了支撐銀行生產業務流程的正常運轉之外,也越來越多地被用于支撐監管報送、精準營銷、戰略決策、風險控制、績效考核等運營管理和決策過程的數據分析工作。為了滿足業務部門和管理人員不斷增長的報表數據需求,為決策分析提供依據,反映全行業務發展情況,識別和監測鳳險狀況。某銀行管理層迫切需要規劃和建立科學、規范、易于擴展、靈活性強的統計數據發布平臺。這樣就可以進一步完善全行報表體系,降低該行報表開發成本和難度,縮短報表開發周期,規范報表使用流程,降低管理與維護復雜度,實現統計數據集中及統計報表統一、規范管理。
2022 年 7 月,我作為項目負責人,參與并主導了該銀行的統計數據發布平臺項目,該項目合同金額230萬元,實施周期為半年。本項目產品架構基于 Java 的 B/S 架構,數據庫平臺是 Oracle 11g,中間件為 Weblogic,報表展現工具采用國內知名的 Smartbi 產品,調度工具為國內產品 TASKCTL,數據采集工具采用開源的 Kettle。我們在 IBM 完全生命周期測試模型的基礎上,根據本項目的具體特點和要求,結合成本效率進行了裁剪,形成本項目的測試策略、總體測試計劃和詳細測試計劃,并得到了銀行方技術部門的認可。測試整體上劃分為單元測試、功能測試、集成測試、性能測試和驗收測試等階段。驗收測試主要由銀行方的業務人員進行。本文重點討論前面4個階段的測試。
一、單元測試
該階段測試工作有應用系統測試和 ETL 開發單元測試。應用系統測試由于是用 Java 開發,所以采用了 JuNit 進行單元測試,由于本項目是基于標準產品的二次開發,類的數量不多。因此我們要求開發人員對每個新開發的類都要寫對應的測試類,測試通過后需要寫單元測試報告,并要求組內人員交叉檢查執行。ETL 開發是采用 Perl 腳本+存儲過程的方式進行的,單元測試階段主要采用公司自主研發的ETL 開發自動化測試工具。測試人員進行合理的配置,可自動化運行 ETL腳本,可進行空值檢查、主鍵重復檢查等。
二、功能測試
由于本系統既要在 PC 端展示,同時也需要在移動端展示,因此要求應用系統的功能測試主要通過編寫一份測試案例能在多個終端執行。我們使用公司自主研發的基于 STAF 自動化測試框架的測試工具進行功能測試,確保頁面功能在跨平臺,如PC端、安卓端、蘋果端都能運行正常,并確保在各個終端的鏈接跳轉都是符合預期的。
三、集成測試
集成階段需要將每個 ETL 作業配置在調度工具上,因此集成測試階段主要測試調度作業是否按照各種串行、并行機制分別運行,確保依賴作業的先后順序執行。對對于銀行信息系統,數據指標的正確性是重中之重。以往項目中,由于對數據準確性測試不充分,導致試運行階段不斷返工,不僅增加了開發人員投入,還導致了驗收期的延長。
本階段的測試重點是測試數據加工的準確性。我們主要采用以下措施:
(1)每個字段的值域范圍測試,譬如某個指標的歷史波動范圍在100萬~300 萬元之間,那么加工后的指標就不應該超過這個范圍。
(2)借助于業務經驗,采用總分比對的方式。銀行一般有分戶賬和匯總賬兩本賬。分戶賬通過按照機構、科目分類從明細匯總后,應當和現有的匯總賬一致。以上測試時都可用公司自主研發的 ETL 測試工具,在上面配置校驗規則后進行測試執行。另外,測試數據的完整性是確保數據準確性的關鍵所在,因此我們便在測試案例編寫過程中同步進行測試數據的申請。
四、性能測試
性能測試的目的是驗證軟件系統是否能夠達到用戶提出的性能指標,同時發現軟件系統中存在的性能瓶頸,并優化軟件,最后起到優化系統的目的。具體來說,包括以下四個方面。
(1)發現缺陷:軟件缺陷往往與軟件性能密切相關,因此缺陷測試需要結合性能測試一起進行。
(2)性能調優:性能調優并不一定發現性能缺陷,還可以更好地發揮系統潛能。
(3)評估系統的能力:測試能夠滿足性能需求的條件極限。
(4)驗證穩定性和可靠性:在一定負載下一段時間內,評估系統穩定性和可靠性是否滿足要求的方法。
性能測試類型包括基準測試、負載測試、壓力測試、穩定性測試、并發測試等。項目實際中,我們采用 LoadRunner 作為性能測試工具。基準測試方面,我們主要測試系統在用戶登錄數處于非月初正常水平下,系統的各項運行指標,并將各項指標進行記錄作為參考。
由于每月初系統用戶數都會有一個激增的過程,主要是因為月初為各業務部門進行數據統計報送的高并發期。因此需要基于這個用戶數量再加上未來 5年內該行業務部門統計人員增加的預估情況進行負載測試和壓力測試。我們要求系統的負載測試能至少持續 10 個工作日,壓力測試要求系統運行的各項指標不能低于基準測試指標的 80%。這些基準指標中,我們重點關注數據查詢響應效率指標,要求1 千萬級記錄數以下的表查詢響應時間為1 秒以內;1干萬~3 千萬級記錄數的查詢響應時間為3 秒以內;3 千萬~6千萬級記錄數的查詢響應時間為6 秒以內。同時,在測試過程中,還要及時發現 ELT 作業運行時間超過基準指標的作業進行整改,避免了這些作業在上生產后由于運行緩慢導致整體時間窗口延長。
2022 年 12月,本項目歷時半年后,在雙方項目領導的大力支持下,在雙方項目組成員的共同持續奮戰下,項目最終成功實施完成并順利驗收。由于客戶的高層領導在手機移動端看到了準確數據組的業務指標,而且界面美觀、功能流暢,因此高度認可該項目。客戶的科技部門也給我們公司發來了表揚信,并與公司快速簽約項目的二期建設。本項目的成功很大程度上得益于采用了科學測試技術、測試方法,測試取得的不錯效果,有力保障了項目的質量。
項目仍然存在不足的地方,具體有以下幾個方面:開發人員測試觀念不強,雖然要求進行單元測試,但是開發人員沒有很好地執行,導致在集成測試階段發現較多問題。公司自主研發的測試工具在配置上不夠靈活,無法快速配置大量測試案例。一些測試案例的數據準備不夠完備。我們從實踐中領會到測試確實可以在保證軟件質量方面起到很大的作用,但同時我們也認識到測試中還有很多領域和知識點需要繼續研究和實踐。新技術的發展對測試也提出了新的要求和挑戰,需要我們繼續研究探索。