1、概述

  飞行控制软件是飞行控制系统中重要的组成部分,要求可靠性极高。这需要使用白盒测试方法对软件进行完整详细的测试,主要是通过插桩对程序进行动态覆盖测试以获得程序的覆盖率、运行剖面等信息。

  但因为软件的任务运行周期严格限制在10 ms,采用传统的软件测试插桩技术对嵌入式飞行控制软件进行结构覆盖测试,会影响甚至破坏被测软件的时间特性、时序关系,可能造成任务超时,导致软件执行错误,甚至不能运行。所以对嵌入式软件进行插桩的时候要采取灵活的插桩方案,降低插桩对软件运行的影响。

  因此,研究如何对插桩在覆盖测试中的应用进行优化,找出在飞控软件测试时适用的插桩方法,对嵌入式软件测试具有十分重要的意义。

  2、飞行控制软件测试策略

  目前对飞行控制软件主要采用的是Host-Target 的仿真测试模式。Host-Target 是指编译链接和测试分析都运行在宿主机上,而被测程序运行在目标机上,宿主机与目标机之间的通信通过串口线或是网络连接实现。其中,主机(Host)上包括主控平台和信号仿真平台,目标机(Target)上则是飞行控制软件的运行平台。

  主控平台主要进行测试用例生成、测试运行管理、数据分配以及测试后的评估工作;运行平台是嵌入式系统的硬件及被测软件;信号仿真平台则是模拟飞行控制系统外部运行环境,向飞行控制系统提供激励信号并接收反馈信号。

  3、插桩对仿真测试的影响

  简单地说插桩是借助向被测程序中插入操作来实现测试目的的方法。常常要在程序中插入一些桩函数,其目的在于执行程序时,获得测试者为关心的信息。通过这些信息进一步了解程序执行过程中的一些动态特性[3]。在整个过程中,插桩的过程是静态的,而数据的收集的过程是动态的。

  在对飞行控制软件测试时,需要对飞行控制软件的源程序进行程序插桩,这必然会对程序的运行造成一定的影响。首先,有些桩程序的信息对于软件测试是不必要的,插桩程序的运行本身有一定的时间消耗,再在被测软件中插入目标软件所不需要的桩程序会造成代码膨胀,增大了执行程序的规模;

  其次,插桩程序捕获的数据信息要存入缓存区,对系统的内存也有一定的消耗,也会影响到系统的性能;后,在仿真测试时,为了降低测试时对飞行控制软件源程序运行效率的影响,诸如覆盖率分析、路径跟踪等较为复杂的运算都是在主控计算机上完成。

  这些分析数据均来源于插桩程序收集的数据,都需要通过通信传送到宿主机上进行分析处理。这些因素直接导致了程序运行时间的增长,而实时性是嵌入式软件重要的特征。对嵌入式软件进行插桩测试很可能导致软件的失效,这样的测试是失败的。

  要得到一种对源程序影响较小的插桩方法,首先要分析造成这些影响的原因。当程序比较大而且桩点比较多的时候,由于通信量增加导致整个仿真测试时间的增长是明显的。下面将通过实验来验证这个现象。由于在VxWorks 操作系统下获取时间的精度不是很高,因此以2 台Windows 操作系统的计算机分别作为目标机和宿主机来完成测试过程。

  首先,在主控程序的开始和结束的位置记录整个过程的运行时间WholeTime;同时分别在主机信号模拟平台实现飞行状态模拟的全量方程程序以及目标机的控制律程序的控制指令。在飞行状态信息传递的位置记录时间分别得到飞行控制程序和全量方程的运行时间TargetTime 和HostTime;

  则通信时间CommunicationTime = WholeTime ? TargetTime ? HostTime。试验对象分别是经过插桩和没有插桩的飞行控制软件,选择3 个不同的测试用例做3 组实验,每组重复进行20 次。对每组实验数据进行平均值计算,得到仿真测试各阶段执行时间对比数据。

  4、一种飞行控制软件测试中插桩通信的优化方法

  从上面的实验分析可知,桩信息通信导致的测试时间增加是显然的。所以对此过程进行优化可以缩短测试的时间,提高测试的效率。通信模块中增加的信息量要适当,太大的话将导致测试时间的增长,太小的话则可能导致有效桩信息的丢失,影响覆盖率的计算。

  传统的方法是在每次目标机与主机交互的时候都把桩信息一并传输出去,当程序规模比较大、桩点较多的时候,导致了通信量的增加会很明显。而传送出去的桩信息中有些部分是无效的。针对这个特点,可以改变成每次传送的数据不是所有的桩信息,只是一部分有效的桩信息。