陈慧琍 陈晓轩
列车自动监控系统(ATS) 是列车自动控制系统的一个重要组成部分,针对ATS 系统的测试是保障列车安全运行的前提。传统ATS 系统的测试逻辑复杂、界面操作繁琐,从制定计划、编写案例,到执行测试、记录结果,需要大量重复的或相似的操作,极大地增加了测试时间和人力成本。为了推动ATS 系统自动化测试进程,急需一套切实可靠的ATS 系统自动化测试工具。
ATS 系统的自动化测试,要求测试前后结果相关联、测试需求多样和实时性高,具体要求如下。
1)与真实测试无偏差,需正确解读ATS 系统的测试逻辑,使测试流程严格匹配。
2)采用模块化设计,可以根据测试需求灵活组合。
3)具有鲁棒性和普适性,对不同ATS 系统均可进行自动化测试。
4) 需提供ATS 系统测试的日志和可视化结果,便于测试人员核查。
对于以界面操作为主的软件,按测试机制可分为侵入式测试和非侵入式测试。侵入式测试,需要修改测试目标软件的内部代码,或者控制其运行环境;而非侵入式测试,则不修改软件内部代码,只是监控测试目标软件的用户界面,模拟测试人员完成测试流程。由于ATS 系统涉及列车控制系统数据,不能修改其内部代码,所以ATS 系统自动化测试工具只能采用非侵入方式。
为了实现地铁信号系统自动测试,设计了图像数据采集、OCR 图像处理、测试脚本配置、客户端内网间通信、日志处理、测试结果可视化等6 个模块。
图像数据采集模块,实时监控ATS 系统测试软件界面,需要采集信息时截取界面图像。根据实际的测试流程编写测试脚本,需要提取信息时,例如识别字符或判断路段形态,该模块会采集地铁信号系统测试软件图形化界面中的界面信息;也可以通过按键的中断方式,实时截取界面图像,作为测试样例和构造字符特征库。
OCR(光学字符识别)图像处理模块,识别和处理地铁信号测试系统软件中的屏幕信息,主要有界面中的菜单信息、站场图中的字符信息和路段形态信息。
界面中的菜单信息,是指需要点选菜单才能进行的操作,比如建立进路、取消进路和解除引导总锁等命令,都需要通过识别菜单中的文字,找到相应的指令后执行操作。
站场图中的字符信息,是指在站场图上显示的道岔号、轨道区段编号、信号机编号等文字信息。
以上两类信息,对于人类来说非常好理解,但是对于计算机来说,完全是两类不同的信息。菜单信息的底纹大多为灰色,字体字号较为统一;站场图中的字符信息底纹颜色是可以自定义的,黑色、灰色都可以,字体、字号也是可以改变和缩放的。这些不同是需要重点解决的技术问题。
为了识别并处理菜单信息和站场图中的字符信息,本文采用先定位、再识别的策略,即先定位文字位置,提取字符识别候选值,再对候选值进行字符识别,最终整合信息输出识别结果。
在定位待识别文字时,采用一种基于Gabor 和SVM 的复杂背景中的文字检测方式。通过不同方向尺度的Gabor 滤波器得到表示中文字符横、竖、撇、捺4 个方向的纹理图像;使用SVM 分类器对纹理图像进行训练,构建一个SVM 分类网络来得到最终的文字区域。对字符定位时的具体操作是:先对图像以灰度均值为阈值做二值化操作(将整个图像呈现出明显的黑白效果),再使图像通过4 种针对横、竖、撇、捺纹理提取特征的Gabor 滤波器,最后使用SVM 分类器对提取出的候选文本区域进行细分类,得到准确的文本位置。
在对候选值进行字符识别时,首先对候选值使用垂直投影法,对二值化操作后的图像垂直方向的黑色像素点进行统计,低于阈值处判断为字符分割点,将字符识别候选值分割后获得单独的字符图。对单独的字符图,参考一种基于联合HOG 特征的车牌识别算法,分别提取汉字、数字字母的灰度方向梯度直方图(histogram of oriented gradients,HOG) 特征、二值灰度方向梯度直方图特征和16 值(用最基本的16 种颜色显示图像)灰度方向梯度直方图特征,将它们组合成联合HOG 特征。联合HOG 特征是三维数据集,在计算机中不仅占用很大的存储空间,而且处理起来很复杂。核主成分分析方法(kernel principal com⁃ponent analysis,kernel PCA) 是多变量统计领域中的一种分析方法,能把高维数据x 投射到k 个特征向量上,从而把它降低到k 维。运用这种方法把联合HOG 特征进行降维,将降维后的联合HOG 特征送入支持向量机进行训练和预测,将汉字和数字字母的识别结果进行组合,得到最终的字符识别结果。
路段形态信息,是指站场图中的轨道区段、道岔区段和列车按钮等图形。对路段形态信息进行识别时,首先对图像以灰度均值为阈值做二值化操作,通过调用opencv 的方法对图像中的圆形和直线段做拟合,可分别得到站点位置和路段位置的参考信息。通过对两路段做角度计算,可以推断出岔道信息。针对不同任务,对界面中的图像进行矩形或者圆形拟合,能够找出轨道区段或信号灯,再判断其颜色的变化,可以对特定组件进行识别,进而满足不同的测试需求。
测试脚本配置模块,是测试人员预先根据测试需求,按照预定义的格式编写测试脚本的模块。实际测试时,模块中的脚本解释器会读取测试脚本文件,解析并执行脚本内容,并将各个功能模块按照测试脚本的要求串联成测试流程,模拟测试人员实操测试,并记录日志,供人工分析问题和后续日志处理模块处理使用。测试脚本配置模块工作流程见图1。
图1 测试脚本配置模块工作流程
测试人员根据不同的测试需求,通过配置函数级的子模块组合成不同的测试流程;可以选择预定义的子任务,例如Menu OCR (菜单识别)、Route Check(进路检测)等指令,直接实现单个测试流程;也可以选择子函数模块,例如Move Mouse(移动鼠标)、Save Window(保存窗口)、Left Click(左键单击)、Wait(等待)等指令,模拟实际测试流程,并可以自定义新的复杂的测试场景,编写测试脚本进行自动化测试。
由于地铁信号测试具有要点多、逻辑复杂、流程不一致等因素,测试需求变动较大,该模块可以按不同需求进行测试,大大缩短了重复开发时间,也给测试人员提供了一定的自由度。
客户端内网间通信模块由主控模块和被控模块组成,分别布置在中心、车站和车站联锁的控显机中,可实现中心和车站控显机的协同操作,模拟传统测试中人工比对多机信息的测试流程,解决ATS 系统测试中多机联调的任务。客户端内网间通信流程见图2。
首先,主控模块与被控模块建立TCP 连接。在测试过程中,主控模块将测试需求内容以约定的编码形式编写成协议内容,并向被控模块发送TCP 协议包;被控模块监听TCP 协议包,接受TCP 协议包后,根据约定的解码形式解析协议并做出相应动作。
图2 客户端内网间通信流程
以多进路连排的具体需求为例,被控模块操控车站控显机,使路段进入占用模式;主控模块在中心控显机核对占用情况后,命令被控模块在车站控显机模拟占用路段出清;被控模块完成模拟后,主控模块收到被控模块反馈的车站状态变化信息,比对在界面中显示的车站控显机、中心控显机两端的占用/出清状态记录是否与预期一致。
测试车站排路、区段占用和出清状态,以及其在中心显示的状态,是出厂验收测试中ATS 与联锁之间最重要的测试环节。在这个过程中,客户端内网间通信模块使用了多种辅助方式,包括编写多个控制软件、接口远程调用;定义几种接口远程调用的协议方式,所有接口调用使用TCP 方式,约定双方每2s 发送一次含有时间戳消息的心跳消息,用于校对主控端与被控端时间是否一致,保证操作上没有时差,避免因为2 个机器的时差导致误判操作而超时。加入心跳包后,能够有效地避免因为网络中断导致测试失败而给出误报警。传送车站的操作记录到主控端作为比对依据,实时在线检测中心控显机的界面显示是否正常,界面显示延时是否在可以接受的范围内。
日志处理模块主要解析测试结果,与测试用例的预期结果进行比对,生成测试结果可视化模块的输入,以供展示。
日志主要记录当前时间、操作日志、运行输出日志,以及联锁和ATS 的码位变化表,检查码位表是否按照操作日志中记录的步骤进行变化,与预期的结果是否一致,有没有超时等情况发生。在地铁信号系统测试过程中,经常采用这种方法,将自然语言描述的测试预期结果,人工编写成比对脚本,对测试日志进行判断处理,可以得出最终的测试结果是否通过,并且输出异常情况,待测试人员核查。
测试结果可视化模块用于对测试用例的输出结果进行可视化,便于测试人员复查。在综合OCR图像处理模块、日志处理模块等多个模块输出后,测试结果可视化模块统计测试结果,并将统计结果可视化输出,输出文件包括站点状态、逐条测试结果成功率、测试异常点等重要信息,提供给测试人员作为核查的依据。
ATS系统自动化测试工具的工作流程见图3。
图3 ATS 系统自动化测试工具工作流程
1) 启动ATS 系统和工具后,调用Windows API 操作,模拟人工测试中的键盘和鼠标操作。
2)图像数据采集模块,依据测试用例中给定的信息,在界面中定位站点、股道、道岔和操作按钮等信息,使用Windows 的API 进行截图操作,将结果传给OCR 图像处理模块。
3)OCR 图像处理模块,对图片进行预处理,定位并识别图片中的被测对象,判断图片中被测对象的状态和编号;采用不同的图像处理策略,经过图片预处理、中英文字符检测识别、轨道岔路形态识别等流程后,将当前任务中需要的图像信息在整张图中定位并记录,构建带有信息位置坐标的整体测试图像。
4)测试脚本配置模块读取并解析任务,获得设定好的状态机模型信息;根据OCR 图像处理模块给出的显示界面状态,判断状态机的运行情况;发送控制命令给客户端内网间通信模块,实现多站联调测试;最后将状态机的处理结果传给日志处理模块。
5)客户端内网间通信模块,根据测试脚本配置模块的控制命令来操作车站控显机,配合中心控显机的操作,并将验证后的车站联锁控显机码位信息反馈给中心控显机。
6)日志处理模块,将收到的结果汇总后与测试用例的预期结果进行比对,判别当前测试任务是否成功。
7)测试结果可视化模块,根据日志处理模块的判别结果,整合多次测试的结果,输出可视化的测试日志,供测试人员查看。
状态机建模和验证是ATS 系统自动化测试工具的关键技术,将ATS 系统中的操作信息作为状态机的状态并建立模型,系统对操作的响应和反馈作为状态转变的条件,配合OCR 技术从屏幕获得信息后,通过状态机的状态变化、前后的逻辑关系,对测试结果进行判断。以实际道岔测试逻辑作为状态机举例,状态机的验证方式见图4。
首先,图像数据采集模块采集道岔操作前后的界面截图;然后,OCR 图像处理模块对图像进行去噪、定位字符候选区域、对候选区域分割、识别单个字符、判断目标道岔位置、道岔特征提取和判断等图像处理,判断道岔前后形态的变化,由此得到测试界面在状态机中的当前状态,对道岔形态进行判断。若道岔形态为不水平,则验证道岔的状态;如果道岔状态符合预期,则验证经过轨道路线;否则该条测试失败。若道岔为水平,则验证轨道路线;如果经过的轨道路线符合预期,则该条测试成功,否则该条测试失败。
可以看出,OCR 图像处理模块识别道岔形态而得到差值图等动作是状态机建模和验证中的关键步骤,OCR 不仅要在ATS 界面中找到被测对象,而且要识别操作结果,才能够判断状态机的状态并记录测试结果。状态机的判断结果均通过日志处理模块记录,传送给可视化模块进行结果整合以及可视化输出。
图4 状态机的验证方式示意图
状态机建模与验证技术,并不局限于ATS 的操作逻辑,只要能够建立操作逻辑的状态机,结合OCR 识别技术,就可以不依赖被测对象的控显接口,直接获得界面状态,实现这些具有控显界面的信号系统的自动化测试。
目前,ATS 系统自动化测试工具已在多个城市、多条地铁线路上进行了应用,相比传统的人工测试,测试过程极大简化,测试时间大大缩短,主要应用效果如下。
1) 利 用Windows 的API 和OCR 等 技 术,模拟测试人员的操作,在未影响系统性能的前提下,实现了界面测试自动化。
2)客户端内网间通信模块实现了多机联合测试功能,能够同时操作3 个车站,测试车站间的接口,并模拟车辆折返和接发车等场景。
3)不依赖于被测对象界面显示接口,降低了被测对象的依赖度。国内大部分ATS 系统采用微软的Visual Studio 技术开发,但为了安全起见,操作界面都去除了微软的消息响应接口,使得界面操作只能依靠鼠标等输入设备。采用OCR 技术后,结合输入设备的控制功能,可不依赖被测对象就能够获得其界面变化。
4)实现了测试配置灵活可变,不依赖于测试人员的开发技术,降低了人员要求,减少了培训和测试成本。
ATS 系统自动化测试工具,节约了ATS 系统测试的人力资源和时间资源,简化了测试流程制定、测试人员培养、测试结果核对的流程,为现阶段城市轨道交通快速发展提供了帮助。