• 快捷搜索
  • 全站搜索

面向数据字段的血缘关系分析

2016-12-14 17:12:57作者:中国工商银行软件开发中心高级专家 李旭风 开发中心 罗强编辑:金融咨询网
本文以IBM主机应用系统的软件资源为研究对象,成功研发了软件资源数据字段级“血缘分析”工具BloodX。“血缘图”形象地描绘数据自底向上层层汇集,透过程序、接口、数据表的树形结构图,准确清晰地揭示了各级软件实体之间的血缘关系,有力地支持了银行业务系统的开发、测试和运维。

随着银行业务创新和综合化进程的快速发展,产品种类迅速膨胀,产品之间相互交织,业务系统越来越复杂。与此同时,互联网时代业务需求瞬息万变,给系统开发、测试、运维带来巨大的压力和挑战。当前,导致银行信息系统复杂度高的主要原因包括:一是系统规模随产品扩展而扩大,形成了庞大的程序和软件资源,甚至分割为更多子系统并交由多个开发组织开发和维护;二是早期采用面向过程设计技术的银行核心系统框架,程序模块的隔离和封装性相对较差,子系统之间耦合度较高;三是业务变化多、实现周期短,使得核心代码修改频繁。基于上述原因,精确识别软件实体之间的关联关系,对开发、测试以及工作量评估和质量管理至关重要。

图片2.jpg

  软件实体包括程序、数据库、文件、公共构件以及它们的通信接口结构定义等软件资源。软件实体的关联性分析可以划分为实体级和数据字段级两个层次。实体级关联性指各软件实体之间的耦合、调用关系,数据字段级关联性则指任一软件实体的数据字段与其他软件实体的数据字段的映射、计算、传递等耦合关系。前者简单易行、执行效率高,但分析精度较低,对研发指导作用有限;后者以程序源代码(或中间代码)为基础,通过对程序指令的语义分析,识别相关软件实体数据字段之间的映射和传递关系,分析精度高,分析结果可用于创建程序影响性分析视图和业务逻辑视图,方便设计、测试、运维人员评估软件实体之间的影响细节和确定程序修改范围,具有更广阔的应用前景和更高的应用价值,但实现技术相对复杂。

  本文以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所示。

图片3.jpg

  (4)逐步求精及传播链“血缘图”的选择和展现

  ①逐步求精挖掘。“血缘分析”工具BloodX支持浏览器访问服务,实现子系统、程序实体、字段逐步求精的挖掘和三级视图展现。图2是BloodX用户图和演示效果。

图片4.jpg

   A图是BloodX的初始登录界面和界面基本布局,有操作和图形展现两个视窗,操作视窗包括版本号、子系统名、程序名、字段名操作组件,图形展现视窗用于展现“血缘关系”结果;B图是子系统级关系图,红球表示一个子系统,蓝线连接两个子系统的耦合关系,线条粗细表示数据字段关联关系的多寡,线条越粗耦合越严重;C图是软件实体级关系图,相关的程序、表、接口、文件等软件实体以不同颜色彩球区分,蓝线表示程序调用或引用数据文件的路径,箭头指向被调用程序或被引用数据文件;D图是数据字段级关系图,与该数据字段相关的程序、表、接口、文件等软件实体以不同颜色彩球表示,蓝线是数据字段关系路径,箭头从输入数据字段指向输出数据字段。

 1 2 下一页 尾页

扫码即可手机
阅读转发此文

本文评论

相关文章