基于正则匹配的自动提取追踪矩阵的方法研究
2021-11-03秦凤杰夏芸杨平曹然
秦凤杰 夏芸 杨平 曹然
(卡斯柯信号有限公司 上海市 200071)
1 概述
正则表达式以其灵活的表达能力和高逻辑关联性、强大的功能性而广泛应用在生物信息学、数据的有效性检验、文本编辑器和网络安全检测等领域。本文将正则表达式的匹配操作应用于城市轨道交通信号系统项目的系统设计验证工作中,提出了从系统配置规则文档中自动精准提取追踪矩阵的方法,提高了系统设计验证工作的质量和效率。
2 系统设计验证
2.1 系统设计验证的必要性
系统设计文档主要在项目生命周期的设计阶段和安装阶段进行编制和更新。系统设计文档编写和更新后的验证需要在项目生命周期各个阶段执行。系统设计验证需要根据平台指导文件及限制分析、项目合同、土建输入、车辆特性、系统设计人员和业主的设计联络会会议纪要等作为输入,对系统设计的文档进行核对验证。从图1城市轨道交通信号系统项目开发的生命周期V 模型中可以看出,系统集成测试主要针对系统设计,检查系统作为一个整体是否得到有效地运行,以及在产品设置中是否能达到预期的高性能。系统设计存在的缺陷如果不能得到及时发现并纠正,将会对后续地铁项目的数据制作,测试,现场动调等阶段造成极大影响,由于建设的环环相扣,缺陷发现越晚,进行缺陷弥补的工程量越大,进而引起工程周期拖延、建设成本大幅上升。因此,在整个生命周期中,系统设计阶段验证工作至关重要,通过验证设计中存在的缺陷和偏差,确保系统设计文档的正确性,权威性。
图1:项目开发生命周期V 模型
2.2 系统设计验证的完备性
系统设计验证的文档包括系统配置规则(System Configuration Rules, 简称Sycr)、列车运行规则(Train Movement Specification, 简称TMS)、平面图(Scheme Plan, 简称SP)、Overlap、后备模式变量表(IBBM)、系统结构图、装备有CBTC 系统的停车场和车辆段平面图、地址计划(Addressing Plan)等。现如今,已有多个城市正在规划和建设全自动无人驾驶线路,上海和成都新建地铁项目均已投入使用。全自动无人驾驶[1]信号系统与传统的CBTC信号系统相比,具有更高的安全性和可靠性,并有效增强了系统的灵活性和可用性。功能和应急方式均需涉及整列车上无人作业的方式,需对既有功能进行增强,如远程唤醒功能、全自动洗车、蠕动模式、车门/站台门对位隔离、请客确认和站台自动对位调整等。对于这些新功能全自动无人驾驶项目的信号系统的系统设计验证要进行全面覆盖。在项目执行过程中,验证工作量成倍增加,人工验证无法适应高强度工作。
3 自动提取追踪矩阵程序设计
3.1 从系统配置规则中自动提取追踪矩阵的必要性
如图2,从系统设计文档之间的输入输出关系图可以看出,系统配置规则文档中最重要的部分是设计规则,这些规则是设计文档的标准,并且单个城轨项目的规则数量高达数百个。传统方法采用手动筛选分配给各个文档的规则,然后将规则导入到验证报告模板中进行验证。此种方法存在诸多缺点和不足,主要表现为:
图2:系统设计文档之间的输入输出关系
(1)由于规则数量庞大,筛选规则需要花费大量时间和精力,严重影响了验证效率。
(2)手动筛选没有统一的标准和规范,验证人员的水平对验证质量影响很大,经常出现规则遗漏验证的现象,验证质量无法保证。如果遗漏规则是影响数据的,并且设计文档没有遵守该规则,那么该问题就会遗留到测试阶段或者现场动调阶段,造成工程延误,无法如期进行项目交付,将会面临支付巨额违约罚金的困局。因此,寻求一种从系统配置规则中自动提取追踪矩阵的方法具有重要的现实意义。
3.2 正则表达式匹配算法
正则表达式[2]是一种文本模式,包括普通字符和特殊字符,使用单个字符串来描述、匹配一系列某个句法规则的字符串匹配。字符串匹配定义[3]为:对于给定的模式字符串或者文档,在其中查找出于给定模式字符串匹配的所有起始位置。正则匹配分为获取匹配和非获取匹配,获取匹配是匹配pattern 并捕获该匹配的子表达式,而非获取匹配是匹配pattern 但不获取匹配结果,不进行存储供以后使用。本文主要采用的是非获取匹配中的(?=pattern)和(?<=pattern)。
(?=pattern)表示正向肯定预查,匹配pattern 前面的位置。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。对于正则表达式Q= xxx(?=pattern),就是捕获以pattern 结尾的内容xxx。例如,对于正则表达式Q= ABCD(?=12|13|14|15)能匹配"ABCD15"中的"ABCD",但不能匹配"ABCD78"中的"ABCD"。
(?<=pattern)是反向肯定预查,与正向肯定预查类似,只是方向相反。对于正则表达式Q=(?<=pattern)xxx,就是捕获以pattern开头的内容xxx。例如,对于正则表达式Q=(?<=12|13|14|15)ABCD能匹配"15ABCD" 中的"ABCD",但不能匹配"78ABCD" 中的"ABCD"。
3.3 设计流程
该方法使用Python 语言基于正则表达式开发。其设计流程图如图3 所示。该工具采用的正则表达式分别匹配项目规则号、安全属性、分配文档、平台规则号和特殊属性。按段落对文本内容进行匹配,如果内容匹配称成功,则输出匹配字符,否则输出为空。最后将匹配的内容输出到新建的EXCEL 表格中,并删除空行,得到所需要的追踪矩阵。
图3:程序流程图
首先,创建一个新的Excel 表单sheet1,表单第一行设置为表头,从第一列到第七列分别为 “SYCR”、 “Text”、 “Design”、“Safety”、“Allocation”、“Source”和 “Specific rule”。
然后,使用docx 模块读取并编辑项目的系统配置规则文档,判断系统配置规则的格式。具体方法为,按段落读取系统配置规则文档,采用多个条件判断语句elif,判断文档中是否有关键词“[BeginBook”、“#Rule Name=”、“#Category=”。如果有关键词“[BeginBook”,采用格式1 将匹配的内容输入到sheet1 中;如果有关键词“#Rule Name=”,采用格式2 将匹配的内容输入到sheet1 中;如果有关键词“#Category=”,采用格式3 将匹配的内容输入到sheet1 中,并保存好新的EXCEL 文件。如果系统配置规则文档均不含有以上列举的关键词,则弹出警告“格式不匹配,无法提取”。
具体的匹配方法为,先创建五个正则表达式,分别为“re1 =r'[BeginBook(.*?)]'”、“re2 =r"(?<=#Safety=)(.*)"”、“re3=r"(?<=#Allocation=)(.*)"”、“re4 =r"(?<=#Source=)(.*)"”、“re5 =r"(?<=#Specific Rule=)(.*)"”。其中,re1 用于匹配项目规则号,re2 用于匹配安全属性,re3 用于匹配规则所分配的文档,re4 用于匹配平台规则号,re5 用于匹配规则的特殊属性。然后按段落对整个系统配置规则文档进行查询筛选。如果该段落匹配正则表达式re1,则输出匹配到的字符串到sheet1 的第0 列;如果该段落匹配正则表达式re2,则输出匹配到的字符串到sheet1 的第3 列;如果该段落匹配正则表达式re3,则输出匹配到的字符串到sheet1的第4 列;如果该段落匹配正则表达式re4,则输出匹配到的字符串到sheet1 的第5 列;如果该段落匹配正则表达式re5,则输出匹配到的字符串到sheet1 的第6 列;如果查询到的段落不匹配任何正则表达式,则输出为空。
最后,调入Pandas 库,将上述EXCEL 文件中的空行都删除掉,得到所需格式的追踪矩阵。
4 应用结果与分析
目前,该方法已经成功应用于城市轨道交通信号系统项目的系统设计验证工作中。图4 为截取的部分系统配置规则中的规则,如图5 所示,为自动提取的追踪矩阵。
图4:Project1 的规则
图5:自动提取的追踪矩阵
4.1 自动提取追踪矩阵时间分析
实验结果列出了本文所述的方法在不同规则数下提出追踪矩阵所耗费的时间,结果如图6 所示,其中横坐标表示项目规则数量,纵坐标表示提取追踪矩阵的时间。从实验结果可以看出随着规则数量的增加,提取追踪矩阵的时间能够在线性时间内完成,因此该方法具有较好的可扩展性。
图6:自动提取追踪矩阵的时间
4.2 自动提取追踪矩阵性能分析
通过上文的对比分析可知,该方法提取追踪矩阵的效率明显优于手动提取,本节主要对不同项目分别做了实验进行验证,具体实验结果如图7 所示。
图7:手动提取和自动提取所用时间对比
以Project1 为例,计算系统验证阶段人工和使用自动方法导出追踪矩阵所需的工时。Project1 在SYCR 中的规则个数为710 个,验证人员在SYCR 文档中有效搜索到一个规则并导出到Excel 表格中为0.5 分钟计算,人工所需工时为5.91 人时。而使用自动提取方法得到如下追踪矩阵仅仅需要10 分钟。针对不同项目,这种自动化提取追踪矩阵的时间均优于手动提取时间,极大节约了验证时间,提高了验证效率。
5 总结
系统设计验证工作在城市轨道交通信号系统项目建设的顺利实施中具有重要地位,因此保障系统设计验证的质量对于缩短项目开发周期至关重要。从系统配置规则中自动提取追踪矩阵对于系统设计验证效率和质量都得到了很大提高。本文提出的系统配置规则中自动提取追踪矩阵的验证方法,对于后续系统设计验证自动化的研究提供了重要参考和指导意义。