- 快捷搜索
- 全站搜索
" />
隨著銀行業務創新和綜合化進程的快速發展,產品種類迅速膨脹,產品之間相互交織,業務系統越來越復雜。與此同時,互聯網時代業務需求瞬息萬變,給系統開發、測試、運維帶來巨大的壓力和挑戰。當前,導致銀行信息系統復雜度高的主要原因包括:一是系統規模隨產品擴展而擴大,形成了龐大的程序和軟件資源,甚至分割為更多子系統并交由多個開發組織開發和維護;二是早期采用面向過程設計技術的銀行核心系統框架,程序模塊的隔離和封裝性相對較差,子系統之間耦合度較高;三是業務變化多、實現周期短,使得核心代碼修改頻繁。基于上述原因,精確識別軟件實體之間的關聯關系,對開發、測試以及工作量評估和質量管理至關重要。

軟件實體包括程序、數據庫、文件、公共構件以及它們的通信接口結構定義等軟件資源。軟件實體的關聯性分析可以劃分為實體級和數據字段級兩個層次。實體級關聯性指各軟件實體之間的耦合、調用關系,數據字段級關聯性則指任一軟件實體的數據字段與其他軟件實體的數據字段的映射、計算、傳遞等耦合關系。前者簡單易行、執行效率高,但分析精度較低,對研發指導作用有限;后者以程序源代碼(或中間代碼)為基礎,通過對程序指令的語義分析,識別相關軟件實體數據字段之間的映射和傳遞關系,分析精度高,分析結果可用于創建程序影響性分析視圖和業務邏輯視圖,方便設計、測試、運維人員評估軟件實體之間的影響細節和確定程序修改范圍,具有更廣闊的應用前景和更高的應用價值,但實現技術相對復雜。
本文以IBM主機應用系統的軟件資源(包括通用COBOL程序,DDL、DML、數據文件和通信接口定義,專用語言EGL程序)為研究對象,成功研發了軟件資源數據字段級“血緣分析”工具BloodX。BloodX同時提供了應用級、程序級、字段級三個不同層次的“血緣圖”,“血緣圖”形象地描繪數據自底向上層層匯集,透過程序、接口、數據表的樹形結構圖,準確清晰地揭示了各級軟件實體之間的血緣關系,有力地支持了銀行業務系統的開發、測試和運維。利用該工具,經過對19個主機應用子系統的14742個程序進行字段級實例分析,產生約9600萬條字段級關系記錄,查正率超過95%。
一、研究背景
1.數據處理系統的本質
銀行業務系統屬于交易處理系統,交易處理是數據的收集和處理過程,數據以數據字段形式分布在程序、通信接口、數據庫、文件等軟件實體中,數據處理過程實際上是程序對數據的傳遞、運算演繹和歸檔活動。
以“銀行卡消費額”數據字段為例,其變化直觀判斷將會影響“持卡人賬戶”、“商戶銀行存款戶”、“銀行手續費收入賬戶”的發生額、余額及余額積數或利息,當數額增大和累積到一定程度時,還可能引起客戶的信用等級、服務星級、商戶等級、客戶的消費行為習慣等屬性的調整,有時也會帶來余額變動通知、事后賬單郵寄附加服務、風險模型識別和預警干預等一系列實時、準實時和非實時的活動。
一項簡單的數據傳入和變動,除可能引起其他軟件實體同一數據屬性數據字段的變化外,往往還會映射到其他軟件實體的不同屬性數據或影響其他數據字段的變化。處理過程涉及一個或多個程序、甚至涉及多個子系統,數據以字段形式動態或靜態地分別隱藏在程序、通信接口或存儲在數據庫、文件中,大型信息系統的數據字段及數據字段關聯一般具有以下特性。
(1)規模大。僅主機核心銀行系統的元數據項目就有800余項,元數據實例化后往往會以多個數據項、存放在近萬個主機數據表中。
(2)分布廣。被程序訪問的數據庫數據字段和在通信接口的變量約有100萬個數據字段、分布在近10萬個程序和數據文件定義中,平均每個程序訪問超過10個數據字段。
(3)映射和衍生復雜。上述信用卡消費額映射到余額和利息,衍生為信用等級和服務星級就是一個典型例子。
2.揭示數據關聯關系的意義
值得注意的是,一個大型軟件系統往往由一個、甚至若干個應用程序庫的成千上萬個程序模塊組成。對于生命周期較長的軟件系統,源程序代碼由分布在多個地域(甚至全世界)、不同時期的開發人員共同開發、維護,人員和文檔失散的情況十分普遍。而源源不斷的業務需求實際是對系統原體系的接連不斷的攻擊,使系統變得越來越復雜。實體級關系分析雖然從宏觀揭示了實體之間的關系,但不能細化到數據字段的映射影響。
系統數據的變化是由用戶輸入界面或通信數據包的數據字段導入,經程序傳遞、運算,最終歸檔到數據庫和文件中,或再傳播給其他系統,數據字段的傳遞、運算是數據處理的本質,對系統后續功能擴充開發、維護至關重要。一個準確、精細、可視化的數據字段級關聯分析工具成為大型信息系統擴展與維護的理想選擇。
3.其他傳統分析方法的局限
軟件設計和分析的方法包括:數據流圖、程序調試狀態記錄、探針或代理、模擬器數據跟蹤技術等,但都存在一定的局限。
(1)“數據流圖”是傳統軟件工程用于指導系統設計的方法,屬系統設計階段圖形化設計工具,通常不會細化到每一個數據字段的實際活動,且尚無工具能夠根據源程序代碼逆向生成“數據流圖”。
(2)通過打開程序語言編譯trace、flow等程序調試開關或安裝實時探針、代理,收集測試或生產運行軌跡數據,捕捉變動數據。
(3)“云平臺中的數據流跟蹤技術”可以基于模擬器進行數據跟蹤,也可以通過對模擬器系統數據進行污點標記,捕獲導致(每一個)污點數據進行傳播的指令并進行分析和處理。
綜上,(1)并非源程序真實邏輯視圖;而(2)和(3)均屬于動態跟蹤方法,邏輯視圖精確率取決于測試案例的邏輯覆蓋率和生產采樣時機,大型信息系統采用這兩種方法既耗費資源又難以得到精確數據和完整視圖。
二、設計方案
1.關鍵原理
(1)全面覆蓋性。如上文所述,數據處理過程實際上是程序對數據進行傳遞、運算演繹和歸檔的活動,歸檔的數據庫和文件又可能影響系統的結果或再傳播給其他系統。為了確保數據流跟蹤的連貫性,必須將整個系統的全部軟件實體(包括程序、數據庫、文件、公共構件以及它們之間的通信接口結構定義)作為分析對象。大型系統也可以按子系統分割為若干子集進行分析,對于跨子系統的關聯數據字段,則視作子系統的輸出和輸入項目,進行進一步的關聯跟蹤。
(2)靜態分析法。本方法避免受人為因素影響,其精度不受文檔描述粗細、測試案例和生產采樣時機的影響。它基于編譯原理,通過對程序等軟件實體源代碼進行掃描和語法分析和對程序邏輯可能涉及的路徑進行靜態分析和羅列,實現對程序的數據傳遞和映射的客觀反映。
(3)接觸感染性。為聚焦數據傳遞和映射,按數據傳遞原理,通過對程序影響數據字段處理結果的命令(如COBOL的MOVE、COMPUTE、ADD等)進行篩選,過濾掉與數據字段傳遞和映射無關的程序處理命令。篩選過程同時關注組合數據項(如COBOL的數據部的01級覆蓋02級等數據項)、重定義數據項(如COBOL的REDEFINES語句)等特殊數據結構形式的數據字段的傳遞和映射關系。
(4)邏輯時序性。為避免冗余信息的干擾,根據程序處理流程,將與數據庫、文件、通信接口數據字段沒有直接關系的傳遞和映射的間接過程和程序中間變量,轉換為數據庫、文件、通信接口數據字段之間的直接傳遞和映射。
(5)更新及時性。每個開發、測試人員僅負責一小部分程序的維護和測試,而從系統嚴密性和質量保障角度看,影響性分析和測試驗證涉及整個系統的全部程序,因此,為了確保數據字段關聯關系信息的可用和及時,必須確保查詢版本更新與數據字段關聯信息的同步,在整個系統范圍內做到“所見即所得”。
2.處理步驟
(1)軟件實體對象要素說明
①源代碼:指按程序設計語言規范書寫、人類可讀的文本文件,是計算機程序命令、執行腳本的集合。
②數據文件:指程序在執行過程中傳遞、操縱的數據表、文件、通信接口等。數據文件是數據信息的載體,它包含本項研究的“血緣關系”最基礎元素——數據字段,但本身不包含處理邏輯。
(2)流程簡化和信息過濾
①程序執行流程簡化。面向過程程序以main至end標識一個完整的邏輯處理段,通常一個邏輯處理段又可能被選擇、分支、跳轉等指令分割為更多更小的邏輯處理段并層層細化,盡管采用靜態分析法無法對動態路由、分支路徑進行選擇,但可以通過設置兩個“假設”并據此進行簡化:一是假設所有邏輯處理段都有被動態調用的可能,即可忽略選擇、分支條件,將程序簡化為一個由若干邏輯處理段組成的樹型圖;二是假設選擇、分支條件會動態影響邏輯處理段是否執行和執行次序,進而對程序再進一步簡化為線性結構。簡化的代價是邏輯處理段不選擇和分支條件被全部掃描(包括不能被調用的僵尸代碼),雖然分析范圍可能擴大,但卻確保了不遺漏。
②過程變量過濾。數據字段關系分析是輸入字段和輸出字段的關系匹配過程。這個過程分為三步:一是預掃描“程序執行流程簡化”后的源代碼的數據字段,將源程序數據傳遞、運算表現為輸入字段和輸出字段關系對;二是分析程序調用流程,生成程序調用路徑;三是以輸出字段為起點,結合程序調用路徑,采用逆向回溯程序控制路徑的算法,對執行過程中的賦值、運算等指令進行模式判斷,以確定是否存儲處理過程中涉及的過程變量、輸入輸出字段關系,這個過程稱為“血緣融合”處理。“血緣融合”過濾了過程變量,只保留輸入和輸出字段的關聯關系。
(3)數據字段交互信息收集和存儲
字段級關系由一組“二元”關系記錄構成,所謂“二元”即前項數據字段元素和后項數據字段元素。每個數據字段元素包含4層約束:版本號、應用名、實體名、字段名,分別記錄存儲在數據庫中,數據字段關系如圖1所示。

(4)逐步求精及傳播鏈“血緣圖”的選擇和展現
①逐步求精挖掘。“血緣分析”工具BloodX支持瀏覽器訪問服務,實現子系統、程序實體、字段逐步求精的挖掘和三級視圖展現。圖2是BloodX用戶圖和演示效果。

A圖是BloodX的初始登錄界面和界面基本布局,有操作和圖形展現兩個視窗,操作視窗包括版本號、子系統名、程序名、字段名操作組件,圖形展現視窗用于展現“血緣關系”結果;B圖是子系統級關系圖,紅球表示一個子系統,藍線連接兩個子系統的耦合關系,線條粗細表示數據字段關聯關系的多寡,線條越粗耦合越嚴重;C圖是軟件實體級關系圖,相關的程序、表、接口、文件等軟件實體以不同顏色彩球區分,藍線表示程序調用或引用數據文件的路徑,箭頭指向被調用程序或被引用數據文件;D圖是數據字段級關系圖,與該數據字段相關的程序、表、接口、文件等軟件實體以不同顏色彩球表示,藍線是數據字段關系路徑,箭頭從輸入數據字段指向輸出數據字段。
掃碼即可手機
閱讀轉發此文
2013年下半年,余額寶看似“暴發戶”式的成功造成了銀行領域的極大震動,大
數據是未來銀行的核心競爭力之一,大數據對銀行的數據駕馭能力提出了新的挑