parasoft c/c++嵌入式单元测试:传输结果,局限性

 

配置结果传输

配置结果传输需要在C++test runtime library中选择一个合适的通信信道。 MDK-ARM 4.1和ULINKPro运行测试的默认设置是基于指令跟踪宏单元(Instrumentation Trace Macrocell)的通信(是ARM CoreSight debug和跟踪技术的一部分)。在这种模式下,C++test将测试信息直接写入ITM端口,ULINKPro确保数据传输到主机。然后,uVision IDE捕获这些内容并存储到文件中,以便C++test进行分析。

这种开发环境中目标到主机(target-to-host)的通信信道是Parasoft C++test所独有的。它有着出色的频带宽度,并且比传统的UART connections配置起来简单的多。此外,由于是专用信道,因此与测试程序和测试框架生成的通信链路不冲突。C++test已经将ITM预先配置好了,无需再进行配置。

解决目标的局限性

这里需要再次强调文章开头所说的,单元测试并不是一件简单的事情,尤其当同时遇到测试和开发平台限制的时候。开发平台的限制越多,需要做的额外工作就越多。以下就是在目标设备上测试时可能遇到的问题:

  • 堆/栈不足

嵌入式项目往往是建立在免费的栈和堆内存上的。如果没有可用的堆和栈,那么测试框架将不能继续执行测试了。最坏的情况是,我们可能连一个测试用例都完成不了。最简单的解决方法当然是增加堆和栈的数量。但大多数时候,这是不可能的。一般情况下,我们都选择停止硬件的运作来获得更多的内存。或者重新配置测试框架使内存消耗变少。你若是选择放弃在测试案例中使用外部数据资源,使用DCPPTEST_DATA_SOURCES_ENABLED = 0将限制堆使用。你若是选择测试执行问题的堆栈跟踪报告,使用-DCPPTEST_ STACKTRACE_ENABLED = 0(禁用“stack traces reporting”)将减少内存的消耗。另一种方法是,对测试断言的消息发出设置一个下限值。默认的值为1024b,可以通过-DCPPTEST_MAX_MESSAGE_SIZE=512进行设置,但是值的设定不能超过规定范围。

  • 测试的可执行文件占用过大,不适合写入程序存储器

以下是导致测试可执行文件增大的因素:

parasoft c/c++嵌入式单元测试:传输结果,局限性_第1张图片
  • C++test运行库(C++test runtime library)

C++test运行库是一个辅助例程的集合,并且可以进行配置。我们可以去掉一些功能来减少占用空间。通常,可以禁用运行库的一些非核心功能来减少程序内存消耗。非核心功能的选择要取决于测试和用户的要求。C++test用户手册中,可以通过运行库宏列表进程启用/禁用操作。

  • 源代码插入

通过在C++test中添加原始的源代码,来收集测试过程和控制测试执行的各种信息。为了限制由此所产生的消耗,用户可以禁用或去掉一些功能。设置界面中可以同时进行这两种设置。界面如下图所示。

  • 测试用例/存根的源代码

这些是测试过程中产生的内部代码片段。测试用例/存根的数量会影响测试可执行文件的内存使用。当大量的测试用例(成百甚至上千)同时运行时会产生问题。将这些测试用例分开运行,可以降低维护成本和内存使用。

  • 执行时间

这主要包括源代码测试和后续C++test运行库的调用。测试执行中添加的粘合代码是可以忽略的。我们不能把执行时间仅仅看做是测试功能/方法的问题。这样想的后果就是,我们只需运行功能,然后等待结果并验证。你也许觉得这样没有什么不好,只是等待的时候久了点。但是,这些问题在集成测试的时候就会暴露出来了。因此,我们不能只是孤立地考虑单个功能,还要看它与其他模块的协作。否则,可能会出现以下的问题。假设代码测试设计要在xxx处停止,但是2*xxx已经执行了。结果,其他的代码无法在规定时间内执行,打破了整个模块的时间相关性,导致了测试失败。这个问题可以这样解决。在前文提到C++test提供了一个用户接口。用户可以指定哪些部分要测试,哪些测试功能要用到。

  • 通信信道(communication channel)

通信信道的选择主要是由开发平台和目标设备决定的。结果可以通过TCP/IP sockets、RS232进行发送,或存储在文件系统或闪存中。每一种方式都有它自己的优缺点。我们还可以对通信信道进行自定义。用户只需实现以下几个简单的功能:initializeCommunicaiton, sendByte, finalizeCommunication。以下是常见问题:

①通信信道的缓慢导致执行时间的增加(如串行线路的传输速率低下)

②通信信道访问冲突(被测程序有时也需要访问通信信道)

若结果发送缺少通信则返回主机。

多数时候,由于开发环境中通信信道的限制会让我们束手束脚。因此,选择一个好的测试功能是非常重要的。下图中展示了UART和ITM分别发送一个字节所消耗的时间对比。

parasoft c/c++嵌入式单元测试:传输结果,局限性_第2张图片

 

你可能感兴趣的:(c,c,单元测试,嵌入式,/,Parasoft,局限性,++test,传输结果)