嵌入式软件是指被安装在嵌入式设备中的软件,例如数字电视、洗衣机、手机游戏等。嵌入式软件经过分析、设计和编码后,必须被烧入硬件环境才能运行,因此嵌入式软件测试是针对嵌入式系统的特殊测试方法。
嵌入式软件调试,主要有以下特点:
1、嵌入式软件测试需要考虑特定硬件环境。嵌入式软件常常集成在设备中,无法独立运行。因此,在测试过程中需要考虑设备的特殊硬件和软件环境,以确保测试的准确性和完整性。为此,测试人员需要了解嵌入式设备的硬件结构和工作方式,并进行针对性的测试。
2、嵌入式软件测试需要考虑实时性。嵌入式软件常常需要在实时性要求比较高的环境下运行,如航空航天、医疗设备等领域。在此情况下,嵌入式软件测试需要对实时性进行测试,判断程序的响应速度和完成任务的时间,以确保程序能够及时、准确地响应用户的指令。
3、嵌入式软件测试需要考虑内存管理。嵌入式软件产品为了满足高可靠性的要求,不允许内存在运行时有泄漏等情况发生,因此嵌入式软件测试除了对软件进行性能测试、GUI测试、覆盖分析测试是同普通软件测试一样都不可或缺之外,还要对内存进行测试。测试人员需要对程序的内存使用情况进行监控和调试,防止出现内存泄漏等问题。
4、嵌入式软件测试需要多个测试阶段。在开发过程中,测试人员需要对软件进行单元测试、集成测试和系统测试等多个阶段的测试,以确认软件在不同环境下的稳定性和可靠性。这要求测试人员具有全面的测试技能和经验。
5、嵌入式软件测试需要进行正确的数据管理和记录。测试人员必须正确记录每个测试的结果及其测试环境,以便开发人员更好地理解测试结果并进行优化。
6、嵌入式软件测试的最终目的是使嵌入式产品在能够满足所有功能的同时安全可靠的进行。嵌入式产品应用领域广泛,除了需要具备良好的性能和功能外,还需要保证其安全可靠。因此,嵌入式软件测试的最终目的是确保嵌入式产品能够在各种环境下稳定运行,避免出现故障和漏洞等问题。
总之,嵌入式软件测试是一种特殊的测试方法,其目的是为了提高嵌入式软件的可靠性。由于嵌入式软件的特殊性,测试人员需要考虑多个因素,包括特定硬件环境、实时性、内存管理、多个测试阶段和正确的数据管理和记录等。成功的嵌入式软件测试需要测试人员具有全面的测试技能和经验,并进行正确的测试管理和记录,以确保嵌入式产品能够满足所有功能的同时安全可靠的进行。
软件测试的对象
需求分析、概要设计、详细设计、程序编码等各阶段所得到的文档及源程序,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序。
嵌入式软件的开发和测试也就与普通软件的开发和测试策略有了很大的不同,嵌入式软件系统是一种针对特殊任务、特殊环境而进行特殊设计的定制产品,有其专门的开发环境、软硬件紧密结合、严格的实时要求等特点。使得嵌入式软件测试与普通软件测试虽有相似之处,但也有其自身独特的特点。
嵌入式软件测试
嵌入式软件是一种比较特殊的软件,软件经过分析、设计、编码后只有烧入硬件环境中才可以看见,比如数字电视的中间件软件,洗衣机的自动控制软件,手机游戏软件等等。
1、嵌入式软件测试
嵌入式软件测试/嵌入式测试或叫交叉测试(cross-test),其目的与普通软件测试是相同的,都是为了发现软件缺陷,而后修正缺陷以提高软件的可靠性。嵌入式系统安全性的失效可能会导致灾难性的后果,即使非安全性失效,由于其应用场合特殊也会导致重大经济损失。因此,往往嵌入式软件对可靠性的要求比普通软件高。这就要求对嵌入式软件进行严格的测试、确认和验证,以提高产品的可靠性。
2、嵌入式软件测试的特点◇ 嵌入式软件测试是在特定的硬件环境下才能运行的软件。◇ 嵌入式软件测试除了要保证嵌入式软件在特定环境下运行的高可靠性,还要保证嵌入式软件系统的实时性。◇ 嵌入式软件产品为了满足高可靠性的要求,不允许内存在运行时有泄漏等情况发生,因此嵌入式软件测试除了对软件进行性能测试、GUI测试、覆盖分析测试是同普通软件测试一样都不可或缺之外,还要对内存进行测试。◇ 嵌入式产品不同于一般软件产品,在嵌入式软件和硬件集成测试完成之后,并不代表测试全部完成,在第一件嵌入式产品生产出来之后,还需对其进行产品测试。
◇ 嵌入式软件测试的最终目的是使嵌入式产品在能够满足所有功能的同时安全可靠的进行。
由于嵌入式系统的自身特点,如实时性(Real-timing),内存不丰富,I/O通道少,开发工具昂贵,并且与硬件紧密相关,CPU种类繁多,等等。嵌入式软件的开发和测试也就与一般商用软件的开发和测试策略有了很大的不同,可以说嵌入式软件是最难测试的一种软件。
嵌入式系统由于上述特点,决定了不同的嵌入式系统必须有不同的测试方法。1、 嵌入式软件测试的各个阶段测试的环境是不一样的嵌入式软件开发和运行的环境是分开的,嵌入式软件开发环境往往是交叉开发环境。因此,各个阶段测试的环境是不一样的。● 交叉开发
交叉开发是指先在一台通用PC上进行软件的编辑、编译与连接,然后下载到嵌入式设备中运行调试的开发过程。通用PC称为宿主机,嵌入式设备称为目标机。
● 交叉开发环境
交叉开发环境(Cross Development Environment)是指编译、连接和调试嵌入式应用软件的环境。它与运行嵌入式应用软件的环境有所不同,通常采用“宿主机——目标机”模式。
开放的交叉开发环境的典型代表是:GNU工具链。它能够支持X86、ARM、MIPS、PowerPC等多种处理器。
● 交叉编译
在一种平台上编译出能够在另一种平台(体系结构不同)上运行的程序。用来编译这种程序的编译器就叫做交叉编译器。
● GUN工具链
GNU工具链 (GNU Toolchain) 是一组用于开发应用程序和操作系统的编程工具的集合,这些工具构成了一个完整的系统。GNU工具链包括GCC、GNU Binutils、GNUm4、GNU Autoconf和GNU make等部分。
1.1单元测试阶段所有的单元测试基本都可以在宿主机环境下进行,只有个别情况下会特别指定单元测试要直接在目标机环境下进行。应该最大化在宿主机环境下进行软件测试的比例,通过尽可能小的目标单元访问其指定的目标单元界面,提高单元的有效性和针对性。在宿主机平台上运行测试的速度比在目标机平台上快得多,当在宿主机平台上完成测试后可以在目标机环境下重复做一次简单的确认测试,确认测试结果在宿主机和目标机上没有不同**。在目标机环境下进行确认测试将确定一些未知的、未预料到的、未说明的宿主机与目标机的不同之处**,例如,目标机编译器可能有缺陷,但在宿主机编译器上没有。
1.2 集成测试阶段软件集成也可在宿主机环境下完成,在宿主机平台上模拟目标环境运行,在此级别上的确认测试可以确定一些与环境有关的问题,比如内存定位和分配方面的一些错误。在宿主机环境上的集成测试的使用,依赖于目标系统的具体功能有多少。有些嵌入式系统与目标机环境耦合的非常紧密,这种情况下就不适合在宿主机环境下进行集成。对于一个大型的软件开发而言,集成可以分几个级别。低级别的软件集成在宿主机平台上完成有很大优势,级别越高,集成越依赖于目标环境。
1.3 系统测试和确认测试所有的系统测试和确认测试必须在目标机环境下执行。当然在宿主机上开发和执行系统测试,然后移植到目标机环境重复执行是很方便的。对目标系统的依赖性会妨碍将宿主机上的系统测试移植到目标系统上,况且只有少数开发者会卷入系统测试,所以有时放弃在宿主机上执行系统测试可能更方便。确认测试最终必须在目标机环境中进行,因为系统的确认必须在真实系统下完成,而不能在宿主机环境下模拟,这关系到嵌入式软件的最终使用
2、嵌入式软件测试的复杂多样因为嵌入式系统的一个突出的特点,是其专用性,即一个嵌入式系统只进行特定的一项或几项工作,嵌入式软件运行的平台都是为进行这些工作而开发出来的专用硬件电路,他们的体系结构、硬件电路,甚至所用的元器件都是不一样的,所以嵌入式软件运行的平台也是复杂多样的。由于开发平台的复杂多样性,使得嵌入式软件的测试从测试环境的建立到测试用例的编写也是复杂多样的。与不同的开发平台对应的嵌入式软件是肯定不相同的。嵌入式软件测试在一定程度的上并不只是对嵌入式软件的测试,很多情况下是对嵌入式软件在开发平台中同硬件的兼容性测试。因此,对于任何一套嵌入式软件系统,都需要有其自己的测试、创建其自己的测试环境、编写其自己的测试用例。
3、嵌入式软件测试中对实时性有严格要求由于嵌入式系统的实时性,决定了嵌入式系统的运行时间也是受严格限制的。嵌入式软件在测试时应当充分考虑系统实时响应的问题,很多嵌入式系统会要求系统的响应时间应在多少毫秒之内。在测试有严格响应时间要求的嵌入式系统时,要做负载测试。
4、嵌入式软件测试需要进行插桩测试嵌入式软件最终的测试需要在目标机平台上进行,在对目标机进行测试时,我们需要对在宿主机上编译通过的代码进行插桩处理。插桩完成之后,需要重新对代码进行编译,如果编译通过,就可以将编译好的代码下载到目标机上执行。在目标机执行程序的时候,需要将插桩时预测好的数据返回到宿主机上,因此,宿主机和目标机上要有能够相互传递数据的网线或者串口线,宿主机上同时要有能够处理返回的数据的处理程序或软件。插桩技术:指在保证原有程序逻辑完整性的基础上,在程序中插入探针,通过探针采集代码中的信息(方法本身、方法参数值、返回值等)在特定的位置插入代码段,从而收集程序运行时的动态上下文信息。
5、嵌入式软件对系统的可靠性和安全性要求比一般的软件系统高因为嵌入式软件对系统的可靠性和安全性要求比一般的软件系统高,所以还需要进行系统的可靠性测试。对于不同的嵌入式系统,需要制定相应的符合系统需求的可靠级别,在进行可靠性测试时应该将系统的可靠性级别考虑进去。