车载软件自动测试系统的设计与实现
2018-08-11朱志承陈志强
朱志承 陈志强
(1.北京全路通信信号研究设计院集团有限公司,北京 100070;2.北京市高速铁路运行控制系统工程技术研究中心,北京 100070)
随着现代信息技术的发展,软件开发的周期大大缩短,对软件的安全质量要进行严格的把关。软件测试承担着重要的任务,尤其是在一些关键领域,如航空航天、高铁等行业对软件可靠性和安全性都有很高的要求。
软件测试自动化是通过开发和使用一些软件测试工具、软件自动测试系统,特别适合于软件测试中重复而繁琐的活动。软件测试自动化技术一般是指一个特定测试的一系列指令,这些指令可以被自动化测试工具执行。
在开发软件自动测试系统过程中,一定要明确自动测试系统的体系结构,各部分功能性要求。从软件自动化测试的范围和测试的属性来看,通过研究自动测试过程中软件的运作机制,信息的流动情况以及事件执行顺序等,得到自动测试系统的一般体系结构,如图1所示。
图1 自动测试系统结构图Fig.1 The chart of automatic test system
1 车载软件自动测试系统组成原理
在车载软件自动测试系统中,通过主引擎、分引擎与车载软件之间的交互,最终实现车载软件功能测试。测试流程如图2所示。
图2 车载软件自动测试系统流程图Fig.2 The flow chart of on-board software automatic test system
通过研究可以对车载软件自动测试系统的流程做以下总结。
1)主引擎读取测试案例脚本,并解析脚本,打包成数据包,调用脚本命令函数,通过测试接口发送给各分引擎。
2)各分引擎接到主引擎发来的测试命令数据包时,对测试命令数据包进行解析,并通过在相应测试引擎上的接口来操作相应的软件。
3)被测软件响应相应的测试操作,并通过通道返回参数数据。
4)主引擎根据返回的各种参数数据对比测试条件,判断测试执行情况,以此来判断测试的进度。
5)主引擎判断测试状态后,记录测试结果,记录测试日志数据到数据库,方便以后的分析。
6)主引擎查找下一个脚本,周期执行上述操作。
通过上面几个步骤,完成自动测试的一个周期。从上述步骤可以看出,在整个自动测试环境中,自动测试主引擎起到测试的组织和管理角色,是测试环境中很重要的一部分。
2 车载软件自动测试系统组成
车载软件自动测试系统对系统进行严格的功能性测试,以便使系统能够安全高效的运行。车载软件自动测试系统主要包括主引擎、DMI分引擎、车载分引擎,测试脚本文件和测试结果记录数据库等,系统框架如图3所示。
图3 车载软件自动测试系统结构图Fig.3 The architecture of on-board software automatic test system
通过图3可以看出,车载软件自动测试系统的各部分的组成及基本功能。
1)主引擎
主引擎是整个测试工作的组织者,通过加载解析测试案例脚本,并把它转换成测试命令传送给各分引擎,使车载软件、OTE环境以及DMI软件进行相应的操作,完成自动测试功能。同时,主引擎还对测试数据和脚本进行程度作判断,判断测试案例是否成功,并把测试结果及测试数据写入数据库,以便进行测试后的分析。
2)DMI分引擎
DMI分引擎从DMI软件动态获取系统的实时参数信息,并打包成数据包,发送给测试主引擎进行处理。同时,通过相应接口DMI分引擎可以获取主引擎的控制命令,根据测试案例要求的控制命令,DMI分引擎进行相应的操作,如按压启动键、缓解按钮等。
3)车载分引擎
车载分引擎通过接口直接获取系统的实时信息,并根据测试案例脚本的要求,将这些信息发送给测试环境主引擎。同时,车载分引擎也能获取主引擎的测试命令,通过测试接口对测试命令进行解析,从而实现对系统的各种操作,如设置列车运行方向、对列车加减速等。同时,它还能够根据测试命令读取线路数据脚本,为系统运行设置线路环境。
4)测试案例脚本
测试案例脚本通过自动化的测试命令使主引擎组织整个测试活动。测试脚本是把测试过程脚本化的操作过程,通过测试脚本,测试人员可以有目的地组织测试活动,对系统进行测试。
5)测试结果记录数据库
在测试工作中,会产生大量的测试数据日志,对这些数据的保存有利于测试后对问题的分析与整理,所以要在测试活动中建立测试结果记录数据库。一方面对每个测试案例脚本的测试结果进行保存,另一方面,对测试过程中产生的大量测试数据进行有效的保存。
3 车载软件自动测试系统实现
3.1 自动测试主引擎实现
自动测试系统主引擎作为自动测试活动的组织者,在自动测试环境中,自动测试主引擎主要承担解析脚本、发送测试命令、回收数据、判断测试结果、保存数据等功能。所以,在整个测试环境中,测试主引擎起着主要的推动作用,是测试软件的核心。自动测试主引擎的流程设计如图4所示。
图4 主引擎流程图Fig.4 The flow chart of the main engine
3.2 测试命令脚本的设计与实现
在车载软件自动测试系统中,每一个案例都可以看成是列车的一次独立运行,运行过程中产生的数据,可以用来分析车载软件的功能实现的漏洞。在此基础上,提出对测试案例脚本化,即把每一个测试案例转化成脚本与参数值,在自动测试系统测试过程中,自动读取脚本来进行测试工作。
根据车载软件自动测试功能需求,编制以下几种脚本命令。
1)测试环境控制命令
此类型命令主要是对测试环境进行预处理,相当于操作前的准备工作。例如:Load_TDGFile(FileName)、Goto_Position(Position)。
2)模拟列车控制命令
模拟对列车的控制,主要包括列车速度控制、列车接口控制、列车制动控制。例如:Set_Want-Speed(WantSpeed)、Set_Throttle
(Power)、Set_Cabin(State)。
3)DMI控制命令
此类型命令主要模拟司机按压DMI按钮操作,向ATP发送设定键值和设置列车长度等,例如:DMI_SetKey(DMIKey)。
4)测试流程与测试结果验证命令
主引擎主要通过此类命令来控制测试流程的进行,同时结合系统的返回数据,检验测试结果是否与预期相符,以便检验系统测试是否成功,例如:Expect_ATPMode(Mode,Time)、Supervise_ATPMode(Mode,Position)、Wait_Train Speed GE(Speed,Time)。
3.3 测试数据库的设计与实现
测试数据的记录要求详细,有条理性,在后期的测试分析阶段能从测试数据中提取有效信息。同时,由于测试案例可能有多个,为提高测试分析效率,必须对整体测试情况进行记录,记录本测试案例的总体测试情况,失败位置与脚本命令等。把测试数据的记录分在3个数据库中进行,内容如下。
1)总体测试结果记录数据库
此数据库包含各个测试案例的测试结果,通过此数据库记录的数据,测试分析人员可以得出测试过程中测试成功与测试失败的案例名,以及初步的分析该脚本失败的原因。实际数据在表中的存储如图5所示。
图5 测试结果记录数据库图Fig.5 The record database of test results
2)脚本结果记录数据库
脚本文件中包含着许多列车状态数据比较命令,需要对这些命令的执行情况进行详细记录。脚本结果记录数据库包含执行此脚本命令的信息,包括列车基本的状态信息、还包括此命令最终执行的结果,通过或者失败。同时,也包含脚本命令执行的外部状态信息,主要包括脚本执行日期、时间,脚本执行时列车位置,脚本命令以及期望值和实际值等。举例脚本结果记录数据在数据库中的记录如图6所示。
图6 脚本结果记录数据库Fig.6 The record database of script results
3)测试日志记录数据库
图7 测试日志记录数据库Fig.7The record database of test logs
在查询测试结果时,可以通过总体测试结果数据库与脚本执行结果数据库来查询脚本案例的测试执行情况。如果要进一步分析测试案例的失败原因,查找导致测试失败的节点,需要结合上述两个数据库分析测试环境的原始数据。主引擎与各分引擎的数据交互都是通过各种数据包来实现的。这些原始数据包含列车的各种状态信息与脚本命令的信息,设计测试日志记录数据库来保存测试数据,如图7所示。
4 结论
本文通过设计主引擎、分引擎、测试命令脚本、测试数据库等,完成车载软件自动测试系统。该系统可以大大的降低车载软件功能测试的测试周期和测试覆盖率,使得车载软件具有更高的安全性与可靠性。