廖湘华
(上海富欣智能交通控制有限公司,上海201203)
城市轨道交通信号系统在室内测试时需要对轨旁、车辆等外围环境进行仿真,信号系统、环境仿真系统一起组成人工测试平台。例如,陈祥献[1]、白广争[2]、万勇兵[3]等的研究。人工测试平台对于大多数测试用例因能立即操作而取得立竿见影的效果,但是不能节省回归测试、工程测试中重复性工作的人力和时间。
为了提高测试效率和能力,需要采用自动化测试。关于自动测试的研究很多,例如,张若时[4]以ABBET(测试泛环境)标准体系的产品描述层、测试策略/需求层、测试过程层、测试资源层、仪器控制层结构为主,开发了面向信息的通用自动测试系统软件,实现测试仪器无关性和测试程序集通用性;刘扬[5]提出一个基于模型驱动架构的测试用例生成框架;任思思[6]基于MSC(消息序列图)建模语言生成CBTC(基于通信的列车运行控制系统)测试用例;胡甜[7]重点研究了自动测试脚本编程接口的实现框架。这些自动测试技术日趋全面,但是自动测试平台开发周期长,对所有测试用例编写脚本的工作量大,导致测试平台往往赶不上被测系统前期调试、测试的工期需要。
本文拟根据信号系统从产品研制、工程实施到运营维护的生命周期内,先人工测试、自动测试从少到多的特点,对测试平台的架构进行设计。一方面,达到只迭代开发一套测试平台,既能迅速支持各阶段人工、自动测试,又能节省开发总成本的目的;另一方面,从测试资源的角度,既兼容各种自动测试技术从而具有开放性,又可集成已有自动测试产品从而减少自己研发的工作量。
城市轨道交通信号系统实质是一个分布式控制系统,决定了它的仿真测试平台也宜是一个分布式控制系统。因此,把以环境仿真系统为主的测试资源抽象为人工、自动协同操作的分布式控制系统,设计一套人工、自动协同的信号系统测试平台。要支持人工、自动协同操作,分布式控制系统宜满足以下要求:
一是人工、自动操作的对象应是同一对象;
二是分布式控制系统的状态信息应既传送给人工操作用户界面,又传送给自动操作脚本;
三是人工操作用户界面产生的控制信息应能被自动操作脚本捕获,自动操作脚本产生的控制信息应能在人工操作用户界面上查看;
四是人工、自动操作的控制信息宜采用相同的协议传送;
五是人工、自动操作的状态信息宜采用相同的协议传送;
六是协议应能支持单个信息的传送。
根据设计要求,人工、自动协同操作的分布式控制系统架构设计如图1所示。
图1 人工、自动协同操作的分布式控制系统架构
将系统的用户界面功能、业务逻辑功能分离为独立运行的用户界面软件、业务逻辑系统。用户界面软件承接通过键盘、鼠标接收用户操作信息,通过显示器向用户呈现信息的功能。业务逻辑系统承接将用户界面功能剥离出去后剩余的系统功能。
用户界面软件将用户操作信息转换而来的控制信息,传送给业务逻辑系统处理。业务逻辑系统把要显示的状态信息传送给用户界面软件呈现。控制信息、状态信息中各变量的值可以单独更新、传送。
业务逻辑系统支持多个用户界面软件,采用相同的接口协议与之交互。业务逻辑系统把要显示的状态信息以同样的接口协议传送给所有用户界面软件呈现;对多个用户界面软件以同样的协议传来的控制信息进行处理,并且把该信息转发(或回送)给所有用户界面软件。这样,各用户界面软件既能同步获得业务逻辑系统的状态信息,也能获得用户在任意其他用户界面软件输入的控制信息。
用户界面软件分为两类:人工操作用户界面软件、自动操作用户界面软件。自动操作用户界面软件理解为由三部分组成:脚本编程接口、自动操作脚本、脚本编辑运行环境。脚本编程接口负责与业务逻辑系统交互。它们之间的交互遵循人工操作用户界面软件与业务逻辑系统之间的接口协议。对业务逻辑系统来说,人工操作用户界面软件与自动操作用户界面软件是相同的。自动操作脚本通过调用脚本编程接口中的函数向业务逻辑系统传送控制信息,获得业务逻辑系统的状态信息和其他用户界面软件(人工操作用户界面软件或自动操作用户界面软件)传送给业务逻辑系统的控制信息。
分布式控制系统中业务逻辑系统由多个业务逻辑子系统组成。这些业务逻辑子系统分别实现相似或相异的功能子集,决定了控制信息相似或相异,状态信息也相似或相异。分布式控制系统中人工操作用户界面软件、自动操作用户界面软件也可以分成多个。这些人工操作用户界面软件向业务逻辑系统传送相似或相异的控制信息,呈现相似或相异的状态信息。为了避免相似或相异的业务逻辑子系统、用户界面软件在处理信息时混淆,分布式控制系统中所有控制信息、状态信息统一定义,确保唯一性。各业务逻辑子系统、用户界面软件只处理与己有关的信息。
太原地铁2 号线JeRail®CBTC 全自动运行信号系统的仿真测试平台既包括对信号系统外部的与CBI(计算机联锁子系统)、OBCU(车载控制器)、ATS(列车自动监控子系统)对接的关联设备/系统进行仿真,使信号系统的输入/输出形成闭环,以支撑信号系统在实验室里运行;也包括对信号系统内部9 个设备集中站的CBI、ZC(区域控制器)进行仿真,使它们与一个设备集中站的真实CBI 设备、真实ZC 设备一起,以支撑信号系统在实验室里覆盖全线路运行;还包括对23 列及以上列车的OBCU 进行仿真,使它们与一列列车的真实OBCU 设备一起,以支撑信号系统在实验室里多车追踪运行,并对ATS、CBI、ZC、MMS(维护监测子系统)进行压力测试。简言之,仿真测试平台涉及全线路的信号系统及其关联设备/系统,适宜按照分布式控制系统进行设计。这样,实验室既相似于现场信号系统分布式运行的情况,又方便把任一个设备集中站的仿真CBI 和/或ZC、任一列列车的仿真OBCU 替换为真实设备。
仿真测试平台按照人工、自动协同操作分布式控制系统架构设计,见图2。
图2 太原地铁2 号线JeRail®CBTC 的人工、自动协同的仿真测试平台架构
JeRail®CBTC 的仿真测试平台由仿真JeRail®CBTC外部关联设备/系统及内部子系统(即业务逻辑系统)、人工测试用户界面软件、脚本编程接口组成。
仿真JeRail®CBTC 外部关联设备/系统包括:
一是仿真轨旁信号设备及继电器软件:模拟全线路的道岔转辙机、信号机、站台门、站台开门按钮、站台关门按钮、站台紧急关闭按钮、站台扣车按钮、站台清客按钮、站台自动折返按钮、人员防护开关、库门、洗车机、计轴区段及其继电器功能,模拟全线路有源应答器、无源应答器的功能;
二是仿真继电接口(真实接口)设备:实现仿真轨旁信号设备及继电器软件与真实CBI 设备关于继电接口信号转换的功能;
三是仿真继电接口(网络接口)设备:实现仿真轨旁信号设备及继电器软件与仿真CBI 软件关于继电接口信息适配的功能;
四是仿真线路电子单元软件:模拟真实CBI 设备或仿真CBI 软件所对接线路电子单元,接收CBI 发来的应答器报文;
五是仿真车辆及OBCU 配套设备(真实接口):与同一列车的两套真实OBCU 设备对接,模拟列车上除OBCU 以外部件功能;
六是仿真车辆及OBCU 配套设备(网络接口):与同一列车的仿真OBCU 软件对接;
七是仿真站台门系统软件;
八是仿真乘客信息系统软件;
九是仿真无线通信系统软件;
十是仿真广播系统软件;
十一是仿真车辆调系统软件。
仿真JeRail®CBTC 内部子系统包括以下软件:
一是仿真CBI 软件;
二是仿真ZC 软件;
三是仿真OBCU 软件。
人工测试用户界面软件主要有:
一是设备信息总览软件:以线路平面拓扑图的形式陈列全线路轨旁信号设备,以图标的形式实时追踪各列车的位置,呈现各设备的状态,并支持正常操作、故障注入。
二是接口信息总览软件:以编辑框、复选框、列表等控件的形式实时显示业务逻辑系统中各设备、软件与其他部件之间交互的接口信息,并支持故障注入。
脚本编程接口:采用DLL(动态链接库)的形式,使得自动测试脚本既可以采用脚本语言(如Python、Perl、Ruby、lua),也可以采用编程语言(如C、C++、C#),还可以采用测试管理软件(如NI TestStand)。自动测试脚本采用的语言及编辑调试运行环境,可由脚本编写人员自行选择。
设备信息总览软件、接口信息总览软件、自动测试脚本(通过脚本编程接口)的控制信息以UDP 单播的形式,发送给业务逻辑系统中相应的设备或软件。
业务逻辑系统各设备、软件上传给用户界面的状态信息、控制信息以UDP 组播的形式,发送到一个组播地址,使得监听该组播地址的设备信息总览软件、接口信息总览软件、脚本编程接口都能收到这些信息。
业务逻辑系统中各设备、软件与用户界面软件交互的控制信息、状态信息统一编码,确保每个数据项在全系统中的唯一性,并形成数据字典,以供自动测试脚本编写人员查阅。
业务逻辑系统持续运行,人工测试用户界面软件、自动测试脚本可以根据需要随时退出、重启。
人工测试时,测试人员通过人工测试用户界面软件向业务逻辑系统下发指令,查看业务逻辑系统上传的信息,结合配置文件、日志文件判断测试结果,填写测试报告。
自动测试时,测试人员在自动测试脚本编辑调试运行环境中运行自动测试脚本,自动测试脚本调用脚本编程接口函数。脚本编程接口函数向业务逻辑系统下发指令,获取、存储逻辑系统上传的信息,读取配置文件、日志文件,填写测试报告。
测试人员在调试、运行自动测试脚本时,可以用人工测试用户界面软件来核实自动测试脚本每次调用脚本编程接口函数是否成功下发指令,指令是否正确。在运行自动测试脚本时,测试人员可以在人工测试用户界面软件上,介入一些人工测试操作。
测试人员在人工测试用户界面软件向业务逻辑系统下发的指令,以及业务逻辑系统因此而改变的状态可以被自动测试脚本调用脚本编程接口函数获取。
自动测试脚本可以分解为自动操作程序段、自动评判程序段、自动报告程序段。这三种程序段既可组成一个包含自动操作程序段、自动评判程序段、自动报告程序段的自动测试脚本,也可分别组成只包含其中一种程序段的自动测试脚本。
经实践检验,采用人工、自动协同操作分布式控制系统架构的JeRail®CBTC 仿真测试平台体现了以下优点:
4.1.1 支持人工与自动协同、人工与人工协同、自动与自动协同
人工与自动协同分为两种:一种是在测试操作上的协同,即部分操作人工执行,部分操作自动执行;另一种是在测试环节上的协同,即部分测试环节人工进行,部分测试环节自动进行,见图3。
图3 人工、自动在测试环节上的协同
人工操作、自动评判协同:由于人工测试用户界面产生的控制信息能够被自动测试脚本捕获,在自动测试脚本中可以评判人工操作及其结果。
自动操作、人工评判协同:由于自动测试脚本产生的控制信息能够在人工测试用户界面上查看,在人工测试用户界面上可以评判自动操作及其结果。
自动评判、人工报告协同:对于自动评判的结果,既可以由自动测试脚本直接填写到测试报告中,也可以由自动测试脚本输出简单的结果,再由人工填写到测试报告中。
人工评判、自动报告协同:对于人工评判的结果,既可由人工直接填写测试报告,也可以将人工评判的结果作为自动测试脚本的输入信息,由自动测试脚本填写到测试报告中。人工与人工协同分为两种:一种是不同操作人员之间的协同,即部分操作由这些人执行,部分操作由另一些人执行;另一种是不同人工测试用户界面软件之间的协同,这些人工测试用户界面软件,既可能分别对应不同的控制信息、状态信息子集,也可能包含部分相同的控制信息、状态信息子集。
自动与自动协同分为两种:一种是不同自动测试脚本可以相互独立地启动、运行、退出,分别完成不同的测试项;另一种是对同一测试项,部分测试环节由这些自动测试脚本完成,部分测试环节由另一些自动测试脚本完成。
4.1.2 保证测试环境持久、测试活动连贯
每个人工测试用户界面软件、自动测试脚本的启动、运行、暂停、继续、退出、异常,均不必重启业务逻辑系统、被测系统,不仅节省了整个测试环境初始化时间,还保证了测试环境持久运行。
业务逻辑系统或被测系统中部分设备、软件退出/重启,也不会导致人工测试用户界面软件、自动测试脚本退出/重启,从而确保与退出/重启设备、软件无关的测试活动的连贯性。
4.1.3 提高脚本调试、运行的可视性
自动测试脚本通过脚本编程接口函数下发的控制信息,将被业务逻辑系统转发给人工测试用户界面软件呈现。自动测试脚本开发人员可以在人工测试用户界面软件上验证脚本编程接口函数调用是否符合预期,从而提高自动测试脚本调试、运行的可视性。
4.1.4 支持全人工测试—人工测试为主—自动测试为主—全自动测试过渡
在全人工测试阶段,提高测试用例的可操作性,优化测试用例的执行顺序。在人工测试为主、自动测试为辅阶段,可以用自动测试脚本初始化具有重复性的测试场景(例如使列车从车辆段运行到转换轨),持续监视(例如列车线信息),捕获瞬间状态变化,评判测试结果,填写测试报告。在自动测试为主、人工测试为辅阶段,执行自动测试脚本时,可以介入人工操作、评判、报告。在全自动测试阶段,测试操作、评判、报告全部由自动测试脚本完成。
4.1.5 适于测试正在研发的系统、在工程项目上应用的成熟系统、工程项目交付周期特别短的系统
对于正在研发的系统,依次采用全人工测试、人工测试为主、自动测试为主、全自动测试;对于在工程项目上应用的成熟系统,采用自动测试为主、全自动测试;对于工程项目交付周期特别短的系统,可以一部分人做人工测试,一部分人编写自动测试脚本。当自动测试脚本来不及开发时,可以补充对脚本不太熟练的人员,完成人工测试;对于人工测试积累、优化过的测试用例,可以补充对脚本比较熟练的人员,转换成自动测试脚本。
4.1.6 支持工作日、白天人工测试,休息日、夜间自动测试
工作日、白天比较适合需要人实时响应的测试。休息日、夜间比较适合无人值守的持久性测试,如稳定性测试。
人工、自动协同操作分布式控制系统架构由于业务逻辑系统中各设备、软件无差别地向所有人工操作用户界面软件、自动操作脚本编程接口发送状态信息,转发或回送控制信息,使人工操作用户界面软件、自动操作脚本编程接口接收到与己无关的信息,这就要求:一是传送控制信息、状态信息的通信协议应便于接收方过滤掉与己无关的信息;二是业务逻辑系统应平常只发送值发生变化的信息,以减少通信量;三是业务逻辑系统应周期性或回应人工操作用户界面软件、自动操作脚本编程接口的请求发送全部信息,以使刚启动的人工操作用户界面软件、自动操作脚本编程接口获得全部信息的历史值。
综上,该架构比较适合于业务逻辑、用户界面之间所传送的信息符合以下特点的系统:一是信息的值变化不频繁;二是值变化频繁的信息数量较少;三是能将值变化频繁的状态信息转换为值变化不频繁的状态信息。
人工、自动协同的测试平台架构使上海富欣智能交通控制有限公司能够同时快速测试CBTC、TACS(列车自主运行系统)等多制式产品并验证工程应用项目,对于工业控制自动化领域也具有借鉴意义。