Skip to main content

第12章 嵌入式系统测试

第12章 嵌入式系统测试

嵌入式系统测试的话跟我们传统测试有很多共同的地方,但是也有些不同的地方,嵌入式又把它叫做实时嵌入系统。

一、嵌入式系统

1)概述

  • 一些虚拟现实眼镜也是嵌入式系统
  • 自动驾驶还是典型的嵌入系统
  • 自动家居的也是嵌入系统
  • 嵌入系统有一个共同的特点:有一个基本的一个要求,就是多少时间要完成什么事情(实时性)。这样的话它能够去保证这个系统包括安全性的一些要求。比如自动驾驶的刹车
  • 硬件的依赖的话,实时特性跟哪些硬件有关系?时钟、传感器。从软件来讲的话,它主要和操作系统有关系
  • 实时操作系统有哪些?RT-Linux,是专门优化过的。VxWorks操作系统:给商用的。

2)硬实时系统

  • 如何去理解实时特性的概念:首先的话有一类实施系统化是硬实时的,它对任务的完成的话,它有绝对的要求。比如一个任务在 2 秒内你必须要执行完,这类系统的话一般是安全关键系统。【怎么测试?测试用例模拟刹车?然后记录时间】
  • 嵌入性测试的话,它有专门的一些测试过程,而且相对来讲比我们普通的测试要复杂得多
  • 硬实时特性的话,这个它是测整个一个时间要完全满足的,比如说所有的特征你都得满足,所有的场景。

3)软实时系统

  • 也有完成的要求的时间,比如在80%的情况下,能够2s内完成。意思就是说你不用一定要完成,但是以一定的概率去完成。
  • 偶尔一次不完成,不影响我整个一个系统的绝对的一些性能
  • 比如多媒体系统。

这些测试的话如何去做?它为什么很麻烦?为什么不能用?

4)时间

  • 时间是嵌入式系统的核心
  • 最差执行时间:意思就是说这个任务在这个特定环境下它最长多少时间执行完成。
  • 最差执行时间解决什么一个任务的随机性的变化的问题,只要知道最差执行时间,就能够和标准比对。反而执行时间没那么重要。
  • 典型的最差使用时间,它是一个随机变化的,

  • 执行时间的概率图:

  • 上图里面的x周代表执行时间,曲线在x的起点一般大于0,代表最小的执行的时间,在x轴的重点代表WCET,也就最坏执行时间

  • 概率最高的情况就是顶点对应的x轴的值。

  • 对于硬实时系统,我们一般测WCET,需要让他在我们规定的范围之内

  • 最差执行时间根哪些有关系呢?

    • 程序代码肯定有关系的
    • 执行环境:跟你代码上这个执行的环境有关系,这个执行环境包括软件环境和硬件环境,比如OS
    • 所以测试一次是肯定不够的,需要多次测试才能找出这个曲线
  • 当然,最差执行时间可能测量也不一定准确,需要结合测量的结果、估计的结果综合评估

5)执行时间评估

执行时间首先根路径有关系,同时跟cache有关系

如何评估执行时间呢?

  • 画出程序流图
  • 分析程序里面的循环,循环的执行时间根循环体的大小、循环的次数、循环里面的控制流有关系
  • 值得注意的是一些不可行的路径。

回忆ICS里面的Cache里面的部分:Cache可能出现一些缓存的Miss。

for (int i = 0; i < 4; i++){
sum += array1[i] * array2[i]
}
  • 上面的程序第一次使用array1的第0个元素的时候,会把array1里面的所有的元素全部搬到cache,但是可能马上又没有用,就发生了miss
  • 所以缓存的命中和没有命中,时间的差距很大
  • 所以估计程序的执行时间,它跟程序的结构有关系,把基本块的世界测很多次,然后计算基本块最大的执行的次数。这样估计出来最大的执行的时间

二、嵌入式系统测试方法

可以用我们之前学过的技术进行测试。有很多典型的测试方法其实都可以用到嵌入系统测试里面来。

1)黑盒测试

  • 黑盒测试的概念:若被测程序与特定的功能相联系,我们可以针对功能设计测试,以证实各功能完全可执行,同时在功能中寻找错误。把测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内 部特性,只依据程序的需求规格说明书,检查程序的功能是否正确。
  • 黑盒测试又叫做功能测试或数据驱动测试。
  • 黑盒测试类似于中医:使用望、闻、问、切
  • 黑盒测试的目的:是否有错误的或遗漏了的功能? 在接口上,输入能否正确地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息访问错误? 是否考虑了软件的出错情况?
  • 黑盒测试的一个常用技巧:打桩。用在隔离测试中,用以消除其他程序对被测程序的影响。当被测程序调用其子模块时,可以使用模拟法,此时被测程序并没有真正调用其他模块,而是从桩模块处得到一个所需的值。这种技术叫做打桩
  • 黑盒测试的常用方法:等价类测试、边界测试、等等
  • 边界值分析测试:
    • 边界值分析也是一种黑盒测试方法,是对等价分割方法的补充
    • 经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而 不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误
    • 使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,而不 是选取等价类中的典型值或任意值做为测试数据

2)白盒测试

  • 若被测程序与特定的结构相联系,我们可以针对结构设计测试 ,以确保内部的“所有齿轮相吻合”,即软件的内部过程是合 理的,是遵照规定执行的

  • 白盒测试又称玻璃盒测试。把测试对象看作一个透明的盒子, 充分利用其逻辑结构和有关信息,设计和选择测试用例

  • 白盒测试又称为结构测试或逻辑驱动测试,白盒测试类似于西医看病,通过X光、CT扫描等手段

  • 白盒测试主要用于:结构测试、覆盖测试、静态分析也算白盒测试

  • 白盒测试可以用插桩,插桩又称软件探针,由测试 工具自动加入,用于反馈软件的执行信息。插桩不影被测程序的运行

  • 典型的白盒测试:基本路径测试。

    • Thomas McCabe首先提出。从程序的结构入手,分析、计算模块的复杂程度。 McCabe圈复杂度(=基本路径数)
    • 确认模块的一组基本路径,再根据这些基本路径设计测 试用例,做到基本路径覆盖。 • 圈复杂度可以通过程序流图得出
    • 基本路径测试是结构化测试的理论基础
  • 其他方法:代码覆盖 分⽀覆盖(判定覆盖) 条件覆盖 路径覆盖

3)回归测试

  • 软件更动后重新进行的测试,既要测试变更部分,也要测试受影响部分
  • 关键在决定哪些测试必须被重复,保证测试工作的可重现性,尽量利用工具,提供回归测试的自动化水平

4)静态分析

  • 静态分析又称静态测试
  • 静态测试是不动态执行程序代码而寻找程序代码中可能存在的错误 或评估程序代码质量的过程。
  • 静态测试可以由人工进行,充分发挥人的逻辑思维优势。
  • 可以借助软件工具自动进行
  • 静态分析的主要方法和内容:
    • 代码审查,这是软件质量保证(SQA)的重要内容
    • 代码统计分析
    • 软件工程度量:McCabe 复杂度、Halstead 复杂度

5)嵌入式的方法

  • 嵌入式软件测式的基本方法:静态/动态、白盒/黑盒、单元测试/集成测试/系统测试。当然还有一些 特殊 的方法:全数字模拟测试、交叉测试(Host/Target测试)、真实环境验证

  • 全数字模拟测试:采用数学平台的方法,将嵌入式软件从系统中剥离出来,通过开 发CPU指令、常用芯片、I/O、中断、时钟等模拟器在HOST上实 现嵌入式软件的测试。

    • 主要特点:与嵌入式硬件平台脱钩、操作简单,可以借鉴常规的软件测试方法、适用于功能测试、有局限性
    • 全数字模拟测试的局限性:
      • 通用性差,使用不同语言编写的嵌入式软件,需要不同的仿真程序来执行
      • 实时性与准确性难以反映出嵌入式软件的真实情况,测试出与时 序有关的故障价值不大
      • 维护统一、精确的系统时钟,理顺时序关系相当困难,特别是当 并发的事件要求一定的同步关系时。
      • 开发成本高。设计出一个能进行系统测试的的环境代价太大
      • 只能作为嵌入式软件测试的辅助手段
  • 交叉测试(Host/Target测试):

    • 与目标环境无关的部分在PC机上完成,充分利用高级语言的可移植性、借鉴常规的软件测试方法、与模拟测试不同
    • 与硬件密切相关的部分在Target上完成:需要调试环境支持、测试工具需要支持目标环境
    • 最后在目标环境中确认
    • 交叉测试的特点:
      • 将大部分工作转移到PC平台上,在硬件环境未建好或调试工具缺 乏时就可以开展
      • 适用于高级语言,如C,C++
      • 操作方便,测试成本较低。实时性受调试环境的制约
      • 目标环境中测试时要占用一定的目标资源,注意目标环境和主机环境的差异:目标编译器的bug
      • 目标码的验证
  • 总体思想:

    • 先静态,后动态测试
    • 白盒黑盒相辅成,先黑盒后白盒
    • 最后的话去做集成和系统测试