软件集成测试平台的研究与设计

2018-08-17 03:18
计算机工程与设计 2018年8期
关键词:测试用例部件对象

王 影

(中国航发商用航空发动机有限责任公司 设计研发中心控制系统部,上海 201108)

0 引 言

机载软件适航标准DO-178C定义了基于需求的三级测试:低层测试、软件集成测试和软硬件集成测试。其中基于需求的软件集成测试确保软件部件之间正确交互,且同时满足软件需求和架构。通过持续集成软件部件,集成测试对象从单一部件、多部件集成到所有部件全集成,不断扩展测试用例和覆盖需求的范围,实现软件集成测试。在集成测试过程中,测试对象输入、输出接口动态变化,软件集成测试平台需要针对不同测试对象筛选适用的测试输入,同时输出有效测试结果进行记录和判读。

目前软件集成测试技术研究热点较多地集中在软件集成测试序列选择和优化[1-7]、面向行为编程中的集成测试策略[2,8]、集成测试自动化[9]等专题。在软件集成测试平台方面,主要侧重于构建专用系统的测试平台;对于建设通用的集成测试平台面临的测试对象外部接口动态匹配问题[10],关注相对较少。

1 软件集成测试概述

软件集成测试的对象是架构设计的结果,即软件部件;在软件架构中,每个部件的输入、输出接口相对部件自身而言均为外部接口。如果测试对象包含多个部件,其外部接口不能简单地等同于各部件输入、输出接口的并集,而应将这些部件之间的接口当作内部接口;即使测试用例包含对应内部接口的输入数据,也不应接收并处理,否则会影响集成测试对象整体功能的正确性。

根据测试对象颗粒不同,软件集成测试分为三级,其输入、输出接口分别定义如下:

(1)部件测试[11]的对象是单个部件,其外部输入、输出接口直接由软件架构设计产生。

(2)多部件局部集成测试的对象是两个以上部件组合的软件半成品,部件之间的接口作为其内部接口,应互相采用关联部件的输出作为有效输入;在识别并屏蔽测试对象内部接口后,计算得到多部件局部集成测试对象的外部输入、输出接口。

(3)所有部件全集成的配置项测试的对象是完整的软件产品,其外部接口的计算方法原理上等同于多部件局部集成测试,结果与软件配置项的外部输入、输出接口等价,因此可将“所有部件全集成测试”作为选项提供给测试人员,以消除采用多部件局部集成测试方案时计算测试对象外部接口的时间,提高执行效率。

由于软件部件集成次序无法预测,因此软件集成测试需要解决测试对象外部接口动态变化的问题。理想的软件集成测试平台应能采用稳定不变的用例格式,利用架构设计定义的单部件输入输出接口,自动计算多部件集成测试对象的内、外部接口;然后屏蔽多部件集成测试对象的内部输入接口,断开其与测试用例输入的关联;选择性接收测试用例中与测试对象外部输入接口关联的数据进行刷新;从测试结果过滤掉测试对象的内部输出接口,只记录测试对象外部接口的实际输出。本文尝试提出一种满足以上要求的通用软件集成测试平台解决方案。

2 软件集成测试平台设计流程

2.1 静态登记所有全局变量和软件部件的基本信息

为每个全局变量和软件部件分别构造变量信息结构体和部件信息结构体:

(1)变量信息结构体由4部分组成,包括①为变量分配的全局唯一的编号;②变量名称;③变量类型;④与变量实体的关联(指针、超链接)。

(2)部件信息结构体由两部分组成,包括①为部件分配的全局唯一的编号;②部件名称。在以上两种结构体中:①编号是检索变量/部件的关键字;②名称仅为变量/部件的助记符,无实际意义;③变量类型是将变量综合结构体与变量实体建立关联的重要辅助信息;④与变量实体的关联是为了将被测软件中定义的全局变量与测试平台中定义的变量信息结构体建立超链接关系,使得测试平台能够实时监控和间接获取软件执行过程中相应全局变量的刷新。

2.2 为各全局变量自动构造一个专用的变量综合结构体

变量综合结构体包括变量信息、是否各部件输入、是否各部件输出等内容:

(1)变量信息:由变量信息结构体构成。

(2)是否各部件输入:为所有部件逐个标记变量综合结构体所关联变量是否为该部件输入接口。

(3)是否各部件输出:为所有部件逐个标记变量综合结构体所关联变量是否为该部件输出接口。

2.3 为每个软件部件自动构造一个专用的部件综合结构体

部件综合结构体包括部件信息、部件输入集、部件输出集等内容:

(1)部件信息:由部件信息结构体构成。

(2)部件输入集PARTiSET(IN):通过遍历所有全局变量对应的变量综合结构体,为所有部件筛选出隶属于该部件的原始输入接口,以变量信息结构体表示。

(3)部件输出集PARTiSET(OUT):通过遍历所有全局变量对应的变量综合结构体,为所有部件筛选出隶属于该部件的原始输出接口,以变量信息结构体表示。

2.4 确定各部件输入接口的刷新准则

将所有软件部件划分为测试对象和非测试对象两类,然后以单个部件为调度单位,在部件被调度前根据该部件①是否属于被测试对象;②是否单部件测试对象;③是否多部件集成测试对象等因素,确定是否刷新、如何刷新每个部件的输入接口:

(1)对于非测试对象的部件,不以测试用例数据刷新其输入接口,直接采用关联部件运行的相关输出作为其输入。

(2)对于单部件测试对象,直接以测试用例数据使用软件架构设计的部件外部接口刷新控制测试用例输入和测试结果输出,刷新该部件的所有输入接口。

(3)对于多部件集成测试对象,首先动态识别多部件集成时部件之间的内部接口,内部接口所对应的输入不通过测试用例进行刷新,而通过与其直连的被测部件实时计算得到的相关输出接口数据进行刷新,实现关联多部件的集成效果;然后通过排除法计算得出每个被测部件相对于整个测试对象的外部输入接口,通过测试用例的输入数据进行刷新。

3 软件集成测试平台详细设计

为便于说明问题且不失一般性,假设软件架构设计定义4个部件A、B、C、D,部件之间及其与外部输入、输出数据源的数据交互关系如图1所示。

义,要在软件集成测试中间接计算其输入、输出接口。如果手工计算,可能需要对软件集成测试平台修改10次以上,才能动态适应测试对象输入、输出接口的变化。

以图1部件A、C集成测试为例,测试对象输入为a,输出为c、f。d虽是部件A的输出、C的输入,但部件A、C同属测试对象,d为内部接口,应将部件A的计算结果通过变量d传给部件C,而不应通过测试用例给部件C注入数据d;在软件集成测试过程中如未正确屏蔽该变量的外部输入,会影响部件A、C集成测试结果的正确性。

针对软件集成测试对象动态变化导致测试输入、输出接口伴随性变化的问题,本文提出一种根据测试对象的部件组成自动筛选有效外部接口的解决方案。

3.1 建立各部件输入输出接口与软件变量之间的关联

首先,依据软件架构的定义,对变量统一编号,作为变量检索的关键字。本文将部件间接口统一以全局变量来简化描述,建立全局变量与各部件输入输出接口之间的从属关系见表1。

然后,对部件统一编号,作为部件检索的关键字。以部件为中心,通过检索“变量与部件接口的从属关系表”,得到各部件包含的原始输入集PARTiSET(IN)和原始输出集PARTiSET(OUT),其中i代表部件编号,自动建立各部件输入输出接口与全局变量之间的关系见表2。

表1 变量与部件接口的从属关系

表2 部件接口与全局变量的关系

3.2 计算测试对象中所有部件输入、输出变量集的并集

计算测试对象中所有软件部件输入集PARTiSET(IN)的并集PARTSUNION(IN)和输出变量集PARTiSET(OUT)的并集PARTSUNION(OUT)。PARTSUNION(IN)和PARTSUNION(OUT)中不允许存在重复变量,二者的计算方法相同,以PARTSUNION(IN)为例进行说明,如图2所示。

图2 计算测试对象输入集并集的算法

3.3 计算测试对象各部件输入集与其它部件输出集的交集

为简化描述,假设各部件自身的输入集变量与输出集变量完全无交集。计算测试对象内部各部件输入集与其它部件输出集交集PARTINTERSEC(IN-OUT)的方法为:循环判断测试对象中一个部件输入集中的变量是否同时存在于其它部件的输出集中,即从测试对象中轮流取出一个部件X,如果部件X输入集中某变量w同时存在于测试对象中其它任意部件的输出集中,则将w加入结果集PARTINTERSEC(IN-OUT)。计算过程如图3所示。

图3 计算测试对象所有部件输入输出变量集交集的算法

以上算法消除了PARTINTERSEC(IN-OUT)中可能存在的重复变量,提高了后续步骤的算法的效率。

3.4 计算测试对象整体输入、输出变量集

将测试对象作为整体,其外部输入变量集SET(IN)和外部输出变量集SET(OUT)的计算方法为:从测试对象输入集并集PARTSUNION(IN)和测试对象输出集并集PARTSUNION(OUT)中,分别减去被测部件之间输入输出变量集的交集PARTSINTERSEC(IN-OUT),即可得到测试对象整体的输入变量集SET(IN)和输出变量集SET(OUT)。测试对象外部输入接口对应为SET(IN)=PARTSUNION(IN)-PARTSINTERSEC(IN-OUT),外部输出接口对应为SET(OUT)=PARTSUNION(OUT)-PARTSINTERSEC(IN-OUT)。SET(IN)和SET(OUT)的计算方法相同,以SET(IN)为例进行说明,如图4所示。

图4 计算测试对象外部输入集的算法

在明确测试范围中包含的部件之后,测试平台将测试对象的外部输入接口SET(IN)和外部输出接口SET(OUT)计算结果通过控制台(屏幕)反馈给测试人员,以提醒其按照测试对象的外部输入接口正确地注入测试用例,高效地判读测试结果。

3.5 计算被测部件的外部输入变量集

测试对象中各被测部件的有效外部输入变量集REALSET(IN)的计算方法为:从被测部件输入集PARTiSET(IN)中,减去所有被测部件之间输入输出变量集的交集PARTSINTERSEC(IN-OUT),即可得到被测部件的有效外部输入变量集REALSET(IN)=PARTiSET(IN)-PARTSINTERSEC(IN-OUT)。计算方法如图5所示。

图5 计算被测部件同步测试的输入集REALSET(IN)算法

测试对象中每个软件部件被调度执行前,通过测试用例中的输入数据保持或刷新部件有效外部输入接口REAL-SET(IN)中的所有变量;测试对象内部接口对应的变量不处理,直接使用关联部件的输出值进行刷新。

4 集成测试应用说明

参照本文的软件集成测试平台通用设计方案,在完成软件架构设计后即可搭建软件集成测试平台:

(1)在软件部件未完成设计前,以软件架构定义的部件原型构建占位的桩函数,形成被测软件初始框架,构建完整的软件集成测试平台(含测试对象内部、外部接口识别算法);

(2)当启动软件集成测试时,以真实的软件部件陆续取代占位的桩函数,重新编译测试平台,即可执行软件集成测试。随着软件集成的深入,软件集成测试颗粒度、测试对象不断变化;但对集成测试环境而言,除了直接以软件部件替换桩函数外,丝毫不必做其它改动。

如果软件配置项的所有部件已集成为一体,则可基于软件配置项直接构建软件集成测试环境。此环境不做任何修改,即可支持从单部件、多部件局部集成到软件产品全集成的测试活动,测试人员只须选择测试对象、注入测试用例,不须关注测试对象外部接口的任何变化,即可得到测试对象的准确执行结果。

5 实例分析

某型号航空发动机健康监视装置(EMU)软件包含“模式选择”和“指示”等功能部件,其中模式选择部件根据输入条件(模式选择开关组合 “S4 S3 S2 S1”)来判断并输出EMU设备的工作模式,其输入、输出接口的映射关系见表3。

表3 模式选择部件输入输出映射

上表中S1~S4为组合中的位,其中每位取值为“1”或“0”,X代表“1”或“0”。

指示功能工作在模式3下,软件在EMU工作的全部时间内向试车台发送“振动速度等级”数据用于指示,其取值范围见表4。

表4 指示信息取值范围

指示部件输入、输出接口的映射关系见表5。

如果只考虑“模式选择”和“指示”这两个功能部件,测试用例为两个部件输入接口的并集,见表6。

5.1 模式选择部件测试

针对模式选择部件进行单部件测试,设计并执行测试用例见表7。

表5 指示部件输入输出映射

表6 测试用例输入接口

表7 模式选择部件测试输入与实测输出对照

以上测试用例输入的“EMU工作模式”值3并未影响到实测按照模式选择开关组合“S4 S3 S2 S1”计算输出的“EMU工作模式”数值0,结果正确。

5.2 指示部件测试

针对指示部件进行单部件测试,设计并执行测试用例见表8。

表8 指示部件测试输入与实测输出对照

以上测试用例输入的“EMU工作模式”值3直接影响到实测“振动速度等级”的输出,模式选择开关组合“S4 S3 S2 S1”并未影响“EMU工作模式”数值,结果正确。

5.3 模式选择与指示部件集成测试

针对模式选择和指示部件进行多部件集成测试,设计并执行测试用例(该用例执行的前提条件是振动速度等级输出值=5)见表9。

表9 指示部件测试输入与实测输出对照

在模式选择和指示部件集成后,“EMU工作模式”成为部件集成后的被测对象的内部接口,测试用例输入的“EMU工作模式”值3被软件集成测试平台屏蔽,通过计算模式选择开关组合“S4 S3 S2 S1”得到的“EMU工作模式”值0,作为指示部件的输入来控制其执行,结果实测“振动速度等级”的输出保持前值5,未按照当前用例输入值7误刷新,结果正确。

6 结束语

为了解决软件测试对象持续集成诱发外部接口变化而对测试环境提出的动态匹配问题,本文提出了一种软件集成测试平台通用设计方案。基于软件架构对各部件接口的定义,统一采用所有部件输入接口的并集作为测试用例输入接口。在软件部件集成测试过程中,根据测试对象的动态变化,轮流计算测试对象中每个部件输入接口与其它被测部件输出接口的交集,汇总得到测试对象的内部接口;然后计算测试对象中所有部件输入接口和输出接口的并集,分别从中去除测试对象的内部接口,得到测试对象的外部输入、输出接口。测试对象内部接口视同非被测部件的外部接口,从测试的视角进行屏蔽;测试对象外部接口作为软件集成测试的控制主体,其输入接口实时接收测试用例中的关联数据进行刷新,其输出接口作为判读测试结果正确性的数据源进行记录和分析。该方案支持测试对象从单部件、多部件集成到整个软件产品配置项的动态持续集成。软件集成测试过程中测试环境维护成本可基本消除,提高了集成测试的整体效率。

猜你喜欢
测试用例部件对象
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
回归测试中测试用例优化技术研究与探索
加工中心若干典型失效部件缺陷的改进
判断电压表测量对象有妙招
基于SmartUnit的安全通信系统单元测试用例自动生成
奥迪e-tron纯电动汽车的高电压部件(下)
基于Siemens NX和Sinumerik的铣头部件再制造
攻略对象的心思好难猜
区间对象族的可镇定性分析
基于依赖结构的测试用例优先级技术