田 峰 丁文锐 李红光
(北京航空航天大学 无人驾驶飞行器设计研究所,北京 100191)
李新军
(北京航空航天大学 机械工程及自动化学院,北京 100191)
一种无人机飞行控制管理软件回归测试方法
田 峰 丁文锐 李红光
(北京航空航天大学 无人驾驶飞行器设计研究所,北京 100191)
李新军
(北京航空航天大学 机械工程及自动化学院,北京 100191)
针对大型嵌入式软件测试的难题,提出了基于系统快照的自动化回归测试方法,并以无人机飞行控制管理软件为研究案例进行了关键技术解析、测试系统设计及分析.利用系统快照技术实现了彼此之间关系繁杂的测试用例的解耦,将复杂的系统测试转化为灵活的单元测试.结合CPPUnit的测试框架,建立了自动化回归测试的系统结构,并深入分析了各部分的功能和执行过程.进而设计出基于系统快照的自动化回归测试执行流程和测试用例的编制流程.给出了某型无人机飞行控制管理软件在不同方法下的测试结果,通过数据对比验证了测试系统的高有效性.
软件测试;自动化测试;系统快照;解耦;飞行控制管理
随着计算机技术的迅猛发展和应用,软件的可靠性测试成为一个重要的研究领域,很多测试方法与工具[1]也应运而生.受系统结构、测试周期及费用等因素影响,大型嵌入式软件的测试成为软件测试领域中的研究难点.
嵌入式软件测试大体包括两种方法:①将软件剥离构建数字平台进行测试[2],但大型软件的剥离测试会面临后期测试用例安排复杂的问题;②在半实物仿真环境进行闭环测试[3],该方法虽然真实、直接,但是构建大型嵌入式软件自动化测试环境的复杂度、费用和周期都是无法接受的.
回归测试是软件测试中十分重要的部分.当软件出现发展性的改变(即规范和代码发生变化)或修正性改变(只有代码发生变化)时,它用来确保软件在改动后的测试可信性问题[4-5].
为了提高测试效率和保证测试的可靠性,自动化回归测试成为软件测试的发展趋势.比较成熟的方法有基于数据驱动的回归测试[6]和基于GUI图形界面的回归测试[7].现有的 Win Runner,Silk Test等测试工具可以对GUI进行冒烟测试和回归测试,但不能完成对大型嵌入式软件的自动化测试.
本文以某型无人机飞行控制管理软件测试作为研究案例,利用系统快照的方法对大型嵌入式软件的自动化回归测试技术方案进行了研究.
首先,分析飞行控制管理软件的特点:①通常时间紧任务重,很多工作并行进行,新研技术众多,即便在飞行控制管理软件系统测试完成后,也不得不经常修改;②飞行控制管理软件复杂,模块之间交联众多,一处的修改极易影响系统的其他功能;③半实物仿真系统是分布式系统,使得自动化测试平台的搭建异常困难,成本极高;④测试用例庞大,每个用例都依赖于系统状态.每轮软件测试必须通过精心安排用例组合,才能减少模拟飞行次数缩短测试时间.一轮完整的测试需要数个星期.如果每次回归测试通过人力在半实物仿真平台上做全用例的测试,就面临测试时间长、人力成本高的问题,而只针对修改部分进行测试,又可能给系统埋下隐患.
针对上述分析,受特点③影响,本方案必须避免复杂而昂贵的半实物环境仿真,采用软件剥离的思路.在测试方法上,本方案利用系统快照技术来解耦关系复杂的测试用例,使被测软件独立出来,旨在解决特点②和④所述的测试用例庞大且耦合复杂的难题.最后,由于特点①所述的时间和效率要求,在测试用例解耦的基础上,本方案要将复杂的系统软件测试分解为独立的单元测试,并进一步设计出自动化回归测试平台.
综上特点分析,将飞行控制管理软件剥离出来,构建数字仿真测试环境是可行的.虽然无法实现硬件接口测试、实时性测试等项目的测试,但后期修改多属于功能性修改,通过功能回归测试完全可以发现绝大部分的问题,而且通过黑盒式系统快照的构建,能够解耦测试用例,使得构建用例成本低廉、测试快速.故这是一种成本和性能的综合优化方案.
所谓系统快照[8]就是系统内存状态的记录或“拍照”.被测软件运行到待测点时,自动记录当前的系统快照,测试用例仅以系统快照为输入,避免了与其他测试用例的耦合.这样就实现了测试用例之间的解耦,将复杂的系统测试转化为多个独立的单元测试,极大地提高了系统测试的效率.
在众多的软件自动化测试方法中几乎没有用到系统快照的技术.作为系统实现的关键技术,非常重要的一点就是现实系统快照建立的黑盒性.如果通过修改组件代码来实现快照的建立和恢复,一方面原系统需要重新设计快照代码,而这些代码只对测试有用;另一方面系统数据的修改就会导致快照建立代码的改变,不利于维护.
为了实现黑盒的特性,本文做了两个重要设计:①系统快照数据和其他数据的分离:通过将系统快照相关数据按照功能封装成dll,使得快照数据和主程序数据实现了内存的隔离,具体剥离情况见3.1节;②堆数据的重定向:从内存中数据组织方式来看,动态分配的数据在系统堆中,局部变量分布在栈中,而全局数据、静态数据则分布在可执行文件的数据节中.因为一个调度周期后,系统栈中没有系统快照相关数据,可以不用存储,但是堆的数据因为每次分配地址随机,指针快照在这种情况下就会执行错误的地址,所以要通过自建内存池和重载内存分配函数,将原来在堆中的数据重定向到数据节.
经过上述设计后,只需要存储数据节中的数据即可.每次数据层部件修改,可以不用更改快照相关代码,实现了快照的黑盒性,最终形成的系统快照格式见图1.本文以系统有两个需要快照的部件为例,如果系统有多个部件可依此类推.
图1 系统快照文件结构图
由于大型嵌入式软件的结构复杂、模块间耦合性很大,通用测试方法在合理安排测试用例上就十分困难,进而导致测试周期及费用增大.如果将无人机飞行过程简化为6个阶段,通用软件测试方法中飞行控制管理软件的测试用例安排可以简易地用图2表示.可见测试用例之间普遍存在耦合关系,一旦某个测试用例测试失败将直接影响其他测试用例的实施.依据2.1节所述的系统快照技术,在测试用例实施前按照一定格式记录系统的内存状态.这样测试用例就仅依赖于当前的系统快照.如图3所示,每个用例只需载入特定阶段的快照,而无需系统状态从头开始,这样就实现了测试用例间的解耦,将复杂交联的系统测试转换为相对灵活的单元测试,为自动化回归测试的实现提供了基础和保证.通过解耦,测试人员也无需对前置飞行过程有过多了解即可编制用例,大大降低了用例编制的难度.
图2 通用测试用例安排流程
图3 基于系统快照的测试用例安排流程
为了提高测试效率保证系统的可靠性,自动化回归测试是必须的选择[9].
针对分布式半实物仿真系统来设计自动测试平台,虽然能够更真实地反映系统的运行状况,但具有如下难点:①实现自动化必然要对很多模块进行修改;②测试系统的设计相当复杂;③无法使测试用例解耦.故本文采用将飞行控制管理软件剥离构建数字仿真测试环境的方法实现自动化回归测试.
自动化回归测试系统分为数据层、系统层、用例层3个层次,见图4.对于大型嵌入式软件的测试,这是一个通用的系统结构,其中的数据层,对于不同的待测软件有不同的表示方法,在此处用飞行控制管理软件的内容来表示.
数据层由系统状态相关的需要快照的各个组件组成,该层对上暴露了功能和数据接口,每个组件封装成dll形式,使得系统状态相关数据和其他数据剥离,支持了黑盒快照的实现.系统层一方面调度数据层暴露的功能函数形成系统的业务流程,另一方面对用例层暴露数据接口、调度接口和测试辅助接口.用例层则最终由测试人员根据系统层暴露的接口编制.
图4 系统层次图
以飞行控制管理软件测试系统为例,各层描述如下:
1)数据层:包含了4个组件.①飞行控制管理计算机组件:由飞行控制管理计算机程序包裹成dll形式,通过替换os层的函数,将原来从硬件获取数据改为从对外接口获取数据;②数字飞机组件:用来实现动力学模型等功能,基本直接封装半实物仿真中的程序,只是通过dll暴露出初始化和周期调度函数;③执行机构组件:用来模拟舵机、发动机等的动态响应;④传感器组件:用来模拟各传感器功能和特性.
2)系统层:分为3类模块.①功能调度模块:调度过程见图5,一个循环为一个周期20 ms;②数据接口模块:获得4个修改点数据,即可以用来查询系统状态也可以修改接口的数据,用来模拟诸如舵面卡死、发动机停车、数据偏差等各种状况,系统快照的建立和恢复也归于数据接口模块;③CPPUnit模块:提供标注的CPPUnit功能,包括了用例分组、执行界面、判定宏、结果报告等功能.
图5 系统调用过程
3)用例层:用户编写用例的地方,用户按照用例的紧密程度对用例进行分组.
测试系统执行过程是基于对内存运行状态产生的快照进行的.由于代码或数据结构的改动可能使变量在内存中的分布产生变动,故每次变动后都需要重新编译并利用系统快照用例建立系统快照,然后按照需求进行测试.如果测试发现了问题,可直接利用测试平台进行调试,调试完毕并修改代码后再按照测试流程进行回归测试.如图6所示,由于系统快照技术的运用,回归测试方便快捷,整个系统具备了一定的自动化程度.
图6 测试系统执行流程
从用例的编制可以看出整个系统是按照建立系统快照-激励-检测的步骤执行的,如图7所示.整个过程是由数据驱动的测试,通过图5所示的4个暴露点,可以完成系统的激励和状态的检测.
图7 用例工作原理
某大型无人机飞行控制管理软件测试中,用例数4836个,不同测试方法的人员、时间花费情况见表1.
表1 测试方法对比
通过表1可见,相对于半实物仿真测试,基于系统快照的自动化回归测试,除了用例代码编写有一次性较多投入,其他测试成本基本可以忽略.
本文首次将黑盒快照的概念应用于自动化回归软件测试,并有针对性地设计了系统测试架构,使系统测试用例编制相对简单、测试效率高、成本低廉.对于飞行控制管理软件这种更改频繁的大型嵌入式软件,本文提出的测试方法使全用例回归测试成为了可能,提高了系统的可靠性.这种测试方法的推广对大型嵌入式软件测试效率的提高将起到积极推动作用.
本方法也有一定的适用性,用户最好在内存状态稳定的节点上建立测试用例,否则不断的程序修改导致内存快照改变,会带来维护测试用例的代价.
References)
[1] Mustafa K M,Al-Qutaish R E,Muhairat M I.Classification of software testing tools based on the software testing methods[C]//2nd International Conference on Computer and Electrical Engineering.Dubai:IEEE,2009:229 -233
[2]侯智荣,陈欣,欧干良.无人机飞行控制系统软件测试策略的研究[J].计算机测量与控制,2006,14(7):968 -971 Hou Zhirong,Chen Xin,Ou Ganliang.Strategy research on unmanned aircraft vehicle flight control system software[J].Computer Measurement& Control,2006,14(7):968 -971(in Chinese)
[3]刘斌,高小鹏,陆民燕,等.嵌入式软件可靠性仿真测试系统研究[J].北京航空航天大学学报,2000,26(4):490 -493 Liu Bin,Gao Xiaopeng,Lu Minyan,et al.Study on reliability simulation testing system for embedded software[J].Journal of Beijing University of Aeronautics and Astronautics,2000,26(4):490-493(in Chinese)
[4] Mansour N,Bahsoon R.Reduction-based methods and metrics for selective regression testing[J].Information and Software Technologhy,2002,44(7):431 -443
[5] Maedche A,Motik B,Stojanovic I.Managing muhiple and distributed ontologles in the semantic web [J].The VLDB Journal,2003,12(4):286 -300
[6]窦金凤,唐瑞春,蒋永国.基于数据载入技术的软件回归测试[J].中国海洋大学学报,2009,39(1):145 -148 Dou Jinfeng,Tang Ruichun,Jiang Yongguo.Software regression test based on data load[J].Periodical of Ocean University of China,2009,39(1):145 -148(in Chinese)
[7]李刚毅,金蓓弘.自动化回归测试的技术和实现[J].计算机应用研究,2006,23(2):186 -188 Li Gangyi,Jin Beihong.Techniques and realization of automated regression testing[J].Application Research of Computers,2006,23(2):186-188(in Chinese)
[8]袁晓铭.磁盘阵列系统的快照技术研究[D].武汉:华中科技大学计算机科学与技术学院,2007 Yuan Xiaoming.Research on the snapshot technology of the RAID system[D].Wuhan:School of Computer of Science and Technology,Huazhong University of Science & Technology,2007(in Chinese)
[9] Briand L C,Labiche Y,Soccar G.Automating impact analysis and regression test selection based on UML designs[C]//Proceedings of the International Conference on Software Maintenance(ICSM'02).Washington DC:IEEE,2002:252 -261
(编 辑:李 晶)
Regression testing method of UAV flight and management software
Tian Feng Ding Wenrui Li Hongguang
(Research Institute of Unmanned Aerial Vehicle,Beijing University of Aeronautics and Astronautics,Beijing 100191,China)
Li Xinjun
(School of Mechanical Engineering and Automation,Beijing University of Aeronautics and Astronautics,Beijing 100191,China)
In order to solve the large embedded software testing problems,an automated regression testing method based on system snapshot was proposed.Taking unmanned aerial vehicle(UAV)flight control software as a case study,some key technology researching,system architecture designing and experiment analyzing were carried out by degrees.The system snapshot technology was used to decouple the test cases which had complex relationship with each others,then transformed complex systems testing into some flexible unit testing.With CPPUnit testing framework,an automated regression testing system structure was established,and the function and implementation process of each partwere deeply analyzed.Furthermore,based on the system snapshot technology,the process of automated regression testing and the preparation of test cases were designed.Two kinds of experimental result of a large UAV flight control software testing using different method was given.Through comparative analysis of the evidence-based data,test system's effectiveness was verified.
software testing;automatic test;system snapshot;decoupling;flight control and management
TP 311
A
1001-5965(2011)05-0574-05
2010-03-09
创新研究群体科学基金(60921001)
田 峰(1979-),男,北京人,工程师,buaatf@126.com.