直升机机电管理系统软件测试方法研究
2018-03-13孙月宁肖文洪石璐璐
孙月宁,肖文洪,石璐璐
(中国直升机设计研究所,江西 景德镇 333001)
0 引言
直升机机电管理系统(机电公共设备管理系统)是保障飞行必不可少的系统,机电管理系统不仅要对各个机电设备(或者系统)进行监视和告警,同时作为飞机管理的一部分要负责管理和控制整个机电设备。由于机电设备与飞机安全密切相关,作为一个核心管理系统,机电管理系统的工作状态和安全保证是全系统的核心,决定着系统的功能和性能[1]。
机电管理系统软件是一个嵌入式实时多任务程序嵌入式机载软件,它具有接口复杂,实时性强,安全性、可靠性要求高,开发与测试验证过程同步进行,测试环境复杂等特点。其质量和可靠性是整个机电管理系统正常运行的基础,保证软件质量和可靠性的重要途径是对软件进行充分的测试。
软件测试技术快速发展,取得了许多成果,但由于机电管理系统软件的复杂性和特殊性,软件的测试仍存在许多困难和不足,比如传统机电管理系统软件测试使用不是很成熟的V模型,而且依然进行手动测试,未使用专业的测试工具,使得测试花费时间较长,整个项目的研发进度缓慢。
针对机电管理系统软件测试目前存在的问题,本文根据自己的测试经验和对嵌入式机载软件测试的认识,使用成熟的W模型[2]和专业的Testbed[3]测试工具,对某型机机电管理系统软件进行测试,并取得了良好的效果。
1 测试模型
鉴于机电管理系统软件及其开发、测试的特点,需要对在软件的文档审查、代码审查、单元测试、配置项测试等各个层面上的测试工作进行规划,制订合理的测试策略,选择适用的测试方法和模型,尽可能及时地消除软件的缺陷。目前常见的软件测试模型有V模型、W模型、H模型、X模型等,传统的机电管理系统软件测试采用V模型,如图1。
图1 V模型
V模型描述了一些不同的测试级别,并说明了这些级别所对应的生命周期中不同的阶段。V模型揭示了软件测试活动分层和分阶段的本质特性,非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程中各阶段的对应关系。
但V模型也存在一些问题,比如容易让人形成“测试是开发之后的一个阶段”以及“测试的对象就是程序”之类的误解。由于V模型把系统开发过程划分为具有固定边界的不同阶段,这使得人们很难跨过这些边界来采集测试所需要的信息。有些测试应该执行得更早些,有些测试则需要延后进行。不仅如此,V模型也阻碍了从系统描述的不同阶段中取得信息进行综合。所以,近年来,一种改进过的软件测试模型——W模型被提了出来,如图2所示。
图2所示,W模型由两个“V”字重叠形成,其中一个“V”字代表开发过程,包括用户需求、需求规格说明书编写,软件设计说明,编码,集成,实施,交付。另一个V字代表软件测试过程,包括文档评审(用户需求评审、需求规格评审、设计说明评审)、代码测试(单元测试、集成测试、确认测试、验收测试)。
W模型是众多测试模型中相对比较成熟的一种测试模型。该模型强调测试并不是在代码编写完成之后才开展的工作,测试与开发是两个相互依存的并行的过程,软件测试贯穿于软件生命周期的所有阶段,软件的需求分析和设计阶段都会出现错误,所以测试活动应在开发活动的前期已经开展。测试人员早期参与软件项目,及时开展测试的准备工作,包括编写测试计划、制定测试方案以及准备测试用例;一旦代码模块完成就应该及时开展单元测试,一旦代码模块被集成为相对独立的子系统,便可以开展集成测试,一旦有BUILD提交,便可以开展系统测试工作。
图2 W模型
W模型中另一个重要的思想是“全面测试”。即应对软件的所有产品进行全面的测试,包括需求、设计文档、代码、用户文档以及测试进度和测试策略的调整、需求变更等;软件开发及测试人员(有时包括用户)全面地参与到测试工作中,并且对测试过程进行全面跟踪,例如对需求的验证和确认活动,就需要开发、测试人员及用户的全面参与,毕竟测试活动并不仅仅是保证软件运行正确,同时还要保证软件满足用户的需求。
2 测试工具
以往我们使用机电系统模拟综合装置对机电管理系统软件进行测试。机电系统模拟综合装置是在试验室中建立起来的上下接口模拟环境,它能模拟真实的机电系统和航空电子系统的工作状态以及控制逻辑。可以模拟被测设备的工作环境,逼真地表现出真实运行环境的各种特性,并实现测试用例的输入;也可以通过自动的循环测试,进行设备的稳定性测试;通过故障注入系统实现对子系统间信号的故障注入,在物理层、电气层、链路层、协议层以及应用层进行故障模拟,在信号接口上模拟设备内部的运行异常,以实现对被测设备的逆向测试和容错性测试。在试验室开发、综合调试以及测试时,机电管理系统被测设备与目标机的连接如图3所示。
图3 测试设备交联图
利用机电系统模拟综合装置虽然可以进行基本的测试,但是测试主要依赖于测试人员的经验,使测试的有效性和效率受到极大的影响,使我们对产品开发的各个阶段的质量无法把握,对产品的最终质量无法控制。所以机电管理系统软件迫切需要专业的嵌入式软件测试工具来辅助软件测试。
通过比较多种测试工具,发现LDRA Testbed是一款非常好的嵌入式开发和进行高可靠性软件开发设计的软件测试工具,适合用于机电管理系统软件的测试。它具备以下优点:
①在编程阶段可检测和修改软件的错误与缺点。
②在测试阶段,Testbed/TBrun可以和机电管理系统软件的开发工具-Tornado很好地集成到一起,通过目标平台配置工具TBconfig能够很方便地完成TBrun和Tornado的集成配置,并可自动产生软件测试驱动、桩模块,从而节省时间,测试人员可将重点放在设计测试用例上,提高软件测试效率。可对测试对象进行静态分析,包括质量度量、内存资源使用等,还可以对测试对象进行动态覆盖率测试。
③在软件维护阶段,提供了理解软件的逆向工程工具。
3 基于W模型和Testbed的机电管理系统软件测试
由于V模型的不成熟和测试的低效性,本文选择较成熟的W模型,并使用Testbed测试工具,对某型机机电管理系统软件进行测试,验证此方案的测试优势。
3.1 开发前期测试设计
W模型在V模型的基础上增加需求测试和设计测试,即软件开发前期的测试,目的是确保需求的完整性、一致性、准确性、可实现性和可测试性等,以及设计对需求的可追踪性、正确性、规范性和可测试性等。针对机电管理系统的特点,开展了需求测试和设计测试工作。
3.1.1 需求测试设计
1)需求文档审查[4]
需求文档不仅是系统测试和用户文档的基础,也是所有子系统项目规划、设计和编码的基础,因此,它的描述的准确性至关重要,对其评审即静态测试活动是不可掉以轻心的,它可以消除需求工作中的缺陷,使解决缺陷的花费降至最低。
为了更好地对机电管理系统软件模块进行测试,首先需要测试人员熟悉该软件的工程需求,包括功能性能需求、接口需求、容量时间需求、安全需求等。主要依据以下10条原则来对其进行文档审查。
①软件需求文档是否按照相关的文档标准格式编制;
②软件需求文档是否满足软件研制任务书的各项要求(可追踪性);
③系统需求分析阶段提供的文档资料是否齐全;
④软件需求文档中的需求在实现上是否可行;
⑤软件需求文档的功能、性能指标是否完整、明确、无二义性;
⑥软件需求文档所描述的需求是否完整、可证实、可测试;
⑦所开发项目的数据流与数据结构是否足够、确定;
⑧软件需求文档所描述的系统预期的外部行为和可视化行为是否完整;
⑨有没有遗漏、重复或不一致的地方;
⑩软件需求文档中影响分析安全关键软件的安全性需求是否完整、明确。
2)制定测试计划
当测试需求被确定后,则进入测试设计阶段,该阶段的主要任务是基于已定义的需求,根据项目开发计划,创建项目的测试计划。项目的测试计划由多个计划组成,各测试计划对应到各模块、测试主题或是软件版本。测试计划的测试内容通过测试任务来体现。
3)需求测试用例设计
在需求文档通过审查的基础上,开始进入功能测试用例设计,首先列出测试项及测试特征,然后根据这些内容确定测试方法和测试所需要的软硬件环境、制定测试通过与失败的标准、风险和意外情况应对措施、估算测试所需人力以及整个项目规划的大致测试周期并搭建测试环境。在此基础上制定详细的用户的验收测试以及系统测试计划。
3.1.2 设计测试
1)设计审查
软件设计分为概要设计和详细设计,它依据需求规格说明书对系统的具体实现进行描述。
主要依据以下11条原则来对其进行文档审查:
①软件设计是否覆盖需求规格书中用户提出的每个功能点;
②软件设计中的每个函数流程或伪代码的逻辑和语句是否正确;
③软件设计中使用的数据结构、函数执行率、资源访问冲突风险是否合理;
④软件设计的准确性和一致性;
⑤软件设计与目标机的兼容性;
⑥软件设计的可验证性;
⑦软件设计与编写标准的符合性;
⑧软件设计到软件需求的可追踪性;
⑨数据设计说明的完备性、一致性的和易理解性;
⑩软件具有健壮性,软件划分的完整性;
2)测试计划细化
将需求分析阶段建立的系统测试计划加以细化更新,进行系统测试设计;将确认测试计划加以细化,进行确认测试设计。在概要设计阶段完成集成测试计划,并且在详细设计阶段加以细化更新,进行集成测试设计。在详细设计阶段也要完成单元测试计划。模块测试计划不需要非常正规,只是简单解释程序员计划如何测试这个模块。单元测试的测试计划应该根据被测单元的性质而制定,如对系统控制单元应主要采用结构测试;对复杂的计算单元应主要采用算法分析测试用例;对界面单元就应该测试各种选项的组合等等。
3)设计测试用例设计
在机电管理系统的模块进行设计实现后,根据详细设计的具体内容,设计出测试用例模板,以等价类划分、边界值分析、错误推测法为主要方法来设计具体的测试用例,为每个测试用例规定测试规程,包括运行测试用例的准备、初始化、中间步骤、前提和约束,把测试用例写入“软件测试说明”。
3.2 代码测试
在前期测试设计中共生成用例406个,使用Testbed工具和机电系统模拟综合装置相结合的方式,按照测试计划,根据测试用例对机电管理系统软件进行逐一的、详细的测试,并根据各阶段测试结果完成测试报告。测试内容主要包括:静态测试、动态测试和覆盖率测试、功能测试、性能测试、接口测试、可安装测试、强度测试、安全性测试等测试类别。
3.2.1 静态测试
首先导入机电管理系统程序代码,当然被测试程序必须是已经通过编译没有错误的源代码,选择代码审查所遵循的规则,可以使用Testbed所列举的标准或自定义的标准。例如针对此型号的机电管理系统软件,我们可以按照《军用软件测试指南》中的有关规定制订生成代码审查标准。Testbed的静态分析功能很强大,我们选择其中的主要静态分析、复杂度分析和静态数据流分析对被测程序进行分析,就可以达到静态测试要求。
Testbed分析完成后,得到三种主要分析结果报告,报告结论如下:
①代码评审报告:代码和设计一致;代码执行标准正确;代码逻辑表达正确;代码结构合理;代码可读性符合要求。
②质量评审报告:软件质量符合各项标准。
③设计评审报告:对软件的接口进行测试,源代码和最初的设计需求一致。
3.2.2 动态测试和覆盖率测试
对软件进行动态测试,利用Testbed对代码进行编译,生成目标代码,通过装入目标代码就可以对软件进行动态测试。从Testbed中启动运行单元动态测试软件Tbrun,选择要测试的软件单元,通过初始化被测对象运行所需的测试用例,运行机电管理系统软件,利用Testbed可以观察程序的运行情况、语句和分支覆盖是否满足测试要求,如图4。
可以借助于LDRA Testbed来监控原代码按测试数据的执行情况。当测试数据都用完了,察看动态覆盖率分析报告,可以得到程序中哪些部分没有被完全测试。每个测试数据集合的动态覆盖率分析结果是累加的,也可以观察到每个测试数据集合对应于程序中的执行部分。这些信息是通过执行动态数据集得到的。
3.2.3 其它类测试
对机电管理系统软件进行功能测试、性能测试、接口测试、可安装测试、强度测试、安全性测试,测试结果均符合相关文件规定的要求。
图4 覆盖率图
4 总结
针对目前直升机机电管理系统软件测试的不足,采用W模型,使用Testbed测试工具和机电系统模拟综合装置相结合的方式进行代码测试,保证了软件的质量、性能和可靠性,减少了总体的测试时间。此方法不仅提高了软件生产效率及其质量,而且完整地体现了软件测试的工程化思想,为嵌入式软件测试提供了一个全面和高效的测试方法。
[1] 王占林,裘丽华.机载公共设备的统一控制与综合管理[J].工程设计学报2003.10(2):84-88.
[2] 黄龙水,黄诚学.软件模型介绍[J].船舶电子工程,2004(3):35-38.
[3] 李中萍,岳 海,薛 静.LDRA TESTBED在航天软件测试中的应用[J].航天控制,2007,25(2):73-77.
[4] 黄怡强,郭钦祥,黄怡胜.浅谈软件开发需求分析阶段的主要任务[J].中山大学学报,2002.02(22):262-265.