作者:左万娟


摘要:结合实例对基于数据流/控制流的回归影响域分析方法进行了阐述,总结了分析要点,强调加强变异流分析以确保分析充分性。针对需求更动,提出了基于知识条目的回归影响域分析方法。对两种分析方法进行对比分析,提出一种基于数据流/控制流+知识条目的回归影响域分析方案。实践证明,基于知识条目的分析方法可以对基于数据流/控制流的分析方法形成有效的补充,从而对回归测试的充分性形成有效的保证。


关键词: 数据流;控制流;知识条目;回归测试;影响域分析

 

引言

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

 

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

 

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

 

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

 

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


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

 

1.1名词解释

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

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

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

 

1.2实例分析

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


a.  更动说明

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

回归时的代码更动如下图所示:

1  修改前后代码对比图(左侧:修改后,右侧:修改前)

Fig.1  Code comparison diagram before and after modification (left: after, right: before)

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


b.影响域分析

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



c.   问题更正

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


1.3分析方法小结

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

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

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

c.追踪并分析变异流。

d.对基础流和变异流务必追踪到底。

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

 

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

 

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

 

2.1代码更动遗漏实例分析

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

a.问题说明

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

b.问题分析

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

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

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

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

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

c.      问题更正

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

d.      代码更动遗漏原因分析

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

 

2.2代码更动遗漏解决方案

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

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

 

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

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

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

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

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

 

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

Tab.2 A sample table of checklist for regression influence domain analysis based on knowledge items


两种方法的对比分析

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


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

 

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

 

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


结束语

 

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



参考文献:

[1] 闫字华,李谊,黄宁等.军用软件测评实验室测评过程和技术能力要求[s].北京:总装电子信息部,2005:26-28

[2] Pressman RS.软件工程一实践者的研究方法.北京:机械工业出版社,1999.

[3] IEEE.Standard glossary of software engieering terminology[s].New York:IEEE Std,1990

[4] Srivastava A, Thiagarajan J. Effectively prioritizing tests in development environment//Proceedings of the 2002 ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA’02).New York,USA,2002:97-106

[5] Rothermel G,Harrold M.Analyzing regression test selection techniques[J].IEEE Transactions on Software Engineering,1996,22(8):529-55l

[6] 董燕,侯成杰,邱芳.一种基于更动影响域分析的回归测试方法[J].空间控制技术与应用,2013,39(4):49-53

DONG Yan, HOU Chengjie, QIU Fang. A Regression Testing Method Based on the Analysis of the Change of Domain[J]. Aerospace Control and Application, 2013,39(4):49-53 (in Chinese)

[7] 杨贞祥,赵兴奋,贺虎林.基于控制流和数据流分析的软件回归测试设计[J].电子科学技术,2016,3(6):742-745

YANG Zhenxiang, ZHAO Xingfen, HEHulin. Regression Testing of Software Based on Control-flow and Data-flow Analytic Procedure[J]. Electronic Science & Technology, 2016,3(6):742-745 (in Chinese)

[8] 王德敏.基于影响域分析的软件回归测试设计[J].电子测试,2017,22:36-37

Wang Demin. The influence domain analysis software design based on regression test[J].Electronic Test, 2017,22:36-37 (in Chinese)

[9] 杨波,吴际,刘超.基于变量影响分析与数据变异的回归测试用例生成[J].计算机学报,2016,39(11):2372-2387

YANG Bo, WU Ji, LIU Chao. An Approach of Regression Test Case Generation Based on Variable Impact Analysis and Data Mutation[J]. Chinese Journal of Computers, 2016,39(11):2372-2387 (in Chinese)

[10] 侯成杰.航天器软件参数修改的测试策略研究[J].航天器工程,2016.22(3):126-129

HOU Chengjie. Research on Testing Strategy for Parameter Change in Spacecraft Software[J]. Spacecraft Engineering, 2016.22(3):126-129 (in Chinese)

[11] 程晓菊,李仁发.基于函数切片的嵌入式软件回归测试研究[J].计算机工程,2012.38(2):54-56

CHENG Xiaoju, LI Renfa. Study of Embedded Software Regression Test Based on Function Slice[J]. Computer Engineering, 2012.38(2):54-56(in Chinese)

[12] 陈永郑,李龙澍.基于程序切片技术的回归测试方法研究[J].计算机技术与发展,2007.17(12):113-115

CHEN Yong-zheng, LI Longshu. Regression Testing Based on Program Slicing[J]. Computer Technology and Development, 2007.17(12):113-115(in Chinese)




-End- 




2020年02月03日

航天科技集团九院13所与轩宇信息公司就数字质量工作和激光单向传输产品进行座谈交流
口罩故事:打赢防控阻击战,轩宇信息在行动

上一篇

下一篇

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

本网站由阿里云提供云计算及安全服务 Powered by CloudDream