查看原文
其他

【连载】嵌入式测试驱动开发(9)

bug菌 最后一个bug 2021-01-31

1、测试对象开发

我们上一小节简单的提到了“测试对象”,我们还提到一句测试对象可以给任何对象写测试,那具体测试对象该如何开发呢?下面我将为大家一一解答:
我为大家形象的画了一下测试对象进行测试的整个过程,通过这个过程我们就大体知道该如何开发一个测试对象并完成对实际对象的测试。

上面的图为我们展示了测试对象的位置,位于我们软件与硬件的接口的分界位置,可以说我们的底层接口往上的部分并不知道测试对象的存在。

那么这样很多小伙伴们会问,这岂不是在模拟硬件去了?工作量比我实际写功能代码还要大得多?其实并不是这样的,我们没有必要去模拟整个硬件的功能,那工作量是巨大的并且没有任何意义。我们都需要明确一点的是,我们的测试并不是说要测试整个硬件是如何运作,而是测试软件接口对硬件的一个动作序列并根据硬件状态进行处理的一个过程!

比如说我们非常经常会遇到的对一些存储芯片的读写过程,我们需要仅仅是根据通过接口发送地址和数据,然后获得返回值或者相应状态即可。那么我们的测试对象需要做的仅仅是,收到硬件所规定的时序信号以后并根据我们目前的测试要求在合适的条件返回对应的状态即可。(所以并没有设计模拟硬件那么复杂)

2、测试对象实现

如下框图非常清晰的表示了一个测试对象完成一个测试任务


从图上看开发一个测试对象并没有想象那么复杂,这里我们根据上图大体梳理一下:1)首先我们启动一个测试,还是以存储器为例子,那么我们“写地址”、“写数据”、“读状态”、“读数据”,这几个并不是真正的操作,而是获得为了我们接下来调用实际接口而收集的期望。2)因为实际对象在测试中调用的不是硬件操作接口,而是我们测试对象设计的模拟接口,那么需要根据实际对象的传入数据进行判断来进行返回相关数据和状态等处理。3)那么第二步中的判断需要根据我们在前面收集到的期望来进行处理。如图所示我们使用的是期望队列,这样就严格控制了测试状态的动作时序,这样我们就能完完全全通过设置期望来控制我们的被测试对象的动作了。
小技巧:通过前面的测试过程,我们发现我们构建的测试对象也会提供硬件接口,而我们实际的硬件驱动也会提供对应的接口,那么我们可以通过链接脚本进行分别链接,或者使用函数指针灵活选择接口。

3、开发测试对象的好处

大家在阅读硬件芯片手册时候会发现非常多的状态图,比如说flash读写的话会有很多的硬件状态或者故障,不过在我们平时的开发、使用和测试过程中很少或者基本不会出现,那么进行黑盒子测试更是摸不着头脑,那么我们通过构建测试对象就可以模拟该过程进行故障测试工作,从而确定系统的行为等。
好了,这里是公众号“最后一个bug”,感谢大家的关注,也希望大家分享转发!我们下期再见!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存