APP下载

信息交换软件数据着色测试技术研究

2019-09-09

小型微型计算机系统 2019年9期
关键词:测试用例着色数据包

王 影

(中国航发商用航空发动机有限责任公司 控制系统部,上海 200241) E-mail:wyltm@126.com

1 引 言

理想的软件测试方法需要同时具有错误检测能力高、成本消耗低和适用性广泛等特点[1].等价类、边界值、判定表等经典方法在软件测试领域具有普遍的适用性,能够检验软件实现正常功能及鲁棒性需求的正确性,发现软件缺陷.不过,由于软件应用场合等的不同,有时照搬经典方法可能无法准确暴露所有缺陷.因此,需要结合实践经验,不断总结软件故障模式,优化测试策略[2],或基于经典方法衍生出对特定场景效果更好的新方法[3].

在计算机通信领域,除了传统的局域网、互联网、移动通信网和卫星通信网,物联网[4]、车联网[5]、空天地一体化网络[6,7]等技术也不断推陈出新,在各种通信线路和设备上,通过网络软件落实通信协议,与整个世界甚至太空、外太空实现数据交换.在航空[8,9]、航天[10,11]等工业自动化领域,随着工业数据总线、双口RAM、EEPROM等技术的发展,数字通信不断取代模拟、开关量信号的点对点传输,实现了不同设备、系统之间或控制器与执行机构之间的批量数据传输,构成多机冗余/协同系统、现场总线网络或可调参数在线存取系统;这些系统中运行的信息交换软件不仅要基于需求进行数据处理、设备控制和监测,又要基于统一的数据收发协议,完成批量数据的组包发送和拆包接收,实现信息交换.

在具有数据交换功能的各类系统中,数据收发协议是信息交换双方约定的共同语言,通常定义为数据包的形式,不同数据占据数据包中的指定字段;字段之间因位置上的相邻或嵌套关系而相互影响,产生松散或紧密的耦合作用.如果数据收发双方所应用的通信或存取协议版本不统一,或双方采用不同语言编程、且处理数组时的下标范围不同(如C语言数组下标从0开始,PASCAL从1开始),都可能在数据拼装和解析过程中引入特定类型的错误.除非测试人员充分了解数据拼装缺陷的故障模式、并为此精心设计测试用例,否则通常难以及时捕获异常.因此,本文基于边界值分析法和单缺陷假设,提出针对性的软件着色测试解决方案.

2 问题与挑战

对于网络及信息交换软件来说,数据收发协议定义的拼装关系越复杂,软件越容易出错.常见错误类型包括数据装入与提取位置错位,数据交换双方定义的数据类型/排序不一致等.即使数据包中所有数据均为同构信息,仍有可能出现数组下标索引类错误.例如某型号发控计算机为双机冗余系统,主机通过双口RAM把关键参数周期性地发给备机;主备切换后,备机基于主机发送的最新参数维持运行.如果主、备机之间对某个关键参数的数据类型定义不匹配(如收、发分别是long和char类型),则该缺陷会传播到序号靠后的数据,引起后续数据存储位置继发性错位,依靠这些数据进行处理的相关软件功能间接出错等连锁反应.

由于经典测试方法主要检验软件配置项内部处理逻辑的正确性,对通信/存取数据之间相互依存的耦合关系不加限制,对通信协议不同字段中无关数据的测试赋值不做显式隔离,有时因偶然性赋值相似可能相互干扰、掩盖错误.有时测试结果看似正确,但并非源自应与其匹配的输入(如所有测试数据取值为0时,即使数据包内部存在部分错位,也无法发现基本数据类型不匹配的错误).对于参与复杂数值计算的通信/存取数据,由于计算过程复杂或存在多周期的连续积分运算(如对于伺服回路闭环控制,部分输入数据来自作动机构的反馈,测试过程无法完全控制),有时经过仔细推敲虽然可以看出测试结果与期望值并不匹配,但却在有效的值域区间内,易被错误地当作计算精度的合理损失,测试人员对其不敏感或出现视觉疲劳,异常现象不能及时捕获.

针对此类软件缺陷漏测多发的情况,本文提出了一种软件数据着色测试方法,通过隔离逻辑无关的测试输入数据消除干扰,突出容易出错的数据字段,将软件可能产生的数据交换错误充分暴露.

3 着色法概述

着色也称染色或上色,指用化学或其他方法影响物质本身而使其着色.纺织品染色技术[12]是指通过适当的染色工艺,使用染料和助剂对纺织品进行着色;在生命科学研究[13]、医学病理分析[14]领域,通过染色剂将生物组织细胞的某一部分染上与其他部分不同的颜色或深度不同的颜色,产生不同的折射率,方便观察;在非多孔性材料表面探伤领域[15],着色渗透探伤是检查原材料、毛坯、半成品、工具等各种材料表面缺陷的一种非破坏性检验方法:利用带特殊染料的渗透剂的毛细管渗透作用及毛细管的吸附作用,来检查零件表面的开口缺陷.

无论纺织品染色、生物细胞染色还是着色探伤,染色的目的都是为了突出重点,使聚焦的观察对象从其周围背景中脱颖而出.

4 软件着色测试方案分析

本文的描述基于以下概念:

1)位串是由0和1组成的二进制位序列,表示为B;长度为n的位串B的第i(i∈[1,n])个二进制位表示为B[i].位串对应的十进制整数值,称为位串值.长度为n的位串有2n个可能的取值(或排列形式).

2)数据类型指高级编程语言能接受的标准类型(整型、字符型、浮点型)或用户自定义类型(结构体、共用体、数组、枚举类型),以字母T表示.每种数据类型占据指定位数的存储空间,对应指定长度的位串.

3)以位串为补码转换成指定数据类型的十进制数值,称为位串的等价数据;不同数据类型可能具有相同的存储位数,因此同一个位串可能存在多个不同的等价数据.

4)将十进制数据按其所属类型占用的存储位数,转换成二进制补码形式的位串,称为数据的等价位串.把位串作为补码,按指定数据类型转换为等价十进制整数的过程,称为位串的解析;将十进制数据按其指定类型转换为补码形式的等价位串的过程,称为数据的翻译.

5)测试输入数据包I是由m个不同类型Ti的数据Di组成的有序m元组,数据Di称为I的第i(i∈[1,m])个元素,在存储时需要占用Ri个二进制位.特殊地,若∀i∈[2,m],Ti=Ti-1,称测试输入数据包是等分的.若∃i∈[2,m],Ti≠Ti-1,称测试输入数据包是非等分的,i称为数据包的非等分点,所有非等分点的集合称为非等分集合.

6)测试输入数据包位串B是由测试输入数据包I中m个数据对应的位串Bi,i∈[1,m],首尾连接组成,B=B1B2…Bi…Bm,Bi是第i个子位串,串长为Ri.第1个子位串的起始位置Z1总是1,第i个子位串的起始位置Zi=Zi-1+Ri-1.数据包位串的总串长n=∑Ri(i=1…m)=Rm+Zm-1.

4.1 基本术语定义

为方便描述,定义如下术语:

定义1.位串的划分与合成:一个长度为n的位串B可按照顺序划分为m,m∈[1,n],个长度分别为R1、R2…Rm的子位串Bi,i∈[1,m],n=∑Ri,i=1…m,称子位串Bi是位串B的第i个元素.特殊地,当m=1时,R1=n,子位串B1=B;当m=n时,Ri=1,子位串Bi是单个二进制位;若∀i∈[2,m],Ri=Ri-1,则定义位串B是等分的.m个长度为R1、R2…Rm的位串Bi,i∈[1,m],可按升序合成一个新的位串B=B1B2…Bi…Bm.位串的合成结果是唯一的,但位串的划分结果不唯一,导致位串的等价数据不唯一,因此位串的划分与合成操作不可逆.

定义2.位串间关系:对于长度分别为R1、R2的位串B1与B2,若R1=R2,且∀i∈[1,R1],B1[i]=B2[i],称位串B1与位串B2相等;若R1>R2,且∀i∈[1,R2],B1[i]=B2[i](称B2是B1的前缀)或B1[i]=B2[R1-R2+i](称B2是B1的后缀),或∀i∈[1,R2],∃j∈[1,R1-R2],使得B1[i+j]=B2[i](称B2是B1的中缀),统称位串B1包含位串B2,或位串B2包含于位串B1;若存在长度为R3(R3

定义3.位着色:若一个二进制位取值为0,定义该位着白色;若该位取值为1,定义其着黑色.

定义4.位串灰度G:一个长度为n的位串B1取值V1与等长位串B2各位均取1的位串值V2之比,定义为位串灰度G=V1/V2,G∈[0,1].特殊地,当位串B1各位均取0时,位串灰度G=0,定义位串着白色;当位串B1各位均取1时,位串灰度G=1,定义位串着黑色;当位串B1部分位为0其余位为1时,位串灰度0

定义5.位串双色着色:若位串B中只有特定位置的一个或几个子位串着黑色/白色,剩余子位串全部着相反的白色/黑色,称该位串B是双色着色.

定义6.位串彩色着色:位串中只要有一个子位串的灰度0

4.2 数据包易出错点识别

基于单缺陷假设和边界值测试思想,针对等分数据包和非等分数据包,分别辨识多数据组包传输和读写中的易出错点数据项如下:

定义8.等分数据包差异点:若测试输入数据包I是等分的,收发双方可能存在三种类型匹配错误:1)相同索引的数据元素等价位串长度不相等;2)相同索引的数据元素有符号与无符号类型不匹配;3)收发双方引用数据的索引差1.因数据包I是等分的,在其首尾边界附近最容易发现错误,故定义数据包正序的第1或第2个数据为第一差异点U1,倒数第1个或第2个数据为第二差异点U2.

定义9.非等分数据包差异点 若测试输入数据包I是非等分的,除定义其首尾边界数据为第一差异点和第二差异点外,另将非等分集合中非等分点最小值,即先导同类型数据与异型数据的分界线,定义为临界差异点U3;若非等分集合中存在自定义数据类型(结构体或位段),考虑到收发双方分别自定义结构体时可能存在差异,将非等分集合中每个自定义类型数据定义为特征差异点U4,特征差异点不是唯一的.如果数据包中只有一个自定义类型数据,则只定义一个特征差异点U4,不再定义U1、U2和U3.

4.3 差异点检错能力分析

根据软件研制经验,在数据打包与拆包过程中最容易出现的错误是等分数据包打包与拆包索引差1错误,导致打包前的数据在拆包后受到相邻数据的污染,该错误可以通过第一、第二差异点U1、U2与相邻数据特征的比对来暴露;非等分数据包打包与拆包时容易出现相同索引的数据类型不匹配,导致打包前的数据在拆包后受到相邻或间隔数据的污染,该类错误可以通过临界差异点U3或特征差异点U4与相邻或间隔数据特征的比对来暴露.

根据差异点检错能力分析,若在测试输入数据包中放大差异点数据与其他数据(特别是相邻和间隔数据)的视觉特征落差,则错误更容易捕获.为此引入软件着色测试的概念.

4.4 软件着色测试方案

软件着色测试法[16]把逻辑相关的测试输入数据包划分为焦点对象和周围背景两组,将焦点对象和周围背景采用视觉落差较大的不同颜色着色(赋值).焦点对象是可能出错或容易暴露错误的特殊数据,如测试输入数据包中的差异点或包含差异点在内的部分特征数据;周围背景是输入数据包中除焦点对象外的其他数据集合.

若焦点对象与周围背景之间形成二维平面或三维以上立体结构,称周围背景是全包围的.如多级嵌套结构体,在一个结构体内定义了多个字段,部分字段也是结构体或位段,字段内一个数据与同一字段其他数据和该数据与其他字段之间,形成二维、三维甚至更多维度的关系网.以结构体或位段字段为焦点对象,其他字段作为全包围型的背景,推荐采用彩色着色测试方案,示意如图1所示.

周围背景周围背景焦点对象周围背景周围背景

图1 全包围型周围背景示意
Fig.1 Diagram of full-surrounding neighborhood

若焦点对象与周围背景之间形成线性结构,则称周围背景是半包围的.如数组元素组成的等分数据包,以标准类型(如int、char等)或位段来定义数据元素的无嵌套单层结构体(非等分数据包)等.半包围型的背景分为左邻和右舍,推荐采用双色着色测试方案,示意如图2所示.

左邻焦点对象右舍

图2 半包围型左邻右舍背景示意
Fig.2 Diagram of half-surrounding neighborhood

4.4.1 软件双色着色测试方案

图3 软件双色着色测试流程图Fig.3 Flow chart of software double-color testing

在长度为m的测试数据包I中,以数据包差异点U1、U2、U3、U4为焦点对象,以黑色进行着色;其他数据为左邻右舍或周围背景,以白色进行着色,形成软件双色着色方案.以白色为背景色,软件处理焦点对象得到的输出结果黑色更加容易判读,只要结果中的背景非白色,即可确认数据被污染,方便追踪污染源,最大限度屏蔽未知因素出错对背景数据的影响,降低缺陷定位的难度.

软件双色着色测试流程如图3所示.

4.4.2 软件彩色着色测试方案

在长度为m的测试输入数据包I中,将数据包差异点U1、U2、U3、U4附近指定n(n

软件彩色着色测试流程图如图4所示.

图4 软件彩色着色测试流程图Fig.4 Flow chart of software multi-color testing

4.4.3 软件着色测试方案应用说明

软件双色着色和彩色着色测试方案均可在差异点附近发现索引错误和类型匹配错误等数据收发错误,可视情综合使用.彩色着色方案可用相对较少的用例一次性发现多处缺陷;双色着色方案在发现错误时,缺陷定位更准确.

采用着色法设计用例时,对于第一、第二或临界差异点U1、U2、U3,数据包单个字段往往代表完整物理信息,直接选择单字段为焦点对象,其余数据为周围背景.

而自定义数据类型(结构体/位段)比较复杂,可由多个物理量拼凑而成;一个完整的物理量可能拆成多份,分散在不同或不连续的字段中;表示物理量的数据符号位可能与数值部分隔离等,而特征差异点U4仍以数据包中代表特定物理信息的完整数据为焦点对象,其余数据为周围背景.

5 实验验证

软件着色测试法重点关注数据传输、读写过程是否严格遵照相同的协议来实现,检验数据收发双方对于约定协议的实现是否同步,数据类型解析是否正确,无关数据有没有污染.测试输入值限于数据类型二进制表示范围的上、下限值(所有位全0、全1),不关注物理量的有效功能范围.

理想的着色测试方案能够通过一次着色立即发现并定位缺陷,但是焦点对象的选取和着色方案不同对于缺陷的定位存在一定影响.有些软件缺陷隐藏较深,无法一步到位,需要多次试探着色,不断逼近出错点.当然,通过优化选取焦点对象和着色方案,可能更加高效地定位软件缺陷.

实验方法如下:

1)首先根据数据包是否等分,辨别数据组包协议中的易出错数据点,标识差异点类型和个数.

2)根据差异点性质选择焦点对象,确定采用数据双色着色或彩色着色方案,进行初步着色测试以便暴露缺陷.

3)根据测试结果中的缺陷形式,进一步调整、优化着色方案,递进式发现和定位缺陷.

下面选取实例进行数据着色测试分析:

某型号导引头微波子系统主要由角信号处理组合(J)、微波时延接收组合(W)、信号分选组合(X)等部分组成.J接收W的3个信道A、B、C的固定和可变延迟线.调试计算机通过CAN总线将固定延迟线数码及小直流调节量烧写入J计算机的EEPROM;X通过同步串口BSP向J发送载频码命令,J计算机根据收到的载频码大小(与A、B或C信道之一对应),按照EEPROM存取协议,读出相应信道的固定延迟线数码和小直流调节量,用于改变固定延迟线的控制码,完成回路闭合,解算空间目标角度并调节其输出直流零位,然后经滤波处理后输出.

角信号处理组合计算机软件在EEPROM中使用两个16bit的字来存储固定延迟线数码(1符号位+6数值位,有效取值范围为-10~+9,数据2)和小直流调节量(1符号位+2数值位,有效取值范围为-1~+1,数据1).每个信道的数据分为一组,共A、B、C三组.固定延迟线数码和小直流调节量写入EEPROM中的数据拼装协议定义如图5所示.

字号b15b14b13b12b11b10b9b8b7b6b5b4b3b2b1b01A组数据1A组数据2B组数据1B组数据2200A组数据1符号A组数据2符号B组数据1符号B组数据2符号C组数据1符号C组数据2符号C组数据1C组数据2

图5 数据拼装布局图
Fig.5 Layout of data assembling

图5 A、B组数据1、2的数值均存在第1个双字节的字中,符号位存放在第2个字中;C组数据1、2的数值、符号位均存在第2个字中.其中符号位:0表示正,1表示负.

5.1 经典方法测试设计

根据等价类和边界值分析测试用例设计原则和单缺陷假设思想,本例中的6个输入数据可分别划分为1个有效等价类和1个无效等价类;上、下边界附近各包括2个上点(等于边界值)、2个离点(与边界值差1的无效值)和一组内点(上下边界间的有效值),用例设计如表1所示.

表1 经典方法测试用例设计表Table 1 Classic method test case design table

使用边界值测试法,每个数据至少需要5个测试用例,6个数据至少需要6*5=30个测试用例.使用等价类测试法,由于每个数据存在1个有效等价类和2个无效等价类,需要至少设计3个测试用例,因此,6个数据至少需要6*3=18个测试用例.由于6个数据的内点或有效等价类均可合并在一个用例中测试,测试用例总数可减少5个,因此,实际使用30-5=25(边界值)或18-5=13(等价类)个测试用例即可完成基于需求的功能和鲁棒性测试,验证软件配置项内部的完整处理逻辑是否正确.

5.2 着色法测试用例设计

由数据拼装布局图可见,数据包不等分,6个物理信息均被拆分成符号位和数值两部分,且分散在不连续的字段中.因此,该数据包为自定义位段结构体,只须定义一个特征差异点U4,不再定义U1、U2和U3.如果采用双色着色测试法,焦点对象是6个数据整体,周围背景是第2个字b15和b14的固定值0.通过1个测试用例可观察填充位是否被污染,无法判断6个数据之间是否相互污染,无法充分暴露可能的数据拼装缺陷.

表2 着色法测试用例设计表Table 2 Coloring method test case design table

因此采用彩色着色测试法,A、B、C组各两个数据与其符号位一起可分别当作焦点对象,其余字段当作周围背景,共设计6个测试用例,可通过周围背景是否被污染及污染情况,初步判定可能的拼装缺陷的位置,如表2所示.

如选取测试B组数据1为焦点对象,着色方案如图6所示.

字号b15b14b13b12b11b10b9b8b7b6b5b4b3b2b1b01A组数据1:00A组数据2:000000B组数据1:11B组数据2:000000200A组数据1符号:0A组数据2符号:0B组数据1符号:1B组数据2符号:0C组数据1符号:0C组数据2符号:0C组数据1:00C组数据2:000000

图6 B组数据1着色图
Fig.6 Color graph for datum1in group B

如测试结果B组数据1解析为-3,结果正确;如解析为3,则符号位引用错误;如解析为0、-1或-2,则数值位引用错误;如解析为1或2,则数值位和符号位同时引用错误.

设B组数据1解析为3,为进一步定位错误来源,扩大焦点范围,将数据包除B组数据1之外的剩余29个比特位无差别地轮流置1,直到B组数据1解析为-3止,因此最多增加29个用例即可定位缺陷来源.扩大焦点着色如图7所示.

字号b15b14b13b12b11b10b9b8b7b6b5b4b3b2b1b01A组数据1:00A组数据2:000000B组数据1:11B组数据2:000000200A组数据1符号:0A组数据2符号:0B组数据1符号:1B组数据2符号:1C组数据1符号:0C组数据2符号:0C组数据1:00C组数据2:000000

图7 B组数据1缺陷定位着色图
Fig.7 Color graph for datum1in group B for defect location

5.3 实验结果对比分析

对于本例,假设软件数据收发双方对于B组数据1存在引用符号位不一致的错误.为了发现并准确定位该缺陷,应排除数据包中无关字段可能造成的干扰,最佳方案之一是将B组数据1赋值为-3(其次是同时设计两个测试用例,分别赋值为-1和-2,二者互补地排除该数据内部两个数值位对符号位的干扰)、其余数据赋值为0,由于从内点或等价类集合中选取任一数值的概率相等,且不同数据的赋值相互独立,满足方案的测试数据赋值概率等于B组数据1为-3(加上分别赋值为-1和-2)、A/C组数据1及A/B/C组数据2为0的概率P0.

如果使用着色法,只需彩色着色测试方案中的全套6个测试用例,就可发现错误,错误检出率P0=1/6=16.7%.根据5.2节分析,最多35(=6+29)个测试用例即可确定缺陷位置,缺陷定位率P1=1/35=2.9%,工作量仍在可接受范围,因此表明软件着色测试技术在发现数据通信拼装缺陷方面具有明显的特异性和高效性.

表3 实验结果对比表Table 3 Comparison table for experiment result

着色法与等价类、边界值分析法的实验结果对比如表3所示.

6 结束语

软件着色测试法是对经典测试方法在多数据组包传输和读写领域的增强,通过将通信协议输入数据包划分为焦点对象与周围背景并分别着色,消除了周围背景对焦点对象的干扰,有助于发现软件处理焦点对象可能引入的缺陷,解决了数据收发、存取双方未严格遵循协议导致的漏测问题.

本文研究成果具有理论和工程的重要意义:

1)理论意义:首次将其他领域广泛应用的着色技术引入软件测试领域,系统地解决了因相邻或相隔数据误用而导致软件处理缺陷的测试方法问题,后续研究中将进一步扩大该方法的适用范围.

2)工程意义:软件着色测试法来源于航空航天高安全型号软件测试经验,在多数据组包存储、传输的场合,解决数据错位取用类缺陷的暴露和定位方法问题,对软件测试工程实践有较强的指导意义.

猜你喜欢

测试用例着色数据包
基于相似性的CITCP强化学习奖励策略①
二维隐蔽时间信道构建的研究*
蔬菜着色不良 这样预防最好
测试用例自动生成技术综述
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
苹果膨大着色期 管理细致别大意
C#串口高效可靠的接收方案设计
10位画家为美术片着色
测试工时受限的测试策略研究
给地图着色