1、1软件测试工程师软件测试工程师(级级)培训培训 嵌入式系统软件测试嵌入式系统软件测试2PART 3 嵌入式系统软件测试1 嵌入式软件的特点2 嵌入式软件测试的特点3 困难及解决办法4 嵌入式软件开发及测试工具5 例子3前言 嵌入式软件指嵌入式计算机系统中的软件 嵌入式计算机系统:其主要目的不是进行计算,而是较大系统中成为其完整不可分割部分的计算机系统;如武器,航天,航空,指挥控制或运输系统中的计算机系统。嵌入式软件可能是最难测试的一类软件。41 嵌入式软件的特点(1)嵌入式软件和硬件联系密切嵌入式软件与所属的计算机系统有很强的耦合。软件的实现细节与 计算机系统的结构 IO端口配置 计算机系统相
2、连的外部设备及其输出信号特性都有关系。嵌入式软件只能运行在特定的目标机上;这种运行平台的特定性给嵌入式软件的开发和测试都带来极大的困难;5嵌入式软件的特点(续)(2)嵌入式软件通常要求强实时性嵌入式软件一般由于要在规定的时间内完成处理功能,同时时间也是某些处理的重要输入参数。嵌入式软件有更严格的处理时序要求。6嵌入式软件的特点(续)(3)嵌入式软件一般采用更低层的语言编写考虑到速度和性能的要求,物理设备尺寸和内存空间的限制,嵌入式软件的实现仍然要把空间紧凑和尽量节省运行时间作为追求的目标。有些情况下必须采用汇编语言编制,这种语言结构化程度低、规范化程度低,程序不易理解,不易维护,自身可靠性差。
3、许多测试工具在应用到这些程序上有许多困难甚至不能支持。72 嵌入式软件测试特点(1)嵌入式软件几乎全部涉及专用计算机外部设备(2)嵌入式软件的运行平台嵌入式计算机系统可能由于没有通常的外部设备而很难在测试过程中进行检测和观察。(因为外部设备支持有限或者需要相关硬件开发,实际的嵌入式计算机硬件甚至不能用来测试)(如某些设备既没有存储,又没有显示、打印甚至键盘等设备)8嵌入式软件测试特点(续)(3)嵌入式软件的实时性要求使输出仅在某个有限的时间内有限,并且必须在这个时间段内生效。(如飞机控制必须快速对飞行器的姿态变化作出反应以保证飞行的稳定性)(4)嵌入式软件还可能是交互的。交互的因素与前面三个因
4、素可能同时,使测试过程更加困难。9测试困难存在的更本原因?一般测试技术和测试工具的实施缺乏基本条件。103 问题对应的解决办法 3.0 评审和静态测试 3.1 专用设备问题 3.2 监测真实硬件运行情况 3.3 实时性测试 3.4 交互式软件测试 3.5 并发系统,网络通信问题 3.6 采用全数字仿真技术解决上述问题113.0 静态测试 作用:便于测试人员明确和理解程序的逻辑,同时也是开发人员自省的过程。因为实践表明,开发人员在讲解过程中能发现许多自己的错误。12静态测试方法 框架结构的测试 在实际中,采用“生成引用表”的方法来完成。即在表中列出各子程序和函数的属性:已定义、未定义、定义类型;
5、输入参数的个数、顺序、类型;输出参数的个数、顺序、类型;已引用、未引用、引用次数等。通过对引用表的分析和对照来检查程序的框架结构。13静态测试方法函数结构的测试 (1)由于其是模块化和结构化的,从而可以通过使用一系列规则从程序推导出相应的流图模型。然后将其和设计文档的流图进行对比,校验设计与源代码的一致性。(2)通过对流图的走查(walk-through),应用逻辑覆盖、分支覆盖和路径覆盖方法来测试函数的健壮性。(3)函数结构的封闭性测试。14静态测试方法细节专项检查 测试人员根据以往的测试档案和工作经验,事先列出一份常见错误清单,然后有针对性地进行检查。实践中列出的专项包括:(1)数组下标是
6、否越界,变量值是否越界?(2)是否避免了依赖了程序设计语言中的缺省值的代码?(3)除数是否有可能为零?(4)浮点数运算是否进行分析检查?(5)栈是否会溢出?(6)用过的内存是否已释放?(7)全局变量的使用是否必要?(8)函数引用时,变量类型和个数是否对应?(9)代码是否包含无穷循环?(10)递归是否存在问题?153.1 专用设备解决专用设备问题的方法有两个:方法1:如果专用设备已经可用并能用来进行测试,就使用实际的设备。在很多情况下实现起来很困难方法2:采用某种软件仿真所需要的设备(仿真能降低费用,加速进程)但是某些仿真非常困难,如传感器的噪声特性和失效模式,可能程序在仿真设备测试时运行正确,
7、在真实设备下运行时经常发生错误。163.2 监测真实硬件运行情况监测嵌入式系统中的真实硬件运行情况的困难方法1:使用某种对目标机和宿主机都适用的编译器的高级语言,即采用生成宿主机代码在宿主机上进行目标程序的运行和测试;(如常用vc编译调试算法,而后移植到单片机中)(需要认真估计目标机和宿主机之间的差异,仔细注意可能存在的问题,如算法字长等)宿主机上测试的正确运行只能说明测试也将在目标机上正确运行的有力证据;173.2 监测真实硬件运行情况(续)方法2:使用指令集仿真器指令集仿真器是一个仿真另一种计算机指令集的程序。这种仿真一般包括处理器和内存,但很少涉及时间或目标机外围设备仿真,在没有实际外部
8、设备时,这种仿真在应用程序功能需求测试方面的作用受到局限;183.2 监测真实硬件运行情况(续)方法3:使用在线模拟器是一个硬件单元,提供适当的目标硬件的电气和功能模拟,能用于目标设备,能控制目标外围设备,并能在实时条件下运行。模拟器也可能包括一些运行跟踪和系统信息检测功能来辅助测试人员。优点:这些功能一般不损害模拟器的真实性缺点:除了处理器和主内存之外所有的目标硬件是可用的。在线模拟器作为一种嵌入式软件开发工具,增加了对测试的支持,包括给出代码覆盖和数据区读写覆盖信息,性能分析等功能,成为嵌入式软件测试的有力工具193.3 实时性测试实时系统测试分两步走:先功能正确性,然后时间正确性,原因:
9、(1)判断功能正确性会改变系统的特性,如进行覆盖测量而插入探针,由于探针程序收集程序执行信息会占用CPU时间,使程序整个执行时间延长,使系统不能满足实时要求;测试技术:程序插装203.3 实时性测试(续)(2)目标机硬件上测试非常困难,能运行的测试用例受到限制。应尽量在宿主机上进行功能正确性验证,可以指令集仿真器或仅仅使用具有宿主机和目标机上都适用的编译器的编译语言;(3)单元和集成测试不太可能在目标硬件上执行,也不必要求他们在目标机上运行;213.3 实时性测试(续)(4)在原因(1)中提及的改变也会影响程序的功能性。如软件可能在覆盖插装的条件下运行正确,而在没有覆盖插装时运行不正确。覆盖插
10、装改变了程序执行过程,相应地,内存状态、执行时间等受到改变,从而引起程序执行结果地差异。因此,功能特性必须在侧重于时间性的测试阶段从系统级进行检查。223.4 交互式软件测试嵌入式软件的交互式测试可以借用一般交互式软件测试技术。测试交互式软件的问题主要是难于实现自动化;解决问题的关键:(1)使程序的输入不再来自诸如键盘、鼠标、触摸屏之类的输入设备,输出也不到显示器之类的设备上,(2)这样数据的输入和输出记录都可以自动化,自动化方式有利于进行回归测试。233.4 交互式软件测试(续)键盘:用文件来模拟字符序列的输入,程序运行时从文件读入字符就如同从键盘上输入一样。要求:字符序列须有意义的,因此字
11、符序列须于人工输入或由相当复杂的程序产生;243.4 交互式软件测试(续)触摸屏和鼠标:这两种设备的输入都于屏幕上的显示内容有关,仅仅记录输入的屏幕坐标即可。捕获和回放工具:在运行时将键盘、鼠标、触摸屏上的输入记录下来,并且能重放。所有初始输入都需要手工形成;253.4 交互式软件测试(续)有人提出最好从软件设计方面解决。将软件设计称接口部分(键盘和触摸屏操作)是独立可移去的模块。接口模块可以在测试软件主要部分时移去,然后单独测试接口部分。主要是由于接口模块功能相对而言比较简单。键 图形 来自键盘 盘 用户的完整 软件主要 完整的 显示 对显示器的 的字符 接 输入命令 部件 图形命令 接口
12、位图层操作 口 键 图形 盘 软件主要 比 显示 接 部件 较 接口 口 测试输入 期望输入 263.5 并发系统,网络通信问题并发系统、网络通信系统的测试是非常困难的。273.6 全数字仿真技术是综合解决嵌入式软件测试中由于嵌入式环境所带来的测试困难的一种方案。全数字仿真使用计算机仿真的方式构造嵌入式软件所需要的硬件环境目标机,同时仿真了嵌入式软件运行时所需要的大量的数据源(这些数据源的特性及变化决定了嵌入式软件的运行)28目标硬件环境的数字仿真通过对处理器(CPU)、内存、外围可编程芯片以及上述各器件间连接的仿真,构造目标机硬件环境。处理器仿真:对处理器指令集、寄存器、中断处理机制的仿真;
13、内存仿真:内存寻址,写,读仿真外围可编程芯片仿真:对工作模式,命令字的响应,输入输出特性,功能特性的仿真;器件间连接仿真:为这些芯片的数据端口,控制端口设置I/O地址,决定其间输入/输出关系。29目标数据环境的数字仿真数据描述包括数据序列,即用直接列表方式或数据文件方式给出数据,自动数据产生器(信号源),例如正弦波、锯齿波,脉冲等信号发生器,中断,包括随机、定时、键盘控制等。在这些数据的基础上还可以进一步描述数据类型,数据间时序或逻辑上的关系,数据时间特性等;30全数字仿真技术的目的和意义1.在不具备硬件目标环境时用软件尽可能真实地仿真目标环境;2.提供更可控的运行环境;3.测试可重复4.相对
14、于半实物实验更为安全,可靠,节省经费;5.全数字仿真技术可以支持调试和可靠性测试;6.使软件调试,测试可以和硬件开发并行进行,易于提前发现问题;7.可发现硬件测试中不易发现的问题;8.支持结构测试,故障植入31全数字仿真技术的缺点和局限 仿真运行速度慢;仿真的真实性局限32嵌入式软件测试自动化及工具 4.1 嵌入式软件开发环境 4.2 嵌入式软件测试工具334.1 嵌入式软件开发环境 嵌入式软件开发所需的一组自动工具、固件和硬件的集合。自动工具可能包括(但不局限于)编译程序、汇编程序、装入程序、调试器、模拟器、仿真器、测试工具、文档编制工具、数据库管理系统及操作规程等。硬件可能包括:在线模拟器
15、,I/O通道 嵌入式软件开发环境通常以在线模拟器方式提供软件运行环境,通过交叉编译或汇编生成目标机代码,装入目标机在线模拟器中运行,可以进行程序调试工作;34嵌入式软件开发环境 嵌入式软件环境增强了嵌入式软件开发的资源能力,具有良好的人机界面和输入/输出处理能力 新的嵌入式软件开发环境还为测试工具提供了进一步的支持。如:内存读写操作分析,可显示未曾运行的程序(相当于未读过的内存)。完整的嵌入式开发环境包括嵌入式实时操作系统在内的诸多功能部件。35TRACE32 德国Lauterbach Datentechnik公司产品,在线模拟方式 支持的测试功能包括:外部触发输入、触发输出、目标机时钟控制,
16、具有跟踪通道,进行采样及性能分析,进行函数分析,调用/被调用关系分析以及动态函数调用嵌套分析。进行内存读写分析,可显示未曾运行的程序。支持高级语言,汇编语言,嵌入式实时操作系统内核的调试工具。支持300种CPU,包括386,486,186,196族,60种编译器,6种语言,C,C+,Pascal,Ada,Assembler,支持15种操作系统,支持10种多任务实时操作系统。36XRAY Master Works 美国Microtech Research公司的产品,通过指令集仿真器和在线模拟器两种方式提供运行环境;XRAY源代码开发器,XRAY调试器,XRAY仿真器。XRAY源代码开发器和XRA
17、Y调试器一起工作时,可显示动态调用结构。XRAY调试器支持源程序级调试,监视程序执行情况,检查数据结构的值,修改数据结构的值,进行复杂和简单的断点设置,单步运行、代码插入和连续动态监视。37XRAY Master Works XRAY性能分析描述程序执行时间以及在模块种的时间分布情况的报告;在一个程序执行中,详细的动态调用报告描述一个函数的调用频率;一个给定函数的详细执行时间;代码覆盖分析全部高级语言执行语句执行与不执行的百分比;全部机器指令语句执行与不执行的百分比;全部分支语句执行与不执行的百分比;38嵌入式软件分析与测试的重要性 计算机硬件技术进步,元件质量提高,元件集成量也大大增加,嵌入
18、式设备的硬件性能得到了极大的提高;通过采用成熟的商用操作系统,使系统运行在一个高性能的、可靠的软件平台上,为实现各种大型的复杂的应用打下了良好的基础。面对系统复杂性的增加,自然需要功能强大、性能稳定的应用软件与之相适应。在嵌入系统开发中软件的代码量也越来越大,电子类产品的代码量以每两年就翻一翻的速度增长。同时,系统又要求应用也要精简高效、稳定可靠,使软件的开发在整个系统开发中所占的时间也越来越长,软件的质量对产品的最终质量起到了决定性的作用。那些没有运行过的代码带着潜在的危险交付到客户手中,经常会给用户带来巨大的经济损失、为产品供应商带来信誉上的损失,在一些特殊的领域甚至会危及人的生命安全 3
19、9SystemEvaluationIntellectual PropertyProcessor ChoiceDevelopmentEnvironment&CompilerDebugStrategiesTestStrategiesTechnicalExpertise&AvailabilityEmbedded Design ProcessASIC Integration目标:目标:为嵌入式系统开发人员提供完备开发环境。为嵌入式系统开发人员提供完备开发环境。40纯软件的测试工具 采用软件打点技术,在被测代码中插入一些函数,用这些函数来完成数据的生成,并上送数据到目标系统的共享内存中。同时在目标系统中
20、运行一个预处理任务,完成这些数据的预处理,将处理后的数据通过目标机的网口或串口上送到主机平台。这一切都需借助于用户的目标处理器完成。通过以上过程,测试者得以知道程序当前的运行状态。从上述分析可知,纯软件的测试工具的测试原理有两个必然存在的特点插桩函数和预处理任务。41纯软件的测试工具 由于插入插桩函数和预处理任务的存在,使系统的代码增大,更严重的是这些代码会对系统的运行效率有很大的影响(超过50%)。函数本身要完成数据的生成和暂存,而这些函数在它的实现过程中还可能被其他优先级更高的中断程序所中断,预处理任务需要占用目标系统CPU处理时间、共享内存和通信通道完成数据的处理、数据的上送。当采用纯软
21、件测试工具对目标系统进行测试时,用户目标系统是在一种不真实的环境下运行的,我们所捕获的数据也是不够精确。所以采用纯软件的测试工具缺乏性能分析,它不能对用户目标系统中的函数和任务运行的时间指标进行精确的分析。当做覆盖率分析的时候,因为要大量打点,而打点多于200时就会影响系统的运行,所以只能做单元覆盖率分析且单元的程序量不能太大。不能对内存的动态分配进行动态的观察。42 纯硬件的测试工具 纯硬件工具通常用于系统的硬件设计与测试工作。当它用于软件的分析测试时,却无法满足用户的基本要求。如逻辑分析仪,逻辑分析仪是通过监控系统在运行时总线上的指令周期,并以一定的频率捕获这些信号,通过对捕获的信号进行分
22、析来判断程序当前运行的状况。由于它使用的是采样的方式,难免会遗失一些重要的信号;同时,分析的范围也及其有限。以性能分析为例,当使用某种逻辑分析仪进行性能分析时,我们只能以抽样的方式,同时对个函数做性能分析,得到一个不精确的结果 纯硬件工具根本不能对内存分配进行分析和检查的能力。43AMC公司CodeTEST原理 程序员编写的源代码首先会通过CodeTEST的编译驱动器调用原编译器对进行预编译,然后CodeTEST的插桩器(源代码分析程序)对预编译好的源代码进行自动的插桩,即在需要插桩的关键位置写入一条赋值语句(如:amc_ctrt=0 x74100009),并把插入的标记送入一个数据库文件中生
23、成一个符号数据库暂存起来,以备为以后分析时调用。然后,CodeTEST的编译驱动器又会调用原编译器对插桩后的代码进行编译生成可执行目标代码送到目标板上运行。当程序在目标系统运行到插桩点的位置时,目标板的控制总线和地址总线上会出现相应的控制信号和地址信号。44CodeTEST原理 当CodeTEST的辅助硬件(信号捕获探头)从控制总线和地址总线上监视到符合以上条件的信号时,CodeTEST会主动地从数据总线上把数据捕获回来送到CodeTEST的内存中暂存并对这些数据进行预处理,然后将预处理后的数据通过局域网送到工作平台上。通过与前面生成的符号数据库中的数据进行比较,我们就此得知当前程序的运行状态
24、,借此完成对嵌入式软件的性能分析,高级覆盖率分析,内存分析和大容量的代码跟踪。45voiddraw_fork(int n,tL_or_R forkSide)ctTag(1443921938);ctTag(1443921938);int offset=0;if(LEFT=forkSide)?(ctTag(1464893457),1):(ctTag(1464893456),(ctTag(1464893457),1):(ctTag(1464893456),0)0)offset=-1;elseoffset=+1;position_flush(13,1);semGive(semScreen);ctTag
25、(1444970515)ctTag(1444970515);软件插桩软件插桩46voiddraw_fork(int n,tL_or_R forkSide)amc_ctrl_portamc_ctrl_port=0 x74100009=0 x74100009;int offset=0;if(LEFT=forkSide)amc_ctrl_portamc_ctrl_port=0 x44308000=0 x44308000;offset=-1;elseamc_ctrl_port=0 x44408001;offset=+1;amc_ctrl_port=0 x44208002amc_ctrl_port=0
26、x44208002;semTake(semScreen,(-1);semGive(semScreen);amc_ctrl_portamc_ctrl_port=0 x22100009=0 x22100009;硬件插桩硬件插桩47为嵌入式系统测试和分析为嵌入式系统测试和分析准备源文件准备源文件插入标记插入标记编译源编译源代码代码打点后的打点后的源代码源代码符号符号数据库数据库符号信息符号信息Sun,HP 或或 PC源代码作标记源代码作标记主机上运行的程序主机上运行的程序目标对象目标对象CPU探头探头 目标板目标板可执行代码可执行代码局域网局域网性能分析性能分析覆盖率分析覆盖率分析内存分析内存分析代
27、码流跟踪代码流跟踪数据数据文件文件图形用户界面图形用户界面处理子程序处理子程序数据结构数据结构通讯端口通讯端口源代码源代码amc_ctrl_portamc_ctrl_port=0 x74100009=0 x7410000948CodeTEST分析CodeTEST是一个硬件辅助软件的测试与分析工具,它一方面吸取软件打点技术,并对这种技术进行了改善,纯软件工具插入的是一个函数,而CodeTEST插入的是一条赋值语句,它在汇编级也是一条语句,所以它执行的时间非常短,同时避免了被其它的中断所中断,所以它对目标系统的影响非常小(1%-15%)。另一方面,CodeTEST从纯硬件的测试工具那里吸取了从总线
28、捕获数据的技术并且对它进行了改善,CodeTEST不再是采样的方式,它是通过监视系统总线,当程序运行到插入的特殊的点的时候才会主动的到数据总线上把数据捕获回来,借此,在同样的处理能力下,CodeTEST可以做到精确的数据观察。49CodeTEST 特点特点:实时,在线,精确实时,在线,精确软件打点方式比较便宜可在CACHE打开下工作对目标系统影响大(超过50%)占用目标系统资源如,CPU 时间内存,通讯通道等缺乏很好的性能分析缺乏覆盖率分析缺乏内存分配分析精确度偏低对目标系统影响小(对目标系统影响小(1-15%)不占用目标系统资源不占用目标系统资源软件打点技术软件打点技术强大的性能分析强大的性
29、能分析强大的覆盖率分析强大的覆盖率分析强大的内存分配分析强大的内存分配分析价格较便宜价格较便宜可在可在CACHE打开方式下工作打开方式下工作非常精确非常精确不影响目标系统(0%)不占用系统资源不用打点有限或没有性能分析有限的或没有覆盖率分析没有内存分配分析无法在CACHE打开方式下工作精确性随情况变化通过仿真存储器工作价格昂贵纯软件测试工具纯软件测试工具纯硬件工具纯硬件工具仿真器,逻辑分析仪仿真器,逻辑分析仪CodeTEST硬件辅助软件测试工具硬件辅助软件测试工具50CodeTEST特点由于CodeTEST对软件打点技术和从总线捕获数据进行了改善和提升,正是这种原理上的优势,所以CodeTES
30、T具有强大的性能分析、内存分析、高级覆盖率分析和代码跟踪功能。CodeTEST,支持所有的32/16位CPU和MCU,支持总线频率高达100MHz,可通过PCI/VME总线,MICTOR插头对嵌入式系统进行在线测试。无需改动用户的PCB,与用户系统的连接极为方便 51CodeTEST的突出特点的突出特点 性能分析可以实现代码的精确的可视化,从而大大提高提高工作效率,简化软件确认和查找故障的过程。内存分析可以监视内存的使用,提前查处内存的泄漏,从而节约你宝贵的时间和成本。代码追踪可以进行三个不同层次的软件运行追踪,甚至是追踪处理器内部的Cache,这样可以更容易的查找问题所在。高级覆盖工具可以通
31、过确认高隐患的代码段,显示哪现函数、代码块、语句、决策条件和条件以执行过或未执行过,来提高产品的质量。高级覆盖工具完全符合高要求的软件测试标准(如:RCTA/DO-178B,A级标准),可以实现语句覆盖、决策覆盖和可变条件的决策覆盖。52主要特点主要特点 支持所有64/32/16位CPU 和 MCU,支持总线频率100赫兹 可通过 PCI/VME/CPCI 总线、MICTOR 插头、专用适配器或探针,协助用户顺利、方便地连接到被测试系统,并对嵌入式系统进行在线测试 硬件方式代码跟踪测试系统 可以做单元级、集成级和系统级测试 同时监视32000函数/1000个任务 代码覆盖率分析:高级覆盖功能,
32、可完成语句覆盖、决策覆盖和条件决策覆盖统计,并显示代码覆盖率,可显示覆盖率的函数分布图和上升趋势图,用不同的颜色区分已执行和未执行的代码段 53主要特点主要特点 跟踪中缓冲空间400K,跟踪150万行源代码,能协助用户分析出程序的死机点 性能分析:显示所有函数和任务的执行次数,最大执行时间,最小执行时间,平均执行时间,占程序总执行时间的百分比和函数调用数 动态内存分析:显示分配内存情况实时图表,分析内存分配错误并定位出错函数位置 代码跟踪:允许任意设置跟踪纪录起止触发条件,如函数调用关系、任务事件等。可显示跟踪期间的系统运行情况。显示模块包括函数级/控制块级/源码级。54CodeTEST:强大
33、的性能分析 CodeTEST能同时对128000个函数和1000个任务进行性能分析,可以精确的得出每个函数或任务执行的最大时间、最小时间和平均时间,精确度达到50ns;能够精确的显示各函数或任务之间的调用情况,帮助你发现系统瓶颈、优化系统和提升你的系统性能。55CodeTEST:强大的覆盖率分析 CodeTEST可以在系统真实的环境下,可以从单元级、集成级、系统级以及产品终端现场阶段进行嵌入式软件的分析与测试。帮助测试工程师掌握当前的测试覆盖率数据,指导测试用例的编写。56CodeTEST:强大的内存分析 CodeTEST可以动态追踪内存分配,报告内存出错和相应的原始数据。不仅可以在程序运行时
34、报告为每条语句分配多少字节的内存,而且他可以鉴别20多种内存分配的错误。例如:CodeTEST可以捕捉“释放空指针(freeing a null pointer)”一样常见的程序错误,报告发生错误的函数和代码行帮,助你尽早发现动态内纯泄漏,而无需到系统崩溃时。57CodeTEST:强大的代码跟踪分析 CodeTEST提供400K的追踪缓冲空间,能追踪150万行的源代码。我们可以设置触发器来追踪自己感兴趣的事件,可以显示运行过程中程序运行的实际情况,帮助你查找程序的BUG所在。58三种嵌入式软件测试和分析工具 CodeTESTNative:早期的开发阶段,无硬件 Host-based devel
35、opment only-hardware not available CodeTEST Software-In-CircuitEarly software target available-software-only solution prefered or required CodeTESTHardtware-In-Circuit Testing on final hardware-non-intrusive real-time measurements required 59RTOS SupportMetrowerks CodeTEST Software Analysis Tools ca
36、n support almost any RTOS.This is an example of some of the RTOSes that we have provided support for previously.60阶段阶段硬件硬件开发开发软件软件开发开发固件固件开发开发系统系统集成集成系统系统测试测试Power uptestingBoardPrototypesBoard DiagnosticsBoard Bring-upDriver/BSP Develop.Unit Code/TestUnit Code/TestSoftware IntegrationIntegration Te
37、stHW/SW IntegrationSystem TestAdvanced TestingSystem TestAdvanced TestingPost-Ship Test工作工作工具工具CodeTESTCodeTESTLiveCODELiveCODESuperTAPSuperTAPPowerTAP&CodeTAPPowerTAP&CodeTAPNetROMNetROMCodewarriorCodewarriorRTOS&BoardRTOS&BoardLDRALDRA嵌入式软件测试工具嵌入式软件测试工具61嵌入式测试工具ATTOLTestware 是ATTOLTestware公司的自动生成测
38、试代码的软件测试工具,特别适用于嵌入式实时应用软件单元和通信系统测试,在法国市场具有领先地位;CodeTest是AppliedMicrosystems Corp公司的产品,是广泛应用的嵌入式软件在线测试工具GammaRay GammaRay产品系列主要包括软件逻辑分析仪GammaProfiler,可靠性评测工具GammaRET等LogiScope是TeleLogic公司的工具套件,用于代码分析,软件测试,覆盖测试62嵌入式测试工具 lynxInsure+是LynxReal-TimeSystems公司的产品,基于lynxOS的应用代码检查和分析测试工具 MessageMaster是ElviorL
39、td.公司的产品。测试嵌入式软件系统工具,向环境提供基于消息的接口 VectorCast是VectorSoftware公司的产品,由6个集成的部件组成,自动生成测试代码,为主机和嵌入式环境构造可执行的测试框架635 例子:自动驾驶仪系统基于微处理器,从4个开关采集离散的模式信息,同时从6组3冗余的传感器采集高度,方向和速度,每个传感器返回一个16位数据值。自动驾驶仪指挥5个控制面板上的操纵器来维持水平飞行和方向,二个操作器来控制发动机推力。每个操纵器位置由一个16位控制值设定。飞行器通过图形可以观察显示4种状态,飞行员可以通过键盘输入指令。自动驾驶仪必须实时操作。因为他必须及时调整飞机对所需的
40、飞行路线的偏离。他每隔100ms计算出这种偏离,并以同样频率设置多个操纵器的值。键盘 操纵器 显示器 传感器 模式开关 处理器 64测试挑战性 系统是嵌入式的;并且会在与目标机不同的机器上开发 系统必须满足“死线”要求,由几个并发操作的部分构成;系统必须驱动图形设备必须接收键盘输入;系统从几个传感器种接收输入并发送到几个操纵器中。应该遵循好的设计原则,信息隐蔽,模块化等65宿主机资源需要在线存储器以用于测试输入、预期结果、测试驱动器、实用软件(如编译器和目标指令模拟器)以及所有相关文档。在单元测试中使用测试驱动器第二类测试支持软件用于组装测试第三类支持软件用于系统测试为了测试系统,需要飞机的动
41、力学模型,这样可以产生真实传感器的值,并且操纵器动作对传感器的作用能够预标出来。这类模型有的在模拟设备上建立,有的在数字设备上建立。一个可信地运行在数字计算机并且实时运行地飞机动力学模型本身就是一个较大地开发工作,但这对嵌入式(系统)软件而言却是最基本的。处理飞机飞行动力学模型,系统测试还需要模式切换源和键盘输入源,用于自动测试过程。66单元测试1.数据转换单元:将传感器特定的数据转换为内部的,独立于硬件的数据值;2.操纵命令转换单元,将硬件无关的操纵命令转换为操纵命令发送到操纵器硬件3.失效检查单元,进行失效检查和三备份的冗余传感器的冗余管理;4.将传感器值转换为工程值的单元,并在温度和湿度
42、变化时进行传感器校准及补偿5.把高级图形命令转换为低级命令,发送到显示器硬件67集成测试集成测试主要发现接口问题。合理的测试集会包含的测试用例:1.从预期值(包括噪声)范围内随机产生原始传感器值2.由所有传感器失效模式系统地产生失效;3.系统地产生运行温度4.系统地产生校准数据队列。68系统测试 系统过于复杂,仅能采用功能测试和随机测试。应该尽量用硬件探针收集时间数据;完整的系统测试集包含几百个仿真运行:从预期产生时间范围随机选择运行时间;随机产生风模型,覆盖预期的风速,阵风长度和风向系统地和随机地产生传感器失效阵列;系统地和随机地产生离散开关的设置;系统地和随机地产生飞行员输入队列,这种输入
43、可以是预定时间产生,也可以是随机时间产生;系统测试应该是可重复的,这样测试在显示驱动器移去后也能工作,以便方便地检查输出。69分组讨论1.手机软件测试【有界面的手持设备】要点:方法:2.IP电话交换机软件测试【复杂嵌入式系统软件】要点:方法:3.FTU:电力柱上开关监控器软件【条件恶劣的工控设备】要点:方法:701 手机软件测试 http:/www.etsi.org 可以下载Telecom standards The EDS also contains all GSM/3GPP/UMTS standards 如何测试?如何使测试自动化?712 交换机软件测试 如何测试?如何使测试自动化?72忠
44、告和建议 把测试工作看成无关紧要的。测试工作是任何软件不可或缺的,必须充分认识其重要性;没有认识到测试需要复杂精制的技术。测试复杂的嵌入式系统是一种需要相当技巧的复杂工作,它不同于运行几个人计算机验收书上的基准程序这样的简单测试;资源投入不够充分。测试对硬件要求很高。经常需要比事先预计的更强的处理器和更多的存储空间;73忠告和建议(续)设置不现实的“死线deadline”,测试很费时间,非常难于计划进度,由于经常会有一些意料之外的工作,测试常常超出资源预算。尽早启动测试是明智之举,因为当急需时才开始工作,往往会拖期或草草收场,收不到好的效果;不能提供所需的支持软件。测试中需要大量的软件项,这些
45、软件的采购和准备对充分的测试很重要,它本身的开发工作可能就是一个较大的软件项目。轻信第三方供应商的宣传。在选型和购置时要严格论证,必要时先试用。746 总结 嵌入式系统的特点决定了测试存在一系列困难,给出了解决问题的关键思路;全数字仿真技术,嵌入式开发平台的技术思路;给了一个嵌入式开发和测试方面的例子。对对象的把握是提高嵌入式软件可靠性的基础;75嵌入式系统软件测试要点 I/O,Kbd/Lcd,COMM,控制算法,存储 分离为什么能够分离?模拟模拟存在哪些问题呢?高可靠性要求软件和硬件共同保证;非正常因素对正常功能的影响76谢谢!更多精彩,在课堂获得!773 嵌入式系统常遇到的问题及测试方法分析 复位 死机