第9章嵌入式测试.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

9.1嵌入式软件测试的方法9.2嵌入式软件测试的过程9.3嵌入式软件测试的特点9.4嵌入式软件测试的工具9.5嵌入式软件测试策略9.6嵌入式软件测试实例嵌入式软件测试分为4个阶段,即模块测试、集成测试、系统测试、硬件/软件集成测试。前3个阶段适用于任何软件的测试,硬件/软件集成测试阶段是嵌入式软件所特有的,目的是验证嵌入式软件与其所控制的硬件设备能否正确地交互。在嵌入式软件测试中,常采取折中的方式。基于目标机的测试消耗较多的经费和时间,而基于宿主机的测试代价较小,但毕竟是在模拟环境中进行的。目前的趋势是把更多的测试转移到宿主环境中进行,但是,目标环境的复杂性和独特性不可能完全模拟。在目标环境和宿主环境中的测试可以出现不同的软件缺陷。在宿主环境中,可以进行逻辑或界面的测试以及与硬件无关的测试。这一部分的测试所消耗的时间通常相对较少,用调试工具可以更快地完成调试和测试任务。而与定时问题有关的白盒测试、中断测试、硬件接口测试只能在目标环境中进行。在软件测试周期中,基于目标的测试是在较晚的硬件/软件集成测试阶段开始的。根据嵌入式系统的开发流程,为了最经济地实现系统的功能,一般采用自顶向下、层层推进的方法对嵌入式系统进行测试。嵌入式软件测试的总体步骤为:首先进行操作系统移植并编写系统底层驱动,然后进行系统平台测试,其中包括硬件电路测试、操作系统及底层驱动程序的测试等。如果此测试通过,可以进入下一步的开发——用模块化的方法编写应用代码,随后再对软件模块进行测试。如果所有的模块都通过测试,需要进行集成测试。如果集成测试通过,则需要进行系统测试。如果系统测试通过,就可以退出测试。在第一件产品生产出来之后,需要对产品进行测试,如果测试通过,则表示嵌入式产品的所有测试步骤已经完成。YN开始NNNYYYYY根据需求修改程序代码只修改应用代码测试通过?系统测试测试通过?集成测试编写接口函数,装载到模块数据之间测试通过?软件模块测试用模块化的方法编写应用代码测试通过?系统平台测试移植操作系统,编写系统底层驱动产品测试模块接口函数确定错误模块修改错误模块代码关联矩阵确定需测试模块修改错误模块代码N测试通过?结束嵌入式软件测试作为一种特殊的软件测试,它的目的和原则同普通的软件测试是一样的,都是为了验证或达到可靠性要求而对软件所进行的测试。嵌入式软件测试除了要遵循普通软件测试的原则之外,还需要遵循以下几个原则:(1)嵌入式软件测试对软件在硬件平台的测试是必不可少的。(2)嵌入式软件测试需要在特定的环境下对软件进行测试。(3)嵌入式软件需进行必要的可靠性负载测试。(4)除了要对嵌入式软件系统的功能进行测试之外,还需要对实时性进行测试。在判断系统是否失效方面,除了看它的输出结果是否正确,还应考虑其是否在规定的时间里输出了结果。(5)在对嵌入式软件进行测试的时候,需要在特定的硬件平台上进行性能测试、内存测试、GUI测试、覆盖分析测试。1.内存分析工具在嵌入式系统中,内存容量通常是有限的。内存分析工具用来处理在动态内存分配中存在的缺陷。动态内存分配错误,通常是难以复原的,其导致的失效难以追踪,使用内存分析工具可以避免这类缺陷进入功能测试阶段。目前有两类内存分析工具:软件工具和硬件工具。基于软件的内存分析工具可能会对代码的性能造成很大影响,从而严重影响实时操作;基于硬件的内存分析工具价格昂贵,而且只能在工具所限定的运行环境中使用。2.性能分析工具性能分析工具会提供有关的数据,说明执行时间是如何消耗,什么时候消耗的,以及每个例程所用的时间。根据这些数据,确定哪些例程消耗部分执行时间,从而可以决定如何优化软件,以获得更好的时间性能。对于大多数应用来说,大部分执行时间用在相对少量的代码上,费时的代码估计只占所有软件总量的5%~20%。性能分析工具不仅能指出哪些例程花费了时间,而且与调试工具联合使用可以引导开发人员查看需要优化的特定函数,性能分析工具还可以引导开发人员发现在系统调用中存在的错误以及程序结构上的缺陷。3.GUI测试工具GUI测试工具可以作为脚本工具在开发环境中运行测试用例,其功能包括对操作的记录和回放、抓取屏幕显示供以后分析和比较、设置和管理测试过程。对没有GUI的嵌入式设备,可以对其进行插桩来运行GUI测试脚本。4.覆盖分析工具在进行白盒测试时,可以使用代码覆盖分析工具追踪被执行过的代码。分析过程可以通过插桩的方式来完成,插桩可以是在测试环境中嵌入硬件,也可以是在可执行代码中加入软件,也可以是二者相结合。测试人员对结果数据加以总结,确定哪些代码被执行过,哪些代码被遗漏了。覆盖分析工具一般会提供有关功能覆盖、分支覆盖、条件覆盖的信息。对于嵌入式软件来说,代码覆盖分析工具可能侵入代码的执行,影响实时代码的运行过程。基于硬件的代码覆盖分析工具的侵入程度要小一些,但是价格一般比较昂贵,而且限制被测代码的数量。插桩技术最早是由J.C.Huang教授提出的,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。在测试的各个阶段,采用host-target或是cross-test,应遵循以下策略。1.单元测试所有单元测试都可以在主机环境上进行,除非少数情况会特别指定了单元测试直接在目标环境进行。测试时,尽可能在主机环境中进行软件测试,通过尽可能小的目标单元访问所有目标指定的界面。在主机平台完成测试后,可以在目标环境中重复作一次简单的确认测试,在目标环境中进行确认测试将确定一些未知的、未预料到的、未说明的主机与目标机的不同之处。插桩测试流程已编译通过的代码NY插桩处理宿主机上编译通过?下载到目标机上执行数据返回到宿主机上宿主机处理数据插桩测试原理循环⑧⑦⑥⑤④①②③源代码插桩器插桩插桩后的源码编译后的源码编译器编译编译后的源码触发桩程序生成数据数据处理程序或软件宿主机目标机串口线、JTAG网线、串口线、USB数据线2.集成测试软件集成也可在主机环境上完成,并在主机平台上模拟目标环境运行。在目标环境上重复测试也是必需的,在此级别上的确认测试将确定一些环境上的问题,比如内存定位和分配上的一些错误。有些嵌入式系统与目标环境耦合得非常紧密,则在主机环境做集成是不切实际的。对于大型软件的开发则可以分为几个级别的集成。低级别的软件集成在主机平台上完成有很大优势,越往后的集成越依赖于目标环境。3.系统测试和确认测试所有的系统测试和确认测试都必须在目标环境下执行。当然在主机上开发和执行系统测试,然后移植到目标环境重复执行是很方便的。确认测试最终必须在目标环境中进行,系统的确认必须在真实系统之下测试,而不能在主机环境下模拟。这关系到嵌入式软件的最终使用。应用测试工具进行Cross-test时的策略:A)使用测试工具的插桩功能(主机环境)执行静态测试分析,并且为动态覆盖测试准备好一插桩好的软件代码。B)使用源码在主机环境执行功能测试,修正软件的错误和测试脚本中的错误。C)使用插装后的软件代码执行覆盖率测试,添加测试用例或修正软件的错误,保证达到所要求的覆盖率目标。D)在目标环境下重复(B),确认软件在目标环境中执行测试的正确性。E)若测试需要达到极端的完整性,最好在目标系统上重复(C),确定软件的覆盖率没有改变。19嵌入式软件测式的基本方法拿来主义——充分借用PC软件的测试方法静态/动态白盒/黑盒单元测试/集成测试/系统测试……全数字模拟测试交叉测试(Host/Target测试)真实环境验证20全数字模拟测试采用数学平台的方法,将嵌入式软件从系统中剥离出来,通过开发CPU指令、常用芯片、I/O、中断、时钟等模拟器在HOST上实现嵌入式软件的测试主要特点与嵌入式硬件平台脱钩操作简单,可以借鉴常规的软件测试方法适用于功能测试有局限性21全数字模拟测试的局限性通用性差,使用不同语言编写的嵌入式软件,需要不同的仿真程序来执行实时性与准确性难以反映出嵌入式软件的真实情况,测试出与时序有关的故障价值不大。维护统一、精确的系统时钟,理顺时序关系相当困难,特别是当并发的事件要求一定的同步关系时。开发成本高。设计出一个能进行系统测试的的环境代价太大只能作为嵌入式软件测试的辅助手段22交叉测试(Host/Target测试)与目标环境无关的部分在PC机上完成充分利用高级语言的可移植性借鉴常规的软件测试方法与模拟测试不同与硬件密切相关的部分在Target上完成需要调试环境支持测试工具需要支持目标环境最后在目标环境中确认主机平台嵌入式系统调试环境2019年12月18日23交叉测试的特点将大部分工作转移到PC平台上,在硬件环境未建好或调试工具缺乏时就可以开展可以充分地“拿来主义”适用于高级语言,如C,C++操作方便,测试成本较低。实时性受调试环境的制约目标环境中测试时要占用一定的目标资源注意目标环境和主机环境的差异:目标编译器的bug目标码的验证24如何开展交叉测试(Host/Target测试)选用带有目标支持包(TargetPackage)的软件测试工具确定哪些模块与硬件无关,哪些与硬件相关配置相应的调试环境和目标环境分别进行Host和Target测试Host:源代码+测试用例-编译连接-执行-测试结果Target:源代码+测试用例+目标包-编译连接-下载-执行-反馈测试结果交叉测试的嵌入式调试环境SimulatorEmulatorBDM/JTAGEmulator25“拿来主义”静态分析很重要WattsS.Humphrey的说法很多软件工程师认为动态测试比静态测试更重要——并非如此有经验的软件工程师平均每写1000行代码将会出现100个错误80%的软件错误归咎于对于编写语言的错误使用,而这些错误往往不是功能测试能解决的因此,软件工程师应该消除错误,找出根源,预防再次发生同样的问题静态分析的重要内容——代码规则检查实施简单、方便无需执行程序,与嵌入式环境无关早期介入,代价小,见效快有利于降低动态测试的难度有利于养成良好的编程习惯可以执行自定的规范26“拿来主义”动态测试不可少动态测试是验证软件功能最直接、最有效的手段通过运行被测程序验证其功能、性能,检查代码的执行情况与静态分析相辅相成需要事先设计详细、完备的测试用例可用白盒、黑盒等方法工作量较大、较枯燥动态测试的主要内容功能、性能验证,是否符合需求定义代码覆盖。哪些代码执行了,哪些没有执行,其比例如何27“拿来主义”白盒黑盒相辅成白盒测试与黑盒测试是软件测试最常用、最常规的两种技术白盒测试把测试对象看作一个透明的盒子,测试人员从其逻辑结构入手,设计和选择测试用例,对路径、控制结构、数据流等进行测试通过插装检查程序的状态,确定是否与预期的状态一致侧重于代码运行的过程黑盒测试把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构,只依据其需求定义,检查程序运行的结果多用于功能测试和性能分析在程序的接口上进行需要设计“驱动”和“打桩”2019年12月18日28“拿来主义”单元集成两步走单元测试和集成测试是软件测试的两个阶段单元测试将被测软件分解为单元,逐个测试单元测试需要从程序的内部结构和功能出发设计测试用例。多个模块可以平行地独立进行单元测试可用白盒、黑盒等方法集成测试在单元测试的基础上,将所有模块按照设计要求组装起来测试主要测试内容接口间参数传递集成的功能实现模块间的影响1)软件指令仿真软件指令仿真的主要工作是对相关的I/O操作进行替换。在80X86系列CPU指令集中,I/O指令有两个IN和OUT,对这两个指令,我们都定义相应的宏来代替其操作,同时在内存中组织变量来代替I/O操

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功