文/樊茜 何雨昂 黄葵 杨帆 温力
伺服软件为了保证时序指令的接收正确,采用了双重“三取二”时序码判断和双中断协同处理时序指令的方法。为了考核该软件在复杂时序下的工作状态是否能正常运行,本文提出了一种面向复杂时序的伺服软件测试用例设计方法。结合配置项测试环境,使用黑盒的测试手段不仅可以对软件的功能、性能、接口等指标进行考核,还能对软件可靠性进行测试。
黑盒测试是将软件视作一个完全不能打开的黑盒子。在测试时,完全不忽略程序内部结构和逻辑,仅通过软件对外接口进行测试,检查软件功能是否按照任务书或需求规格说明书的规定正常运行,程序是否能适当地接收输入数据而产生正确的输出信息。
黑盒测试的用例设计技术常用的有3种:等价类划分法、错误猜测法、边界值分析。下面具体地来介绍这3种测试用例设计技术。
等价类划分是把程序的输入情况划分成若干部分,然后从每个部分中选取少数代表性数据当作测试用例,每一类的代表数据在测试中的作用等价于这一类中的其他值。也就是说,我们认为如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能出现同样的错误。这样就可以用少量代表性的测试数据取得较好的测试结果。等价类划分有两类:有效等价类和无效等价类。有效等价类指的是符合软件需求规格说明书的有效输入;无效等价类指的是其他任何可能的输入条件(即不正确的输入值)。设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。
错误猜测法就是基于经验和直觉推测程序中所有可能存在的各种错误,有针对性地设计测试用例的方法。错误猜测方法的基本思想:列举出程序中所有可能容易发生错误的特殊情况,根据他们设计测试用例。该方法依赖于用例设计者的经验,如果用例设计者经验丰富,则使用该方法可以快速的找到存在的问题。该方法一般用于用例补充。
通常大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出附近的边界点,就是边界测试需要着重考虑的测试情况,所以应当选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
伺服软件功能测试用例设计方法以黑盒测试方式为基础,根据不同分解出的不同需求,选择不同黑盒测试的用例设计技术,全方位的考核伺服软件指标。以伺服软件的接收时序指令功能为例,讲解针对复杂时序的功能测试用例设计方法。
伺服软件对伺服系统不同工作状态进行了定义。定义的时序码定义如表1所示。
根据任务书要求,时序指令共发送n次,每次发送数据为m个相同的字。当伺服软件收到指令后,实现“三取二”逻辑,得到正确的时序码。当3次时序指令中要有2次接收到时序码,即执行相应的时序动作。其中“三取二”操作指,数据中至少两个数据一致,取其一致的值作为读取的数据值。
第一步确定输入条件,然后为输入条件确定等价类。这些步骤都以表格形式记录在表2中。
下一个步骤应该是编写一组测试用例测试用例设计覆盖了所有有效等价类,方能对该伺服软件针对接收时序指令功能的进行全面的考核。设计用例如下:
(1)连续发送n条时序指令,m个时序码均为0x1111。
(2)连续发送n条时序指令,m个时序码均为0x2222。
(3)连续发送n条时序指令,m个时序码均为0x1234。
(4)发送n-i条均为0x1111的正确时序指令,i条错误时序指令(1<i≤n)。
(5)发送2n条时序指令,其中每n组仅有一条指令为带有正确时序码。
(6)发送1条时序指令,m-j个数据为正确时序码且一致(1<j≤m)。
(7)发送1条时序指令,m+1个数据为正确时序码且一致。
接口测试需要依赖半实物仿真环境进行,结合半实物仿真环境的目标机、仿真机系统和环境模拟设备,最大程度上还原伺服软件的实际工作环境。其中目标机包括伺服控制器,用来运行被测软件;仿真机系统包括接入总线板卡,安装了测试工具软件、编译软件、仿真测试软件等软件的工控机,实现总线及设备的模拟与仿真;环境模拟设备包括高精度可调直流电源、示波器等。
结合伺服软件接半实物仿真环境,使用硬件故障、数据故障、操作故障等故障注入技术,能够全面考察伺服软件的接口性能、容错机制和异常数据处理的能力。
文本以使用1553B总线的伺服软件为例,描述基于黑盒测试的伺服软件接口测试用例设计方法。伺服软件对需要交互的指令都配置了约定的命令字。定义如表3所示。
根据要求,上级系统只能对RT(N)的站点进行指令下发,且站点内部只有子地址1~4为合法子地址。使用等价类划分法,设计用例如下:
(1)当命令字消息块中的RT地址为RT(N),软件是否响应发送给RT(N)的消息。
(2)当命令字消息块中的RT地址为非RT(N),软件是否响应发送给其他RT的消息
(3)伺服软件是否响应发送到合法子地址1~4的总线命令。
(4)伺服软件是否响应发送到非法子地址的总线命令。
同时根据测试人员经验,1553B寄存器自检异常和1553B总线物理断连也会导致1553B指令接收失败,所以使用错误猜测法新增用例如下:
(1)1553B总线对自身寄存器自检正常时,软件是否能相应合法指令。
(2)1553B总线对自身寄存器自检异常时,软件是否能相应合法指令。
(3)1553B总线断开后再接通是否能正常响应总线消息。
为了提升嵌入式软件的可靠性,嵌入式配置项测试的测试类型已从过去的6类测试,提升为11类测试,新增的有静态分析、边界测试、安全性测试、可靠性测试和强度测试。尤其,在边界测试时常常能发现软件的数据处理异常和逻辑异常的情况,所以边界测试已成为配置项测试的重中之重。
本文以伺服软件的自检指令为基础,选用边界值分法设计测试用例。按照任务书要求伺服软件,伺服软件需在上电后对指定外备进行自检,以确定伺服系统已进入正常工作状态。
部分自检项和判断依据如表4所示。
第一步确定边界,确定电机转速、功率电压、+5V电源电压、+12V电源电压和-12V电源电压的正常数据的边界如表3所示。根据边界值分析法的要求,通过直流可调电源给控制器的输入接口,选取正常边界值进行输入,还应设计超出范围的测试值,充分验证所有测试情况。
第二步是编写充足的测试用例,覆盖所有边界,对该伺服软件自检功能的边界处理进行全面考核。设计用例如下:
(1)功率电压输入0,+5V电源电压输入4.9,+12V电源电压输入11.8,-12V电源电压输入-12.9。
(2)功率电压输入300,+5V电源电压输入5.1,+12V电源电压输入12.2,-12V电源电压输入-11.9。
(3)功率电压输入-0.1,+5V电源电压输入4.8,+12V电源电压输入11.7,-12V电源电压输入-13。
(4)功率电压输入300.1,+5V电源电压输入5.2,+12V电源电压输入12.3,-12V电源电压输入-11.8。
(5)功率电压输入0.1,+5V电源电压输入4.91,+12V电源电压输入11.81,-12V电源电压输入-12.8。
(6)功率电压输入299.9,+5V电源电压输入5.09,+12V电源电压输入12.1,-12V电源电压输入-11.91。
通过研究复杂时序下的伺服软件测试用例设计方法,设计了具有全面检查性的测试用例,并已在实时性可控性强的测试平台上进行实际测试验证。该方法已经在多个软件项目的测试中得到了成功的应用,发现软件重大缺陷及漏洞多项,为软件可靠设计与评价提供理论与技术支持,降低了由于解决软件缺陷造成的直接经济成本。
表1:伺服软件的时序码定义表
表2:等价类
表4