注册 / 登录

紧耦合、分布式系统如何破解测试难题

分会场:  质量管理/智能运维/DevOps

 

案例来源 :

案例讲师

周祥伟

中国民航信息网络股份有限公司 副主任工程师

硕士毕业,10多年开发和测试工作经验,具有铁路、民航从业经历,指导并参与多个重大项目的测试工作,获得PMI、ISTQB等多个认证,民航总局信息系统可靠性评估规范制定组负责人之一

扫描二维码分享案例

所在软件研发中心介绍

承接中国航信绝大部分产品以及新一代系统的研发工作,涉及航班管理、机票预订、机场值机等业务领域,采取敏捷模式进行产品开发。

 

建议该分享案例适用范围:

适合为银行、券商,以及新兴互联网企业系统

 

为什么这个案例值得分享?

紧耦合、分布式系统一般都存在接口调用频繁,测试验证困难的情况,单子系统测试阶段无法充分进行功能验证,而全系统联测阶段则受制于各子系统开发进度不完全保持同步,在上线窗口确定后测试时间被压缩。同时业务链路长,无法更好更快地遍历所有路径,出现问题也无法准确定位故障原因。为此,为破解这个难题我们推出了一系列解决方案,提出“联合回归测试”的概念,通过自动化手段去验证全系统所有业务的正确性,并同时兼容新旧系统;开发出接口模拟工具来屏蔽环境不稳定或关联系统不具备测试条件的问题,同时减少测试环境和测试数据对测试工作的影响。

 

 

案例简述

 

本案例介绍了航信研发中心测试团队解决紧耦合、分布式系统测试难题的一系列方案,包括使用自动化测试框架灵活的关键字技术来减少系统更换带来的影响,从业务流的角度去实现整个全系统的“end2end”的联合自动化回归验证,结合企业内部的ESB开发个性化的Mock工具实现单系统提前验证,同时建立自动化多层运行体系以及测试数据管理平台,解决影响自动化测试稳定运行的最大两个因素:环境和数据的问题。这一系列方案的实施确保了各个阶段测试工作的有效性和高效率,也保证了航信新一代系统的正常投产上线,无重大安全事故发生。

 

案例目标

 

航信正在实施新一代系统建设,主体功能从一个集中的大型主机(Unisys)演变为多个紧耦合、分布式的开放子系统,各个子系统相互调用的接口定义达到1000多个,整个演变过程采取逐步转移、分航空公司转移的策略,这样就需要确保新旧系统“和平共存”,同时要保证新旧子系统切换过程中不影响整体系统以及其他子系统的功能。这对测试提出了很高的要求,即使大幅度增加测试人员也无法确保在每个上线周期对所有接口、功能点都去回归验证,由于耦合度高,每个产品都无法独立的做“end2end”测试,这就要求我们从系统整体上去进行回归测试,并支持各子系统进行有效的功能全面验证。

 

成功(或教训)要点

 

a.使用自动化测试框架RobotFramework关键字驱动技术,在上层将每个业务操作定义为一个关键字(Keyword),比如订机票操作就作为一个关键字,在底层支持新旧系统2个底层接口,订机票的相关子系统在迁移过程中只要替换底层库文件,就可以实现上层脚本不做改动仍然可以正常运行,减少了脚本维护的工作量,这样也对实施实例化需求提供了支撑。
b.结合航信业务特点,航班管理、机票销售、值机离港作为3大业务主体是一个按照时间顺序操作的业务流程,所以我们从业务流的角度将全系统的回归测试定义为“联合回归测试”,从建立航班开始作为入口实现整体的“end2end”测试,覆盖全系统的主要功能点。
c.开发基于航信ESB的Mock工具,不仅支持录制、回放,同时支持单元测试和RF调用的API,实现单子系统的“end2end”测试,做到测试前移。
d.为确保成功率,我们建立了自动化多层运行体系,在联合回归测试之前实施了环境验证和子系统功能冒烟验证,将问题提前发现并精确定位。
e.测试数据对功能和自动化测试结果的有效性有很大的影响,为此我们搭建了测试数据管理平台,实现自动化创建和管理测试数据,确保环境中的测试不被“污染”。

 

案例ROI分析

 

航信系统是国务院关注的八大信息系统,承担的安全运营社会责任决定对系统充分测试的必要性,但庞大的系统和复杂的业务只能依靠自动化手段去保障,大大节省了人工成本,确保了各个阶段测试工作的有效性和高效率,也保证了航信新一代系统正常投产上线,无重大安全事故发生。

 

案例启示

 

先进的测试方法和技术也要和产品/项目的特点相结合,找出快捷有效的验证方式。

 

案例在团队中的意义

 

紧耦合、分布式系统一般都存在接口调用频繁,测试验证困难的情况,单子系统测试阶段无法充分进行功能验证,而全系统联测阶段则受制于各子系统开发进度不完全保持同步,在上线窗口确定后测试时间被压缩。同时业务链路长,无法更好更快地遍历所有路径,出现问题也无法准确定位故障原因。为此,为破解这个难题我们推出了一系列解决方案,提出“联合回归测试”的概念,通过自动化手段去验证全系统所有业务的正确性,并同时兼容新旧系统;开发出接口模拟工具来屏蔽环境不稳定或关联系统不具备测试条件的问题,同时减少测试环境和测试数据对测试工作的影响。