一种基于数据流/控制流+知识条目的回归影响域分析方案

2019-10-18 07:52左万娟虞砺琨王小丽
测试技术学报 2019年5期
关键词:控制流数据流分析方法

左万娟,虞砺琨,黄 晨,王小丽

(1.北京控制工程研究所,北京 100190;2.北京轩宇信息技术有限公司,北京 100190)

0 引 言

回归测试是指被测单元、部件、配置项和系统因各种原因进行更改后的再测试[1],是一种用来保证各种针对软件的改动不会带来不可预测的行为或者另外错误的测试活动[2],目的是重新验证一个系统或部件被修改后有没有造成不期望的副作用,是否仍然符合它的需求规格说明[3].

统计数据表明,回归测试占软件维护费用的50%以上[4],大约30%的错误都是通过回归测试发现的[5].从成本、效率角度出发,工程实践中,回归测试通常选用基于回归影响域分析的测试策略.但是,采用该策略的回归测试质量严重依赖于影响域分析的充分性,影响域分析不到位将直接导致回归测试遗漏.因此,回归影响域分析技术成为回归测试的瓶颈技术.

目前,针对回归影响域分析技术的研究,就其研究本质而言,更多地还是基于数据流/控制流的研究.董燕等[6]从控制结构算法更动、逻辑更动、参数更动等方面对基于代码更动的影响域分析方法进行了研究,提出了各类更动的分析方法和原则,并将其应用于航天嵌入式软件,取得了良好的效果;杨贞祥、王德敏等[7,8]对基于控制流和数据流的更动影响域分析方法进行了研究,阐述了分析原理,提出了分析操作步骤;杨波等[9]针对基于变量自身变化和变量间依赖关系的变量行为模型开展了研究,提出了一种基于变量影响分析和数据变异的回归测试用例方法;侯成杰[10]针对航天器软件参数修改的影响域分析方法进行了研究,提出基于程序需求覆盖矩阵和测试用例-需求覆盖矩阵的回归测试方法;程晓菊、陈永郑等[11,12]针对如何利用函数切片获取代码更动影响域进行了研究.以上研究,基本都是针对代码更动的回归影响域分析研究,多数研究成果较为抽象,缺乏工程实例.另外,针对需求更动的回归影响域分析,研究较少.

本文从工程实例出发,在已有研究成果的基础上,对基于数据流/控制流的回归影响域分析方法进行了进一步地分析和总结.另外,针对需求更动的影响域分析,提出了解决方案.

1 基于数据流/控制流的回归影响域分析方法

基于数据流/控制流的影响域分析,顾名思义,是以“流”为牵引,开展回归影响域分析.其技术特点在于分析所有线索,技术难点在于如何保证数据流/控制流分析的全面性和彻底性.

1.1 名词解释

对本节用到的名词解释如下:

基础流:指代码更动直接作用的流.

变异流:指通过变量赋值、函数调用过程中的参数传递等操作与基础流之间建立了依赖关系的流.

1.2 实例分析

以一个第3方评测的典型案例作为分析实例,对基于数据流/控制流的影响域分析方法加以阐述.

1.2.1 更动说明

在第3方评测的首轮确认测试中,评测方提出了如下代码设计缺陷:代码针对接收数据长度未采取限幅、或上限判断处理等保护设计,如果长度超限将导致后续处理中数组访问越界.

回归时的代码更动如图1所示.

图1 修改前后代码对比图

如图1所示,代码修改后,针对接收数据长度STS.RecLen(基础流)增加了限幅保护设计,限幅值设定为130.

1.2.2 影响域分析

针对上述代码更动,经影响域分析发现,限幅值设计不当,仍然存在局部数组变量写访问越界问题.具体回归影响域分析过程如表1所示.

1.2.3 问题更正

设计方针对问题代码进行了进一步修改,将长度限幅值设定为100,从而有效避免了局部数组RecBuf[100]写访问越界问题.

表1 影响域分析过程说明表

1.3 分析方法小结

针对基于数据流/控制流的回归影响域分析而言,如何保证分析的全面性和彻底性是其最突出的技术难点.通过实例分析,总结基于数据流/控制流的回归影响域分析方法的要点为:

1) 根据代码更动,以工具为辅助,识别基础流.

2) 追踪并分析基础流,在此过程中,根据变量赋值、函数调用过程中的参数传递等操作识别变异流.

3) 追踪并分析变异流.

4) 对基础流和变异流务必追踪到底.

实例分析证明,引入并加强对变异流分析,可以从一定程度上解决基于数据流/控制流的回归影响域分析的全面性和彻底性问题.

2 基于知识条目的回归影响域分析方法

基于数据流/控制流的影响域分析,仅适用于代码更动的影响域分析,无法确认代码更动是否完全覆盖了需求更动.下面通过代码更动遗漏实例分析,给出需求更动影响域分析方案,即,采用基于知识条目的回归影响域分析方法.

2.1 代码更动遗漏实例分析

下面是一个代码更动未覆盖需求更动的影响域分析遗漏的实例.

2.1.1 问题说明

版本升级后的测试中,向下位机(RT端)软件输入1553B总线自检指令后,上位机(BC端)软件未能读取到下位机软件输出的自检结果,通讯失败.

2.1.2 问题分析

根据需求,下位机软件(RT端)在收到1553B总线自检指令后,应通过发送子地址5输出自检结果.前期版本的测试结果表明,发送子地址5通讯正常,即,软件实现满足需求.由此可见,问题是由版本升级引起的.

版本升级过程中,发生了需求变更,具体变更内容为:软件在收到1553B总线自检指令后,输出自检结果由1个字改为3个字.

代码随之更动,在收到1553B总线自检指令后,通过发送子地址5输出的自检结果由1个字改为3个字.

但是,由于发送子地址5的命令非法表设置仍保持为版本升级之前的状态,即,1字通讯合法状态,未根据需求更动进行修改,因而导致发送子地址5命令非法表的设置与变更后的通讯协议(3字通讯状态)不符,最终导致发送子地址5通讯异常.

综上,问题发生的根本原因是:子地址的命令非法表设置与协议要求的子地址通讯长度不匹配.

2.1.3 问题更正

设计方针对问题代码进行了修改,将发送子地址5的命令非法表设置为3字合法.更正后的代码顺利通过测试.

2.1.4 代码更动遗漏原因分析

针对版本升级时的需求更动(子地址输出长度由1字改为3字),回归影响域分析不到位,仅针对子地址输出的相关代码进行了修改,未分析出代码应同步修改子地址命令非法表的初始设置,导致代码更动未覆盖需求更动.

2.2 代码更动遗漏解决方案

上述实例中因需求更动而引入的代码更动的显著特点是:子地址输出与子地址命令非法表设置之间没有“流”做牵引,即,二者在“流”上完全独立,无法通过基于数据流/控制流的影响域分析来识别问题.

这种独立于数据流/控制流的代码更动,基于一定机理对代码执行结果产生了影响.为解决此类因需求更动而引入的独立于数据流/控制流的代码更动的影响域分析不足问题,可以采用基于知识条目的回归影响域分析方法.

2.3 基于知识条目的回归影响域分析方法

基于知识条目的回归影响域分析方法,是指针对需求更动,基于知识条目,开展影响域分析.即,此类分析,需要掌握一定的“知识”,否则,将导致影响域分析遗漏.

本节遗漏实例的影响域分析所需的知识条目为:当1553B总线某子地址通讯长度发生变化时,应分析子地址命令非法表的初始设置与通讯长度是否匹配.

可见,为确保基于知识条目的回归影响域分析的顺利开展,需要确保知识条目的完备性.

由于回归影响域分析所需要的知识条目是发散的,一般都需要从需求更动中识别,因此,有必要对此开展专门的研究、分析和总结,建立基于知识条目的回归影响域分析检查单,作为基于知识条目的回归影响域分析方法的应用支撑.表2 给出了相应的示例.

表2 基于知识条目的回归影响域分析检查单示例表

3 两种方法的对比分析

针对基于数据流/控制流的影响域分析方法和基于知识条目的影响域分析方法,进行对比分析如表3所示.

表3 两种方法的对比分析

4 基于数据流/控制流+知识条目的回归影响域分析方案

通过对两种影响域分析方法的对比分析可知,两种方法特点鲜明、且具有一定的互补性,在回归测试过程中,引入基于知识条目的影响域分析方法,可以对基于数据流/控制流的影响域分析方法形成必要的补充,二者的有效结合,可以确保回归影响域分析的充分性,解决回归影响域分析不足的瓶颈性问题,由此形成基于数据流/控制流+知识条目的回归影响域分析方案.同时覆盖代码更动影响域分析和需求更动影响域分析,是该方案的突出特点.

目前,在空间飞行器软件检测站,已经采用了基于数据流/控制流+知识条目的回归影响域分析方案开展回归测试,并借鉴代码审查过程中代码检查单的有效运用,分别针对基于数据流/控制流的回归影响域分析方法和基于知识条目的回归影响域分析方法建立了相应的回归测试检查单,并将其作为回归测试过程的关键检查点,从而有效提升了回归测试质量,避免了因影响域分析不足而导致的回归测试遗漏.

5 结束语

目前,基于数据流/控制流的影响域分析方法仍然是回归影响域分析的主流方法.但是,不可否认的是,基于知识条目的回归影响域分析方法,对基于数据流/控制流的回归影响域分析方法形成了有效的补充,从一定程度上解决了回归影响域分析不足的瓶颈问题.为确保基于知识条目的回归影响域分析方法的有效运用,后续仍需加强研究,逐步形成完备、有效的知识库体系,并在此基础上开展工具研发,提升回归测试效率.

猜你喜欢
控制流数据流分析方法
基于EMD的MEMS陀螺仪随机漂移分析方法
抵御控制流分析的Python 程序混淆算法
汽车维修数据流基础(上)
抵御控制流分析的程序混淆算法
一种角接触球轴承静特性分析方法
汽车维修数据流基础(下)
基于控制流的盒图动态建模与测试
中国设立PSSA的可行性及其分析方法
基于Petri网数据流约束下的业务流程变化域分析
基于数据流聚类的多目标跟踪算法